@mnaoumov/obsidian-lib 10.5.1 → 10.6.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 (129) hide show
  1. package/codemirror/inline-token-widgets/package.json +6 -0
  2. package/codemirror/settings-facet/package.json +6 -0
  3. package/components/settings-facet-component/package.json +6 -0
  4. package/dist/lib/cjs/__merged.cjs +96 -1
  5. package/dist/lib/cjs/__merged.d.cts +17 -0
  6. package/dist/lib/cjs/anchored-suggest.cjs +232 -0
  7. package/dist/lib/cjs/anchored-suggest.d.cts +116 -0
  8. package/dist/lib/cjs/bug-report.cjs +4 -2
  9. package/dist/lib/cjs/bug-report.d.cts +1 -1
  10. package/dist/lib/cjs/code-block-render-handoff.cjs +272 -0
  11. package/dist/lib/cjs/code-block-render-handoff.d.cts +131 -0
  12. package/dist/lib/cjs/codemirror/index.cjs +7 -1
  13. package/dist/lib/cjs/codemirror/index.d.cts +2 -0
  14. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +250 -0
  15. package/dist/lib/cjs/codemirror/inline-token-widgets.d.cts +109 -0
  16. package/dist/lib/cjs/codemirror/settings-facet.cjs +132 -0
  17. package/dist/lib/cjs/codemirror/settings-facet.d.cts +19 -0
  18. package/dist/lib/cjs/components/index.cjs +4 -1
  19. package/dist/lib/cjs/components/index.d.cts +1 -0
  20. package/dist/lib/cjs/components/settings-facet-component.cjs +136 -0
  21. package/dist/lib/cjs/components/settings-facet-component.d.cts +68 -0
  22. package/dist/lib/cjs/css-class.cjs +8 -1
  23. package/dist/lib/cjs/css-class.d.cts +28 -0
  24. package/dist/lib/cjs/desktop-request-url-stream.cjs +258 -0
  25. package/dist/lib/cjs/desktop-request-url-stream.d.cts +22 -0
  26. package/dist/lib/cjs/editor-suggest-registrar.cjs +8 -2
  27. package/dist/lib/cjs/editor-suggest-registrar.d.cts +14 -2
  28. package/dist/lib/cjs/editor-suggest.cjs +198 -0
  29. package/dist/lib/cjs/editor-suggest.d.cts +103 -0
  30. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  31. package/dist/lib/cjs/hotkey.cjs +185 -0
  32. package/dist/lib/cjs/hotkey.d.cts +59 -0
  33. package/dist/lib/cjs/i18n/locales/en.cjs +13 -1
  34. package/dist/lib/cjs/i18n/locales/en.d.cts +12 -0
  35. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +12 -0
  36. package/dist/lib/cjs/index.cjs +31 -1
  37. package/dist/lib/cjs/index.d.cts +10 -0
  38. package/dist/lib/cjs/inline-token-renderer.cjs +145 -0
  39. package/dist/lib/cjs/inline-token-renderer.d.cts +88 -0
  40. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +325 -0
  41. package/dist/lib/cjs/link-and-tag-input-suggest.d.cts +229 -0
  42. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -1
  43. package/dist/lib/cjs/markdown-code-block-processor.d.cts +18 -0
  44. package/dist/lib/cjs/markdown.cjs +6 -1
  45. package/dist/lib/cjs/markdown.d.cts +10 -1
  46. package/dist/lib/cjs/rendered-markdown.cjs +306 -0
  47. package/dist/lib/cjs/rendered-markdown.d.cts +77 -0
  48. package/dist/lib/cjs/request-url.cjs +523 -0
  49. package/dist/lib/cjs/request-url.d.cts +233 -0
  50. package/dist/lib/cjs/setting-components/folder-list-component.cjs +216 -0
  51. package/dist/lib/cjs/setting-components/folder-list-component.d.cts +73 -0
  52. package/dist/lib/cjs/setting-components/hotkey-component.cjs +260 -0
  53. package/dist/lib/cjs/setting-components/hotkey-component.d.cts +85 -0
  54. package/dist/lib/cjs/setting-components/index.cjs +13 -1
  55. package/dist/lib/cjs/setting-components/index.d.cts +4 -0
  56. package/dist/lib/cjs/setting-components/list-component.cjs +291 -0
  57. package/dist/lib/cjs/setting-components/list-component.d.cts +106 -0
  58. package/dist/lib/cjs/setting-components/tag-list-component.cjs +220 -0
  59. package/dist/lib/cjs/setting-components/tag-list-component.d.cts +82 -0
  60. package/dist/lib/cjs/setting-ex.cjs +51 -1
  61. package/dist/lib/cjs/setting-ex.d.cts +35 -1
  62. package/dist/lib/cjs/settings-tabs.cjs +258 -0
  63. package/dist/lib/cjs/settings-tabs.d.cts +101 -0
  64. package/dist/lib/esm/__merged.d.mts +17 -0
  65. package/dist/lib/esm/__merged.mjs +99 -1
  66. package/dist/lib/esm/anchored-suggest.d.mts +116 -0
  67. package/dist/lib/esm/anchored-suggest.mjs +144 -0
  68. package/dist/lib/esm/bug-report.d.mts +1 -1
  69. package/dist/lib/esm/bug-report.mjs +4 -2
  70. package/dist/lib/esm/code-block-render-handoff.d.mts +131 -0
  71. package/dist/lib/esm/code-block-render-handoff.mjs +183 -0
  72. package/dist/lib/esm/codemirror/index.d.mts +2 -0
  73. package/dist/lib/esm/codemirror/index.mjs +5 -1
  74. package/dist/lib/esm/codemirror/inline-token-widgets.d.mts +109 -0
  75. package/dist/lib/esm/codemirror/inline-token-widgets.mjs +167 -0
  76. package/dist/lib/esm/codemirror/settings-facet.d.mts +19 -0
  77. package/dist/lib/esm/codemirror/settings-facet.mjs +44 -0
  78. package/dist/lib/esm/components/index.d.mts +1 -0
  79. package/dist/lib/esm/components/index.mjs +3 -1
  80. package/dist/lib/esm/components/settings-facet-component.d.mts +68 -0
  81. package/dist/lib/esm/components/settings-facet-component.mjs +48 -0
  82. package/dist/lib/esm/css-class.d.mts +28 -0
  83. package/dist/lib/esm/css-class.mjs +8 -1
  84. package/dist/lib/esm/desktop-request-url-stream.d.mts +22 -0
  85. package/dist/lib/esm/desktop-request-url-stream.mjs +170 -0
  86. package/dist/lib/esm/editor-suggest-registrar.d.mts +14 -2
  87. package/dist/lib/esm/editor-suggest-registrar.mjs +8 -2
  88. package/dist/lib/esm/editor-suggest.d.mts +103 -0
  89. package/dist/lib/esm/editor-suggest.mjs +109 -0
  90. package/dist/lib/esm/generated-during-build.mjs +2 -2
  91. package/dist/lib/esm/hotkey.d.mts +59 -0
  92. package/dist/lib/esm/hotkey.mjs +95 -0
  93. package/dist/lib/esm/i18n/locales/en.d.mts +12 -0
  94. package/dist/lib/esm/i18n/locales/en.mjs +13 -1
  95. package/dist/lib/esm/i18n/locales/translations-map.d.mts +12 -0
  96. package/dist/lib/esm/index.d.mts +10 -0
  97. package/dist/lib/esm/index.mjs +21 -1
  98. package/dist/lib/esm/inline-token-renderer.d.mts +88 -0
  99. package/dist/lib/esm/inline-token-renderer.mjs +59 -0
  100. package/dist/lib/esm/link-and-tag-input-suggest.d.mts +229 -0
  101. package/dist/lib/esm/link-and-tag-input-suggest.mjs +239 -0
  102. package/dist/lib/esm/markdown-code-block-processor.d.mts +18 -0
  103. package/dist/lib/esm/markdown-code-block-processor.mjs +16 -1
  104. package/dist/lib/esm/markdown.d.mts +10 -1
  105. package/dist/lib/esm/markdown.mjs +9 -1
  106. package/dist/lib/esm/rendered-markdown.d.mts +77 -0
  107. package/dist/lib/esm/rendered-markdown.mjs +219 -0
  108. package/dist/lib/esm/request-url.d.mts +233 -0
  109. package/dist/lib/esm/request-url.mjs +428 -0
  110. package/dist/lib/esm/setting-components/folder-list-component.d.mts +73 -0
  111. package/dist/lib/esm/setting-components/folder-list-component.mjs +131 -0
  112. package/dist/lib/esm/setting-components/hotkey-component.d.mts +85 -0
  113. package/dist/lib/esm/setting-components/hotkey-component.mjs +178 -0
  114. package/dist/lib/esm/setting-components/index.d.mts +4 -0
  115. package/dist/lib/esm/setting-components/index.mjs +9 -1
  116. package/dist/lib/esm/setting-components/list-component.d.mts +106 -0
  117. package/dist/lib/esm/setting-components/list-component.mjs +206 -0
  118. package/dist/lib/esm/setting-components/tag-list-component.d.mts +82 -0
  119. package/dist/lib/esm/setting-components/tag-list-component.mjs +131 -0
  120. package/dist/lib/esm/setting-ex.d.mts +35 -1
  121. package/dist/lib/esm/setting-ex.mjs +51 -1
  122. package/dist/lib/esm/settings-tabs.d.mts +101 -0
  123. package/dist/lib/esm/settings-tabs.mjs +170 -0
  124. package/dist/styles.css +83 -1
  125. package/package.json +1 -1
  126. package/setting-components/folder-list-component/package.json +6 -0
  127. package/setting-components/hotkey-component/package.json +6 -0
  128. package/setting-components/list-component/package.json +6 -0
  129. package/setting-components/tag-list-component/package.json +6 -0
@@ -1,5 +1,6 @@
1
1
  /// <reference path="./library-references.d.cts" />
2
2
  export { AppActiveFileProvider } from './active-file-provider.cjs';
3
+ export { AnchoredSuggest } from './anchored-suggest.cjs';
3
4
  export { getApp } from './app.cjs';
4
5
  export { retryWithTimeoutNotice, runWithTimeoutNotice } from './async-with-notice.cjs';
5
6
  export { AttachmentPathContext, CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID, DUMMY_PATH, getAttachmentFilePath, getAttachmentFolderPath, getAttachmentFolderPathForAttachment, getAttachmentFolderPathSyncOrNull, getAvailablePathForAttachments, getCheckIsAttachmentUnitFolderFunction, hasOwnAttachmentFolder, isAtProperAttachmentPath } from './attachment-path.cjs';
@@ -14,9 +15,12 @@ export { CalloutMode, renderCallout, wrapForCallout } from './callout.cjs';
14
15
  export { getCanvasReferences } from './canvas.cjs';
15
16
  export { CaseInsensitiveFileIndex, getCaseInsensitiveFileIndex, setCaseInsensitiveFileIndex, unsetCaseInsensitiveFileIndex } from './case-insensitive-file-index.cjs';
16
17
  export { createCodeBlockRegExp } from './code-block-reg-exp.cjs';
