@mnaoumov/obsidian-lib 10.5.1 → 10.7.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 (189) hide show
  1. package/codemirror/inline-token-widgets/package.json +6 -0
  2. package/codemirror/settings-facet/package.json +6 -0
  3. package/command-handlers/open-discussion-command-handler/package.json +6 -0
  4. package/command-handlers/open-feature-request-command-handler/package.json +6 -0
  5. package/command-handlers/open-git-hub-command-handler/package.json +6 -0
  6. package/components/settings-facet-component/package.json +6 -0
  7. package/components/style-sheet-component/package.json +6 -0
  8. package/dist/lib/cjs/__merged.cjs +137 -1
  9. package/dist/lib/cjs/__merged.d.cts +26 -0
  10. package/dist/lib/cjs/anchored-suggest.cjs +232 -0
  11. package/dist/lib/cjs/anchored-suggest.d.cts +116 -0
  12. package/dist/lib/cjs/broken-link-candidates.cjs +366 -0
  13. package/dist/lib/cjs/broken-link-candidates.d.cts +181 -0
  14. package/dist/lib/cjs/bug-report.cjs +4 -2
  15. package/dist/lib/cjs/bug-report.d.cts +1 -1
  16. package/dist/lib/cjs/code-block-render-handoff.cjs +272 -0
  17. package/dist/lib/cjs/code-block-render-handoff.d.cts +131 -0
  18. package/dist/lib/cjs/codemirror/index.cjs +7 -1
  19. package/dist/lib/cjs/codemirror/index.d.cts +2 -0
  20. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +250 -0
  21. package/dist/lib/cjs/codemirror/inline-token-widgets.d.cts +109 -0
  22. package/dist/lib/cjs/codemirror/settings-facet.cjs +132 -0
  23. package/dist/lib/cjs/codemirror/settings-facet.d.cts +19 -0
  24. package/dist/lib/cjs/command-handlers/index.cjs +10 -1
  25. package/dist/lib/cjs/command-handlers/index.d.cts +3 -0
  26. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +9 -12
  27. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +6 -8
  28. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +127 -0
  29. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.d.cts +45 -0
  30. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +119 -0
  31. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.d.cts +33 -0
  32. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +121 -0
  33. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.d.cts +43 -0
  34. package/dist/lib/cjs/components/index.cjs +7 -1
  35. package/dist/lib/cjs/components/index.d.cts +2 -0
  36. package/dist/lib/cjs/components/settings-facet-component.cjs +136 -0
  37. package/dist/lib/cjs/components/settings-facet-component.d.cts +68 -0
  38. package/dist/lib/cjs/components/style-sheet-component.cjs +198 -0
  39. package/dist/lib/cjs/components/style-sheet-component.d.cts +79 -0
  40. package/dist/lib/cjs/css-class.cjs +8 -1
  41. package/dist/lib/cjs/css-class.d.cts +28 -0
  42. package/dist/lib/cjs/data-stores/data-store-transport.cjs +7 -4
  43. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +1 -1
  44. package/dist/lib/cjs/data-stores/shared-data-store.cjs +1 -1
  45. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +1 -1
  46. package/dist/lib/cjs/desktop-git-runner.cjs +117 -0
  47. package/dist/lib/cjs/desktop-git-runner.d.cts +17 -0
  48. package/dist/lib/cjs/desktop-request-url-stream.cjs +258 -0
  49. package/dist/lib/cjs/desktop-request-url-stream.d.cts +22 -0
  50. package/dist/lib/cjs/editor-suggest-registrar.cjs +8 -2
  51. package/dist/lib/cjs/editor-suggest-registrar.d.cts +14 -2
  52. package/dist/lib/cjs/editor-suggest.cjs +197 -0
  53. package/dist/lib/cjs/editor-suggest.d.cts +103 -0
  54. package/dist/lib/cjs/feature-request.cjs +115 -0
  55. package/dist/lib/cjs/feature-request.d.cts +54 -0
  56. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  57. package/dist/lib/cjs/git-hub-discussion.cjs +101 -0
  58. package/dist/lib/cjs/git-hub-discussion.d.cts +28 -0
  59. package/dist/lib/cjs/git-rename-history.cjs +148 -0
  60. package/dist/lib/cjs/git-rename-history.d.cts +43 -0
  61. package/dist/lib/cjs/hotkey.cjs +185 -0
  62. package/dist/lib/cjs/hotkey.d.cts +59 -0
  63. package/dist/lib/cjs/i18n/locales/en.cjs +13 -1
  64. package/dist/lib/cjs/i18n/locales/en.d.cts +12 -0
  65. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +12 -0
  66. package/dist/lib/cjs/index.cjs +46 -1
  67. package/dist/lib/cjs/index.d.cts +15 -0
  68. package/dist/lib/cjs/inline-token-renderer.cjs +145 -0
  69. package/dist/lib/cjs/inline-token-renderer.d.cts +88 -0
  70. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +325 -0
  71. package/dist/lib/cjs/link-and-tag-input-suggest.d.cts +229 -0
  72. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -1
  73. package/dist/lib/cjs/markdown-code-block-processor.d.cts +18 -0
  74. package/dist/lib/cjs/markdown.cjs +6 -1
  75. package/dist/lib/cjs/markdown.d.cts +10 -1
  76. package/dist/lib/cjs/rendered-markdown.cjs +306 -0
  77. package/dist/lib/cjs/rendered-markdown.d.cts +77 -0
  78. package/dist/lib/cjs/request-url.cjs +523 -0
  79. package/dist/lib/cjs/request-url.d.cts +233 -0
  80. package/dist/lib/cjs/setting-components/folder-list-component.cjs +216 -0
  81. package/dist/lib/cjs/setting-components/folder-list-component.d.cts +73 -0
  82. package/dist/lib/cjs/setting-components/hotkey-component.cjs +260 -0
  83. package/dist/lib/cjs/setting-components/hotkey-component.d.cts +85 -0
  84. package/dist/lib/cjs/setting-components/index.cjs +13 -1
  85. package/dist/lib/cjs/setting-components/index.d.cts +4 -0
  86. package/dist/lib/cjs/setting-components/list-component.cjs +291 -0
  87. package/dist/lib/cjs/setting-components/list-component.d.cts +106 -0
  88. package/dist/lib/cjs/setting-components/tag-list-component.cjs +220 -0
  89. package/dist/lib/cjs/setting-components/tag-list-component.d.cts +82 -0
  90. package/dist/lib/cjs/setting-ex.cjs +51 -1
  91. package/dist/lib/cjs/setting-ex.d.cts +35 -1
  92. package/dist/lib/cjs/settings-tabs.cjs +258 -0
  93. package/dist/lib/cjs/settings-tabs.d.cts +101 -0
  94. package/dist/lib/cjs/vault.cjs +2 -2
  95. package/dist/lib/cjs/vault.d.cts +3 -1
  96. package/dist/lib/esm/__merged.d.mts +26 -0
  97. package/dist/lib/esm/__merged.mjs +139 -1
  98. package/dist/lib/esm/anchored-suggest.d.mts +116 -0
  99. package/dist/lib/esm/anchored-suggest.mjs +144 -0
  100. package/dist/lib/esm/broken-link-candidates.d.mts +181 -0
  101. package/dist/lib/esm/broken-link-candidates.mjs +275 -0
  102. package/dist/lib/esm/bug-report.d.mts +1 -1
  103. package/dist/lib/esm/bug-report.mjs +4 -2
  104. package/dist/lib/esm/code-block-render-handoff.d.mts +131 -0
  105. package/dist/lib/esm/code-block-render-handoff.mjs +183 -0
  106. package/dist/lib/esm/codemirror/index.d.mts +2 -0
  107. package/dist/lib/esm/codemirror/index.mjs +5 -1
  108. package/dist/lib/esm/codemirror/inline-token-widgets.d.mts +109 -0
  109. package/dist/lib/esm/codemirror/inline-token-widgets.mjs +167 -0
  110. package/dist/lib/esm/codemirror/settings-facet.d.mts +19 -0
  111. package/dist/lib/esm/codemirror/settings-facet.mjs +44 -0
  112. package/dist/lib/esm/command-handlers/index.d.mts +3 -0
  113. package/dist/lib/esm/command-handlers/index.mjs +7 -1
  114. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +6 -8
  115. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +9 -12
  116. package/dist/lib/esm/command-handlers/open-discussion-command-handler.d.mts +45 -0
  117. package/dist/lib/esm/command-handlers/open-discussion-command-handler.mjs +39 -0
  118. package/dist/lib/esm/command-handlers/open-feature-request-command-handler.d.mts +33 -0
  119. package/dist/lib/esm/command-handlers/open-feature-request-command-handler.mjs +31 -0
  120. package/dist/lib/esm/command-handlers/open-git-hub-command-handler.d.mts +43 -0
  121. package/dist/lib/esm/command-handlers/open-git-hub-command-handler.mjs +33 -0
  122. package/dist/lib/esm/components/index.d.mts +2 -0
  123. package/dist/lib/esm/components/index.mjs +5 -1
  124. package/dist/lib/esm/components/settings-facet-component.d.mts +68 -0
  125. package/dist/lib/esm/components/settings-facet-component.mjs +48 -0
  126. package/dist/lib/esm/components/style-sheet-component.d.mts +79 -0
  127. package/dist/lib/esm/components/style-sheet-component.mjs +109 -0
  128. package/dist/lib/esm/css-class.d.mts +28 -0
  129. package/dist/lib/esm/css-class.mjs +8 -1
  130. package/dist/lib/esm/data-stores/data-store-transport.d.mts +1 -1
  131. package/dist/lib/esm/data-stores/data-store-transport.mjs +7 -4
  132. package/dist/lib/esm/data-stores/shared-data-store.d.mts +1 -1
  133. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  134. package/dist/lib/esm/desktop-git-runner.d.mts +17 -0
  135. package/dist/lib/esm/desktop-git-runner.mjs +19 -0
  136. package/dist/lib/esm/desktop-request-url-stream.d.mts +22 -0
  137. package/dist/lib/esm/desktop-request-url-stream.mjs +170 -0
  138. package/dist/lib/esm/editor-suggest-registrar.d.mts +14 -2
  139. package/dist/lib/esm/editor-suggest-registrar.mjs +8 -2
  140. package/dist/lib/esm/editor-suggest.d.mts +103 -0
  141. package/dist/lib/esm/editor-suggest.mjs +108 -0
  142. package/dist/lib/esm/feature-request.d.mts +54 -0
  143. package/dist/lib/esm/feature-request.mjs +25 -0
  144. package/dist/lib/esm/generated-during-build.mjs +2 -2
  145. package/dist/lib/esm/git-hub-discussion.d.mts +28 -0
  146. package/dist/lib/esm/git-hub-discussion.mjs +13 -0
  147. package/dist/lib/esm/git-rename-history.d.mts +43 -0
  148. package/dist/lib/esm/git-rename-history.mjs +59 -0
  149. package/dist/lib/esm/hotkey.d.mts +59 -0
  150. package/dist/lib/esm/hotkey.mjs +95 -0
  151. package/dist/lib/esm/i18n/locales/en.d.mts +12 -0
  152. package/dist/lib/esm/i18n/locales/en.mjs +13 -1
  153. package/dist/lib/esm/i18n/locales/translations-map.d.mts +12 -0
  154. package/dist/lib/esm/index.d.mts +15 -0
  155. package/dist/lib/esm/index.mjs +31 -1
  156. package/dist/lib/esm/inline-token-renderer.d.mts +88 -0
  157. package/dist/lib/esm/inline-token-renderer.mjs +59 -0
  158. package/dist/lib/esm/link-and-tag-input-suggest.d.mts +229 -0
  159. package/dist/lib/esm/link-and-tag-input-suggest.mjs +239 -0
  160. package/dist/lib/esm/markdown-code-block-processor.d.mts +18 -0
  161. package/dist/lib/esm/markdown-code-block-processor.mjs +16 -1
  162. package/dist/lib/esm/markdown.d.mts +10 -1
  163. package/dist/lib/esm/markdown.mjs +9 -1
  164. package/dist/lib/esm/rendered-markdown.d.mts +77 -0
  165. package/dist/lib/esm/rendered-markdown.mjs +219 -0
  166. package/dist/lib/esm/request-url.d.mts +233 -0
  167. package/dist/lib/esm/request-url.mjs +428 -0
  168. package/dist/lib/esm/setting-components/folder-list-component.d.mts +73 -0
  169. package/dist/lib/esm/setting-components/folder-list-component.mjs +131 -0
  170. package/dist/lib/esm/setting-components/hotkey-component.d.mts +85 -0
  171. package/dist/lib/esm/setting-components/hotkey-component.mjs +178 -0
  172. package/dist/lib/esm/setting-components/index.d.mts +4 -0
  173. package/dist/lib/esm/setting-components/index.mjs +9 -1
  174. package/dist/lib/esm/setting-components/list-component.d.mts +106 -0
  175. package/dist/lib/esm/setting-components/list-component.mjs +206 -0
  176. package/dist/lib/esm/setting-components/tag-list-component.d.mts +82 -0
  177. package/dist/lib/esm/setting-components/tag-list-component.mjs +131 -0
  178. package/dist/lib/esm/setting-ex.d.mts +35 -1
  179. package/dist/lib/esm/setting-ex.mjs +51 -1
  180. package/dist/lib/esm/settings-tabs.d.mts +101 -0
  181. package/dist/lib/esm/settings-tabs.mjs +170 -0
  182. package/dist/lib/esm/vault.d.mts +3 -1
  183. package/dist/lib/esm/vault.mjs +2 -2
  184. package/dist/styles.css +83 -1
  185. package/package.json +2 -2
  186. package/setting-components/folder-list-component/package.json +6 -0
  187. package/setting-components/hotkey-component/package.json +6 -0
  188. package/setting-components/list-component/package.json +6 -0
  189. package/setting-components/tag-list-component/package.json +6 -0
