@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,306 @@
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 rendered_markdown_exports = {};
116
+ __export(rendered_markdown_exports, {
117
+ isOwnedByRenderedMarkdown: () => isOwnedByRenderedMarkdown,
118
+ registerFoldHandlers: () => registerFoldHandlers,
119
+ registerFootnoteLinkHandler: () => registerFootnoteLinkHandler
120
+ });
121
+ module.exports = __toCommonJS(rendered_markdown_exports);
122
+ var import_async = require('@mnaoumov/typescript-lib/async');
123
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
124
+ var import_obsidian = require('obsidian');
125
+ var import_css_class = require('./css-class.cjs');
126
+ const FLASH_DURATION_IN_MILLISECONDS = 3e3;
127
+ const FOLD_ICON = "right-triangle";
128
+ const HEADING_TAG_NAMES = /* @__PURE__ */ new Set(["H1", "H2", "H3", "H4", "H5", "H6"]);
129
+ function isOwnedByRenderedMarkdown(element, rootEl) {
130
+ let current = element;
131
+ while (current) {
132
+ if (current === rootEl) {
133
+ return true;
134
+ }
135
+ if (current.hasClass("markdown-preview-view") || current.hasClass("bases-view")) {
136
+ return false;
137
+ }
138
+ current = current.parentElement;
139
+ }
140
+ return false;
141
+ }
142
+ function registerFoldHandlers(params) {
143
+ const {
144
+ el,
145
+ shouldFoldHeadings = true,
146
+ shouldFoldLists = true
147
+ } = params;
148
+ el.addClass(import_css_class.CssClass.LibraryName, import_css_class.CssClass.FoldableMarkdown);
149
+ if (shouldFoldHeadings) {
150
+ for (const block of getBlocks(el)) {
151
+ const headingEl = getBlockHeading(block);
152
+ if (headingEl && !headingEl.querySelector(":scope > .heading-collapse-indicator")) {
153
+ addIndicator(headingEl, "heading-collapse-indicator");
154
+ }
155
+ }
156
+ }
157
+ if (shouldFoldLists) {
158
+ for (const listItemEl of el.findAll("li")) {
159
+ if (isOwnedByRenderedMarkdown(listItemEl, el) && listItemEl.querySelector(":scope > ul, :scope > ol") && !listItemEl.querySelector(":scope > .list-collapse-indicator")) {
160
+ addIndicator(listItemEl, "list-collapse-indicator");
161
+ }
162
+ }
163
+ }
164
+ if (registeredFoldEls.has(el)) {
165
+ return;
166
+ }
167
+ registeredFoldEls.add(el);
168
+ el.on("click", ".heading-collapse-indicator", (clickEvent, indicatorEl) => {
169
+ handleIndicatorClick(clickEvent, indicatorEl, el, (headingEl) => {
170
+ if (!isHeading(headingEl)) {
171
+ return;
172
+ }
173
+ toggleCollapsed(headingEl, !headingEl.hasClass("is-collapsed"));
174
+ updateFoldedBlocks(el);
175
+ el.win.getSelection()?.removeAllRanges();
176
+ });
177
+ });
178
+ el.on("click", "li > .list-collapse-indicator", (clickEvent, indicatorEl) => {
179
+ handleIndicatorClick(clickEvent, indicatorEl, el, (listItemEl) => {
180
+ toggleCollapsed(listItemEl, !listItemEl.hasClass("is-collapsed"));
181
+ });
182
+ });
183
+ }
184
+ function registerFootnoteLinkHandler(params) {
185
+ const { el } = params;
186
+ el.on("click", "a.footnote-link", (clickEvent, linkEl) => {
187
+ if (clickEvent.button !== 0 || !isOwnedByRenderedMarkdown(linkEl, el)) {
188
+ return;
189
+ }
190
+ clickEvent.preventDefault();
191
+ const href = linkEl.getAttr("href");
192
+ if (!href?.startsWith("#")) {
193
+ return;
194
+ }
195
+ const footnoteId = href.slice(1);
196
+ const targetEl = el.findAll("[data-footnote-id]").find((candidateEl) => candidateEl.getAttr("data-footnote-id") === footnoteId);
197
+ if (!targetEl) {
198
+ return;
199
+ }
200
+ unfoldAncestors(targetEl, el);
201
+ targetEl.scrollIntoView({ block: "center" });
202
+ flash(targetEl, el);
203
+ });
204
+ }
205
+ const registeredFoldEls = /* @__PURE__ */ new WeakSet();
206
+ function addIndicator(parentEl, cls) {
207
+ const indicatorEl = parentEl.createSpan({
208
+ cls: [cls, "collapse-indicator", "collapse-icon"],
209
+ prepend: true
210
+ });
211
+ (0, import_obsidian.setIcon)(indicatorEl, FOLD_ICON);
212
+ }
213
+ function flash(targetEl, rootEl) {
214
+ for (const flashingEl of rootEl.findAll(".is-flashing")) {
215
+ flashingEl.removeClass("is-flashing");
216
+ }
217
+ targetEl.addClass("is-flashing");
218
+ (0, import_async.invokeAsyncSafely)(async () => {
219
+ await (0, import_async.sleep)({ milliseconds: FLASH_DURATION_IN_MILLISECONDS });
220
+ targetEl.removeClass("is-flashing");
221
+ });
222
+ }
223
+ function getBlockHeading(block) {
224
+ if (isHeading(block)) {
225
+ return block;
226
+ }
227
+ const firstChild = block.firstElementChild;
228
+ return firstChild && isHeading(firstChild) ? firstChild : null;
229
+ }
230
+ function getBlockHeadingLevel(block) {
231
+ const headingEl = getBlockHeading(block);
232
+ return headingEl ? getHeadingLevel(headingEl) : null;
233
+ }
234
+ function getBlocks(rootEl) {
235
+ return rootEl.findAll(":scope > *");
236
+ }
237
+ function getHeadingLevel(headingEl) {
238
+ return Number(headingEl.tagName.slice(1));
239
+ }
240
+ function handleIndicatorClick(clickEvent, indicatorEl, rootEl, toggle) {
241
+ if (clickEvent.button !== 0 || clickEvent.defaultPrevented || !isOwnedByRenderedMarkdown(indicatorEl, rootEl)) {
242
+ return;
243
+ }
244
+ clickEvent.preventDefault();
245
+ toggle((0, import_type_guards.ensureNonNullable)(indicatorEl.parentElement));
246
+ }
247
+ function isHeading(element) {
248
+ return HEADING_TAG_NAMES.has(element.tagName);
249
+ }
250
+ function toggleCollapsed(parentEl, isCollapsed) {
251
+ parentEl.toggleClass("is-collapsed", isCollapsed);
252
+ parentEl.querySelector(":scope > .collapse-icon")?.toggleClass("is-collapsed", isCollapsed);
253
+ }
254
+ function unfoldAncestors(targetEl, rootEl) {
255
+ let targetBlock = targetEl;
256
+ for (; ; ) {
257
+ if (targetBlock.tagName === "LI" && targetBlock.hasClass("is-collapsed")) {
258
+ toggleCollapsed(targetBlock, false);
259
+ }
260
+ const parentEl = (0, import_type_guards.ensureNonNullable)(targetBlock.parentElement);
261
+ if (parentEl === rootEl) {
262
+ break;
263
+ }
264
+ targetBlock = parentEl;
265
+ }
266
+ const blocks = getBlocks(rootEl);
267
+ let level = getBlockHeadingLevel(targetBlock) ?? Infinity;
268
+ let hasUnfolded = false;
269
+ for (let index = blocks.indexOf(targetBlock) - 1; index >= 0; index--) {
270
+ const headingEl = getBlockHeading((0, import_type_guards.ensureNonNullable)(blocks[index]));
271
+ if (!headingEl || getHeadingLevel(headingEl) >= level) {
272
+ continue;
273
+ }
274
+ level = getHeadingLevel(headingEl);
275
+ if (!headingEl.hasClass("is-collapsed")) {
276
+ continue;
277
+ }
278
+ toggleCollapsed(headingEl, false);
279
+ hasUnfolded = true;
280
+ }
281
+ if (hasUnfolded) {
282
+ updateFoldedBlocks(rootEl);
283
+ }
284
+ }
285
+ function updateFoldedBlocks(rootEl) {
286
+ let foldedLevel = null;
287
+ for (const block of getBlocks(rootEl)) {
288
+ const headingEl = getBlockHeading(block);
289
+ const headingLevel = headingEl ? getHeadingLevel(headingEl) : null;
290
+ if (foldedLevel !== null && headingLevel !== null && headingLevel <= foldedLevel) {
291
+ foldedLevel = null;
292
+ }
293
+ const isShown = foldedLevel === null;
294
+ block.toggle(isShown);
295
+ if (isShown && headingEl?.hasClass("is-collapsed")) {
296
+ foldedLevel = headingLevel;
297
+ }
298
+ }
299
+ }
300
+ // Annotate the CommonJS export names for ESM import in node:
301
+ 0 && (module.exports = {
302
+ isOwnedByRenderedMarkdown,
303
+ registerFoldHandlers,
304
+ registerFootnoteLinkHandler
305
+ });
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW5kZXJlZC1tYXJrZG93bi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBhcnRzIG9mIGEgUmVhZGluZyB2aWV3J3MgYmVoYXZpb3IgdGhhdCBPYnNpZGlhbiBrZWVwcyBpbnNpZGUgaXRzIHByZXZpZXcgcmVuZGVyZXIsIHBvcnRlZCBmb3JcbiAqIG1hcmtkb3duIHJlbmRlcmVkIGFueXdoZXJlIGVsc2Ugd2l0aCBgTWFya2Rvd25SZW5kZXJlci5yZW5kZXJgLlxuICpcbiAqIGBNYXJrZG93blByZXZpZXdSZW5kZXJlci5yZWdpc3RlckRvbUV2ZW50c2AgY292ZXJzIGludGVybmFsIGFuZCBleHRlcm5hbCBsaW5rcywgdGFncywgZHJhZ3MsIGNvbnRleHRcbiAqIG1lbnVzIGFuZCB0aGUgZm9vdG5vdGUgSE9WRVIuIFRocmVlIHRoaW5ncyBpdCBkb2VzIG5vdCBjb3ZlciwgcmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjBgOiB0aGUgZm9vdG5vdGVcbiAqIENMSUNLIChgb25Gb290bm90ZUxpbmtDbGlja2ApLCBhbmQgdGhlIGhlYWRpbmcgYW5kIGxpc3QgRk9MRElORywgd2hvc2UgaW5kaWNhdG9ycyB0aGUgcmVuZGVyZXIgb25seSBhZGRzXG4gKiBpbiBpdHMgb3duIGBvblJlbmRlcmAgYW5kIHdob3NlIGNsaWNrcyBvbmx5IGl0IGhhbmRsZXMuIFdpdGhvdXQgdGhlc2UsIGEgZm9vdG5vdGUgY2xpY2sgaW4gc3RhbmRhbG9uZVxuICogcmVuZGVyZWQgbWFya2Rvd24gZmFsbHMgdGhyb3VnaCB0byB0aGUgYnJvd3NlcidzIGhhc2ggbmF2aWdhdGlvbiwgYW5kIG5vdGhpbmcgY2FuIGJlIGZvbGRlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBpbnZva2VBc3luY1NhZmVseSxcbiAgc2xlZXBcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHNldEljb24gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi9jc3MtY2xhc3MudHMnO1xuXG4vKipcbiAqIEhvdyBsb25nIGEgZm9vdG5vdGUncyB0YXJnZXQgc3RheXMgaGlnaGxpZ2h0ZWQgYWZ0ZXIgYSBjbGljayB0b29rIGl0IHRoZXJlLCBhcyBpbiBPYnNpZGlhbidzIG93blxuICogYGhpZ2hsaWdodEVsYC5cbiAqL1xuY29uc3QgRkxBU0hfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTID0gMzAwMDtcblxuY29uc3QgRk9MRF9JQ09OID0gJ3JpZ2h0LXRyaWFuZ2xlJztcblxuY29uc3QgSEVBRElOR19UQUdfTkFNRVMgPSBuZXcgU2V0KFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnXSk7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlZ2lzdGVyRm9sZEhhbmRsZXJzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckZvbGRIYW5kbGVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBtYXJrZG93biB3YXMgcmVuZGVyZWQgaW50bywgdGhlIG9uZSBgTWFya2Rvd25SZW5kZXJlci5yZW5kZXJgIHdhcyBoYW5kZWQuIEl0cyBkaXJlY3RcbiAgICogY2hpbGRyZW4gYXJlIHRoZSByZW5kZXJlZCBibG9ja3MgYSBmb2xkZWQgaGVhZGluZyBoaWRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogV2hldGhlciBoZWFkaW5ncyBjYW4gYmUgZm9sZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZvbGRIZWFkaW5ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgbGlzdCBpdGVtcyB3aXRoIGEgbmVzdGVkIGxpc3QgY2FuIGJlIGZvbGRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGb2xkTGlzdHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckZvb3Rub3RlTGlua0hhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRm9vdG5vdGVMaW5rSGFuZGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBtYXJrZG93biB3YXMgcmVuZGVyZWQgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IGVsOiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGFuIGVsZW1lbnQgYmVsb25ncyB0byB0aGUgbWFya2Rvd24gcmVuZGVyZWQgaW50byBgcm9vdEVsYCwgcmF0aGVyIHRoYW4gdG8gYSBSZWFkaW5nIHZpZXcgb3IgYVxuICogQmFzZXMgdmlldyBuZXN0ZWQgaW5zaWRlIGl0IChhbiBlbWJlZCksIHdoaWNoIGhhbmRsZXMgaXRzIG93biBldmVudHMuIEEgcG9ydCBvZiBPYnNpZGlhbidzIHN0YXRpY1xuICogYE1hcmtkb3duUHJldmlld1JlbmRlcmVyLmJlbG9uZ3NUb01lYCwgd2hpY2ggYG9ic2lkaWFuLXR5cGluZ3NgIGRvZXMgbm90IGRlY2xhcmUuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCBhbiBldmVudCBsYW5kZWQgb24uXG4gKiBAcGFyYW0gcm9vdEVsIC0gVGhlIGVsZW1lbnQgbWFya2Rvd24gd2FzIHJlbmRlcmVkIGludG8uXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGByb290RWxgIGl0c2VsZiBvciBzaXRzIGluc2lkZSBpdCB3aXRoIG5vIG5lc3RlZCB2aWV3IGluIGJldHdlZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc093bmVkQnlSZW5kZXJlZE1hcmtkb3duKGVsZW1lbnQ6IEVsZW1lbnQsIHJvb3RFbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgbGV0IGN1cnJlbnQ6IEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gcm9vdEVsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnQuaGFzQ2xhc3MoJ21hcmtkb3duLXByZXZpZXctdmlldycpIHx8IGN1cnJlbnQuaGFzQ2xhc3MoJ2Jhc2VzLXZpZXcnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgaGVhZGluZ3MgYW5kIHRoZSBuZXN0ZWQgbGlzdHMgb2YgcmVuZGVyZWQgbWFya2Rvd24gZm9sZGFibGUsIHRoZSB3YXkgdGhleSBhcmUgaW4gYSBSZWFkaW5nXG4gKiB2aWV3OiBpdCBhZGRzIE9ic2lkaWFuJ3Mgb3duIGNvbGxhcHNlIGluZGljYXRvcnMgYW5kIGhhbmRsZXMgdGhlaXIgY2xpY2tzLlxuICpcbiAqIEEgZm9sZGVkIGhlYWRpbmcgaGlkZXMgZXZlcnkgYmxvY2sgYWZ0ZXIgaXQgdXAgdG8gdGhlIG5leHQgaGVhZGluZyBvZiB0aGUgc2FtZSBvciBhIGhpZ2hlciBsZXZlbDtcbiAqIHVuZm9sZGluZyBpdCBzaG93cyB0aGVtIGFnYWluLCBleGNlcHQgdGhvc2UgYSBmb2xkZWQgaGVhZGluZyBhbW9uZyB0aGVtIHN0aWxsIGhpZGVzLiBBIGZvbGRlZCBsaXN0XG4gKiBpdGVtIGhpZGVzIGl0cyBuZXN0ZWQgbGlzdHMuIENhbGwgaXQgYWdhaW4gYWZ0ZXIgdGhlIGVsZW1lbnQgaXMgcmUtcmVuZGVyZWQ6IGJsb2NrcyB0aGF0IGFscmVhZHkgaGF2ZVxuICogYW4gaW5kaWNhdG9yIGFyZSBsZWZ0IGFsb25lLCBhbmQgdGhlIGNsaWNrIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBvbmx5IG9uY2UgcGVyIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGb2xkSGFuZGxlcnMocGFyYW1zOiBSZWdpc3RlckZvbGRIYW5kbGVyc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgZWwsXG4gICAgc2hvdWxkRm9sZEhlYWRpbmdzID0gdHJ1ZSxcbiAgICBzaG91bGRGb2xkTGlzdHMgPSB0cnVlXG4gIH0gPSBwYXJhbXM7XG5cbiAgZWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuTGlicmFyeU5hbWUsIENzc0NsYXNzLkZvbGRhYmxlTWFya2Rvd24pO1xuXG4gIGlmIChzaG91bGRGb2xkSGVhZGluZ3MpIHtcbiAgICBmb3IgKGNvbnN0IGJsb2NrIG9mIGdldEJsb2NrcyhlbCkpIHtcbiAgICAgIGNvbnN0IGhlYWRpbmdFbCA9IGdldEJsb2NrSGVhZGluZyhibG9jayk7XG4gICAgICBpZiAoaGVhZGluZ0VsICYmICFoZWFkaW5nRWwucXVlcnlTZWxlY3RvcignOnNjb3BlID4gLmhlYWRpbmctY29sbGFwc2UtaW5kaWNhdG9yJykpIHtcbiAgICAgICAgYWRkSW5kaWNhdG9yKGhlYWRpbmdFbCwgJ2hlYWRpbmctY29sbGFwc2UtaW5kaWNhdG9yJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZEZvbGRMaXN0cykge1xuICAgIGZvciAoY29uc3QgbGlzdEl0ZW1FbCBvZiBlbC5maW5kQWxsKCdsaScpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzT3duZWRCeVJlbmRlcmVkTWFya2Rvd24obGlzdEl0ZW1FbCwgZWwpXG4gICAgICAgICYmIGxpc3RJdGVtRWwucXVlcnlTZWxlY3RvcignOnNjb3BlID4gdWwsIDpzY29wZSA+IG9sJylcbiAgICAgICAgJiYgIWxpc3RJdGVtRWwucXVlcnlTZWxlY3RvcignOnNjb3BlID4gLmxpc3QtY29sbGFwc2UtaW5kaWNhdG9yJylcbiAgICAgICkge1xuICAgICAgICBhZGRJbmRpY2F0b3IobGlzdEl0ZW1FbCwgJ2xpc3QtY29sbGFwc2UtaW5kaWNhdG9yJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlZ2lzdGVyZWRGb2xkRWxzLmhhcyhlbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVnaXN0ZXJlZEZvbGRFbHMuYWRkKGVsKTtcblxuICBlbC5vbignY2xpY2snLCAnLmhlYWRpbmctY29sbGFwc2UtaW5kaWNhdG9yJywgKGNsaWNrRXZlbnQsIGluZGljYXRvckVsKSA9PiB7XG4gICAgaGFuZGxlSW5kaWNhdG9yQ2xpY2soY2xpY2tFdmVudCwgaW5kaWNhdG9yRWwsIGVsLCAoaGVhZGluZ0VsKSA9PiB7XG4gICAgICBpZiAoIWlzSGVhZGluZyhoZWFkaW5nRWwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRvZ2dsZUNvbGxhcHNlZChoZWFkaW5nRWwsICFoZWFkaW5nRWwuaGFzQ2xhc3MoJ2lzLWNvbGxhcHNlZCcpKTtcbiAgICAgIHVwZGF0ZUZvbGRlZEJsb2NrcyhlbCk7XG4gICAgICBlbC53aW4uZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIH0pO1xuICB9KTtcblxuICBlbC5vbignY2xpY2snLCAnbGkgPiAubGlzdC1jb2xsYXBzZS1pbmRpY2F0b3InLCAoY2xpY2tFdmVudCwgaW5kaWNhdG9yRWwpID0+IHtcbiAgICBoYW5kbGVJbmRpY2F0b3JDbGljayhjbGlja0V2ZW50LCBpbmRpY2F0b3JFbCwgZWwsIChsaXN0SXRlbUVsKSA9PiB7XG4gICAgICB0b2dnbGVDb2xsYXBzZWQobGlzdEl0ZW1FbCwgIWxpc3RJdGVtRWwuaGFzQ2xhc3MoJ2lzLWNvbGxhcHNlZCcpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogTWFrZXMgYSBmb290bm90ZSBsaW5rIGluIHJlbmRlcmVkIG1hcmtkb3duIGFjdCBhcyBpdCBkb2VzIGluIGEgUmVhZGluZyB2aWV3OiBhIGNsaWNrIHNjcm9sbHMgdG8gdGhlXG4gKiBmb290bm90ZSwgb3IgYmFjayB0byBpdHMgcmVmZXJlbmNlLCBhbmQgZmxhc2hlcyBpdCwgaW5zdGVhZCBvZiBuYXZpZ2F0aW5nIHRvIHRoZSBsaW5rJ3MgYCNgIGhhc2guXG4gKlxuICogUmVnaXN0ZXJlZCBieSBgcmVnaXN0ZXJMaW5rSGFuZGxlcnNgLCB3aGljaCBpcyB0aGUgdXN1YWwgd2F5IGluOyBjYWxsIGl0IGRpcmVjdGx5IG9ubHkgZm9yIGFuIGVsZW1lbnRcbiAqIHdob3NlIG90aGVyIGxpbmtzIGFyZSBoYW5kbGVkIHNvbWUgb3RoZXIgd2F5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRm9vdG5vdGVMaW5rSGFuZGxlcihwYXJhbXM6IFJlZ2lzdGVyRm9vdG5vdGVMaW5rSGFuZGxlclBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGVsIH0gPSBwYXJhbXM7XG4gIGVsLm9uKCdjbGljaycsICdhLmZvb3Rub3RlLWxpbmsnLCAoY2xpY2tFdmVudCwgbGlua0VsKSA9PiB7XG4gICAgaWYgKGNsaWNrRXZlbnQuYnV0dG9uICE9PSAwIHx8ICFpc093bmVkQnlSZW5kZXJlZE1hcmtkb3duKGxpbmtFbCwgZWwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNsaWNrRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGhyZWYgPSBsaW5rRWwuZ2V0QXR0cignaHJlZicpO1xuICAgIGlmICghaHJlZj8uc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvb3Rub3RlSWQgPSBocmVmLnNsaWNlKDEpO1xuICAgIGNvbnN0IHRhcmdldEVsID0gZWwuZmluZEFsbCgnW2RhdGEtZm9vdG5vdGUtaWRdJykuZmluZCgoY2FuZGlkYXRlRWwpID0+IGNhbmRpZGF0ZUVsLmdldEF0dHIoJ2RhdGEtZm9vdG5vdGUtaWQnKSA9PT0gZm9vdG5vdGVJZCk7XG4gICAgaWYgKCF0YXJnZXRFbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVuZm9sZEFuY2VzdG9ycyh0YXJnZXRFbCwgZWwpO1xuICAgIHRhcmdldEVsLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgIGZsYXNoKHRhcmdldEVsLCBlbCk7XG4gIH0pO1xufVxuXG5jb25zdCByZWdpc3RlcmVkRm9sZEVscyA9IG5ldyBXZWFrU2V0PEhUTUxFbGVtZW50PigpO1xuXG5mdW5jdGlvbiBhZGRJbmRpY2F0b3IocGFyZW50RWw6IEhUTUxFbGVtZW50LCBjbHM6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBpbmRpY2F0b3JFbCA9IHBhcmVudEVsLmNyZWF0ZVNwYW4oe1xuICAgIGNsczogW2NscywgJ2NvbGxhcHNlLWluZGljYXRvcicsICdjb2xsYXBzZS1pY29uJ10sXG4gICAgcHJlcGVuZDogdHJ1ZVxuICB9KTtcbiAgc2V0SWNvbihpbmRpY2F0b3JFbCwgRk9MRF9JQ09OKTtcbn1cblxuZnVuY3Rpb24gZmxhc2godGFyZ2V0RWw6IEhUTUxFbGVtZW50LCByb290RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGZvciAoY29uc3QgZmxhc2hpbmdFbCBvZiByb290RWwuZmluZEFsbCgnLmlzLWZsYXNoaW5nJykpIHtcbiAgICBmbGFzaGluZ0VsLnJlbW92ZUNsYXNzKCdpcy1mbGFzaGluZycpO1xuICB9XG4gIHRhcmdldEVsLmFkZENsYXNzKCdpcy1mbGFzaGluZycpO1xuICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2xlZXAoeyBtaWxsaXNlY29uZHM6IEZMQVNIX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyB9KTtcbiAgICB0YXJnZXRFbC5yZW1vdmVDbGFzcygnaXMtZmxhc2hpbmcnKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEJsb2NrSGVhZGluZyhibG9jazogRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIGlmIChpc0hlYWRpbmcoYmxvY2spKSB7XG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSBibG9jay5maXJzdEVsZW1lbnRDaGlsZDtcbiAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgaXNIZWFkaW5nKGZpcnN0Q2hpbGQpID8gZmlyc3RDaGlsZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEJsb2NrSGVhZGluZ0xldmVsKGJsb2NrOiBFbGVtZW50KTogbnVsbCB8IG51bWJlciB7XG4gIGNvbnN0IGhlYWRpbmdFbCA9IGdldEJsb2NrSGVhZGluZyhibG9jayk7XG4gIHJldHVybiBoZWFkaW5nRWwgPyBnZXRIZWFkaW5nTGV2ZWwoaGVhZGluZ0VsKSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEJsb2Nrcyhyb290RWw6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIHJldHVybiByb290RWwuZmluZEFsbCgnOnNjb3BlID4gKicpO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkaW5nTGV2ZWwoaGVhZGluZ0VsOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIoaGVhZGluZ0VsLnRhZ05hbWUuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVJbmRpY2F0b3JDbGljayhcbiAgY2xpY2tFdmVudDogTW91c2VFdmVudCxcbiAgaW5kaWNhdG9yRWw6IEhUTUxFbGVtZW50LFxuICByb290RWw6IEhUTUxFbGVtZW50LFxuICB0b2dnbGU6IChwYXJlbnRFbDogRWxlbWVudCkgPT4gdm9pZFxuKTogdm9pZCB7XG4gIGlmIChjbGlja0V2ZW50LmJ1dHRvbiAhPT0gMCB8fCBjbGlja0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzT3duZWRCeVJlbmRlcmVkTWFya2Rvd24oaW5kaWNhdG9yRWwsIHJvb3RFbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2xpY2tFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBUaGUgZGVsZWdhdGVkIGNsaWNrIG1hdGNoZWQgdGhlIGluZGljYXRvciBpbnNpZGUgYHJvb3RFbGAsIHNvIGl0IGhhcyBhIHBhcmVudC5cbiAgdG9nZ2xlKGVuc3VyZU5vbk51bGxhYmxlKGluZGljYXRvckVsLnBhcmVudEVsZW1lbnQpKTtcbn1cblxuZnVuY3Rpb24gaXNIZWFkaW5nKGVsZW1lbnQ6IEVsZW1lbnQpOiBlbGVtZW50IGlzIEhUTUxFbGVtZW50IHtcbiAgcmV0dXJuIEhFQURJTkdfVEFHX05BTUVTLmhhcyhlbGVtZW50LnRhZ05hbWUpO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVDb2xsYXBzZWQocGFyZW50RWw6IEVsZW1lbnQsIGlzQ29sbGFwc2VkOiBib29sZWFuKTogdm9pZCB7XG4gIHBhcmVudEVsLnRvZ2dsZUNsYXNzKCdpcy1jb2xsYXBzZWQnLCBpc0NvbGxhcHNlZCk7XG4gIHBhcmVudEVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCc6c2NvcGUgPiAuY29sbGFwc2UtaWNvbicpPy50b2dnbGVDbGFzcygnaXMtY29sbGFwc2VkJywgaXNDb2xsYXBzZWQpO1xufVxuXG4vKipcbiAqIFVuZm9sZHMgd2hhdGV2ZXIgaGlkZXMgYHRhcmdldEVsYDogZXZlcnkgZm9sZGVkIGxpc3QgaXRlbSBhcm91bmQgaXQsIGFuZCBldmVyeSBmb2xkZWQgaGVhZGluZyBpdCBzaXRzXG4gKiB1bmRlciwgc28gYSBmb290bm90ZSBjbGljayBuZXZlciBzY3JvbGxzIHRvIGFuIGVsZW1lbnQgbm9ib2R5IGNhbiBzZWUuXG4gKlxuICogQHBhcmFtIHRhcmdldEVsIC0gVGhlIGVsZW1lbnQgdG8gcmV2ZWFsLlxuICogQHBhcmFtIHJvb3RFbCAtIFRoZSBlbGVtZW50IG1hcmtkb3duIHdhcyByZW5kZXJlZCBpbnRvLlxuICovXG5mdW5jdGlvbiB1bmZvbGRBbmNlc3RvcnModGFyZ2V0RWw6IEhUTUxFbGVtZW50LCByb290RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGxldCB0YXJnZXRCbG9jazogRWxlbWVudCA9IHRhcmdldEVsO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHRhcmdldEJsb2NrLnRhZ05hbWUgPT09ICdMSScgJiYgdGFyZ2V0QmxvY2suaGFzQ2xhc3MoJ2lzLWNvbGxhcHNlZCcpKSB7XG4gICAgICB0b2dnbGVDb2xsYXBzZWQodGFyZ2V0QmxvY2ssIGZhbHNlKTtcbiAgICB9XG4gICAgLy8gYHRhcmdldEVsYCB3YXMgZm91bmQgaW5zaWRlIGByb290RWxgLCBzbyB0aGUgd2FsayByZWFjaGVzIGl0IGJlZm9yZSBydW5uaW5nIG91dCBvZiBwYXJlbnRzLlxuICAgIGNvbnN0IHBhcmVudEVsID0gZW5zdXJlTm9uTnVsbGFibGUodGFyZ2V0QmxvY2sucGFyZW50RWxlbWVudCk7XG4gICAgaWYgKHBhcmVudEVsID09PSByb290RWwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0YXJnZXRCbG9jayA9IHBhcmVudEVsO1xuICB9XG5cbiAgLy8gVGhlIGhlYWRpbmdzIGEgYmxvY2sgc2l0cyB1bmRlciBhcmUgdGhlIG5lYXJlc3QgZWFybGllciBoZWFkaW5nIG9mIGVhY2ggc3RyaWN0bHkgbG93ZXIgbGV2ZWwuXG4gIGNvbnN0IGJsb2NrczogRWxlbWVudFtdID0gZ2V0QmxvY2tzKHJvb3RFbCk7XG4gIGxldCBsZXZlbCA9IGdldEJsb2NrSGVhZGluZ0xldmVsKHRhcmdldEJsb2NrKSA/PyBJbmZpbml0eTtcbiAgbGV0IGhhc1VuZm9sZGVkID0gZmFsc2U7XG4gIGZvciAobGV0IGluZGV4ID0gYmxvY2tzLmluZGV4T2YodGFyZ2V0QmxvY2spIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGhlYWRpbmdFbCA9IGdldEJsb2NrSGVhZGluZyhlbnN1cmVOb25OdWxsYWJsZShibG9ja3NbaW5kZXhdKSk7XG4gICAgaWYgKCFoZWFkaW5nRWwgfHwgZ2V0SGVhZGluZ0xldmVsKGhlYWRpbmdFbCkgPj0gbGV2ZWwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXZlbCA9IGdldEhlYWRpbmdMZXZlbChoZWFkaW5nRWwpO1xuICAgIGlmICghaGVhZGluZ0VsLmhhc0NsYXNzKCdpcy1jb2xsYXBzZWQnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ29sbGFwc2VkKGhlYWRpbmdFbCwgZmFsc2UpO1xuICAgIGhhc1VuZm9sZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNVbmZvbGRlZCkge1xuICAgIHVwZGF0ZUZvbGRlZEJsb2Nrcyhyb290RWwpO1xuICB9XG59XG5cbi8qKlxuICogU2hvd3Mgb3IgaGlkZXMgZXZlcnkgYmxvY2sgb2YgYHJvb3RFbGAgYWZ0ZXIgdGhlIGZvbGRlZCBoZWFkaW5ncywgc28gYSBibG9jayBpcyBoaWRkZW4gZXhhY3RseSB3aGVuIGFcbiAqIGZvbGRlZCBoZWFkaW5nIGFib3ZlIGl0IGhhcyBubyBoZWFkaW5nIG9mIHRoZSBzYW1lIG9yIGEgaGlnaGVyIGxldmVsIGluIGJldHdlZW4uXG4gKlxuICogQHBhcmFtIHJvb3RFbCAtIFRoZSBlbGVtZW50IG1hcmtkb3duIHdhcyByZW5kZXJlZCBpbnRvLlxuICovXG5mdW5jdGlvbiB1cGRhdGVGb2xkZWRCbG9ja3Mocm9vdEVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICBsZXQgZm9sZGVkTGV2ZWw6IG51bGwgfCBudW1iZXIgPSBudWxsO1xuICBmb3IgKGNvbnN0IGJsb2NrIG9mIGdldEJsb2Nrcyhyb290RWwpKSB7XG4gICAgY29uc3QgaGVhZGluZ0VsID0gZ2V0QmxvY2tIZWFkaW5nKGJsb2NrKTtcbiAgICBjb25zdCBoZWFkaW5nTGV2ZWwgPSBoZWFkaW5nRWwgPyBnZXRIZWFkaW5nTGV2ZWwoaGVhZGluZ0VsKSA6IG51bGw7XG4gICAgaWYgKGZvbGRlZExldmVsICE9PSBudWxsICYmIGhlYWRpbmdMZXZlbCAhPT0gbnVsbCAmJiBoZWFkaW5nTGV2ZWwgPD0gZm9sZGVkTGV2ZWwpIHtcbiAgICAgIGZvbGRlZExldmVsID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXNTaG93biA9IGZvbGRlZExldmVsID09PSBudWxsO1xuICAgIGJsb2NrLnRvZ2dsZShpc1Nob3duKTtcbiAgICBpZiAoaXNTaG93biAmJiBoZWFkaW5nRWw/Lmhhc0NsYXNzKCdpcy1jb2xsYXBzZWQnKSkge1xuICAgICAgZm9sZGVkTGV2ZWwgPSBoZWFkaW5nTGV2ZWw7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYUEsbUJBR087QUFDUCx5QkFBa0M7QUFDbEMsc0JBQXdCO0FBRXhCLHVCQUF5QjtBQU16QixNQUFNLGlDQUFpQztBQUV2QyxNQUFNLFlBQVk7QUFFbEIsTUFBTSxvQkFBb0Isb0JBQUksSUFBSSxDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUM7QUE4Qy9ELFNBQVMsMEJBQTBCLFNBQWtCLFFBQThCO0FBQ3hGLE1BQUksVUFBMEI7QUFDOUIsU0FBTyxTQUFTO0FBQ2QsUUFBSSxZQUFZLFFBQVE7QUFDdEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLFFBQVEsU0FBUyx1QkFBdUIsS0FBSyxRQUFRLFNBQVMsWUFBWSxHQUFHO0FBQy9FLGFBQU87QUFBQSxJQUNUO0FBQ0EsY0FBVSxRQUFRO0FBQUEsRUFDcEI7QUFDQSxTQUFPO0FBQ1Q7QUFhTyxTQUFTLHFCQUFxQixRQUEwQztBQUM3RSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EscUJBQXFCO0FBQUEsSUFDckIsa0JBQWtCO0FBQUEsRUFDcEIsSUFBSTtBQUVKLEtBQUcsU0FBUywwQkFBUyxhQUFhLDBCQUFTLGdCQUFnQjtBQUUzRCxNQUFJ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
@@ -0,0 +1,77 @@
1
+ /// <reference path="./library-references.d.cts" />
2
+ /// <reference lib="dom" />
3
+ /**
4
+ * @file
5
+ *
6
+ * The parts of a Reading view's behavior that Obsidian keeps inside its preview renderer, ported for
7
+ * markdown rendered anywhere else with `MarkdownRenderer.render`.
8
+ *
9
+ * `MarkdownPreviewRenderer.registerDomEvents` covers internal and external links, tags, drags, context
10
+ * menus and the footnote HOVER. Three things it does not cover, read from Obsidian `1.15.0`: the footnote
11
+ * CLICK (`onFootnoteLinkClick`), and the heading and list FOLDING, whose indicators the renderer only adds
12
+ * in its own `onRender` and whose clicks only it handles. Without these, a footnote click in standalone
13
+ * rendered markdown falls through to the browser's hash navigation, and nothing can be folded.
14
+ */
15
+ /**
16
+ * Parameters for {@link registerFoldHandlers}.
17
+ */
18
+ export interface RegisterFoldHandlersParams {
19
+ /**
20
+ * The element markdown was rendered into, the one `MarkdownRenderer.render` was handed. Its direct
21
+ * children are the rendered blocks a folded heading hides.
22
+ */
23
+ readonly el: HTMLElement;
24
+ /**
25
+ * Whether headings can be folded.
26
+ *
27
+ * @default `true`
28
+ */
29
+ readonly shouldFoldHeadings?: boolean;
30
+ /**
31
+ * Whether list items with a nested list can be folded.
32
+ *
33
+ * @default `true`
34
+ */
35
+ readonly shouldFoldLists?: boolean;
36
+ }
37
+ /**
38
+ * Parameters for {@link registerFootnoteLinkHandler}.
39
+ */
40
+ export interface RegisterFootnoteLinkHandlerParams {
41
+ /**
42
+ * The element markdown was rendered into.
43
+ */
44
+ readonly el: HTMLElement;
45
+ }
46
+ /**
47
+ * Whether an element belongs to the markdown rendered into `rootEl`, rather than to a Reading view or a
48
+ * Bases view nested inside it (an embed), which handles its own events. A port of Obsidian's static
49
+ * `MarkdownPreviewRenderer.belongsToMe`, which `obsidian-typings` does not declare.
50
+ *
51
+ * @param element - The element an event landed on.
52
+ * @param rootEl - The element markdown was rendered into.
53
+ * @returns Whether the element is `rootEl` itself or sits inside it with no nested view in between.
54
+ */
55
+ export declare function isOwnedByRenderedMarkdown(element: Element, rootEl: HTMLElement): boolean;
56
+ /**
57
+ * Makes the headings and the nested lists of rendered markdown foldable, the way they are in a Reading
58
+ * view: it adds Obsidian's own collapse indicators and handles their clicks.
59
+ *
60
+ * A folded heading hides every block after it up to the next heading of the same or a higher level;
61
+ * unfolding it shows them again, except those a folded heading among them still hides. A folded list
62
+ * item hides its nested lists. Call it again after the element is re-rendered: blocks that already have
63
+ * an indicator are left alone, and the click handler is registered only once per element.
64
+ *
65
+ * @param params - The parameters.
66
+ */
67
+ export declare function registerFoldHandlers(params: RegisterFoldHandlersParams): void;
68
+ /**
69
+ * Makes a footnote link in rendered markdown act as it does in a Reading view: a click scrolls to the
70
+ * footnote, or back to its reference, and flashes it, instead of navigating to the link's `#` hash.
71
+ *
72
+ * Registered by `registerLinkHandlers`, which is the usual way in; call it directly only for an element
73
+ * whose other links are handled some other way.
74
+ *
75
+ * @param params - The parameters.
76
+ */
77
+ export declare function registerFootnoteLinkHandler(params: RegisterFootnoteLinkHandlerParams): void;