18
+ export { captureCodeBlockFocus, claimCodeBlockRenderHandoff, CODE_BLOCK_RENDER_HANDOFF_LIFETIME_IN_MILLISECONDS, recordCodeBlockRenderHandoff, restoreCodeBlockFocus } from './code-block-render-handoff.cjs';
17
19
  export { createIncrementalParseStateField } from './codemirror/incremental-parse-state-field.cjs';
20
+ export { createInlineTokenWidgetsExtension, execAll, toGlobalRegExp } from './codemirror/inline-token-widgets.cjs';
18
21
  export { dispatchToAllMarkdownEditorViews, getAllMarkdownEditorViews } from './codemirror/markdown-editor-views.cjs';
19
22
  export { rangeSetToArray } from './codemirror/range-set.cjs';
23
+ export { createSettingsFacet } from './codemirror/settings-facet.cjs';
20
24
  export { AbstractFileCommandHandler } from './command-handlers/abstract-file-command-handler.cjs';
21
25
  export { CommandHandlerComponent } from './command-handlers/command-handler-component.cjs';
22
26
  export { CommandHandler } from './command-handlers/command-handler.cjs';
@@ -62,6 +66,7 @@ export { RegistryComponent } from './components/registry-component.cjs';
62
66
  export { ReleaseNotesComponent } from './components/release-notes-component.cjs';
63
67
  export { EmptyFolderBehavior, RenameDeleteHandlerComponent } from './components/rename-delete-handler-component.cjs';
64
68
  export { NOT_EMPTY_DIRECTORY_ERROR_CODE, RmdirGuardComponent } from './components/rmdir-guard-component.cjs';
69
+ export { SettingsFacetComponent } from './components/settings-facet-component.cjs';
65
70
  export { SettingsMigrationComponent } from './components/settings-migration-component.cjs';
66
71
  export { SyntaxHighlightingComponent } from './components/syntax-highlighting-component.cjs';
67
72
  export { TemplatesLanguageComponent } from './components/templates-language-component.cjs';
@@ -81,8 +86,10 @@ export { getDemoVaultArchiveFileName, getDemoVaultFolderName } from './demo-vaul
81
86
  export { BulkOperationGitRepo, GitCommandError } from './desktop-bulk-operation-git.cjs';
82
87
  export { openDemoVault } from './desktop-demo-vault-opener.cjs';
83
88
  export { getDesktopOperatingSystem } from './desktop-operating-system.cjs';
89
+ export { openDesktopRequestUrlStream } from './desktop-request-url-stream.cjs';
84
90
  export { PluginEditorExtensionRegistrar } from './editor-extension-registrar.cjs';
85
91
  export { PluginEditorSuggestRegistrar } from './editor-suggest-registrar.cjs';
92
+ export { CommandEditorSuggest, prioritizeEditorSuggest } from './editor-suggest.cjs';
86
93
  export { syncOpenEditorBuffersForPath, toggleEditorReadOnly } from './editor.cjs';
87
94
  export { EventRefDisposable, subscribeDisposableEvent, subscribeEvent } from './events.cjs';
88
95
  export { PluginExtensionsRegistrar } from './extensions-registrar.cjs';