@@ -0,0 +1,183 @@
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
+
33
+ import { requestAnimationFrameAsync } from "@mnaoumov/typescript-lib/async";
34
+ import {
35
+ getMandatoryNamedGroup,
36
+ getOptionalNamedGroup
37
+ } from "@mnaoumov/typescript-lib/reg-exp";
38
+ import { ensureLfEndings } from "@mnaoumov/typescript-lib/string";
39
+ import { createCodeBlockRegExp } from "./code-block-reg-exp.mjs";
40
+ import { getObsidianLibState } from "./obsidian-lib-state.mjs";
41
+ const CODE_BLOCK_RENDER_HANDOFF_LIFETIME_IN_MILLISECONDS = 1e4;
42
+ const HANDOFF_STATE_KEY = "codeBlockRenderHandoffV1";
43
+ const MAX_FRAMES_TO_WAIT_FOR_CONNECTION = 60;
44
+ function captureCodeBlockFocus(el) {
45
+ const activeElement = el.ownerDocument.activeElement;
46
+ if (!activeElement || activeElement === el || !el.contains(activeElement)) {
47
+ return null;
48
+ }
49
+ const childIndexPath = [];
50
+ let current = activeElement;
51
+ while (current && current !== el) {
52
+ let index = 0;
53
+ for (let sibling = current.previousElementSibling; sibling; sibling = sibling.previousElementSibling) {
54
+ index++;
55
+ }
56
+ childIndexPath.unshift(index);
57
+ current = current.parentElement;
58
+ }
59
+ return {
60
+ childIndexPath,
61
+ selection: getTextSelection(activeElement)
62
+ };
63
+ }
64
+ function claimCodeBlockRenderHandoff(params) {
65
+ const { context, el, source } = params;
66
+ const entries = getHandoffEntries();
67
+ pruneExpiredEntries(entries);
68
+ const key = getHandoffKey(context.sourcePath, getLanguageFromElement(el), ensureLfEndings(source));
69
+ const queue = entries.get(key);
70
+ const entry = queue?.shift();
71
+ if (!queue || !entry) {
72
+ return null;
73
+ }
74
+ if (queue.length === 0) {
75
+ entries.delete(key);
76
+ }
77
+ return {
78
+ hasFocus: entry.focus !== null,
79
+ async restoreFocus() {
80
+ return entry.focus ? await restoreCodeBlockFocus(el, entry.focus) : false;
81
+ },
82
+ state: entry.state
83
+ };
84
+ }
85
+ function recordCodeBlockRenderHandoff(params) {
86
+ const { focus, newCodeBlock, sourcePath, state } = params;
87
+ const matches = [...ensureLfEndings(newCodeBlock).matchAll(createCodeBlockRegExp())];
88
+ const match = matches[0];
89
+ if (matches.length !== 1 || !match) {
90
+ return false;
91
+ }
92
+ const linePrefix = getMandatoryNamedGroup(match, "LinePrefix");
93
+ const language = getMandatoryNamedGroup(match, "CodeBlockLanguage");
94
+ const content = (getOptionalNamedGroup(match, "CodeBlockContent") ?? "").split("\n").map((line) => line.slice(linePrefix.length)).join("\n");
95
+ const entries = getHandoffEntries();
96
+ pruneExpiredEntries(entries);
97
+ const key = getHandoffKey(sourcePath, language, content);
98
+ let queue = entries.get(key);
99
+ if (!queue) {
100
+ queue = [];
101
+ entries.set(key, queue);
102
+ }
103
+ queue.push({
104
+ expiresAt: Date.now() + CODE_BLOCK_RENDER_HANDOFF_LIFETIME_IN_MILLISECONDS,
105
+ focus,
106
+ state
107
+ });
108
+ return true;
109
+ }
110
+ async function restoreCodeBlockFocus(el, focus) {
111
+ for (let frame = 0; !el.isConnected && frame < MAX_FRAMES_TO_WAIT_FOR_CONNECTION; frame++) {
112
+ await requestAnimationFrameAsync();
113
+ }
114
+ if (!el.isConnected) {
115
+ return false;
116
+ }
117
+ let target = el;
118
+ for (const index of focus.childIndexPath) {
119
+ target = target.children[index];
120
+ if (!target) {
121
+ return false;
122
+ }
123
+ }
124
+ if (!isHTMLElementLike(target)) {
125
+ return false;
126
+ }
127
+ target.focus({ preventScroll: true });
128
+ if (el.ownerDocument.activeElement !== target) {
129
+ return false;
130
+ }
131
+ if (focus.selection && isTextSelectionElement(target)) {
132
+ target.setSelectionRange(focus.selection.start, focus.selection.end, focus.selection.direction);
133
+ }
134
+ return true;
135
+ }
136
+ function getHandoffEntries() {
137
+ return getObsidianLibState(HANDOFF_STATE_KEY, /* @__PURE__ */ new Map()).value;
138
+ }
139
+ function getHandoffKey(sourcePath, language, content) {
140
+ return JSON.stringify([sourcePath, language, content]);
141
+ }
142
+ function getLanguageFromElement(element) {
143
+ const BLOCK_LANGUAGE_PREFIX = "block-language-";
144
+ return [...element.classList].find((cls) => cls.startsWith(BLOCK_LANGUAGE_PREFIX))?.slice(BLOCK_LANGUAGE_PREFIX.length) ?? "";
145
+ }
146
+ function getTextSelection(element) {
147
+ if (!isTextSelectionElement(element)) {
148
+ return null;
149
+ }
150
+ if (element.selectionStart === null || element.selectionEnd === null) {
151
+ return null;
152
+ }
153
+ return {
154
+ direction: element.selectionDirection ?? "none",
155
+ end: element.selectionEnd,
156
+ start: element.selectionStart
157
+ };
158
+ }
159
+ function isHTMLElementLike(element) {
160
+ return typeof element.focus === "function";
161
+ }
162
+ function isTextSelectionElement(element) {
163
+ return element.tagName === "INPUT" || element.tagName === "TEXTAREA";
164
+ }
165
+ function pruneExpiredEntries(entries) {
166
+ const now = Date.now();
167
+ for (const [key, queue] of entries) {
168
+ const liveEntries = queue.filter((entry) => entry.expiresAt > now);
169
+ if (liveEntries.length === 0) {
170
+ entries.delete(key);
171
+ } else if (liveEntries.length !== queue.length) {
172
+ entries.set(key, liveEntries);
173
+ }
174
+ }
175
+ }
176
+ export {
177
+ CODE_BLOCK_RENDER_HANDOFF_LIFETIME_IN_MILLISECONDS,
178
+ captureCodeBlockFocus,
179
+ claimCodeBlockRenderHandoff,
180
+ recordCodeBlockRenderHandoff,
181
+ restoreCodeBlockFocus
182
+ };
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2RlLWJsb2NrLXJlbmRlci1oYW5kb2ZmLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDYXJyaWVzIGZvY3VzIGFuZCBwbHVnaW4gc3RhdGUgZnJvbSBhIGNvZGUgYmxvY2sgdG8gaXRzIG5leHQgcmVuZGVyLlxuICpcbiAqIE9ic2lkaWFuIHJlbmRlcnMgYSBjb2RlIGJsb2NrIGFnYWluIHdoZW5ldmVyIGl0cyBzb3VyY2UgdGV4dCBjaGFuZ2VzOiBSZWFkaW5nIHZpZXcgcmUtcmVuZGVycyB0aGUgc2VjdGlvbiBhbmQgTGl2ZVxuICogUHJldmlldyByZXBsYWNlcyB0aGUgd2lkZ2V0LiBTbyBhIGJsb2NrIHRoYXQgZWRpdHMgaXRzIG93biBzb3VyY2UgKGEgY291bnRlciwgYSBjaGVja2JveCwgYSBzZXR0aW5ncyBmb3JtKSBsb3NlcyB0aGVcbiAqIGVsZW1lbnQgdGhlIHVzZXIgd2FzIGludGVyYWN0aW5nIHdpdGgsIGl0cyBmb2N1cyBhbmQgd2hhdGV2ZXIgdGhlIHBsdWdpbiBrZXB0IG9uIGl0LiBUaGUgZWxlbWVudCBpdHNlbGYgY2Fubm90IGJlXG4gKiBrZXB0IHdpdGhvdXQgcGF0Y2hpbmcgT2JzaWRpYW4ncyByZW5kZXJlcnMsIHNvIHRoZSB3cml0ZSByZWNvcmRzIGEgaGFuZG9mZiBpbnN0ZWFkLCBhbmQgdGhlIHByb2Nlc3NvciByZW5kZXJpbmcgdGhlXG4gKiBuZXcgc291cmNlIGNsYWltcyBpdDogaXQgZ2V0cyBiYWNrIHRoZSBzdGF0ZSB0aGUgd3JpdGUgcGFzc2VkIGFuZCBjYW4gcHV0IHRoZSBmb2N1cyBiYWNrIG9uIHRoZSBzYW1lIGVsZW1lbnQuXG4gKlxuICogVGhlIGhhbmRvZmYgaXMgbWF0Y2hlZCBieSBzb3VyY2UgcGF0aCwgbGFuZ3VhZ2UgYW5kIHRoZSBuZXcgYmxvY2sgY29udGVudCwgYW5kIGl0IGxpdmVzIGZvclxuICoge0BsaW5rIENPREVfQkxPQ0tfUkVOREVSX0hBTkRPRkZfTElGRVRJTUVfSU5fTUlMTElTRUNPTkRTfS4gVGhlIGZpcnN0IHJlbmRlciB0byBjbGFpbSBpdCBjb25zdW1lcyBpdCwgc28gd2hlbiB0aGVcbiAqIG5vdGUgaXMgb3BlbiBpbiB0d28gcGFuZXMgb25seSBvbmUgb2YgdGhlIG5ldyByZW5kZXJzIGdldHMgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwLFxuICBnZXRPcHRpb25hbE5hbWVkR3JvdXBcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3JlZy1leHAnO1xuaW1wb3J0IHsgZW5zdXJlTGZFbmRpbmdzIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5cbmltcG9ydCB7IGNyZWF0ZUNvZGVCbG9ja1JlZ0V4cCB9IGZyb20gJy4vY29kZS1ibG9jay1yZWctZXhwLnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuTGliU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuICogSG93IGxvbmcgYSByZWNvcmRlZCBoYW5kb2ZmIHdhaXRzIGZvciB0aGUgcmVuZGVyIHRoYXQgY2xhaW1zIGl0LlxuICovXG5leHBvcnQgY29uc3QgQ09ERV9CTE9DS19SRU5ERVJfSEFORE9GRl9MSUZFVElNRV9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5cbmNvbnN0IEhBTkRPRkZfU1RBVEVfS0VZID0gJ2NvZGVCbG9ja1JlbmRlckhhbmRvZmZWMSc7XG5jb25zdCBNQVhfRlJBTUVTX1RPX1dBSVRfRk9SX0NPTk5FQ1RJT04gPSA2MDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgY2xhaW1Db2RlQmxvY2tSZW5kZXJIYW5kb2ZmfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFpbUNvZGVCbG9ja1JlbmRlckhhbmRvZmZQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHtAbGluayBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0fSB0aGUgcHJvY2Vzc29yIHJlY2VpdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dDtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhlIHByb2Nlc3NvciByZW5kZXJzIGludG8uXG4gICAqL1xuICByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgdGhlIHByb2Nlc3NvciByZWNlaXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXJlIHRoZSBmb2N1cyB3YXMgaW5zaWRlIGEgcmVuZGVyZWQgY29kZSBibG9jay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tGb2N1c1NuYXBzaG90IHtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZCBpbmRpY2VzIGxlYWRpbmcgZnJvbSB0aGUgY29kZSBibG9jayBlbGVtZW50IHRvIHRoZSBmb2N1c2VkIGVsZW1lbnQuXG4gICAqL1xuICByZWFkb25seSBjaGlsZEluZGV4UGF0aDogcmVhZG9ubHkgbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHNlbGVjdGlvbiBvZiBhIGZvY3VzZWQgaW5wdXQgb3IgdGV4dCBhcmVhLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0aW9uOiBudWxsIHwgVGV4dFNlbGVjdGlvbjtcbn1cblxuLyoqXG4gKiBBIGhhbmRvZmYgY2xhaW1lZCBieSB0aGUgcmVuZGVyIG9mIGEgY29kZSBibG9jayB3aG9zZSBzb3VyY2UgYSB3cml0ZSBqdXN0IGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrUmVuZGVySGFuZG9mZiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB3cml0ZSByZWNvcmRlZCBhIGZvY3VzZWQgZWxlbWVudCB0byByZXN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzRm9jdXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFB1dHMgdGhlIGZvY3VzIGJhY2sgb24gdGhlIGVsZW1lbnQgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW5zaWRlIHRoZSBuZXcgcmVuZGVyLCB3aXRoIHRoZSBzYW1lIHRleHQgc2VsZWN0aW9uLlxuICAgKlxuICAgKiBDYWxsIGl0IG9uY2UgdGhlIHByb2Nlc3NvciBoYXMgcmVuZGVyZWQgdGhlIGJsb2NrLiBJdCB3YWl0cyBmb3IgdGhlIGVsZW1lbnQgdG8gYmUgYXR0YWNoZWQgdG8gYSBkb2N1bWVudC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciBhbiBlbGVtZW50IHdhcyBmb2N1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdG9yZUZvY3VzOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgcGFzc2VkIHRvIHRoZSB3cml0ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBub25lIHdhcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiB1bmtub3duO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayByZWNvcmRDb2RlQmxvY2tSZW5kZXJIYW5kb2ZmfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRDb2RlQmxvY2tSZW5kZXJIYW5kb2ZmUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmb2N1cyBjYXB0dXJlZCBmcm9tIHRoZSBvbGQgcmVuZGVyIHdpdGgge0BsaW5rIGNhcHR1cmVDb2RlQmxvY2tGb2N1c30uXG4gICAqL1xuICByZWFkb25seSBmb2N1czogQ29kZUJsb2NrRm9jdXNTbmFwc2hvdCB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2RlIGJsb2NrIHdyaXR0ZW4gdG8gdGhlIG5vdGUsIGZlbmNlcyBpbmNsdWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IG5ld0NvZGVCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZSB0aGUgY29kZSBibG9jayBpcyBpbi5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXRlIHRvIHBhc3MgdG8gdGhlIG5leHQgcmVuZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGU6IHVua25vd247XG59XG5cbmludGVyZmFjZSBIYW5kb2ZmRW50cnkge1xuICByZWFkb25seSBleHBpcmVzQXQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgZm9jdXM6IENvZGVCbG9ja0ZvY3VzU25hcHNob3QgfCBudWxsO1xuICByZWFkb25seSBzdGF0ZTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIFRleHRTZWxlY3Rpb24ge1xuICByZWFkb25seSBkaXJlY3Rpb246ICdiYWNrd2FyZCcgfCAnZm9yd2FyZCcgfCAnbm9uZSc7XG4gIHJlYWRvbmx5IGVuZDogbnVtYmVyO1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgVGV4dFNlbGVjdGlvbkVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkRpcmVjdGlvbjogJ2JhY2t3YXJkJyB8ICdmb3J3YXJkJyB8ICdub25lJyB8IG51bGw7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkVuZDogbnVsbCB8IG51bWJlcjtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uU3RhcnQ6IG51bGwgfCBudW1iZXI7XG4gIHJlYWRvbmx5IHNldFNlbGVjdGlvblJhbmdlOiAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGRpcmVjdGlvbj86ICdiYWNrd2FyZCcgfCAnZm9yd2FyZCcgfCAnbm9uZScpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQ2FwdHVyZXMgd2hlcmUgdGhlIGZvY3VzIGlzIGluc2lkZSBhIHJlbmRlcmVkIGNvZGUgYmxvY2suXG4gKlxuICogQHBhcmFtIGVsIC0gVGhlIGNvZGUgYmxvY2sgZWxlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBzbmFwc2hvdCwgb3IgYG51bGxgIHdoZW4gdGhlIGZvY3VzIGlzIG5vdCBpbnNpZGUgdGhlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlQ29kZUJsb2NrRm9jdXMoZWw6IEhUTUxFbGVtZW50KTogQ29kZUJsb2NrRm9jdXNTbmFwc2hvdCB8IG51bGwge1xuICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZWwub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgYWN0aXZlRWxlbWVudCA9PT0gZWwgfHwgIWVsLmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjaGlsZEluZGV4UGF0aDogbnVtYmVyW10gPSBbXTtcbiAgbGV0IGN1cnJlbnQ6IEVsZW1lbnQgfCBudWxsID0gYWN0aXZlRWxlbWVudDtcbiAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPT0gZWwpIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAobGV0IHNpYmxpbmcgPSBjdXJyZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIGNoaWxkSW5kZXhQYXRoLnVuc2hpZnQoaW5kZXgpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNoaWxkSW5kZXhQYXRoLFxuICAgIHNlbGVjdGlvbjogZ2V0VGV4dFNlbGVjdGlvbihhY3RpdmVFbGVtZW50KVxuICB9O1xufVxuXG4vKipcbiAqIENsYWltcyB0aGUgaGFuZG9mZiBhIHdyaXRlIHJlY29yZGVkIGZvciB0aGUgY29kZSBibG9jayBiZWluZyByZW5kZXJlZC5cbiAqXG4gKiBDYWxsIGl0IGZyb20gYSBjb2RlIGJsb2NrIHByb2Nlc3Nvci4gSXQgcmV0dXJucyBgbnVsbGAgd2hlbiBubyB3cml0ZSBpcyB3YWl0aW5nIGZvciB0aGlzIHJlbmRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBoYW5kb2ZmLCBvciBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFpbUNvZGVCbG9ja1JlbmRlckhhbmRvZmYocGFyYW1zOiBDbGFpbUNvZGVCbG9ja1JlbmRlckhhbmRvZmZQYXJhbXMpOiBDb2RlQmxvY2tSZW5kZXJIYW5kb2ZmIHwgbnVsbCB7XG4gIGNvbnN0IHsgY29udGV4dCwgZWwsIHNvdXJjZSB9ID0gcGFyYW1zO1xuICBjb25zdCBlbnRyaWVzID0gZ2V0SGFuZG9mZkVudHJpZXMoKTtcbiAgcHJ1bmVFeHBpcmVkRW50cmllcyhlbnRyaWVzKTtcblxuICBjb25zdCBrZXkgPSBnZXRIYW5kb2ZmS2V5KGNvbnRleHQuc291cmNlUGF0aCwgZ2V0TGFuZ3VhZ2VGcm9tRWxlbWVudChlbCksIGVuc3VyZUxmRW5kaW5ncyhzb3VyY2UpKTtcbiAgY29uc3QgcXVldWUgPSBlbnRyaWVzLmdldChrZXkpO1xuICBjb25zdCBlbnRyeSA9IHF1ZXVlPy5zaGlmdCgpO1xuICBpZiAoIXF1ZXVlIHx8ICFlbnRyeSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgIGVudHJpZXMuZGVsZXRlKGtleSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhhc0ZvY3VzOiBlbnRyeS5mb2N1cyAhPT0gbnVsbCxcbiAgICBhc3luYyByZXN0b3JlRm9jdXMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICByZXR1cm4gZW50cnkuZm9jdXMgPyAoYXdhaXQgcmVzdG9yZUNvZGVCbG9ja0ZvY3VzKGVsLCBlbnRyeS5mb2N1cykpIDogZmFsc2U7XG4gICAgfSxcbiAgICBzdGF0ZTogZW50cnkuc3RhdGVcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWNvcmRzIGEgaGFuZG9mZiBmb3IgdGhlIG5leHQgcmVuZGVyIG9mIGEgY29kZSBibG9jayBhIHdyaXRlIGlzIGFib3V0IHRvIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFdoZXRoZXIgYSBoYW5kb2ZmIHdhcyByZWNvcmRlZDogYGZhbHNlYCB3aGVuIHRoZSBuZXcgdGV4dCBpcyBub3QgZXhhY3RseSBvbmUgY29kZSBibG9jay5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1ib29sZWFuLW5hbWUgLS0gQSB2ZXJiIG5hbWVzIHRoZSBhY3Rpb247IHRoZSBib29sZWFuIG9ubHkgcmVwb3J0cyB3aGV0aGVyIGl0IHRvb2sgcGxhY2UuXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkQ29kZUJsb2NrUmVuZGVySGFuZG9mZihwYXJhbXM6IFJlY29yZENvZGVCbG9ja1JlbmRlckhhbmRvZmZQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3QgeyBmb2N1cywgbmV3Q29kZUJsb2NrLCBzb3VyY2VQYXRoLCBzdGF0ZSB9ID0gcGFyYW1zO1xuICBjb25zdCBtYXRjaGVzID0gWy4uLmVuc3VyZUxmRW5kaW5ncyhuZXdDb2RlQmxvY2spLm1hdGNoQWxsKGNyZWF0ZUNvZGVCbG9ja1JlZ0V4cCgpKV07XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hlc1swXTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoICE9PSAxIHx8ICFtYXRjaCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVQcmVmaXggPSBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTGluZVByZWZpeCcpO1xuICBjb25zdCBsYW5ndWFnZSA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdDb2RlQmxvY2tMYW5ndWFnZScpO1xuICBjb25zdCBjb250ZW50ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ0NvZGVCbG9ja0NvbnRlbnQnKSA/PyAnJykuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS5zbGljZShsaW5lUHJlZml4Lmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuXG4gIGNvbnN0IGVudHJpZXMgPSBnZXRIYW5kb2ZmRW50cmllcygpO1xuICBwcnVuZUV4cGlyZWRFbnRyaWVzKGVudHJpZXMpO1xuICBjb25zdCBrZXkgPSBnZXRIYW5kb2ZmS2V5KHNvdXJjZVBhdGgsIGxhbmd1YWdlLCBjb250ZW50KTtcbiAgbGV0IHF1ZXVlID0gZW50cmllcy5nZXQoa2V5KTtcbiAgaWYgKCFxdWV1ZSkge1xuICAgIHF1ZXVlID0gW107XG4gICAgZW50cmllcy5zZXQoa2V5LCBxdWV1ZSk7XG4gIH1cbiAgcXVldWUucHVzaCh7XG4gICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgQ09ERV9CTE9DS19SRU5ERVJfSEFORE9GRl9MSUZFVElNRV9JTl9NSUxMSVNFQ09ORFMsXG4gICAgZm9jdXMsXG4gICAgc3RhdGVcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFB1dHMgdGhlIGZvY3VzIGJhY2sgb24gdGhlIGVsZW1lbnQgYSB7QGxpbmsgQ29kZUJsb2NrRm9jdXNTbmFwc2hvdH0gZGVzY3JpYmVzLlxuICpcbiAqIEBwYXJhbSBlbCAtIFRoZSBuZXcgY29kZSBibG9jayBlbGVtZW50LlxuICogQHBhcmFtIGZvY3VzIC0gVGhlIHNuYXBzaG90IGNhcHR1cmVkIGZyb20gdGhlIG9sZCByZW5kZXIuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGFuIGVsZW1lbnQgd2FzIGZvY3VzZWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lIC0tIEEgdmVyYiBuYW1lcyB0aGUgYWN0aW9uOyB0aGUgYm9vbGVhbiBvbmx5IHJlcG9ydHMgd2hldGhlciBpdCB0b29rIHBsYWNlLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVDb2RlQmxvY2tGb2N1cyhlbDogSFRNTEVsZW1lbnQsIGZvY3VzOiBDb2RlQmxvY2tGb2N1c1NuYXBzaG90KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGZvciAobGV0IGZyYW1lID0gMDsgIWVsLmlzQ29ubmVjdGVkICYmIGZyYW1lIDwgTUFYX0ZSQU1FU19UT19XQUlUX0ZPUl9DT05ORUNUSU9OOyBmcmFtZSsrKSB7XG4gICAgYXdhaXQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmMoKTtcbiAgfVxuXG4gIGlmICghZWwuaXNDb25uZWN0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgdGFyZ2V0OiBFbGVtZW50IHwgdW5kZWZpbmVkID0gZWw7XG4gIGZvciAoY29uc3QgaW5kZXggb2YgZm9jdXMuY2hpbGRJbmRleFBhdGgpIHtcbiAgICB0YXJnZXQgPSB0YXJnZXQuY2hpbGRyZW5baW5kZXhdO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc0hUTUxFbGVtZW50TGlrZSh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGFyZ2V0LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgaWYgKGVsLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGZvY3VzLnNlbGVjdGlvbiAmJiBpc1RleHRTZWxlY3Rpb25FbGVtZW50KHRhcmdldCkpIHtcbiAgICB0YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoZm9jdXMuc2VsZWN0aW9uLnN0YXJ0LCBmb2N1cy5zZWxlY3Rpb24uZW5kLCBmb2N1cy5zZWxlY3Rpb24uZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRIYW5kb2ZmRW50cmllcygpOiBNYXA8c3RyaW5nLCBIYW5kb2ZmRW50cnlbXT4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5MaWJTdGF0ZShIQU5ET0ZGX1NUQVRFX0tFWSwgbmV3IE1hcDxzdHJpbmcsIEhhbmRvZmZFbnRyeVtdPigpKS52YWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0SGFuZG9mZktleShzb3VyY2VQYXRoOiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbc291cmNlUGF0aCwgbGFuZ3VhZ2UsIGNvbnRlbnRdKTtcbn1cblxuZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VGcm9tRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IEJMT0NLX0xBTkdVQUdFX1BSRUZJWCA9ICdibG9jay1sYW5ndWFnZS0nO1xuICByZXR1cm4gWy4uLmVsZW1lbnQuY2xhc3NMaXN0XS5maW5kKChjbHMpID0+IGNscy5zdGFydHNXaXRoKEJMT0NLX0xBTkdVQUdFX1BSRUZJWCkpPy5zbGljZShCTE9DS19MQU5HVUFHRV9QUkVGSVgubGVuZ3RoKSA/PyAnJztcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dFNlbGVjdGlvbihlbGVtZW50OiBFbGVtZW50KTogbnVsbCB8IFRleHRTZWxlY3Rpb24ge1xuICBpZiAoIWlzVGV4dFNlbGVjdGlvbkVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFuIGlucHV0IHR5cGUgd2l0aG91dCBhIHRleHQgc2VsZWN0aW9uIChhIGNoZWNrYm94LCBhIG51bWJlciBmaWVsZCkgcmVhZHMgYG51bGxgIGhlcmUuXG4gIGlmIChlbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSBudWxsIHx8IGVsZW1lbnQuc2VsZWN0aW9uRW5kID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRpcmVjdGlvbjogZWxlbWVudC5zZWxlY3Rpb25EaXJlY3Rpb24gPz8gJ25vbmUnLFxuICAgIGVuZDogZWxlbWVudC5zZWxlY3Rpb25FbmQsXG4gICAgc3RhcnQ6IGVsZW1lbnQuc2VsZWN0aW9uU3RhcnRcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudExpa2UoZWxlbWVudDogRWxlbWVudCk6IGVsZW1lbnQgaXMgSFRNTEVsZW1lbnQge1xuICByZXR1cm4gdHlwZW9mIChlbGVtZW50IGFzIFBhcnRpYWw8SFRNTEVsZW1lbnQ+KS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNUZXh0U2VsZWN0aW9uRWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogZWxlbWVudCBpcyBUZXh0U2VsZWN0aW9uRWxlbWVudCB7XG4gIHJldHVybiBlbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgZWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnO1xufVxuXG5mdW5jdGlvbiBwcnVuZUV4cGlyZWRFbnRyaWVzKGVudHJpZXM6IE1hcDxzdHJpbmcsIEhhbmRvZmZFbnRyeVtdPik6IHZvaWQge1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBmb3IgKGNvbnN0IFtrZXksIHF1ZXVlXSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbGl2ZUVudHJpZXMgPSBxdWV1ZS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5leHBpcmVzQXQgPiBub3cpO1xuICAgIGlmIChsaXZlRW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGVudHJpZXMuZGVsZXRlKGtleSk7XG4gICAgfSBlbHNlIGlmIChsaXZlRW50cmllcy5sZW5ndGggIT09IHF1ZXVlLmxlbmd0aCkge1xuICAgICAgZW50cmllcy5zZXQoa2V5LCBsaXZlRW50cmllcyk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLFNBQVMsa0NBQWtDO0FBQzNDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx1QkFBdUI7QUFFaEMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUywyQkFBMkI7QUFLN0IsTUFBTSxxREFBcUQ7QUFFbEUsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxvQ0FBb0M7QUErR25DLFNBQVMsc0JBQXNCLElBQWdEO0FBQ3BGLFFBQU0sZ0JBQWdCLEdBQUcsY0FBYztBQUN2QyxNQUFJLENBQUMsaUJBQWlCLGtCQUFrQixNQUFNLENBQUMsR0FBRyxTQUFTLGFBQWEsR0FBRztBQUN6RSxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0saUJBQTJCLENBQUM7QUFDbEMsTUFBSSxVQUEwQjtBQUM5QixTQUFPLFdBQVcsWUFBWSxJQUFJO0FBQ2hDLFFBQUksUUFBUTtBQUNaLGFBQVMsVUFBVSxRQUFRLHdCQUF3QixTQUFTLFVBQVUsUUFBUSx3QkFBd0I7QUFDcEc7QUFBQSxJQUNGO0FBQ0EsbUJBQWUsUUFBUSxLQUFLO0FBQzVCLGNBQVUsUUFBUTtBQUFBLEVBQ3BCO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLFdBQVcsaUJBQWlCLGFBQWE7QUFBQSxFQUMzQztBQUNGO0FBVU8sU0FBUyw0QkFBNEIsUUFBMEU7QUFDcEgsUUFBTSxFQUFFLFNBQVMsSUFBSSxPQUFPLElBQUk7QUFDaEMsUUFBTSxVQUFVLGtCQUFrQjtBQUNsQyxzQkFBb0IsT0FBTztBQUUzQixRQUFNLE1BQU0sY0FBYyxRQUFRLFlBQVksdUJBQXVCLEVBQUUsR0FBRyxnQkFBZ0IsTUFBTSxDQUFDO0FBQ2pHLFFBQU0sUUFBUSxRQUFRLElBQUksR0FBRztBQUM3QixRQUFNLFFBQVEsT0FBTyxNQUFNO0FBQzNCLE1BQUksQ0FBQyxTQUFTLENBQUMsT0FBTztBQUNwQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksTUFBTSxXQUFXLEdBQUc7QUFDdEIsWUFBUSxPQUFPLEdBQUc7QUFBQSxFQUNwQjtBQUVBLFNBQU87QUFBQSxJQUNMLFVBQVUsTUFBTSxVQUFVO0FBQUEsSUFDMUIsTUFBTSxlQUFpQztBQUNyQyxhQUFPLE1BQU0sUUFBUyxNQUFNLHNCQUFzQixJQUFJLE1BQU0sS0FBSyxJQUFLO0FBQUEsSUFDeEU7QUFBQSxJQUNBLE9BQU8sTUFBTTtBQUFBLEVBQ2Y7QUFDRjtBQVNPLFNBQVMsNkJBQTZCLFFBQXFEO0FBQ2hHLFFBQU0sRUFBRSxPQUFPLGNBQWMsWUFBWSxNQUFNLElBQUk7QUFDbkQsUUFBTSxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsWUFBWSxFQUFFLFNBQVMsc0JBQXNCLENBQUMsQ0FBQztBQUNuRixRQUFNLFFBQVEsUUFBUSxDQUFDO0FBQ3ZCLE1BQUksUUFBUSxXQUFXLEtBQUssQ0FBQyxPQUFPO0FBQ2xDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxhQUFhLHVCQUF1QixPQUFPLFlBQVk7QUFDN0QsUUFBTSxXQUFXLHVCQUF1QixPQUFPLG1CQUFtQjtBQUNsRSxRQUFNLFdBQVcsc0JBQXNCLE9BQU8sa0JBQWtCLEtBQUssSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sV0FBVyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUk7QUFFM0ksUUFBTSxVQUFVLGtCQUFrQjtBQUNsQyxzQkFBb0IsT0FBTztBQUMzQixRQUFNLE1BQU0sY0FBYyxZQUFZLFVBQVUsT0FBTztBQUN2RCxNQUFJLFFBQVEsUUFBUSxJQUFJLEdBQUc7QUFDM0IsTUFBSSxDQUFDLE9BQU87QUFDVixZQUFRLENBQUM7QUFDVCxZQUFRLElBQUksS0FBSyxLQUFLO0FBQUEsRUFDeEI7QUFDQSxRQUFNLEtBQUs7QUFBQSxJQUNULFdBQVcsS0FBSyxJQUFJLElBQUk7QUFBQSxJQUN4QjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDRCxTQUFPO0FBQ1Q7QUFVQSxlQUFzQixzQkFBc0IsSUFBaUIsT0FBaUQ7QUFDNUcsV0FBUyxRQUFRLEdBQUcsQ0FBQyxHQUFHLGVBQWUsUUFBUSxtQ0FBbUMsU0FBUztBQUN6RixVQUFNLDJCQUEyQjtBQUFBLEVBQ25DO0FBRUEsTUFBSSxDQUFDLEdBQUcsYUFBYTtBQUNuQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksU0FBOEI7QUFDbEMsYUFBVyxTQUFTLE1BQU0sZ0JBQWdCO0FBQ3hDLGFBQVMsT0FBTyxTQUFTLEtBQUs7QUFDOUIsUUFBSSxDQUFDLFFBQVE7QUFDWCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLENBQUMsa0JBQWtCLE1BQU0sR0FBRztBQUM5QixXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sTUFBTSxFQUFFLGVBQWUsS0FBSyxDQUFDO0FBQ3BDLE1BQUksR0FBRyxjQUFjLGtCQUFrQixRQUFRO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSSxNQUFNLGFBQWEsdUJBQXVCLE1BQU0sR0FBRztBQUNyRCxXQUFPLGtCQUFrQixNQUFNLFVBQVUsT0FBTyxNQUFNLFVBQVUsS0FBSyxNQUFNLFVBQVUsU0FBUztBQUFBLEVBQ2hHO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyxvQkFBaUQ7QUFDeEQsU0FBTyxvQkFBb0IsbUJBQW1CLG9CQUFJLElBQTRCLENBQUMsRUFBRTtBQUNuRjtBQUVBLFNBQVMsY0FBYyxZQUFvQixVQUFrQixTQUF5QjtBQUNwRixTQUFPLEtBQUssVUFBVSxDQUFDLFlBQVksVUFBVSxPQUFPLENBQUM7QUFDdkQ7QUFFQSxTQUFTLHVCQUF1QixTQUE4QjtBQUM1RCxRQUFNLHdCQUF3QjtBQUM5QixTQUFPLENBQUMsR0FBRyxRQUFRLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLFdBQVcscUJBQXFCLENBQUMsR0FBRyxNQUFNLHNCQUFzQixNQUFNLEtBQUs7QUFDN0g7QUFFQSxTQUFTLGlCQUFpQixTQUF3QztBQUNoRSxNQUFJLENBQUMsdUJBQXVCLE9BQU8sR0FBRztBQUNwQyxXQUFPO0FBQUEsRUFDVDtBQUdBLE1BQUksUUFBUSxtQkFBbUIsUUFBUSxRQUFRLGlCQUFpQixNQUFNO0FBQ3BFLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUFBLElBQ0wsV0FBVyxRQUFRLHNCQUFzQjtBQUFBLElBQ3pDLEtBQUssUUFBUTtBQUFBLElBQ2IsT0FBTyxRQUFRO0FBQUEsRUFDakI7QUFDRjtBQUVBLFNBQVMsa0JBQWtCLFNBQTBDO0FBQ25FLFNBQU8sT0FBUSxRQUFpQyxVQUFVO0FBQzVEO0FBRUEsU0FBUyx1QkFBdUIsU0FBbUQ7QUFDakYsU0FBTyxRQUFRLFlBQVksV0FBVyxRQUFRLFlBQVk7QUFDNUQ7QUFFQSxTQUFTLG9CQUFvQixTQUE0QztBQUN2RSxRQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLGFBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxTQUFTO0FBQ2xDLFVBQU0sY0FBYyxNQUFNLE9BQU8sQ0FBQyxVQUFVLE1BQU0sWUFBWSxHQUFHO0FBQ2pFLFFBQUksWUFBWSxXQUFXLEdBQUc7QUFDNUIsY0FBUSxPQUFPLEdBQUc7QUFBQSxJQUNwQixXQUFXLFlBQVksV0FBVyxNQUFNLFFBQVE7QUFDOUMsY0FBUSxJQUFJLEtBQUssV0FBVztBQUFBLElBQzlCO0FBQUEsRUFDRjtBQUNGOyIsIm5hbWVzIjpbXX0=
@@ -1,5 +1,7 @@
1
1
  /// <reference path="../library-references.d.mts" />