@@ -95,14 +102,17 @@ export { enableFrontmatterFormattingPreservation, preserveFrontmatterFormatting
95
102
  export { isFrontmatterLinkCacheWithOffsets, toFrontmatterLinkCacheWithOffsets } from './frontmatter-link-cache-with-offsets.cjs';
96
103
  export { checkIsPlainObject, parseFrontmatter, registerFrontmatterFormattingPreserver, removeEmptyFrontmatterValues, setFrontmatter } from './frontmatter.cjs';
97
104
  export { LIBRARY_STYLES, LIBRARY_VERSION } from './generated-during-build.cjs';
105
+ export { formatHotkey, getHotkeyFromKeyboardEvent, isSameHotkey } from './hotkey.cjs';
98
106
  export { PluginHoverLinkSourceRegistrar } from './hover-link-source-registrar.cjs';
99
107
  export { appendCodeBlock, appendTextOrFragmentClone, applySpellcheckMode, asCodeBlock, createFragmentWithCodeBlocks } from './html-element.cjs';
100
108
  export { DEFAULT_NS, initI18N, t } from './i18n/i18n.cjs';
101
109
  export { en } from './i18n/locales/en.cjs';
102
110
  export { DEFAULT_LANGUAGE, defaultTranslationsMap } from './i18n/locales/translations-map.cjs';
111
+ export { createInlineTokenPostProcessor, DEFAULT_INLINE_TOKEN_SKIP_SELECTOR, registerInlineTokenRenderer } from './inline-token-renderer.cjs';
103
112
  export { isInObsidian } from './is-in-obsidian.cjs';
104
113
  export { injectLibraryStyles, LAST_LIBRARY_VERSION_KEY, LIBRARY_STYLES_ELEMENT_ID } from './library-styles.cjs';
105
114
  export { OBSIDIAN_LIBRARY_NAME, ObsidianLibrary } from './library.cjs';
115
+ export { getLinkAndTagCompletionTrigger, getVaultTagSuggestions, LinkAndTagCompletionKind, LinkAndTagInputSuggest } from './link-and-tag-input-suggest.cjs';
106
116
  export { normalizeLinkName } from './link-name.cjs';
107
117
  export { buildBacklinksSnapshot, convertLink, editBacklinks, editBacklinksSnapshot, editReferences, editReferencesInContent, extractReferenceFile, generateMarkdownLink, generateRawMarkdownLink, getGenerateMarkdownLinkDefaultParamsFns, hasAngleBrackets, hasEmbedSyntax, hasLeadingDot, hasLeadingSlash, hasWikilinkSyntax, LinkPathStyle, LinkStyle, shouldResetAlias, splitSubpath, updateFileUrlLinksInContent, updateFileUrlLinksInFile, updateLink, updateReferencesInContent, updateReferencesInFile } from './link.cjs';
108
118
  export { invokeAsyncAndLog } from './logger.cjs';
@@ -150,6 +160,8 @@ export { checkPropertyEntryMatches, isPropertyEntry, PROPERTY_ENTRY_PREFIX } fro
150
160
  export { addToQueue, addToQueueAndWait, flushQueue } from './queue.cjs';
151
161
  export { AppContext, useApp } from './react/app-context.cjs';
152
162
  export { getReferenceLinkText, isCanvasFileNodeReference, isCanvasReference, isCanvasTextNodeReference, isReferenceInHeading, isReferenceInOffsetRange, referenceToFileChange, sortReferences } from './reference.cjs';
163
+ export { isOwnedByRenderedMarkdown, registerFoldHandlers, registerFootnoteLinkHandler } from './rendered-markdown.cjs';
164
+ export { createRequestUrlFetch, encodeRequestUrlRequest, RequestUrlError, requestUrlEx, requestUrlStream } from './request-url.cjs';
153
165
  export { isResourceLockedForPath, isResourceLockedForPathByAncestor, lockResourceForPath, requestResourceUnlockForPath, ResourceLockComponent, ResourceLockedError, unlockResourceForPath } from './resource-lock.cjs';
154
166
  export { relativePathToResourceUrl } from './resource-url.cjs';
155
167
  export { PluginRibbonIconRegistrar } from './ribbon-icon-registrar.cjs';
@@ -159,6 +171,9 @@ export { DateComponent } from './setting-components/date-component.cjs';
159
171
  export { DateTimeComponent } from './setting-components/date-time-component.cjs';
160
172
  export { EmailComponent } from './setting-components/email-component.cjs';
161
173
  export { FileComponent } from './setting-components/file-component.cjs';
174
+ export { FolderInputSuggest, FolderListComponent } from './setting-components/folder-list-component.cjs';
175
+ export { HotkeyComponent } from './setting-components/hotkey-component.cjs';
176
+ export { ListComponent } from './setting-components/list-component.cjs';
162
177
  export { MonthComponent } from './setting-components/month-component.cjs';
163
178
  export { MultipleDropdownComponent } from './setting-components/multiple-dropdown-component.cjs';
164
179
  export { MultipleEmailComponent } from './setting-components/multiple-email-component.cjs';
@@ -167,6 +182,7 @@ export { MultipleTextComponent } from './setting-components/multiple-text-compon
167
182
  export { NumberComponent } from './setting-components/number-component.cjs';
168
183
  export { PasswordComponent } from './setting-components/password-component.cjs';
169
184
  export { ensureWrapped } from './setting-components/setting-component-wrapper.cjs';
185
+ export { TagInputSuggest, TagListComponent } from './setting-components/tag-list-component.cjs';
170
186
  export { TelephoneComponent } from './setting-components/telephone-component.cjs';
171
187
  export { getTextBasedComponentValue } from './setting-components/text-based-component.cjs';
172
188
  export { TimeComponent } from './setting-components/time-component.cjs';
@@ -181,6 +197,7 @@ export { WeekComponent } from './setting-components/week-component.cjs';
181
197
  export { adoptSettingEx, SettingEx } from './setting-ex.cjs';
182
198
  export { SettingGroupEx } from './setting-group-ex.cjs';
183
199
  export { openSettingTab } from './settings-modal.cjs';
200
+ export { SettingsTabs } from './settings-tabs.cjs';
184
201
  export { PluginStatusBarItemRegistrar } from './status-bar-item-registrar.cjs';
185
202
  export { getTemplaterFunctions, getTemplaterRenderTargetFile, parseTemplate, requireTemplaterApi, resolveTemplaterApi, TEMPLATER_PLUGIN_ID, TemplaterActiveFileProvider, TemplaterRunMode, TemplaterUnavailabilityReason, TemplaterUnavailableError } from './templater.cjs';
186
203
  export { DurationTransformer } from './transformers/duration-transformer.cjs';
@@ -0,0 +1,232 @@
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 anchored_suggest_exports = {};
116
+ __export(anchored_suggest_exports, {
117
+ AnchoredSuggest: () => AnchoredSuggest
118
+ });
119
+ module.exports = __toCommonJS(anchored_suggest_exports);
120
+ var import_obsidian = require('obsidian');
121
+ const DEFAULT_LIMIT = 100;
122
+ class AnchoredSuggest extends import_obsidian.PopoverSuggest {
123
+ /**
124
+ * The maximum number of suggestions shown. `0` disables the limit. Defaults to `100`.
125
+ */
126
+ limit = DEFAULT_LIMIT;
127
+ anchorEl = null;
128
+ anchorRect = null;
129
+ outsidePointerDownDocument = null;
130
+ outsidePointerDownHandler = this.onOutsidePointerDown.bind(this);
131
+ requestCount = 0;
132
+ /**
133
+ * Creates a new anchored suggest.
134
+ *
135
+ * @param app - The Obsidian app.
136
+ * @param scope - The parent keymap scope.
137
+ */
138
+ constructor(app, scope) {
139
+ super(app, scope);
140
+ }
141
+ /**
142
+ * Closes the popover.
143
+ */
144
+ close() {
145
+ this.requestCount++;
146
+ this.removeOutsidePointerDownHandler();
147
+ super.close();
148
+ }
149
+ /**
150
+ * Opens the popover at an anchor, or moves it there when it is already open.
151
+ *
152
+ * @param params - The parameters.
153
+ * @returns Whether the popover is open: `false` when there is nothing to suggest, or when it was closed or reopened
154
+ * while the suggestions were computed.
155
+ */
156
+ async openAt(params) {
157
+ const { anchor } = params;
158
+ if (isElement(anchor)) {
159
+ this.anchorEl = anchor;
160
+ this.anchorRect = anchor.getBoundingClientRect();
161
+ } else {
162
+ this.anchorEl = null;
163
+ this.anchorRect = anchor;
164
+ }
165
+ return await this.refresh(params.query ?? "", this.anchorRect);
166
+ }
167
+ /**
168
+ * Picks a suggestion: closes the popover, then hands the suggestion to {@link AnchoredSuggest.onChooseSuggestion}.
169
+ *
170
+ * @param value - The suggestion.
171
+ * @param $event - The event that picked it.
172
+ */
173
+ selectSuggestion(value, $event) {
174
+ this.close();
175
+ this.onChooseSuggestion(value, $event);
176
+ }
177
+ /**
178
+ * Recomputes the suggestions for a new query at the current anchor.
179
+ *
180
+ * @param query - The query.
181
+ * @returns Whether the popover is open afterwards.
182
+ */
183
+ async setQuery(query) {
184
+ return this.anchorRect ? await this.refresh(query, this.anchorRect) : false;
185
+ }
186
+ addOutsidePointerDownHandler() {
187
+ this.removeOutsidePointerDownHandler();
188
+ this.outsidePointerDownDocument = this.suggestEl.ownerDocument;
189
+ this.outsidePointerDownDocument.addEventListener("pointerdown", this.outsidePointerDownHandler, { capture: true });
190
+ }
191
+ onOutsidePointerDown(event_) {
192
+ const path = event_.composedPath();
193
+ if (path.includes(this.suggestEl) || this.anchorEl && path.includes(this.anchorEl)) {
194
+ return;
195
+ }
196
+ this.close();
197
+ }
198
+ async refresh(query, anchorRect) {
199
+ const requestId = ++this.requestCount;
200
+ let suggestions = await this.getSuggestions(query);
201
+ if (requestId !== this.requestCount) {
202
+ return false;
203
+ }
204
+ if (suggestions.length === 0) {
205
+ this.close();
206
+ return false;
207
+ }
208
+ if (this.limit > 0) {
209
+ suggestions = suggestions.slice(0, this.limit);
210
+ }
211
+ this.suggestions.setSuggestions(suggestions);
212
+ this.open();
213
+ this.reposition(DOMRect.fromRect(anchorRect));
214
+ if (this.anchorEl) {
215
+ this.setAutoDestroy(this.anchorEl);
216
+ }
217
+ this.addOutsidePointerDownHandler();
218
+ return true;
219
+ }
220
+ removeOutsidePointerDownHandler() {
221
+ this.outsidePointerDownDocument?.removeEventListener("pointerdown", this.outsidePointerDownHandler, { capture: true });
222
+ this.outsidePointerDownDocument = null;
223
+ }
224
+ }
225
+ function isElement(anchor) {
226
+ return "getBoundingClientRect" in anchor;
227
+ }
228
+ // Annotate the CommonJS export names for ESM import in node:
229
+ 0 && (module.exports = {
230
+ AnchoredSuggest
231
+ });
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbmNob3JlZC1zdWdnZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIHN1Z2dlc3QgcG9wb3ZlciBvcGVuZWQgYXQgYW4gZWxlbWVudCBvciBhIHJlY3RhbmdsZSwgd2l0aCBubyBpbnB1dCBiZWhpbmQgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFNjb3BlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgUG9wb3ZlclN1Z2dlc3QgfSBmcm9tICdvYnNpZGlhbic7XG5cbmNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFuY2hvcmVkU3VnZ2VzdC5vcGVuQXR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFuY2hvcmVkU3VnZ2VzdE9wZW5BdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBvciB0aGUgdmlld3BvcnQgcmVjdGFuZ2xlIHRoZSBwb3BvdmVyIGlzIHBsYWNlZCBhZ2FpbnN0LiBXaGVuIGFuIGVsZW1lbnQgaXMgZ2l2ZW4sIHRoZSBwb3BvdmVyIGNsb3Nlc1xuICAgKiBvbmNlIHRoZSBlbGVtZW50IGxlYXZlcyB0aGUgRE9NLCBhbmQgYSBwb2ludGVyLWRvd24gb24gaXQgZG9lcyBub3QgY291bnQgYXMgYW4gb3V0c2lkZSBjbGljay5cbiAgICovXG4gIHJlYWRvbmx5IGFuY2hvcjogRE9NUmVjdFJlYWRPbmx5IHwgSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBxdWVyeSBoYW5kZWQgdG8ge0BsaW5rIEFuY2hvcmVkU3VnZ2VzdC5nZXRTdWdnZXN0aW9uc30uIERlZmF1bHRzIHRvIGAnJ2AuXG4gICAqL1xuICByZWFkb25seSBxdWVyeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHN1Z2dlc3QgcG9wb3ZlciBvcGVuZWQgYXQgYW4gYW5jaG9yLCBmb3IgYSBwaWNrZXIgdGhhdCBoYXMgbm8gdGV4dCBpbnB1dDogYSB0b29sYmFyIGJ1dHRvbiwgYSBjb250ZXh0LW1lbnUgYWN0aW9uLFxuICogYSBkZWNvcmF0aW9uIGluIHRoZSBlZGl0b3IuXG4gKlxuICogT2JzaWRpYW4ncyBgQWJzdHJhY3RJbnB1dFN1Z2dlc3RgIG9wZW5zIG9ubHkgZnJvbSBhbiBpbnB1dCBhbmQgYEVkaXRvclN1Z2dlc3RgIG9ubHkgZnJvbSB0aGUgZWRpdG9yLiBUaGlzIG9uZSBpc1xuICogb3BlbmVkIGJ5IHtAbGluayBBbmNob3JlZFN1Z2dlc3Qub3BlbkF0fSBhbmQgY2xvc2VzIG9uIEVzY2FwZSwgb24gYSBwb2ludGVyLWRvd24gb3V0c2lkZSBpdCwgYW5kIHdoZW4gaXRzIGFuY2hvclxuICogZWxlbWVudCBsZWF2ZXMgdGhlIERPTS4gVGhlIGtleWJvYXJkIHdvcmtzIGFzIGluIE9ic2lkaWFuJ3Mgb3duIHBvcG92ZXJzOiBhcnJvd3MgbW92ZSwgRW50ZXIgcGlja3MuXG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIENvbG9yU3VnZ2VzdCBleHRlbmRzIEFuY2hvcmVkU3VnZ2VzdDxzdHJpbmc+IHtcbiAqICAgcHJvdGVjdGVkIGdldFN1Z2dlc3Rpb25zKCk6IHN0cmluZ1tdIHtcbiAqICAgICByZXR1cm4gWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZSddO1xuICogICB9XG4gKlxuICogICBwdWJsaWMgcmVuZGVyU3VnZ2VzdGlvbihjb2xvcjogc3RyaW5nLCBlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAqICAgICBlbC5zZXRUZXh0KGNvbG9yKTtcbiAqICAgfVxuICpcbiAqICAgcHJvdGVjdGVkIG9uQ2hvb3NlU3VnZ2VzdGlvbihjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gKiAgICAgY29uc29sZS5sb2coY29sb3IpO1xuICogICB9XG4gKiB9XG4gKlxuICogYXdhaXQgbmV3IENvbG9yU3VnZ2VzdCh0aGlzLmFwcCkub3BlbkF0KHsgYW5jaG9yOiBidXR0b25FbCB9KTtcbiAqIGBgYFxuICpcbiAqIEl0IHJlbGllcyBvbiBgUG9wb3ZlclN1Z2dlc3RgIG1lbWJlcnMgdGhhdCBgb2JzaWRpYW4uZC50c2AgZG9lcyBub3QgZGVjbGFyZSAoYHN1Z2dlc3Rpb25zYCwgYHJlcG9zaXRpb25gLFxuICogYHNldEF1dG9EZXN0cm95YCwgYHN1Z2dlc3RFbGApLCByZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgYSBzdWdnZXN0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQW5jaG9yZWRTdWdnZXN0PFQ+IGV4dGVuZHMgUG9wb3ZlclN1Z2dlc3Q8VD4ge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN1Z2dlc3Rpb25zIHNob3duLiBgMGAgZGlzYWJsZXMgdGhlIGxpbWl0LiBEZWZhdWx0cyB0byBgMTAwYC5cbiAgICovXG4gIHB1YmxpYyBsaW1pdCA9IERFRkFVTFRfTElNSVQ7XG5cbiAgcHJpdmF0ZSBhbmNob3JFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBhbmNob3JSZWN0OiBET01SZWN0UmVhZE9ubHkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBvdXRzaWRlUG9pbnRlckRvd25Eb2N1bWVudDogRG9jdW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBvdXRzaWRlUG9pbnRlckRvd25IYW5kbGVyID0gdGhpcy5vbk91dHNpZGVQb2ludGVyRG93bi5iaW5kKHRoaXMpO1xuICBwcml2YXRlIHJlcXVlc3RDb3VudCA9IDA7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYW5jaG9yZWQgc3VnZ2VzdC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAuXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBwYXJlbnQga2V5bWFwIHNjb3BlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBzY29wZT86IFNjb3BlKSB7XG4gICAgc3VwZXIoYXBwLCBzY29wZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdENvdW50Kys7XG4gICAgdGhpcy5yZW1vdmVPdXRzaWRlUG9pbnRlckRvd25IYW5kbGVyKCk7XG4gICAgc3VwZXIuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgcG9wb3ZlciBhdCBhbiBhbmNob3IsIG9yIG1vdmVzIGl0IHRoZXJlIHdoZW4gaXQgaXMgYWxyZWFkeSBvcGVuLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHBvcG92ZXIgaXMgb3BlbjogYGZhbHNlYCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gc3VnZ2VzdCwgb3Igd2hlbiBpdCB3YXMgY2xvc2VkIG9yIHJlb3BlbmVkXG4gICAqICAgd2hpbGUgdGhlIHN1Z2dlc3Rpb25zIHdlcmUgY29tcHV0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgb3BlbkF0KHBhcmFtczogQW5jaG9yZWRTdWdnZXN0T3BlbkF0UGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhbmNob3IgfSA9IHBhcmFtcztcbiAgICBpZiAoaXNFbGVtZW50KGFuY2hvcikpIHtcbiAgICAgIHRoaXMuYW5jaG9yRWwgPSBhbmNob3I7XG4gICAgICB0aGlzLmFuY2hvclJlY3QgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW5jaG9yRWwgPSBudWxsO1xuICAgICAgdGhpcy5hbmNob3JSZWN0ID0gYW5jaG9yO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWZyZXNoKHBhcmFtcy5xdWVyeSA/PyAnJywgdGhpcy5hbmNob3JSZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaWNrcyBhIHN1Z2dlc3Rpb246IGNsb3NlcyB0aGUgcG9wb3ZlciwgdGhlbiBoYW5kcyB0aGUgc3VnZ2VzdGlvbiB0byB7QGxpbmsgQW5jaG9yZWRTdWdnZXN0Lm9uQ2hvb3NlU3VnZ2VzdGlvbn0uXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdWdnZXN0aW9uLlxuICAgKiBAcGFyYW0gJGV2ZW50IC0gVGhlIGV2ZW50IHRoYXQgcGlja2VkIGl0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHNlbGVjdFN1Z2dlc3Rpb24odmFsdWU6IFQsICRldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5vbkNob29zZVN1Z2dlc3Rpb24odmFsdWUsICRldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb21wdXRlcyB0aGUgc3VnZ2VzdGlvbnMgZm9yIGEgbmV3IHF1ZXJ5IGF0IHRoZSBjdXJyZW50IGFuY2hvci5cbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwb3BvdmVyIGlzIG9wZW4gYWZ0ZXJ3YXJkcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRRdWVyeShxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuYW5jaG9yUmVjdCA/IChhd2FpdCB0aGlzLnJlZnJlc2gocXVlcnksIHRoaXMuYW5jaG9yUmVjdCkpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3VnZ2VzdGlvbnMgZm9yIGEgcXVlcnkuXG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeSAtIFRoZSBxdWVyeSBwYXNzZWQgdG8ge0BsaW5rIEFuY2hvcmVkU3VnZ2VzdC5vcGVuQXR9IG9yIHtAbGluayBBbmNob3JlZFN1Z2dlc3Quc2V0UXVlcnl9LlxuICAgKiBAcmV0dXJucyBUaGUgc3VnZ2VzdGlvbnMsIGRpcmVjdGx5IG9yIGFzIGEgcHJvbWlzZS5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTdWdnZXN0aW9ucyhxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxUW10+IHwgVFtdO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgc3VnZ2VzdGlvbiB0aGUgdXNlciBwaWNrZWQsIGFmdGVyIHRoZSBwb3BvdmVyIGNsb3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN1Z2dlc3Rpb24uXG4gICAqIEBwYXJhbSAkZXZlbnQgLSBUaGUgZXZlbnQgdGhhdCBwaWNrZWQgaXQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb25DaG9vc2VTdWdnZXN0aW9uKHZhbHVlOiBULCAkZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZDtcblxuICBwcml2YXRlIGFkZE91dHNpZGVQb2ludGVyRG93bkhhbmRsZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVPdXRzaWRlUG9pbnRlckRvd25IYW5kbGVyKCk7XG4gICAgdGhpcy5vdXRzaWRlUG9pbnRlckRvd25Eb2N1bWVudCA9IHRoaXMuc3VnZ2VzdEVsLm93bmVyRG9jdW1lbnQ7XG4gICAgdGhpcy5vdXRzaWRlUG9pbnRlckRvd25Eb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub3V0c2lkZVBvaW50ZXJEb3duSGFuZGxlciwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk91dHNpZGVQb2ludGVyRG93bihldmVudF86IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGggPSBldmVudF8uY29tcG9zZWRQYXRoKCk7XG4gICAgaWYgKHBhdGguaW5jbHVkZXModGhpcy5zdWdnZXN0RWwpIHx8ICh0aGlzLmFuY2hvckVsICYmIHBhdGguaW5jbHVkZXModGhpcy5hbmNob3JFbCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaChxdWVyeTogc3RyaW5nLCBhbmNob3JSZWN0OiBET01SZWN0UmVhZE9ubHkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMucmVxdWVzdENvdW50O1xuICAgIGxldCBzdWdnZXN0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0U3VnZ2VzdGlvbnMocXVlcnkpO1xuICAgIGlmIChyZXF1ZXN0SWQgIT09IHRoaXMucmVxdWVzdENvdW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGltaXQgPiAwKSB7XG4gICAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zLnNsaWNlKDAsIHRoaXMubGltaXQpO1xuICAgIH1cblxuICAgIHRoaXMuc3VnZ2VzdGlvbnMuc2V0U3VnZ2VzdGlvbnMoc3VnZ2VzdGlvbnMpO1xuICAgIHRoaXMub3BlbigpO1xuICAgIHRoaXMucmVwb3NpdGlvbihET01SZWN0LmZyb21SZWN0KGFuY2hvclJlY3QpKTtcbiAgICBpZiAodGhpcy5hbmNob3JFbCkge1xuICAgICAgdGhpcy5zZXRBdXRvRGVzdHJveSh0aGlzLmFuY2hvckVsKTtcbiAgICB9XG4gICAgdGhpcy5hZGRPdXRzaWRlUG9pbnRlckRvd25IYW5kbGVyKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU91dHNpZGVQb2ludGVyRG93bkhhbmRsZXIoKTogdm9pZCB7XG4gICAgdGhpcy5vdXRzaWRlUG9pbnRlckRvd25Eb2N1bWVudD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLm91dHNpZGVQb2ludGVyRG93bkhhbmRsZXIsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICB0aGlzLm91dHNpZGVQb2ludGVyRG93bkRvY3VtZW50ID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnQoYW5jaG9yOiBET01SZWN0UmVhZE9ubHkgfCBIVE1MRWxlbWVudCk6IGFuY2hvciBpcyBIVE1MRWxlbWVudCB7XG4gIHJldHVybiAnZ2V0Qm91bmRpbmdDbGllbnRSZWN0JyBpbiBhbmNob3I7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSxzQkFBK0I7QUFFL0IsTUFBTSxnQkFBZ0I7QUFpRGYsTUFBZSx3QkFBMkIsK0JBQWtCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJMUQsUUFBUTtBQUFBLEVBRVAsV0FBK0I7QUFBQSxFQUMvQixhQUFxQztBQUFBLEVBQ3JDLDZCQUE4QztBQUFBLEVBQ3JDLDRCQUE0QixLQUFLLHFCQUFxQixLQUFLLElBQUk7QUFBQSxFQUN4RSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRaEIsWUFBWSxLQUFVLE9BQWU7QUFDMUMsVUFBTSxLQUFLLEtBQUs7QUFBQSxFQUNsQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS2dCLFFBQWM7QUFDNUIsU0FBSztBQUNMLFNBQUssZ0NBQWdDO0FBQ3JDLFVBQU0sTUFBTTtBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU0EsTUFBYSxPQUFPLFFBQXVEO0FBQ3pFLFVBQU0sRUFBRSxPQUFPLElBQUk7QUFDbkIsUUFBSSxVQUFVLE1BQU0sR0FBRztBQUNyQixXQUFLLFdBQVc7QUFDaEIsV0FBSyxhQUFhLE9BQU8sc0JBQXNCO0FBQUEsSUFDakQsT0FBTztBQUNMLFdBQUssV0FBVztBQUNoQixXQUFLLGFBQWE7QUFBQSxJQUNwQjtBQUNBLFdBQU8sTUFBTSxLQUFLLFFBQVEsT0FBTyxTQUFTLElBQUksS0FBSyxVQUFVO0FBQUEsRUFDL0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFnQixpQkFBaUIsT0FBVSxRQUEwQztBQUNuRixTQUFLLE1BQU07QUFDWCxTQUFLLG1CQUFtQixPQUFPLE1BQU07QUFBQSxFQUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxTQUFTLE9BQWlDO0FBQ3JELFdBQU8sS0FBSyxhQUFjLE1BQU0sS0FBSyxRQUFRLE9BQU8sS0FBSyxVQUFVLElBQUs7QUFBQSxFQUMxRTtBQUFBLEVBa0JRLCtCQUFxQztBQUMzQyxTQUFLLGdDQUFnQztBQUNyQyxTQUFLLDZCQUE2QixLQUFLLFVBQVU7QUFDakQsU0FBSywyQkFBMkIsaUJBQWlCLGVBQWUsS0FBSywyQkFBMkIsRUFBRSxTQUFTLEtBQUssQ0FBQztBQUFBLEVBQ25IO0FBQUEsRUFFUSxxQkFBcUIsUUFBNEI7QUFDdkQsVUFBTSxPQUFPLE9BQU8sYUFBYTtBQUNqQyxRQUFJLEtBQUssU0FBUyxLQUFLLFNBQVMsS0FBTSxLQUFLLFlBQVksS0FBSyxTQUFTLEtBQUssUUFBUSxHQUFJO0FBQ3BGO0FBQUEsSUFDRjtBQUNBLFNBQUssTUFBTTtBQUFBLEVBQ2I7QUFBQSxFQUVBLE1BQWMsUUFBUSxPQUFlLFlBQStDO0FBQ2xGLFVBQU0sWUFBWSxFQUFFLEtBQUs7QUFDekIsUUFBSSxjQUFjLE1BQU0sS0FBSyxlQUFlLEtBQUs7QUFDakQsUUFBSSxjQUFjLEtBQUssY0FBYztBQUNuQyxhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksWUFBWSxXQUFXLEdBQUc7QUFDNUIsV0FBSyxNQUFNO0FBQ1gsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLEtBQUssUUFBUSxHQUFHO0FBQ2xCLG9CQUFjLFlBQVksTUFBTSxHQUFHLEtBQUssS0FBSztBQUFBLElBQy9DO0FBRUEsU0FBSyxZQUFZLGVBQWUsV0FBVztBQUMzQyxTQUFLLEtBQUs7QUFDVixTQUFLLFdBQVcsUUFBUSxTQUFTLFVBQVUsQ0FBQztBQUM1QyxRQUFJLEtBQUssVUFBVTtBQUNqQixXQUFLLGVBQWUsS0FBSyxRQUFRO0FBQUEsSUFDbkM7QUFDQSxTQUFLLDZCQUE2QjtBQUNsQyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRVEsa0NBQXdDO0FBQzlDLFNBQUssNEJBQTRCLG9CQUFvQixlQUFlLEtBQUssMkJBQTJCLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFDckgsU0FBSyw2QkFBNkI7QUFBQSxFQUNwQztBQUNGO0FBRUEsU0FBUyxVQUFVLFFBQThEO0FBQy9FLFNBQU8sMkJBQTJCO0FBQ3BDOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,116 @@
1
+ /// <reference path="./library-references.d.cts" />
2
+ /// <reference lib="dom" />
3
+ /**
4
+ * @file
5
+ *
6
+ * A suggest popover opened at an element or a rectangle, with no input behind it.
7
+ */
8
+ import type { App, Scope } from 'obsidian' with { 'resolution-mode': 'import' };
9
+ import { PopoverSuggest } from 'obsidian';
10
+ /**
11
+ * Parameters for {@link AnchoredSuggest.openAt}.
12
+ */
13
+ export interface AnchoredSuggestOpenAtParams {
14
+ /**
15
+ * The element or the viewport rectangle the popover is placed against. When an element is given, the popover closes
16
+ * once the element leaves the DOM, and a pointer-down on it does not count as an outside click.
17
+ */
18
+ readonly anchor: DOMRectReadOnly | HTMLElement;
19
+ /**
20
+ * The query handed to {@link AnchoredSuggest.getSuggestions}. Defaults to `''`.
21
+ */
22
+ readonly query?: string;
23
+ }
24
+ /**
25
+ * A suggest popover opened at an anchor, for a picker that has no text input: a toolbar button, a context-menu action,
26
+ * a decoration in the editor.
27
+ *
28
+ * Obsidian's `AbstractInputSuggest` opens only from an input and `EditorSuggest` only from the editor. This one is
29
+ * opened by {@link AnchoredSuggest.openAt} and closes on Escape, on a pointer-down outside it, and when its anchor
30
+ * element leaves the DOM. The keyboard works as in Obsidian's own popovers: arrows move, Enter picks.
31
+ *
32
+ * ```ts
33
+ * class ColorSuggest extends AnchoredSuggest<string> {
34
+ * protected getSuggestions(): string[] {
35
+ * return ['red', 'green', 'blue'];
36
+ * }
37
+ *
38
+ * public renderSuggestion(color: string, el: HTMLElement): void {
39
+ * el.setText(color);
40
+ * }
41
+ *
42
+ * protected onChooseSuggestion(color: string): void {
43
+ * console.log(color);
44
+ * }
45
+ * }
46
+ *
47
+ * await new ColorSuggest(this.app).openAt({ anchor: buttonEl });
48
+ * ```
49
+ *
50
+ * It relies on `PopoverSuggest` members that `obsidian.d.ts` does not declare (`suggestions`, `reposition`,
51
+ * `setAutoDestroy`, `suggestEl`), read from Obsidian `1.15.0`.
52
+ *
53
+ * @typeParam T - The type of a suggestion.
54
+ */
55
+ export declare abstract class AnchoredSuggest<T> extends PopoverSuggest<T> {
56
+ /**
57
+ * The maximum number of suggestions shown. `0` disables the limit. Defaults to `100`.
58
+ */
59
+ limit: number;
60
+ private anchorEl;
61
+ private anchorRect;
62
+ private outsidePointerDownDocument;
63
+ private readonly outsidePointerDownHandler;
64
+ private requestCount;
65
+ /**
66
+ * Creates a new anchored suggest.
67
+ *
68
+ * @param app - The Obsidian app.
69
+ * @param scope - The parent keymap scope.
70
+ */
71
+ constructor(app: App, scope?: Scope);
72
+ /**
73
+ * Closes the popover.
74
+ */
75
+ close(): void;
76
+ /**
77
+ * Opens the popover at an anchor, or moves it there when it is already open.
78
+ *
79
+ * @param params - The parameters.
80
+ * @returns Whether the popover is open: `false` when there is nothing to suggest, or when it was closed or reopened
81
+ * while the suggestions were computed.
82
+ */
83
+ openAt(params: AnchoredSuggestOpenAtParams): Promise<boolean>;
84
+ /**
85
+ * Picks a suggestion: closes the popover, then hands the suggestion to {@link AnchoredSuggest.onChooseSuggestion}.
86
+ *
87
+ * @param value - The suggestion.
88
+ * @param $event - The event that picked it.
89
+ */
90
+ selectSuggestion(value: T, $event: KeyboardEvent | MouseEvent): void;
91
+ /**
92
+ * Recomputes the suggestions for a new query at the current anchor.
93
+ *
94
+ * @param query - The query.
95
+ * @returns Whether the popover is open afterwards.
96
+ */
97
+ setQuery(query: string): Promise<boolean>;
98
+ /**
99
+ * Gets the suggestions for a query.
100
+ *
101
+ * @param query - The query passed to {@link AnchoredSuggest.openAt} or {@link AnchoredSuggest.setQuery}.
102
+ * @returns The suggestions, directly or as a promise.
103
+ */
104
+ protected abstract getSuggestions(query: string): Promise<T[]> | T[];
105
+ /**
106
+ * Called with the suggestion the user picked, after the popover closed.
107
+ *
108
+ * @param value - The suggestion.
109
+ * @param $event - The event that picked it.
110
+ */
111
+ protected abstract onChooseSuggestion(value: T, $event: KeyboardEvent | MouseEvent): void;
112
+ private addOutsidePointerDownHandler;
113
+ private onOutsidePointerDown;
114
+ private refresh;
115
+ private removeOutsidePointerDownHandler;
116
+ }
@@ -155,7 +155,9 @@ async function getBugReportEnvironment(params) {
155
155
  const { app, pluginId } = params;
156
156
  const { installerVersion, operatingSystem } = await getAppAndOperatingSystem();
157
157
  return {
158
- enabledPlugins: [...app.plugins.enabledPlugins].filter((id) => id !== pluginId).sort().map((id) => getPluginInfo(app, id)),
158
+ // The loaded plugins, as Obsidian's Show debug info lists them: `enabledPlugins` also holds an id
159
+ // whose folder was deleted, or whose load failed.
160
+ enabledPlugins: Object.keys(app.plugins.plugins).filter((id) => id !== pluginId).sort().map((id) => getPluginInfo(app, id)),
159
161
  installerVersion,
160
162
  obsidianVersion: import_obsidian.apiVersion,
161
163
  operatingSystem,
@@ -238,4 +240,4 @@ function getPluginInfo(app, pluginId) {
238
240
  getBugReportIssueFormUrl,
239
241
  getGitHubIssueFormUrl
240
242
  });
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciBhIHBsdWdpbidzIGJ1ZyByZXBvcnRzOiB0aGUgZW52aXJvbm1lbnQgYSByZXBvcnQgbmVlZHMsIGFuZCBhIGxpbmsgdG8gYSBHaXRIdWIgaXNzdWUgZm9ybVxuICogcHJlZmlsbGVkIHdpdGggaXQuXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm0tbG9hZGFibGU6IHRoZSBkZXNrdG9wIG9wZXJhdGluZy1zeXN0ZW0gbG9va3VwIHJlYWRzIGBub2RlOm9zYCwgc28gaXQgaXMgaW1wb3J0ZWRcbiAqIGR5bmFtaWNhbGx5LCBvbiBkZXNrdG9wIG9ubHkuXG4gKlxuICogVGhlIGRlc2t0b3AgaW5zdGFsbGVyIHZlcnNpb24gaXMgYFBsYXRmb3JtLmJ1aWxkYCwgd2hpY2ggbm8gcHVibGljIHR5cGluZyBkZWNsYXJlczogT2JzaWRpYW4ncyBkZXNrdG9wXG4gKiBzdGFydHVwIHNldHMgaXQgZnJvbSBFbGVjdHJvbidzIGBhcHAuZ2V0VmVyc2lvbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgKSwgc28gaXQgaXMgcmVhZFxuICogc3RydWN0dXJhbGx5IGhlcmUsIGFuZCByZWFkcyBhcyBgdW5rbm93bmAgaWYgYSBsYXRlciB2ZXJzaW9uIGRyb3BzIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBhcGlWZXJzaW9uLFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE1vYmlsZUFwcEluZm8gfSBmcm9tICcuL21vYmlsZS1hcHAtaW5mby50cyc7XG5cbi8qKlxuICogVGhlIGlkcyBvZiB0aGUgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtJ3MgZmllbGRzIHRoYXQge0BsaW5rIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybH0gcHJlZmlsbHMuIEdpdEh1YlxuICogcHJlZmlsbHMgYSBmaWVsZCBmcm9tIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGFmdGVyIHRoZSBmaWVsZCdzIGBpZGAsIHNvIGEgZm9ybSBtdXN0IGdpdmUgaXRzIGZpZWxkc1xuICogdGhlc2UgaWRzIGZvciB0aGVtIHRvIGJlIGZpbGxlZC5cbiAqL1xuZXhwb3J0IGVudW0gQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZCB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgZW52aXJvbm1lbnQsIGFzIHtAbGluayBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudH0gcmVuZGVycyBpdC5cbiAgICovXG4gIEVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyxcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICBPYnNpZGlhblZlcnNpb24gPSAnb2JzaWRpYW4tdmVyc2lvbicsXG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgT3BlcmF0aW5nU3lzdGVtID0gJ29wZXJhdGluZy1zeXN0ZW0nLFxuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIHZlcnNpb24uXG4gICAqL1xuICBQbHVnaW5WZXJzaW9uID0gJ3BsdWdpbi12ZXJzaW9uJ1xufVxuXG4vKipcbiAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICovXG5leHBvcnQgY29uc3QgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFID0gJ2J1Z19yZXBvcnQueW1sJztcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBvdGhlciBlbmFibGVkIHBsdWdpbnMsIHNvcnRlZCBieSBpZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWRQbHVnaW5zOiByZWFkb25seSBCdWdSZXBvcnRQbHVnaW5JbmZvW107XG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsZWQgYXBwJ3MgdmVyc2lvbiwgd2hpY2ggY2FuIGxhZyBiZWhpbmQge0BsaW5rIG9ic2lkaWFuVmVyc2lvbn0uXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsZXJWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmFtZSBhbmQgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGluZ1N5c3RlbTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGxhdGZvcm06IGBBbmRyb2lkYCwgYGlPU2AsIGBtYWNPU2AsIGBXaW5kb3dzYCwgYExpbnV4YCBvciBgdW5rbm93bmAuXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogQnVnUmVwb3J0UGx1Z2luSW5mbztcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiwgYXMgYSBidWcgcmVwb3J0IG5hbWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydFBsdWdpbkluZm8ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGluc3RhbGxlZCB2ZXJzaW9uLCBvciBgbnVsbGAgd2hlbiBpdHMgbWFuaWZlc3QgaXMgbm90IGtub3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogbnVsbCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Z1JlcG9ydEVudmlyb25tZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRCdWdSZXBvcnRJc3N1ZUZvcm1VcmxQYXJhbXMgZXh0ZW5kcyBHZXRCdWdSZXBvcnRFbnZpcm9ubWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgR2l0SHViIHJlcG9zaXRvcnksIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IGdpdEh1YlJlcG86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlzc3VlJ3MgdGl0bGUuIExlYXZlIGl0IG91dCB0byBrZWVwIHRoZSBmb3JtJ3Mgb3duIGRlZmF1bHQgdGl0bGUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0R2l0SHViSXNzdWVGb3JtVXJsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRHaXRIdWJJc3N1ZUZvcm1VcmxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcyB0byBwcmVmaWxsLCBrZXllZCBieSBmaWVsZCBgaWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSdzIGZpbGUgbmFtZSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlzc3VlJ3MgdGl0bGUuIExlYXZlIGl0IG91dCB0byBrZWVwIHRoZSBmb3JtJ3Mgb3duIGRlZmF1bHQgdGl0bGUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwcEFuZE9wZXJhdGluZ1N5c3RlbSB7XG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgb3BlcmF0aW5nU3lzdGVtOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQbGF0Zm9ybVdpdGhCdWlsZCB7XG4gIHJlYWRvbmx5IGJ1aWxkPzogdW5rbm93bjtcbn1cblxuY29uc3QgVU5LTk9XTiA9ICd1bmtub3duJztcblxuLyoqXG4gKiBSZW5kZXJzIGEgYnVnIHJlcG9ydCdzIGVudmlyb25tZW50IGFzIGEgTWFya2Rvd24gbGlzdC5cbiAqXG4gKiBAcGFyYW0gZW52aXJvbm1lbnQgLSBUaGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyBUaGUgTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudChlbnZpcm9ubWVudDogQnVnUmVwb3J0RW52aXJvbm1lbnQpOiBzdHJpbmcge1xuICBjb25zdCBlbmFibGVkUGx1Z2lucyA9IGVudmlyb25tZW50LmVuYWJsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMFxuICAgID8gJ25vbmUnXG4gICAgOiBlbnZpcm9ubWVudC5lbmFibGVkUGx1Z2lucy5tYXAoKHBsdWdpbkluZm8pID0+IGZvcm1hdFBsdWdpbkluZm8ocGx1Z2luSW5mbykpLmpvaW4oJywgJyk7XG5cbiAgcmV0dXJuIGAtIFBsdWdpbjogJHtmb3JtYXRQbHVnaW5JbmZvKGVudmlyb25tZW50LnBsdWdpbil9XFxuYFxuICAgICsgYC0gT2JzaWRpYW46ICR7ZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9ufSAoaW5zdGFsbGVyICR7ZW52aXJvbm1lbnQuaW5zdGFsbGVyVmVyc2lvbn0pXFxuYFxuICAgICsgYC0gUGxhdGZvcm06ICR7ZW52aXJvbm1lbnQucGxhdGZvcm19XFxuYFxuICAgICsgYC0gT3BlcmF0aW5nIHN5c3RlbTogJHtlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW19XFxuYFxuICAgICsgYC0gT3RoZXIgZW5hYmxlZCBwbHVnaW5zOiAke2VuYWJsZWRQbHVnaW5zfWA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzOiB0aGUgcGx1Z2luJ3MgdmVyc2lvbiwgdGhlIG90aGVyIGVuYWJsZWQgcGx1Z2lucywgdGhlXG4gKiBPYnNpZGlhbiBhbmQgaW5zdGFsbGVyIHZlcnNpb25zLCB0aGUgcGxhdGZvcm0gYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ1Z1JlcG9ydEVudmlyb25tZW50KHBhcmFtczogR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMpOiBQcm9taXNlPEJ1Z1JlcG9ydEVudmlyb25tZW50PiB7XG4gIGNvbnN0IHsgYXBwLCBwbHVnaW5JZCB9ID0gcGFyYW1zO1xuICBjb25zdCB7IGluc3RhbGxlclZlcnNpb24sIG9wZXJhdGluZ1N5c3RlbSB9ID0gYXdhaXQgZ2V0QXBwQW5kT3BlcmF0aW5nU3lzdGVtKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkUGx1Z2luczogWy4uLmFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zXVxuICAgICAgLmZpbHRlcigoaWQpID0+IGlkICE9PSBwbHVnaW5JZClcbiAgICAgIC5zb3J0KClcbiAgICAgIC5tYXAoKGlkKSA9PiBnZXRQbHVnaW5JbmZvKGFwcCwgaWQpKSxcbiAgICBpbnN0YWxsZXJWZXJzaW9uLFxuICAgIG9ic2lkaWFuVmVyc2lvbjogYXBpVmVyc2lvbixcbiAgICBvcGVyYXRpbmdTeXN0ZW0sXG4gICAgcGxhdGZvcm06IGdldFBsYXRmb3JtTmFtZSgpLFxuICAgIHBsdWdpbjogZ2V0UGx1Z2luSW5mbyhhcHAsIHBsdWdpbklkKVxuICB9O1xufVxuXG4vKipcbiAqIEdldHMgYSBsaW5rIHRvIGEgcGx1Z2luJ3MgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtICh7QGxpbmsgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFfSksIHByZWZpbGxlZCB3aXRoXG4gKiB0aGUgZW52aXJvbm1lbnQsIGluIHRoZSBmaWVsZHMge0BsaW5rIEJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWR9IG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsKHBhcmFtczogR2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudChwYXJhbXMpO1xuXG4gIHJldHVybiBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmwoe1xuICAgIGZpZWxkczoge1xuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuRW52aXJvbm1lbnRdOiBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudChlbnZpcm9ubWVudCksXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5PYnNpZGlhblZlcnNpb25dOiBlbnZpcm9ubWVudC5vYnNpZGlhblZlcnNpb24sXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5PcGVyYXRpbmdTeXN0ZW1dOiBlbnZpcm9ubWVudC5vcGVyYXRpbmdTeXN0ZW0sXG4gICAgICBbQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZC5QbHVnaW5WZXJzaW9uXTogZW52aXJvbm1lbnQucGx1Z2luLnZlcnNpb24gPz8gVU5LTk9XTlxuICAgIH0sXG4gICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgdGVtcGxhdGU6IEJVR19SRVBPUlRfSVNTVUVfRk9STV9URU1QTEFURSxcbiAgICAuLi5wYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCAmJiB7IHRpdGxlOiBwYXJhbXMudGl0bGUgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGluayB0aGF0IG9wZW5zIGEgR2l0SHViIGlzc3VlIGZvcm0gd2l0aCBmaWVsZHMgcHJlZmlsbGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2l0SHViSXNzdWVGb3JtVXJsKHBhcmFtczogR2V0R2l0SHViSXNzdWVGb3JtVXJsUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IHRlbXBsYXRlOiBwYXJhbXMudGVtcGxhdGUgfSk7XG4gIGlmIChwYXJhbXMudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlYXJjaFBhcmFtcy5zZXQoJ3RpdGxlJywgcGFyYW1zLnRpdGxlKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2ZpZWxkSWQsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbXMuZmllbGRzID8/IHt9KSkge1xuICAgIHNlYXJjaFBhcmFtcy5zZXQoZmllbGRJZCwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGBodHRwczovL2dpdGh1Yi5jb20vJHtwYXJhbXMuZ2l0SHViUmVwb30vaXNzdWVzL25ldz8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBsdWdpbkluZm8ocGx1Z2luSW5mbzogQnVnUmVwb3J0UGx1Z2luSW5mbyk6IHN0cmluZyB7XG4gIHJldHVybiBgXFxgJHtwbHVnaW5JbmZvLmlkfVxcYCAke3BsdWdpbkluZm8udmVyc2lvbiA/PyBVTktOT1dOfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEFwcEFuZE9wZXJhdGluZ1N5c3RlbSgpOiBQcm9taXNlPEFwcEFuZE9wZXJhdGluZ1N5c3RlbT4ge1xuICBpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHApIHtcbiAgICBjb25zdCBtb2JpbGVBcHBJbmZvID0gYXdhaXQgZ2V0TW9iaWxlQXBwSW5mbygpO1xuICAgIHJldHVybiB7XG4gICAgICBpbnN0YWxsZXJWZXJzaW9uOiBtb2JpbGVBcHBJbmZvPy5pbnN0YWxsZXJWZXJzaW9uID8/IFVOS05PV04sXG4gICAgICBvcGVyYXRpbmdTeXN0ZW06IG1vYmlsZUFwcEluZm8/Lm9wZXJhdGluZ1N5c3RlbSA/PyBVTktOT1dOXG4gICAgfTtcbiAgfVxuXG4gIGlmICghUGxhdGZvcm0uaXNEZXNrdG9wQXBwKSB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVyVmVyc2lvbjogVU5LTk9XTiwgb3BlcmF0aW5nU3lzdGVtOiBVTktOT1dOIH07XG4gIH1cblxuICAvLyBDb25kaXRpb25hbCBpbXBvcnQgb2YgdGhlIGRlc2t0b3Atb25seSBsb29rdXAsIHdoaWNoIHJlYWRzIGBub2RlOm9zYDsgdGhpcyBicmFuY2ggcnVucyBvbmx5IG9uIGRlc2t0b3AuXG4gIGNvbnN0IHsgZ2V0RGVza3RvcE9wZXJhdGluZ1N5c3RlbSB9ID0gYXdhaXQgaW1wb3J0KCcuL2Rlc2t0b3Atb3BlcmF0aW5nLXN5c3RlbS50cycpO1xuICBjb25zdCBidWlsZCA9IChQbGF0Zm9ybSBhcyBQbGF0Zm9ybVdpdGhCdWlsZCkuYnVpbGQ7XG4gIHJldHVybiB7XG4gICAgaW5zdGFsbGVyVmVyc2lvbjogdHlwZW9mIGJ1aWxkID09PSAnc3RyaW5nJyA/IGJ1aWxkIDogVU5LTk9XTixcbiAgICBvcGVyYXRpbmdTeXN0ZW06IGdldERlc2t0b3BPcGVyYXRpbmdTeXN0ZW0oKVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRQbGF0Zm9ybU5hbWUoKTogc3RyaW5nIHtcbiAgaWYgKFBsYXRmb3JtLmlzQW5kcm9pZEFwcCkge1xuICAgIHJldHVybiAnQW5kcm9pZCc7XG4gIH1cbiAgaWYgKFBsYXRmb3JtLmlzSW9zQXBwKSB7XG4gICAgcmV0dXJuICdpT1MnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc01hY09TKSB7XG4gICAgcmV0dXJuICdtYWNPUyc7XG4gIH1cbiAgaWYgKFBsYXRmb3JtLmlzV2luKSB7XG4gICAgcmV0dXJuICdXaW5kb3dzJztcbiAgfVxuICByZXR1cm4gUGxhdGZvcm0uaXNMaW51eCA/ICdMaW51eCcgOiBVTktOT1dOO1xufVxuXG5mdW5jdGlvbiBnZXRQbHVnaW5JbmZvKGFwcDogQXBwLCBwbHVnaW5JZDogc3RyaW5nKTogQnVnUmVwb3J0UGx1Z2luSW5mbyB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHBsdWdpbklkLFxuICAgIHZlcnNpb246IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF0/LnZlcnNpb24gPz8gbnVsbFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQkEsc0JBR087QUFFUCw2QkFBaUM7QUFPMUIsSUFBSyw0QkFBTCxrQkFBS0EsK0JBQUw7QUFJTCxFQUFBQSwyQkFBQSxpQkFBYztBQUtkLEVBQUFBLDJCQUFBLHFCQUFrQjtBQUtsQixFQUFBQSwyQkFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsMkJBQUEsbUJBQWdCO0FBbkJOLFNBQUFBO0FBQUEsR0FBQTtBQXlCTCxNQUFNLGlDQUFpQztBQW9IOUMsTUFBTSxVQUFVO0FBUVQsU0FBUywyQkFBMkIsYUFBMkM7QUFDcEYsUUFBTSxpQkFBaUIsWUFBWSxlQUFlLFdBQVcsSUFDekQsU0FDQSxZQUFZLGVBQWUsSUFBSSxDQUFDLGVBQWUsaUJBQWlCLFVBQVUsQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUUxRixTQUFPLGFBQWEsaUJBQWlCLFlBQVksTUFBTSxDQUFDO0FBQUEsY0FDckMsWUFBWSxlQUFlLGVBQWUsWUFBWSxnQkFBZ0I7QUFBQSxjQUN0RSxZQUFZLFFBQVE7QUFBQSxzQkFDWixZQUFZLGVBQWU7QUFBQSwyQkFDdEIsY0FBYztBQUNoRDtBQVNBLGVBQXNCLHdCQUF3QixRQUFzRTtBQUNsSCxRQUFNLEVBQUUsS0FBSyxTQUFTLElBQUk7QUFDMUIsUUFBTSxFQUFFLGtCQUFrQixnQkFBZ0IsSUFBSSxNQUFNLHlCQUF5QjtBQUU3RSxTQUFPO0FBQUEsSUFDTCxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksUUFBUSxjQUFjLEVBQzNDLE9BQU8sQ0FBQyxPQUFPLE9BQU8sUUFBUSxFQUM5QixLQUFLLEVBQ0wsSUFBSSxDQUFDLE9BQU8sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFBLElBQ3JDO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxJQUNqQjtBQUFBLElBQ0EsVUFBVSxnQkFBZ0I7QUFBQSxJQUMxQixRQUFRLGNBQWMsS0FBSyxRQUFRO0FBQUEsRUFDckM7QUFDRjtBQVNBLGVBQXNCLHlCQUF5QixRQUF5RDtBQUN0RyxRQUFNLGNBQWMsTUFBTSx3QkFBd0IsTUFBTTtBQUV4RCxTQUFPLHNCQUFzQjtBQUFBLElBQzNCLFFBQVE7QUFBQSxNQUNOLENBQUMsK0JBQXFDLEdBQUcsMkJBQTJCLFdBQVc7QUFBQSxNQUMvRSxDQUFDLHdDQUF5QyxHQUFHLFlBQVk7QUFBQSxNQUN6RCxDQUFDLHdDQUF5QyxHQUFHLFlBQVk7QUFBQSxNQUN6RCxDQUFDLG9DQUF1QyxHQUFHLFlBQVksT0FBTyxXQUFXO0FBQUEsSUFDM0U7QUFBQSxJQUNBLFlBQVksT0FBTztBQUFBLElBQ25CLFVBQVU7QUFBQSxJQUNWLEdBQUcsT0FBTyxVQUFVLFVBQWEsRUFBRSxPQUFPLE9BQU8sTUFBTTtBQUFBLEVBQ3pELENBQUM7QUFDSDtBQVFPLFNBQVMsc0JBQXNCLFFBQTZDO0FBQ2pGLFFBQU0sZUFBZSxJQUFJLGdCQUFnQixFQUFFLFVBQVUsT0FBTyxTQUFTLENBQUM7QUFDdEUsTUFBSSxPQUFPLFVBQVUsUUFBVztBQUM5QixpQkFBYSxJQUFJLFNBQVMsT0FBTyxLQUFLO0FBQUEsRUFDeEM7QUFFQSxhQUFXLENBQUMsU0FBUyxLQUFLLEtBQUssT0FBTyxRQUFRLE9BQU8sVUFBVSxDQUFDLENBQUMsR0FBRztBQUNsRSxpQkFBYSxJQUFJLFNBQVMsS0FBSztBQUFBLEVBQ2pDO0FBRUEsU0FBTyxzQkFBc0IsT0FBTyxVQUFVLGVBQWUsYUFBYSxTQUFTLENBQUM7QUFDdEY7QUFFQSxTQUFTLGlCQUFpQixZQUF5QztBQUNqRSxTQUFPLEtBQUssV0FBVyxFQUFFLE1BQU0sV0FBVyxXQUFXLE9BQU87QUFDOUQ7QUFFQSxlQUFlLDJCQUEyRDtBQUN4RSxNQUFJLHlCQUFTLGFBQWE7QUFDeEIsVUFBTSxnQkFBZ0IsVUFBTSx5Q0FBaUI7QUFDN0MsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLGVBQWUsb0JBQW9CO0FBQUEsTUFDckQsaUJBQWlCLGVBQWUsbUJBQW1CO0FBQUEsSUFDckQ7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLHlCQUFTLGNBQWM7QUFDMUIsV0FBTyxFQUFFLGtCQUFrQixTQUFTLGlCQUFpQixRQUFRO0FBQUEsRUFDL0Q7QUFHQSxRQUFNLEVBQUUsMEJBQTBCLElBQUksTUFBTSxPQUFPLCtCQUErQjtBQUNsRixRQUFNLFFBQVMseUJBQStCO0FBQzlDLFNBQU87QUFBQSxJQUNMLGtCQUFrQixPQUFPLFVBQVUsV0FBVyxRQUFRO0FBQUEsSUFDdEQsaUJBQWlCLDBCQUEwQjtBQUFBLEVBQzdDO0FBQ0Y7QUFFQSxTQUFTLGtCQUEwQjtBQUNqQyxNQUFJLHlCQUFTLGNBQWM7QUFDekIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLHlCQUFTLFVBQVU7QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLHlCQUFTLFNBQVM7QUFDcEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLHlCQUFTLE9BQU87QUFDbEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLHlCQUFTLFVBQVUsVUFBVTtBQUN0QztBQUVBLFNBQVMsY0FBYyxLQUFVLFVBQXVDO0FBQ3RFLFNBQU87QUFBQSxJQUNMLElBQUk7QUFBQSxJQUNKLFNBQVMsSUFBSSxRQUFRLFVBQVUsUUFBUSxHQUFHLFdBQVc7QUFBQSxFQUN2RDtBQUNGOyIsIm5hbWVzIjpbIkJ1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQiXX0=
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWctcmVwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIZWxwZXJzIGZvciBhIHBsdWdpbidzIGJ1ZyByZXBvcnRzOiB0aGUgZW52aXJvbm1lbnQgYSByZXBvcnQgbmVlZHMsIGFuZCBhIGxpbmsgdG8gYSBHaXRIdWIgaXNzdWUgZm9ybVxuICogcHJlZmlsbGVkIHdpdGggaXQuXG4gKlxuICogQ3Jvc3MtcGxhdGZvcm0tbG9hZGFibGU6IHRoZSBkZXNrdG9wIG9wZXJhdGluZy1zeXN0ZW0gbG9va3VwIHJlYWRzIGBub2RlOm9zYCwgc28gaXQgaXMgaW1wb3J0ZWRcbiAqIGR5bmFtaWNhbGx5LCBvbiBkZXNrdG9wIG9ubHkuXG4gKlxuICogVGhlIGRlc2t0b3AgaW5zdGFsbGVyIHZlcnNpb24gaXMgYFBsYXRmb3JtLmJ1aWxkYCwgd2hpY2ggbm8gcHVibGljIHR5cGluZyBkZWNsYXJlczogT2JzaWRpYW4ncyBkZXNrdG9wXG4gKiBzdGFydHVwIHNldHMgaXQgZnJvbSBFbGVjdHJvbidzIGBhcHAuZ2V0VmVyc2lvbigpYCAocmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgKSwgc28gaXQgaXMgcmVhZFxuICogc3RydWN0dXJhbGx5IGhlcmUsIGFuZCByZWFkcyBhcyBgdW5rbm93bmAgaWYgYSBsYXRlciB2ZXJzaW9uIGRyb3BzIGl0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBhcGlWZXJzaW9uLFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE1vYmlsZUFwcEluZm8gfSBmcm9tICcuL21vYmlsZS1hcHAtaW5mby50cyc7XG5cbi8qKlxuICogVGhlIGlkcyBvZiB0aGUgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtJ3MgZmllbGRzIHRoYXQge0BsaW5rIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybH0gcHJlZmlsbHMuIEdpdEh1YlxuICogcHJlZmlsbHMgYSBmaWVsZCBmcm9tIGEgcXVlcnkgcGFyYW1ldGVyIG5hbWVkIGFmdGVyIHRoZSBmaWVsZCdzIGBpZGAsIHNvIGEgZm9ybSBtdXN0IGdpdmUgaXRzIGZpZWxkc1xuICogdGhlc2UgaWRzIGZvciB0aGVtIHRvIGJlIGZpbGxlZC5cbiAqL1xuZXhwb3J0IGVudW0gQnVnUmVwb3J0SXNzdWVGb3JtRmllbGRJZCB7XG4gIC8qKlxuICAgKiBUaGUgd2hvbGUgZW52aXJvbm1lbnQsIGFzIHtAbGluayBmb3JtYXRCdWdSZXBvcnRFbnZpcm9ubWVudH0gcmVuZGVycyBpdC5cbiAgICovXG4gIEVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyxcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICBPYnNpZGlhblZlcnNpb24gPSAnb2JzaWRpYW4tdmVyc2lvbicsXG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICAgKi9cbiAgT3BlcmF0aW5nU3lzdGVtID0gJ29wZXJhdGluZy1zeXN0ZW0nLFxuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3J0aW5nIHBsdWdpbidzIHZlcnNpb24uXG4gICAqL1xuICBQbHVnaW5WZXJzaW9uID0gJ3BsdWdpbi12ZXJzaW9uJ1xufVxuXG4vKipcbiAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSwgdW5kZXIgYC5naXRodWIvSVNTVUVfVEVNUExBVEVgLlxuICovXG5leHBvcnQgY29uc3QgQlVHX1JFUE9SVF9JU1NVRV9GT1JNX1RFTVBMQVRFID0gJ2J1Z19yZXBvcnQueW1sJztcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgYSBidWcgcmVwb3J0IG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Z1JlcG9ydEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBvdGhlciBsb2FkZWQgcGx1Z2lucywgc29ydGVkIGJ5IGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZFBsdWdpbnM6IHJlYWRvbmx5IEJ1Z1JlcG9ydFBsdWdpbkluZm9bXTtcblxuICAvKipcbiAgICogVGhlIGluc3RhbGxlZCBhcHAncyB2ZXJzaW9uLCB3aGljaCBjYW4gbGFnIGJlaGluZCB7QGxpbmsgb2JzaWRpYW5WZXJzaW9ufS5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlclZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhblZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYW1lIGFuZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW5nU3lzdGVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybTogYEFuZHJvaWRgLCBgaU9TYCwgYG1hY09TYCwgYFdpbmRvd3NgLCBgTGludXhgIG9yIGB1bmtub3duYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBCdWdSZXBvcnRQbHVnaW5JbmZvO1xufVxuXG4vKipcbiAqIEEgcGx1Z2luLCBhcyBhIGJ1ZyByZXBvcnQgbmFtZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVnUmVwb3J0UGx1Z2luSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgaW5zdGFsbGVkIHZlcnNpb24sIG9yIGBudWxsYCB3aGVuIGl0cyBtYW5pZmVzdCBpcyBub3Qga25vd24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QnVnUmVwb3J0RW52aXJvbm1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHJlcG9ydGluZyBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybFBhcmFtcyBleHRlbmRzIEdldEJ1Z1JlcG9ydEVudmlyb25tZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRHaXRIdWJJc3N1ZUZvcm1Vcmx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWVzIHRvIHByZWZpbGwsIGtleWVkIGJ5IGZpZWxkIGBpZGAuXG4gICAqL1xuICByZWFkb25seSBmaWVsZHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtJ3MgZmlsZSBuYW1lLCB1bmRlciBgLmdpdGh1Yi9JU1NVRV9URU1QTEFURWAuXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWUncyB0aXRsZS4gTGVhdmUgaXQgb3V0IHRvIGtlZXAgdGhlIGZvcm0ncyBvd24gZGVmYXVsdCB0aXRsZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBwQW5kT3BlcmF0aW5nU3lzdGVtIHtcbiAgcmVhZG9ubHkgaW5zdGFsbGVyVmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBvcGVyYXRpbmdTeXN0ZW06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBsYXRmb3JtV2l0aEJ1aWxkIHtcbiAgcmVhZG9ubHkgYnVpbGQ/OiB1bmtub3duO1xufVxuXG5jb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG4vKipcbiAqIFJlbmRlcnMgYSBidWcgcmVwb3J0J3MgZW52aXJvbm1lbnQgYXMgYSBNYXJrZG93biBsaXN0LlxuICpcbiAqIEBwYXJhbSBlbnZpcm9ubWVudCAtIFRoZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIFRoZSBNYXJrZG93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJ1Z1JlcG9ydEVudmlyb25tZW50KGVudmlyb25tZW50OiBCdWdSZXBvcnRFbnZpcm9ubWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IGVuYWJsZWRQbHVnaW5zID0gZW52aXJvbm1lbnQuZW5hYmxlZFBsdWdpbnMubGVuZ3RoID09PSAwXG4gICAgPyAnbm9uZSdcbiAgICA6IGVudmlyb25tZW50LmVuYWJsZWRQbHVnaW5zLm1hcCgocGx1Z2luSW5mbykgPT4gZm9ybWF0UGx1Z2luSW5mbyhwbHVnaW5JbmZvKSkuam9pbignLCAnKTtcblxuICByZXR1cm4gYC0gUGx1Z2luOiAke2Zvcm1hdFBsdWdpbkluZm8oZW52aXJvbm1lbnQucGx1Z2luKX1cXG5gXG4gICAgKyBgLSBPYnNpZGlhbjogJHtlbnZpcm9ubWVudC5vYnNpZGlhblZlcnNpb259IChpbnN0YWxsZXIgJHtlbnZpcm9ubWVudC5pbnN0YWxsZXJWZXJzaW9ufSlcXG5gXG4gICAgKyBgLSBQbGF0Zm9ybTogJHtlbnZpcm9ubWVudC5wbGF0Zm9ybX1cXG5gXG4gICAgKyBgLSBPcGVyYXRpbmcgc3lzdGVtOiAke2Vudmlyb25tZW50Lm9wZXJhdGluZ1N5c3RlbX1cXG5gXG4gICAgKyBgLSBPdGhlciBlbmFibGVkIHBsdWdpbnM6ICR7ZW5hYmxlZFBsdWdpbnN9YDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBlbnZpcm9ubWVudCBhIGJ1ZyByZXBvcnQgbmVlZHM6IHRoZSBwbHVnaW4ncyB2ZXJzaW9uLCB0aGUgb3RoZXIgZW5hYmxlZCBwbHVnaW5zLCB0aGVcbiAqIE9ic2lkaWFuIGFuZCBpbnN0YWxsZXIgdmVyc2lvbnMsIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnQocGFyYW1zOiBHZXRCdWdSZXBvcnRFbnZpcm9ubWVudFBhcmFtcyk6IFByb21pc2U8QnVnUmVwb3J0RW52aXJvbm1lbnQ+IHtcbiAgY29uc3QgeyBhcHAsIHBsdWdpbklkIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHsgaW5zdGFsbGVyVmVyc2lvbiwgb3BlcmF0aW5nU3lzdGVtIH0gPSBhd2FpdCBnZXRBcHBBbmRPcGVyYXRpbmdTeXN0ZW0oKTtcblxuICByZXR1cm4ge1xuICAgIC8vIFRoZSBsb2FkZWQgcGx1Z2lucywgYXMgT2JzaWRpYW4ncyBTaG93IGRlYnVnIGluZm8gbGlzdHMgdGhlbTogYGVuYWJsZWRQbHVnaW5zYCBhbHNvIGhvbGRzIGFuIGlkXG4gICAgLy8gd2hvc2UgZm9sZGVyIHdhcyBkZWxldGVkLCBvciB3aG9zZSBsb2FkIGZhaWxlZC5cbiAgICBlbmFibGVkUGx1Z2luczogT2JqZWN0LmtleXMoYXBwLnBsdWdpbnMucGx1Z2lucylcbiAgICAgIC5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gcGx1Z2luSWQpXG4gICAgICAuc29ydCgpXG4gICAgICAubWFwKChpZCkgPT4gZ2V0UGx1Z2luSW5mbyhhcHAsIGlkKSksXG4gICAgaW5zdGFsbGVyVmVyc2lvbixcbiAgICBvYnNpZGlhblZlcnNpb246IGFwaVZlcnNpb24sXG4gICAgb3BlcmF0aW5nU3lzdGVtLFxuICAgIHBsYXRmb3JtOiBnZXRQbGF0Zm9ybU5hbWUoKSxcbiAgICBwbHVnaW46IGdldFBsdWdpbkluZm8oYXBwLCBwbHVnaW5JZClcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGluayB0byBhIHBsdWdpbidzIGJ1Zy1yZXBvcnQgaXNzdWUgZm9ybSAoe0BsaW5rIEJVR19SRVBPUlRfSVNTVUVfRk9STV9URU1QTEFURX0pLCBwcmVmaWxsZWQgd2l0aFxuICogdGhlIGVudmlyb25tZW50LCBpbiB0aGUgZmllbGRzIHtAbGluayBCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkfSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybChwYXJhbXM6IEdldEJ1Z1JlcG9ydElzc3VlRm9ybVVybFBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgZ2V0QnVnUmVwb3J0RW52aXJvbm1lbnQocGFyYW1zKTtcblxuICByZXR1cm4gZ2V0R2l0SHViSXNzdWVGb3JtVXJsKHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIFtCdWdSZXBvcnRJc3N1ZUZvcm1GaWVsZElkLkVudmlyb25tZW50XTogZm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuT2JzaWRpYW5WZXJzaW9uXTogZW52aXJvbm1lbnQub2JzaWRpYW5WZXJzaW9uLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuT3BlcmF0aW5nU3lzdGVtXTogZW52aXJvbm1lbnQub3BlcmF0aW5nU3lzdGVtLFxuICAgICAgW0J1Z1JlcG9ydElzc3VlRm9ybUZpZWxkSWQuUGx1Z2luVmVyc2lvbl06IGVudmlyb25tZW50LnBsdWdpbi52ZXJzaW9uID8/IFVOS05PV05cbiAgICB9LFxuICAgIGdpdEh1YlJlcG86IHBhcmFtcy5naXRIdWJSZXBvLFxuICAgIHRlbXBsYXRlOiBCVUdfUkVQT1JUX0lTU1VFX0ZPUk1fVEVNUExBVEUsXG4gICAgLi4ucGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgeyB0aXRsZTogcGFyYW1zLnRpdGxlIH1cbiAgfSk7XG59XG5cbi8qKlxuICogR2V0cyBhIGxpbmsgdGhhdCBvcGVucyBhIEdpdEh1YiBpc3N1ZSBmb3JtIHdpdGggZmllbGRzIHByZWZpbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdpdEh1Yklzc3VlRm9ybVVybChwYXJhbXM6IEdldEdpdEh1Yklzc3VlRm9ybVVybFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyB0ZW1wbGF0ZTogcGFyYW1zLnRlbXBsYXRlIH0pO1xuICBpZiAocGFyYW1zLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KCd0aXRsZScsIHBhcmFtcy50aXRsZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtmaWVsZElkLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zLmZpZWxkcyA/PyB7fSkpIHtcbiAgICBzZWFyY2hQYXJhbXMuc2V0KGZpZWxkSWQsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7cGFyYW1zLmdpdEh1YlJlcG99L2lzc3Vlcy9uZXc/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQbHVnaW5JbmZvKHBsdWdpbkluZm86IEJ1Z1JlcG9ydFBsdWdpbkluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYFxcYCR7cGx1Z2luSW5mby5pZH1cXGAgJHtwbHVnaW5JbmZvLnZlcnNpb24gPz8gVU5LTk9XTn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBcHBBbmRPcGVyYXRpbmdTeXN0ZW0oKTogUHJvbWlzZTxBcHBBbmRPcGVyYXRpbmdTeXN0ZW0+IHtcbiAgaWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwKSB7XG4gICAgY29uc3QgbW9iaWxlQXBwSW5mbyA9IGF3YWl0IGdldE1vYmlsZUFwcEluZm8oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFsbGVyVmVyc2lvbjogbW9iaWxlQXBwSW5mbz8uaW5zdGFsbGVyVmVyc2lvbiA/PyBVTktOT1dOLFxuICAgICAgb3BlcmF0aW5nU3lzdGVtOiBtb2JpbGVBcHBJbmZvPy5vcGVyYXRpbmdTeXN0ZW0gPz8gVU5LTk9XTlxuICAgIH07XG4gIH1cblxuICBpZiAoIVBsYXRmb3JtLmlzRGVza3RvcEFwcCkge1xuICAgIHJldHVybiB7IGluc3RhbGxlclZlcnNpb246IFVOS05PV04sIG9wZXJhdGluZ1N5c3RlbTogVU5LTk9XTiB9O1xuICB9XG5cbiAgLy8gQ29uZGl0aW9uYWwgaW1wb3J0IG9mIHRoZSBkZXNrdG9wLW9ubHkgbG9va3VwLCB3aGljaCByZWFkcyBgbm9kZTpvc2A7IHRoaXMgYnJhbmNoIHJ1bnMgb25seSBvbiBkZXNrdG9wLlxuICBjb25zdCB7IGdldERlc2t0b3BPcGVyYXRpbmdTeXN0ZW0gfSA9IGF3YWl0IGltcG9ydCgnLi9kZXNrdG9wLW9wZXJhdGluZy1zeXN0ZW0udHMnKTtcbiAgY29uc3QgYnVpbGQgPSAoUGxhdGZvcm0gYXMgUGxhdGZvcm1XaXRoQnVpbGQpLmJ1aWxkO1xuICByZXR1cm4ge1xuICAgIGluc3RhbGxlclZlcnNpb246IHR5cGVvZiBidWlsZCA9PT0gJ3N0cmluZycgPyBidWlsZCA6IFVOS05PV04sXG4gICAgb3BlcmF0aW5nU3lzdGVtOiBnZXREZXNrdG9wT3BlcmF0aW5nU3lzdGVtKClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGxhdGZvcm1OYW1lKCk6IHN0cmluZyB7XG4gIGlmIChQbGF0Zm9ybS5pc0FuZHJvaWRBcHApIHtcbiAgICByZXR1cm4gJ0FuZHJvaWQnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc0lvc0FwcCkge1xuICAgIHJldHVybiAnaU9TJztcbiAgfVxuICBpZiAoUGxhdGZvcm0uaXNNYWNPUykge1xuICAgIHJldHVybiAnbWFjT1MnO1xuICB9XG4gIGlmIChQbGF0Zm9ybS5pc1dpbikge1xuICAgIHJldHVybiAnV2luZG93cyc7XG4gIH1cbiAgcmV0dXJuIFBsYXRmb3JtLmlzTGludXggPyAnTGludXgnIDogVU5LTk9XTjtcbn1cblxuZnVuY3Rpb24gZ2V0UGx1Z2luSW5mbyhhcHA6IEFwcCwgcGx1Z2luSWQ6IHN0cmluZyk6IEJ1Z1JlcG9ydFBsdWdpbkluZm8ge1xuICByZXR1cm4ge1xuICAgIGlkOiBwbHVnaW5JZCxcbiAgICB2ZXJzaW9uOiBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uID8/IG51bGxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -45,7 +45,7 @@ export declare const BUG_REPORT_ISSUE_FORM_TEMPLATE = "bug_report.yml";
45
45
  */
46
46
  export interface BugReportEnvironment {
47
47
  /**
48
- * The other enabled plugins, sorted by id.
48
+ * The other loaded plugins, sorted by id.
49
49
  */
50
50
  readonly enabledPlugins: readonly BugReportPluginInfo[];
51
51
  /**