2
2
  export * as 'incremental-parse-state-field' from './incremental-parse-state-field.mjs';
3
+ export * as 'inline-token-widgets' from './inline-token-widgets.mjs';
3
4
  export * as 'markdown-editor-views' from './markdown-editor-views.mjs';
4
5
  export * as 'range-set' from './range-set.mjs';
6
+ export * as 'settings-facet' from './settings-facet.mjs';
5
7
  export * as 'state-field-spec' from './state-field-spec.mjs';
@@ -4,13 +4,17 @@ if you want to view the source, please visit the github repository of this plugi
4
4
  */
5
5
 
6
6
  import * as incremental_parse_state_field from "./incremental-parse-state-field.mjs";
7
+ import * as inline_token_widgets from "./inline-token-widgets.mjs";
7
8
  import * as markdown_editor_views from "./markdown-editor-views.mjs";
8
9
  import * as range_set from "./range-set.mjs";
10
+ import * as settings_facet from "./settings-facet.mjs";
9
11
  import * as state_field_spec from "./state-field-spec.mjs";
10
12
  export {
11
13
  incremental_parse_state_field as "incremental-parse-state-field",
14
+ inline_token_widgets as "inline-token-widgets",
12
15
  markdown_editor_views as "markdown-editor-views",
13
16
  range_set as "range-set",
17
+ settings_facet as "settings-facet",
14
18
  state_field_spec as "state-field-spec"
15
19
  };
16
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvZGVtaXJyb3IvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQnIGZyb20gJy4vaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duLWVkaXRvci12aWV3cycgZnJvbSAnLi9tYXJrZG93bi1lZGl0b3Itdmlld3MudHMnO1xuZXhwb3J0ICogYXMgJ3JhbmdlLXNldCcgZnJvbSAnLi9yYW5nZS1zZXQudHMnO1xuZXhwb3J0ICogYXMgJ3N0YXRlLWZpZWxkLXNwZWMnIGZyb20gJy4vc3RhdGUtZmllbGQtc3BlYy50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVlBLG1DQUFxQztBQUNqRCxZQUFZQywyQkFBNkI7QUFDekMsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsc0JBQXdCOyIsCiAgIm5hbWVzIjogWyJpbmNyZW1lbnRhbC1wYXJzZS1zdGF0ZS1maWVsZCIsICJtYXJrZG93bi1lZGl0b3Itdmlld3MiLCAicmFuZ2Utc2V0IiwgInN0YXRlLWZpZWxkLXNwZWMiXQp9Cg==
20
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvZGVtaXJyb3IvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQnIGZyb20gJy4vaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQudHMnO1xuZXhwb3J0ICogYXMgJ2lubGluZS10b2tlbi13aWRnZXRzJyBmcm9tICcuL2lubGluZS10b2tlbi13aWRnZXRzLnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bi1lZGl0b3Itdmlld3MnIGZyb20gJy4vbWFya2Rvd24tZWRpdG9yLXZpZXdzLnRzJztcbmV4cG9ydCAqIGFzICdyYW5nZS1zZXQnIGZyb20gJy4vcmFuZ2Utc2V0LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5ncy1mYWNldCcgZnJvbSAnLi9zZXR0aW5ncy1mYWNldC50cyc7XG5leHBvcnQgKiBhcyAnc3RhdGUtZmllbGQtc3BlYycgZnJvbSAnLi9zdGF0ZS1maWVsZC1zcGVjLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBRUEsWUFBWUEsbUNBQXFDO0FBQ2pELFlBQVlDLDBCQUE0QjtBQUN4QyxZQUFZQywyQkFBNkI7QUFDekMsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsb0JBQXNCO0FBQ2xDLFlBQVlDLHNCQUF3QjsiLAogICJuYW1lcyI6IFsiaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQiLCAiaW5saW5lLXRva2VuLXdpZGdldHMiLCAibWFya2Rvd24tZWRpdG9yLXZpZXdzIiwgInJhbmdlLXNldCIsICJzZXR0aW5ncy1mYWNldCIsICJzdGF0ZS1maWVsZC1zcGVjIl0KfQo=
@@ -0,0 +1,109 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /// <reference lib="dom" />
3
+ /**
4
+ * @file
5
+ *
6
+ * Creates an editor extension that replaces every match of a regular expression with a widget in Live Preview, and
7
+ * shows the source again while a selection touches it, the way Obsidian treats its own links and formatting.
8
+ *
9
+ * Only the visible ranges are matched, line by line, so a token never spans two lines. The decorations are rebuilt
10
+ * when the document, the viewport, the selection, the Live Preview mode or the configuration changes; a
11
+ * configuration change is what a `SettingsFacetComponent` dispatches, so a render that reads a settings facet
12
+ * re-runs when the settings do.
13
+ *
14
+ * Outside an Obsidian Markdown editor there is no `editorLivePreviewField`, and the widgets are shown.
15
+ */
16
+ import type { EditorState, Extension } from '@codemirror/state';
17
+ /**
18
+ * Parameters for {@link createInlineTokenWidgetsExtension}.
19
+ */
20
+ export interface CreateInlineTokenWidgetsExtensionParams {
21
+ /**
22
+ * The regular expression a token matches. The `g` flag is added when missing.
23
+ */
24
+ readonly regExp: RegExp;
25
+ /**
26
+ * Renders a token into the widget's element.
27
+ */
28
+ readonly render: InlineTokenRenderFunction;
29
+ /**
30
+ * Decides whether a match becomes a widget, such as to skip a match inside code. Every match does by default.
31
+ */
32
+ readonly shouldDecorate?: (params: InlineTokenShouldDecorateParams) => boolean;
33
+ /**
34
+ * Whether a token shows its source while a selection, the cursor included, touches it.
35
+ *
36
+ * @default `true`
37
+ */
38
+ readonly shouldRevealOnSelection?: boolean;
39
+ }
40
+ /**
41
+ * Renders an inline token into its container element.
42
+ *
43
+ * @param params - The render parameters.
44
+ */
45
+ export type InlineTokenRenderFunction = (params: InlineTokenRenderParams) => void;
46
+ /**
47
+ * Parameters handed to an inline token render function.
48
+ */
49
+ export interface InlineTokenRenderParams {
50
+ /**
51
+ * The element to render the token into.
52
+ */
53
+ readonly containerEl: HTMLElement;
54
+ /**
55
+ * The match of the token's regular expression.
56
+ */
57
+ readonly match: RegExpExecArray;
58
+ /**
59
+ * The path of the note the token is in, or an empty string when it is not known.
60
+ */
61
+ readonly sourcePath: string;
62
+ /**
63
+ * The editor state, when the token renders in an editor. Absent in Reading view.
64
+ */
65
+ readonly state?: EditorState;
66
+ }
67
+ /**
68
+ * Parameters handed to {@link CreateInlineTokenWidgetsExtensionParams.shouldDecorate}.
69
+ */
70
+ export interface InlineTokenShouldDecorateParams {
71
+ /**
72
+ * The document position the match starts at.
73
+ */
74
+ readonly from: number;
75
+ /**
76
+ * The match of the token's regular expression.
77
+ */
78
+ readonly match: RegExpExecArray;
79
+ /**
80
+ * The editor state.
81
+ */
82
+ readonly state: EditorState;
83
+ /**
84
+ * The document position the match ends at.
85
+ */
86
+ readonly to: number;
87
+ }
88
+ /**
89
+ * Creates an editor extension that replaces every match of a regular expression with a widget in Live Preview.
90
+ *
91
+ * @param params - The extension parameters.
92
+ * @returns The editor extension.
93
+ */
94
+ export declare function createInlineTokenWidgetsExtension(params: CreateInlineTokenWidgetsExtensionParams): Extension;
95
+ /**
96
+ * Lists every non-empty match of a global regular expression in a text.
97
+ *
98
+ * @param regExp - The global regular expression.
99
+ * @param text - The text to match.
100
+ * @returns The matches, in order.
101
+ */
102
+ export declare function execAll(regExp: RegExp, text: string): RegExpExecArray[];
103
+ /**
104
+ * Copies a regular expression with the `g` flag set, so matching never moves the caller's `lastIndex`.
105
+ *
106
+ * @param regExp - The regular expression.
107
+ * @returns A global copy of the regular expression.
108
+ */
109
+ export declare function toGlobalRegExp(regExp: RegExp): RegExp;
@@ -0,0 +1,167 @@
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
+
33
+ import {
34
+ Decoration,
35
+ ViewPlugin,
36
+ WidgetType
37
+ } from "@codemirror/view";
38
+ import { castTo } from "@mnaoumov/typescript-lib/object-utils";
39
+ import {
40
+ editorInfoField,
41
+ editorLivePreviewField
42
+ } from "obsidian";
43
+ import { CssClass } from "../css-class.mjs";
44
+ const editorInfoStateField = castTo(editorInfoField);
45
+ const editorLivePreviewStateField = castTo(editorLivePreviewField);
46
+ class InlineTokenWidget extends WidgetType {
47
+ configVersion;
48
+ match;
49
+ render;
50
+ sourcePath;
51
+ state;
52
+ constructor(params) {
53
+ super();
54
+ this.configVersion = params.configVersion;
55
+ this.match = params.match;
56
+ this.render = params.render;
57
+ this.sourcePath = params.sourcePath;
58
+ this.state = params.state;
59
+ }
60
+ eq(other) {
61
+ return other instanceof InlineTokenWidget && other.configVersion === this.configVersion && other.render === this.render && other.sourcePath === this.sourcePath && areMatchesEqual(other.match, this.match);
62
+ }
63
+ toDOM(view) {
64
+ const containerEl = view.dom.ownerDocument.win.createSpan();
65
+ containerEl.classList.add(CssClass.LibraryName, CssClass.InlineToken);
66
+ this.render({
67
+ containerEl,
68
+ match: this.match,
69
+ sourcePath: this.sourcePath,
70
+ state: this.state
71
+ });
72
+ return containerEl;
73
+ }
74
+ }
75
+ function createInlineTokenWidgetsExtension(params) {
76
+ const regExp = toGlobalRegExp(params.regExp);
77
+ const shouldRevealOnSelection = params.shouldRevealOnSelection ?? true;
78
+ class InlineTokenWidgetsPluginValue {
79
+ decorations;
80
+ configVersion = 0;
81
+ /**
82
+ * Builds the decorations of a new editor.
83
+ *
84
+ * @param view - The editor view.
85
+ */
86
+ constructor(view) {
87
+ this.decorations = this.buildDecorations(view);
88
+ }
89
+ /**
90
+ * Rebuilds the decorations when what they depend on changed.
91
+ *
92
+ * @param update - The view update.
93
+ */
94
+ update(update) {
95
+ const isReconfigured = update.transactions.some((transaction) => transaction.reconfigured);
96
+ if (isReconfigured) {
97
+ this.configVersion++;
98
+ }
99
+ if (update.docChanged || update.viewportChanged || update.selectionSet || isReconfigured || isLivePreview(update.startState) !== isLivePreview(update.state)) {
100
+ this.decorations = this.buildDecorations(update.view);
101
+ }
102
+ }
103
+ buildDecorations(view) {
104
+ const state = view.state;
105
+ if (!isLivePreview(state)) {
106
+ return Decoration.none;
107
+ }
108
+ const sourcePath = state.field(editorInfoStateField, false)?.file?.path ?? "";
109
+ const ranges = [];
110
+ let lastLineNumber = 0;
111
+ for (const visibleRange of view.visibleRanges) {
112
+ const firstLineNumber = Math.max(state.doc.lineAt(visibleRange.from).number, lastLineNumber + 1);
113
+ const endLineNumber = state.doc.lineAt(visibleRange.to).number;
114
+ for (let lineNumber = firstLineNumber; lineNumber <= endLineNumber; lineNumber++) {
115
+ const line = state.doc.line(lineNumber);
116
+ for (const match of execAll(regExp, line.text)) {
117
+ const from = line.from + match.index;
118
+ const to = from + match[0].length;
119
+ if (shouldRevealOnSelection && state.selection.ranges.some((range) => range.from <= to && range.to >= from)) {
120
+ continue;
121
+ }
122
+ if (params.shouldDecorate && !params.shouldDecorate({ from, match, state, to })) {
123
+ continue;
124
+ }
125
+ ranges.push(
126
+ Decoration.replace({
127
+ widget: new InlineTokenWidget({ configVersion: this.configVersion, match, render: params.render, sourcePath, state })
128
+ }).range(from, to)
129
+ );
130
+ }
131
+ }
132
+ lastLineNumber = endLineNumber;
133
+ }
134
+ return Decoration.set(ranges);
135
+ }
136
+ }
137
+ return ViewPlugin.fromClass(InlineTokenWidgetsPluginValue, {
138
+ decorations: (value) => value.decorations
139
+ });
140
+ }
141
+ function execAll(regExp, text) {
142
+ const matches = [];
143
+ regExp.lastIndex = 0;
144
+ for (let match = regExp.exec(text); match !== null; match = regExp.exec(text)) {
145
+ if (match[0] === "") {
146
+ regExp.lastIndex++;
147
+ continue;
148
+ }
149
+ matches.push(match);
150
+ }
151
+ return matches;
152
+ }
153
+ function toGlobalRegExp(regExp) {
154
+ return new RegExp(regExp.source, regExp.global ? regExp.flags : `${regExp.flags}g`);
155
+ }
156
+ function areMatchesEqual(a, b) {
157
+ return a.length === b.length && a.every((value, index) => value === b[index]);
158
+ }
159
+ function isLivePreview(state) {
160
+ return state.field(editorLivePreviewStateField, false) ?? true;
161
+ }
162
+ export {
163
+ createInlineTokenWidgetsExtension,
164
+ execAll,
165
+ toGlobalRegExp
166
+ };
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2RlbWlycm9yL2lubGluZS10b2tlbi13aWRnZXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDcmVhdGVzIGFuIGVkaXRvciBleHRlbnNpb24gdGhhdCByZXBsYWNlcyBldmVyeSBtYXRjaCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIGEgd2lkZ2V0IGluIExpdmUgUHJldmlldywgYW5kXG4gKiBzaG93cyB0aGUgc291cmNlIGFnYWluIHdoaWxlIGEgc2VsZWN0aW9uIHRvdWNoZXMgaXQsIHRoZSB3YXkgT2JzaWRpYW4gdHJlYXRzIGl0cyBvd24gbGlua3MgYW5kIGZvcm1hdHRpbmcuXG4gKlxuICogT25seSB0aGUgdmlzaWJsZSByYW5nZXMgYXJlIG1hdGNoZWQsIGxpbmUgYnkgbGluZSwgc28gYSB0b2tlbiBuZXZlciBzcGFucyB0d28gbGluZXMuIFRoZSBkZWNvcmF0aW9ucyBhcmUgcmVidWlsdFxuICogd2hlbiB0aGUgZG9jdW1lbnQsIHRoZSB2aWV3cG9ydCwgdGhlIHNlbGVjdGlvbiwgdGhlIExpdmUgUHJldmlldyBtb2RlIG9yIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXM7IGFcbiAqIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGlzIHdoYXQgYSBgU2V0dGluZ3NGYWNldENvbXBvbmVudGAgZGlzcGF0Y2hlcywgc28gYSByZW5kZXIgdGhhdCByZWFkcyBhIHNldHRpbmdzIGZhY2V0XG4gKiByZS1ydW5zIHdoZW4gdGhlIHNldHRpbmdzIGRvLlxuICpcbiAqIE91dHNpZGUgYW4gT2JzaWRpYW4gTWFya2Rvd24gZWRpdG9yIHRoZXJlIGlzIG5vIGBlZGl0b3JMaXZlUHJldmlld0ZpZWxkYCwgYW5kIHRoZSB3aWRnZXRzIGFyZSBzaG93bi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvclN0YXRlLFxuICBFeHRlbnNpb24sXG4gIFJhbmdlLFxuICBTdGF0ZUZpZWxkXG59IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVjb3JhdGlvblNldCxcbiAgRWRpdG9yVmlldyxcbiAgUGx1Z2luVmFsdWUsXG4gIFZpZXdVcGRhdGVcbn0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgdHlwZSB7IE1hcmtkb3duRmlsZUluZm8gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIERlY29yYXRpb24sXG4gIFZpZXdQbHVnaW4sXG4gIFdpZGdldFR5cGVcbn0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIGVkaXRvckluZm9GaWVsZCxcbiAgZWRpdG9yTGl2ZVByZXZpZXdGaWVsZFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcblxuLy8gT2JzaWRpYW4uZC50cyByZWFjaGVzIEBjb2RlbWlycm9yL3N0YXRlIHRocm91Z2ggaXRzIENvbW1vbkpTIGRlY2xhcmF0aW9ucyBhbmQgdGhpcyBtb2R1bGUgdGhyb3VnaCB0aGUgRVMgb25lcywgYW5kXG4vLyBTdGF0ZUZpZWxkIGhhcyBwcml2YXRlIG1lbWJlcnMsIHNvIHRoZSB0d28gZGVjbGFyYXRpb25zIG9mIG9uZSBydW50aW1lIGNsYXNzIGRvIG5vdCB0eXBlLWNoZWNrIGFnYWluc3QgZWFjaCBvdGhlci5cbmNvbnN0IGVkaXRvckluZm9TdGF0ZUZpZWxkID0gY2FzdFRvPFN0YXRlRmllbGQ8TWFya2Rvd25GaWxlSW5mbz4+KGVkaXRvckluZm9GaWVsZCk7XG5jb25zdCBlZGl0b3JMaXZlUHJldmlld1N0YXRlRmllbGQgPSBjYXN0VG88U3RhdGVGaWVsZDxib29sZWFuPj4oZWRpdG9yTGl2ZVByZXZpZXdGaWVsZCk7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSW5saW5lVG9rZW5XaWRnZXRzRXh0ZW5zaW9uUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gYSB0b2tlbiBtYXRjaGVzLiBUaGUgYGdgIGZsYWcgaXMgYWRkZWQgd2hlbiBtaXNzaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnRXhwOiBSZWdFeHA7XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSB0b2tlbiBpbnRvIHRoZSB3aWRnZXQncyBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyOiBJbmxpbmVUb2tlblJlbmRlckZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBtYXRjaCBiZWNvbWVzIGEgd2lkZ2V0LCBzdWNoIGFzIHRvIHNraXAgYSBtYXRjaCBpbnNpZGUgY29kZS4gRXZlcnkgbWF0Y2ggZG9lcyBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGVjb3JhdGU/OiAocGFyYW1zOiBJbmxpbmVUb2tlblNob3VsZERlY29yYXRlUGFyYW1zKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgdG9rZW4gc2hvd3MgaXRzIHNvdXJjZSB3aGlsZSBhIHNlbGVjdGlvbiwgdGhlIGN1cnNvciBpbmNsdWRlZCwgdG91Y2hlcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXZlYWxPblNlbGVjdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpbmxpbmUgdG9rZW4gaW50byBpdHMgY29udGFpbmVyIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSByZW5kZXIgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5saW5lVG9rZW5SZW5kZXJGdW5jdGlvbiA9IChwYXJhbXM6IElubGluZVRva2VuUmVuZGVyUGFyYW1zKSA9PiB2b2lkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgaGFuZGVkIHRvIGFuIGlubGluZSB0b2tlbiByZW5kZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lVG9rZW5SZW5kZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSB0b2tlbiBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgbWF0Y2ggb2YgdGhlIHRva2VuJ3MgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUgdGhlIHRva2VuIGlzIGluLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBpdCBpcyBub3Qga25vd24uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3Igc3RhdGUsIHdoZW4gdGhlIHRva2VuIHJlbmRlcnMgaW4gYW4gZWRpdG9yLiBBYnNlbnQgaW4gUmVhZGluZyB2aWV3LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGU/OiBFZGl0b3JTdGF0ZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGhhbmRlZCB0byB7QGxpbmsgQ3JlYXRlSW5saW5lVG9rZW5XaWRnZXRzRXh0ZW5zaW9uUGFyYW1zLnNob3VsZERlY29yYXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVUb2tlblNob3VsZERlY29yYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudCBwb3NpdGlvbiB0aGUgbWF0Y2ggc3RhcnRzIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF0Y2ggb2YgdGhlIHRva2VuJ3MgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheTtcblxuICAvKipcbiAgICogVGhlIGVkaXRvciBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiBFZGl0b3JTdGF0ZTtcblxuICAvKipcbiAgICogVGhlIGRvY3VtZW50IHBvc2l0aW9uIHRoZSBtYXRjaCBlbmRzIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgdG86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElubGluZVRva2VuV2lkZ2V0UGFyYW1zIHtcbiAgcmVhZG9ubHkgY29uZmlnVmVyc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBtYXRjaDogUmVnRXhwRXhlY0FycmF5O1xuICByZWFkb25seSByZW5kZXI6IElubGluZVRva2VuUmVuZGVyRnVuY3Rpb247XG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGU6IEVkaXRvclN0YXRlO1xufVxuXG5jbGFzcyBJbmxpbmVUb2tlbldpZGdldCBleHRlbmRzIFdpZGdldFR5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1ZlcnNpb246IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXRjaDogUmVnRXhwRXhlY0FycmF5O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcjogSW5saW5lVG9rZW5SZW5kZXJGdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGU6IEVkaXRvclN0YXRlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IElubGluZVRva2VuV2lkZ2V0UGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbmZpZ1ZlcnNpb24gPSBwYXJhbXMuY29uZmlnVmVyc2lvbjtcbiAgICB0aGlzLm1hdGNoID0gcGFyYW1zLm1hdGNoO1xuICAgIHRoaXMucmVuZGVyID0gcGFyYW1zLnJlbmRlcjtcbiAgICB0aGlzLnNvdXJjZVBhdGggPSBwYXJhbXMuc291cmNlUGF0aDtcbiAgICB0aGlzLnN0YXRlID0gcGFyYW1zLnN0YXRlO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGVxKG90aGVyOiBXaWRnZXRUeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgSW5saW5lVG9rZW5XaWRnZXRcbiAgICAgICYmIG90aGVyLmNvbmZpZ1ZlcnNpb24gPT09IHRoaXMuY29uZmlnVmVyc2lvblxuICAgICAgJiYgb3RoZXIucmVuZGVyID09PSB0aGlzLnJlbmRlclxuICAgICAgJiYgb3RoZXIuc291cmNlUGF0aCA9PT0gdGhpcy5zb3VyY2VQYXRoXG4gICAgICAmJiBhcmVNYXRjaGVzRXF1YWwob3RoZXIubWF0Y2gsIHRoaXMubWF0Y2gpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHRvRE9NKHZpZXc6IEVkaXRvclZpZXcpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB2aWV3LmRvbS5vd25lckRvY3VtZW50Lndpbi5jcmVhdGVTcGFuKCk7XG4gICAgY29udGFpbmVyRWwuY2xhc3NMaXN0LmFkZChDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuSW5saW5lVG9rZW4pO1xuICAgIHRoaXMucmVuZGVyKHtcbiAgICAgIGNvbnRhaW5lckVsLFxuICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLnNvdXJjZVBhdGgsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZVxuICAgIH0pO1xuICAgIHJldHVybiBjb250YWluZXJFbDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZWRpdG9yIGV4dGVuc2lvbiB0aGF0IHJlcGxhY2VzIGV2ZXJ5IG1hdGNoIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGggYSB3aWRnZXQgaW4gTGl2ZSBQcmV2aWV3LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXh0ZW5zaW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgZWRpdG9yIGV4dGVuc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvbihwYXJhbXM6IENyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvblBhcmFtcyk6IEV4dGVuc2lvbiB7XG4gIGNvbnN0IHJlZ0V4cCA9IHRvR2xvYmFsUmVnRXhwKHBhcmFtcy5yZWdFeHApO1xuICBjb25zdCBzaG91bGRSZXZlYWxPblNlbGVjdGlvbiA9IHBhcmFtcy5zaG91bGRSZXZlYWxPblNlbGVjdGlvbiA/PyB0cnVlO1xuXG4gIGNsYXNzIElubGluZVRva2VuV2lkZ2V0c1BsdWdpblZhbHVlIGltcGxlbWVudHMgUGx1Z2luVmFsdWUge1xuICAgIHB1YmxpYyBkZWNvcmF0aW9uczogRGVjb3JhdGlvblNldDtcbiAgICBwcml2YXRlIGNvbmZpZ1ZlcnNpb24gPSAwO1xuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSBkZWNvcmF0aW9ucyBvZiBhIG5ldyBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlldyAtIFRoZSBlZGl0b3Igdmlldy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmlldzogRWRpdG9yVmlldykge1xuICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvcmF0aW9ucyh2aWV3KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWJ1aWxkcyB0aGUgZGVjb3JhdGlvbnMgd2hlbiB3aGF0IHRoZXkgZGVwZW5kIG9uIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXBkYXRlIC0gVGhlIHZpZXcgdXBkYXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUodXBkYXRlOiBWaWV3VXBkYXRlKTogdm9pZCB7XG4gICAgICBjb25zdCBpc1JlY29uZmlndXJlZCA9IHVwZGF0ZS50cmFuc2FjdGlvbnMuc29tZSgodHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLnJlY29uZmlndXJlZCk7XG4gICAgICBpZiAoaXNSZWNvbmZpZ3VyZWQpIHtcbiAgICAgICAgdGhpcy5jb25maWdWZXJzaW9uKys7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHVwZGF0ZS5kb2NDaGFuZ2VkXG4gICAgICAgIHx8IHVwZGF0ZS52aWV3cG9ydENoYW5nZWRcbiAgICAgICAgfHwgdXBkYXRlLnNlbGVjdGlvblNldFxuICAgICAgICB8fCBpc1JlY29uZmlndXJlZFxuICAgICAgICB8fCBpc0xpdmVQcmV2aWV3KHVwZGF0ZS5zdGFydFN0YXRlKSAhPT0gaXNMaXZlUHJldmlldyh1cGRhdGUuc3RhdGUpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvcmF0aW9ucyh1cGRhdGUudmlldyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZERlY29yYXRpb25zKHZpZXc6IEVkaXRvclZpZXcpOiBEZWNvcmF0aW9uU2V0IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdmlldy5zdGF0ZTtcbiAgICAgIGlmICghaXNMaXZlUHJldmlldyhzdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIERlY29yYXRpb24ubm9uZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHN0YXRlLmZpZWxkKGVkaXRvckluZm9TdGF0ZUZpZWxkLCBmYWxzZSk/LmZpbGU/LnBhdGggPz8gJyc7XG4gICAgICBjb25zdCByYW5nZXM6IFJhbmdlPERlY29yYXRpb24+W10gPSBbXTtcbiAgICAgIGxldCBsYXN0TGluZU51bWJlciA9IDA7XG5cbiAgICAgIGZvciAoY29uc3QgdmlzaWJsZVJhbmdlIG9mIHZpZXcudmlzaWJsZVJhbmdlcykge1xuICAgICAgICBjb25zdCBmaXJzdExpbmVOdW1iZXIgPSBNYXRoLm1heChzdGF0ZS5kb2MubGluZUF0KHZpc2libGVSYW5nZS5mcm9tKS5udW1iZXIsIGxhc3RMaW5lTnVtYmVyICsgMSk7XG4gICAgICAgIGNvbnN0IGVuZExpbmVOdW1iZXIgPSBzdGF0ZS5kb2MubGluZUF0KHZpc2libGVSYW5nZS50bykubnVtYmVyO1xuICAgICAgICBmb3IgKGxldCBsaW5lTnVtYmVyID0gZmlyc3RMaW5lTnVtYmVyOyBsaW5lTnVtYmVyIDw9IGVuZExpbmVOdW1iZXI7IGxpbmVOdW1iZXIrKykge1xuICAgICAgICAgIGNvbnN0IGxpbmUgPSBzdGF0ZS5kb2MubGluZShsaW5lTnVtYmVyKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGV4ZWNBbGwocmVnRXhwLCBsaW5lLnRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCBmcm9tID0gbGluZS5mcm9tICsgbWF0Y2guaW5kZXg7XG4gICAgICAgICAgICBjb25zdCB0byA9IGZyb20gKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmV2ZWFsT25TZWxlY3Rpb24gJiYgc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5zb21lKChyYW5nZSkgPT4gcmFuZ2UuZnJvbSA8PSB0byAmJiByYW5nZS50byA+PSBmcm9tKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMuc2hvdWxkRGVjb3JhdGUgJiYgIXBhcmFtcy5zaG91bGREZWNvcmF0ZSh7IGZyb20sIG1hdGNoLCBzdGF0ZSwgdG8gfSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZXMucHVzaChcbiAgICAgICAgICAgICAgRGVjb3JhdGlvbi5yZXBsYWNlKHtcbiAgICAgICAgICAgICAgICB3aWRnZXQ6IG5ldyBJbmxpbmVUb2tlbldpZGdldCh7IGNvbmZpZ1ZlcnNpb246IHRoaXMuY29uZmlnVmVyc2lvbiwgbWF0Y2gsIHJlbmRlcjogcGFyYW1zLnJlbmRlciwgc291cmNlUGF0aCwgc3RhdGUgfSlcbiAgICAgICAgICAgICAgfSkucmFuZ2UoZnJvbSwgdG8pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsYXN0TGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBEZWNvcmF0aW9uLnNldChyYW5nZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBWaWV3UGx1Z2luLmZyb21DbGFzcyhJbmxpbmVUb2tlbldpZGdldHNQbHVnaW5WYWx1ZSwge1xuICAgIGRlY29yYXRpb25zOiAodmFsdWUpID0+IHZhbHVlLmRlY29yYXRpb25zXG4gIH0pO1xufVxuXG4vKipcbiAqIExpc3RzIGV2ZXJ5IG5vbi1lbXB0eSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gaW4gYSB0ZXh0LlxuICpcbiAqIEBwYXJhbSByZWdFeHAgLSBUaGUgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hlcywgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjQWxsKHJlZ0V4cDogUmVnRXhwLCB0ZXh0OiBzdHJpbmcpOiBSZWdFeHBFeGVjQXJyYXlbXSB7XG4gIGNvbnN0IG1hdGNoZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHJlZ0V4cC5sYXN0SW5kZXggPSAwO1xuICBmb3IgKGxldCBtYXRjaCA9IHJlZ0V4cC5leGVjKHRleHQpOyBtYXRjaCAhPT0gbnVsbDsgbWF0Y2ggPSByZWdFeHAuZXhlYyh0ZXh0KSkge1xuICAgIGlmIChtYXRjaFswXSA9PT0gJycpIHtcbiAgICAgIHJlZ0V4cC5sYXN0SW5kZXgrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBtYXRjaGVzLnB1c2gobWF0Y2gpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG4vKipcbiAqIENvcGllcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIHRoZSBgZ2AgZmxhZyBzZXQsIHNvIG1hdGNoaW5nIG5ldmVyIG1vdmVzIHRoZSBjYWxsZXIncyBgbGFzdEluZGV4YC5cbiAqXG4gKiBAcGFyYW0gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIEEgZ2xvYmFsIGNvcHkgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvR2xvYmFsUmVnRXhwKHJlZ0V4cDogUmVnRXhwKTogUmVnRXhwIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAocmVnRXhwLnNvdXJjZSwgcmVnRXhwLmdsb2JhbCA/IHJlZ0V4cC5mbGFncyA6IGAke3JlZ0V4cC5mbGFnc31nYCk7XG59XG5cbmZ1bmN0aW9uIGFyZU1hdGNoZXNFcXVhbChhOiBSZWdFeHBFeGVjQXJyYXksIGI6IFJlZ0V4cEV4ZWNBcnJheSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IGJbaW5kZXhdKTtcbn1cblxuZnVuY3Rpb24gaXNMaXZlUHJldmlldyhzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YXRlLmZpZWxkKGVkaXRvckxpdmVQcmV2aWV3U3RhdGVGaWVsZCwgZmFsc2UpID8/IHRydWU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEJBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsZ0JBQWdCO0FBSXpCLE1BQU0sdUJBQXVCLE9BQXFDLGVBQWU7QUFDakYsTUFBTSw4QkFBOEIsT0FBNEIsc0JBQXNCO0FBOEZ0RixNQUFNLDBCQUEwQixXQUFXO0FBQUEsRUFDeEI7QUFBQSxFQUNBO0FB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
@@ -0,0 +1,19 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Creates a CodeMirror {@link Facet} that carries a plugin's settings into its editor extensions.
6
+ *
7
+ * An extension reads the settings with `state.facet(settingsFacet)` instead of closing over a settings object, so a
8
+ * change reaches every editor as an ordinary reconfigure: `SettingsFacetComponent` swaps `settingsFacet.of(settings)`
9
+ * in a compartment, and every view plugin and state field sees the new value in the same update.
10
+ */
11
+ import { Facet } from '@codemirror/state';
12
+ /**
13
+ * Creates a facet whose value is the last settings value provided, or the default when none is.
14
+ *
15
+ * @typeParam T - The settings type.
16
+ * @param defaultValue - The value an editor reads when no settings are provided.
17
+ * @returns The settings facet.
18
+ */
19
+ export declare function createSettingsFacet<T>(defaultValue: T): Facet<T, T>;
@@ -0,0 +1,44 @@
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
+
33
+ import { Facet } from "@codemirror/state";
34
+ function createSettingsFacet(defaultValue) {
35
+ return Facet.define({
36
+ combine(values) {
37
+ return values.length === 0 ? defaultValue : values.at(-1);
38
+ }
39
+ });
40
+ }
41
+ export {
42
+ createSettingsFacet
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2RlbWlycm9yL3NldHRpbmdzLWZhY2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDcmVhdGVzIGEgQ29kZU1pcnJvciB7QGxpbmsgRmFjZXR9IHRoYXQgY2FycmllcyBhIHBsdWdpbidzIHNldHRpbmdzIGludG8gaXRzIGVkaXRvciBleHRlbnNpb25zLlxuICpcbiAqIEFuIGV4dGVuc2lvbiByZWFkcyB0aGUgc2V0dGluZ3Mgd2l0aCBgc3RhdGUuZmFjZXQoc2V0dGluZ3NGYWNldClgIGluc3RlYWQgb2YgY2xvc2luZyBvdmVyIGEgc2V0dGluZ3Mgb2JqZWN0LCBzbyBhXG4gKiBjaGFuZ2UgcmVhY2hlcyBldmVyeSBlZGl0b3IgYXMgYW4gb3JkaW5hcnkgcmVjb25maWd1cmU6IGBTZXR0aW5nc0ZhY2V0Q29tcG9uZW50YCBzd2FwcyBgc2V0dGluZ3NGYWNldC5vZihzZXR0aW5ncylgXG4gKiBpbiBhIGNvbXBhcnRtZW50LCBhbmQgZXZlcnkgdmlldyBwbHVnaW4gYW5kIHN0YXRlIGZpZWxkIHNlZXMgdGhlIG5ldyB2YWx1ZSBpbiB0aGUgc2FtZSB1cGRhdGUuXG4gKi9cblxuaW1wb3J0IHsgRmFjZXQgfSBmcm9tICdAY29kZW1pcnJvci9zdGF0ZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZhY2V0IHdob3NlIHZhbHVlIGlzIHRoZSBsYXN0IHNldHRpbmdzIHZhbHVlIHByb3ZpZGVkLCBvciB0aGUgZGVmYXVsdCB3aGVuIG5vbmUgaXMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHNldHRpbmdzIHR5cGUuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gVGhlIHZhbHVlIGFuIGVkaXRvciByZWFkcyB3aGVuIG5vIHNldHRpbmdzIGFyZSBwcm92aWRlZC5cbiAqIEByZXR1cm5zIFRoZSBzZXR0aW5ncyBmYWNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldHRpbmdzRmFjZXQ8VD4oZGVmYXVsdFZhbHVlOiBUKTogRmFjZXQ8VCwgVD4ge1xuICByZXR1cm4gRmFjZXQuZGVmaW5lPFQsIFQ+KHtcbiAgICBjb21iaW5lKHZhbHVlcykge1xuICAgICAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPT09IDAgPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZXMuYXQoLTEpIGFzIFQ7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSxTQUFTLGFBQWE7QUFTZixTQUFTLG9CQUF1QixjQUE4QjtBQUNuRSxTQUFPLE1BQU0sT0FBYTtBQUFBLElBQ3hCLFFBQVEsUUFBUTtBQUNkLGFBQU8sT0FBTyxXQUFXLElBQUksZUFBZSxPQUFPLEdBQUcsRUFBRTtBQUFBLElBQzFEO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwibmFtZXMiOltdfQ==
@@ -8,6 +8,9 @@ export * as 'folder-command-handler' from './folder-command-handler.mjs';
8
8
  export * as 'global-command-handler' from './global-command-handler.mjs';
9
9
  export * as 'open-bug-report-command-handler' from './open-bug-report-command-handler.mjs';
10
10
  export * as 'open-demo-vault-command-handler' from './open-demo-vault-command-handler.mjs';
11
+ export * as 'open-discussion-command-handler' from './open-discussion-command-handler.mjs';
12
+ export * as 'open-feature-request-command-handler' from './open-feature-request-command-handler.mjs';
13
+ export * as 'open-git-hub-command-handler' from './open-git-hub-command-handler.mjs';
11
14
  export * as 'open-settings-command-handler' from './open-settings-command-handler.mjs';
12
15
  export * as 'undo-bulk-operation-command-handler' from './undo-bulk-operation-command-handler.mjs';
13
16
  export * as 'unlock-active-note-command-handler' from './unlock-active-note-command-handler.mjs';