@mnaoumov/obsidian-lib 10.11.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/README.md +26 -0
  2. package/components/all-windows-status-bar-item-component/package.json +6 -0
  3. package/components/shared-component-pool-component/package.json +6 -0
  4. package/components/worker-component/package.json +6 -0
  5. package/components/worker-pool-component/package.json +6 -0
  6. package/components/workspace-layout-state-component/package.json +6 -0
  7. package/dist/lib/cjs/__merged.cjs +477 -285
  8. package/dist/lib/cjs/__merged.d.cts +26 -10
  9. package/dist/lib/cjs/anchored-suggest.cjs +1 -1
  10. package/dist/lib/cjs/app.cjs +2 -2
  11. package/dist/lib/cjs/async-with-notice.cjs +4 -4
  12. package/dist/lib/cjs/attachment-path.cjs +9 -9
  13. package/dist/lib/cjs/attachment-path.d.cts +3 -3
  14. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
  15. package/dist/lib/cjs/backlink-index.cjs +5 -5
  16. package/dist/lib/cjs/backlink.cjs +7 -7
  17. package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
  18. package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
  19. package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
  20. package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
  21. package/dist/lib/cjs/bug-report.cjs +38 -12
  22. package/dist/lib/cjs/bug-report.d.cts +65 -0
  23. package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
  24. package/dist/lib/cjs/bulk-operation.cjs +2 -2
  25. package/dist/lib/cjs/callout.cjs +6 -6
  26. package/dist/lib/cjs/canvas.cjs +11 -9
  27. package/dist/lib/cjs/canvas.d.cts +13 -0
  28. package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
  29. package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
  30. package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
  31. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
  32. package/dist/lib/cjs/codemirror/index.cjs +7 -7
  33. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
  34. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
  35. package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
  36. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
  37. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
  38. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
  39. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
  40. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
  41. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
  42. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
  43. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
  44. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
  45. package/dist/lib/cjs/command-handlers/index.cjs +15 -15
  46. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +95 -4
  47. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
  48. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
  49. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
  50. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
  51. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
  52. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
  53. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
  54. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
  55. package/dist/lib/cjs/community-plugins.cjs +3 -3
  56. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
  57. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  58. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
  59. package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
  60. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  61. package/dist/lib/cjs/components/async-events-component.cjs +1 -1
  62. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
  63. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
  64. package/dist/lib/cjs/components/component-ex.cjs +21 -11
  65. package/dist/lib/cjs/components/component-ex.d.cts +11 -0
  66. package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
  67. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
  68. package/dist/lib/cjs/components/disposable-component.cjs +2 -2
  69. package/dist/lib/cjs/components/embed-extensions-component.cjs +21 -4
  70. package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
  71. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +24 -10
  72. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
  73. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
  74. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
  75. package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
  76. package/dist/lib/cjs/components/index.cjs +54 -39
  77. package/dist/lib/cjs/components/index.d.cts +5 -0
  78. package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
  79. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
  80. package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
  81. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  82. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  83. package/dist/lib/cjs/components/plugin-gate-component.cjs +69 -36
  84. package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
  85. package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
  86. package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
  87. package/dist/lib/cjs/components/plugin-settings-component.cjs +119 -18
  88. package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
  89. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
  90. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
  91. package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
  92. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
  93. package/dist/lib/cjs/components/registry-component.cjs +2 -2
  94. package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
  95. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
  96. package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
  97. package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
  98. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  99. package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
  100. package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
  101. package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
  102. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
  103. package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
  104. package/dist/lib/cjs/components/worker-component.cjs +363 -0
  105. package/dist/lib/cjs/components/worker-component.d.cts +156 -0
  106. package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
  107. package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
  108. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
  109. package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
  110. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  111. package/dist/lib/cjs/constructors/index.cjs +1 -1
  112. package/dist/lib/cjs/css-class.cjs +5 -1
  113. package/dist/lib/cjs/css-class.d.cts +16 -0
  114. package/dist/lib/cjs/data-handler.cjs +264 -6
  115. package/dist/lib/cjs/data-handler.d.cts +219 -2
  116. package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
  117. package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
  118. package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
  119. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  120. package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
  121. package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
  122. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
  123. package/dist/lib/cjs/data-stores/index.cjs +6 -6
  124. package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
  125. package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
  126. package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
  127. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
  128. package/dist/lib/cjs/dataview-link.cjs +2 -2
  129. package/dist/lib/cjs/dataview.cjs +27 -7
  130. package/dist/lib/cjs/dataview.d.cts +14 -0
  131. package/dist/lib/cjs/debug.cjs +3 -3
  132. package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
  133. package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
  134. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
  135. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
  136. package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
  137. package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
  138. package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
  139. package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
  140. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
  141. package/dist/lib/cjs/disposable.cjs +150 -0
  142. package/dist/lib/cjs/disposable.d.cts +39 -0
  143. package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
  144. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
  145. package/dist/lib/cjs/editor-suggest.cjs +1 -1
  146. package/dist/lib/cjs/editor.cjs +6 -6
  147. package/dist/lib/cjs/events.cjs +2 -2
  148. package/dist/lib/cjs/extensions-registrar.cjs +1 -1
  149. package/dist/lib/cjs/feature-request.cjs +1 -1
  150. package/dist/lib/cjs/file-change.cjs +10 -10
  151. package/dist/lib/cjs/file-explorer.cjs +2 -2
  152. package/dist/lib/cjs/file-manager.cjs +5 -5
  153. package/dist/lib/cjs/file-system.cjs +10 -10
  154. package/dist/lib/cjs/folder-note.cjs +4 -4
  155. package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
  156. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
  157. package/dist/lib/cjs/frontmatter.cjs +5 -5
  158. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  159. package/dist/lib/cjs/git-rename-history.cjs +1 -1
  160. package/dist/lib/cjs/git-rename-history.d.cts +2 -2
  161. package/dist/lib/cjs/hotkey.cjs +1 -1
  162. package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
  163. package/dist/lib/cjs/html-element.cjs +2 -2
  164. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
  165. package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
  166. package/dist/lib/cjs/i18n/i18n.cjs +7 -7
  167. package/dist/lib/cjs/i18n/index.cjs +4 -4
  168. package/dist/lib/cjs/i18n/locales/en.cjs +27 -1
  169. package/dist/lib/cjs/i18n/locales/en.d.cts +26 -0
  170. package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
  171. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
  172. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +26 -0
  173. package/dist/lib/cjs/index.cjs +147 -126
  174. package/dist/lib/cjs/index.d.cts +7 -0
  175. package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
  176. package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
  177. package/dist/lib/cjs/library-styles.cjs +3 -3
  178. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
  179. package/dist/lib/cjs/link.cjs +76 -56
  180. package/dist/lib/cjs/link.d.cts +20 -14
  181. package/dist/lib/cjs/logger.cjs +4 -4
  182. package/dist/lib/cjs/loop.cjs +10 -16
  183. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
  184. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
  185. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
  186. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
  187. package/dist/lib/cjs/markdown-view.cjs +191 -3
  188. package/dist/lib/cjs/markdown-view.d.cts +48 -1
  189. package/dist/lib/cjs/markdown.cjs +12 -12
  190. package/dist/lib/cjs/metadata-cache.cjs +23 -23
  191. package/dist/lib/cjs/metadata-cache.d.cts +5 -4
  192. package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
  193. package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
  194. package/dist/lib/cjs/mobile-app-info.cjs +1 -1
  195. package/dist/lib/cjs/modals/alert.cjs +4 -4
  196. package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
  197. package/dist/lib/cjs/modals/confirm.cjs +4 -4
  198. package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
  199. package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
  200. package/dist/lib/cjs/modals/index.cjs +17 -11
  201. package/dist/lib/cjs/modals/index.d.cts +2 -0
  202. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  203. package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
  204. package/dist/lib/cjs/modals/modal.cjs +3 -3
  205. package/dist/lib/cjs/modals/prompt.cjs +10 -10
  206. package/dist/lib/cjs/modals/prompt.d.cts +1 -1
  207. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
  208. package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
  209. package/dist/lib/cjs/modals/select-item.cjs +6 -6
  210. package/dist/lib/cjs/modals/select-option.cjs +3 -3
  211. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
  212. package/dist/lib/cjs/note-priority.cjs +2 -2
  213. package/dist/lib/cjs/notebook-navigator.cjs +12 -2
  214. package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
  215. package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
  216. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
  217. package/dist/lib/cjs/obsidian-settings.cjs +1 -1
  218. package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
  219. package/dist/lib/cjs/parse-link.cjs +14 -14
  220. package/dist/lib/cjs/path-compatibility.cjs +368 -0
  221. package/dist/lib/cjs/path-compatibility.d.cts +263 -0
  222. package/dist/lib/cjs/path-settings.cjs +3 -3
  223. package/dist/lib/cjs/pdf.cjs +2 -2
  224. package/dist/lib/cjs/plugin/index.cjs +18 -12
  225. package/dist/lib/cjs/plugin/index.d.cts +2 -0
  226. package/dist/lib/cjs/plugin/plugin-api.cjs +21 -12
  227. package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
  228. package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
  229. package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
  230. package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
  231. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
  232. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
  233. package/dist/lib/cjs/plugin/plugin-install-state.cjs +49 -4
  234. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
  235. package/dist/lib/cjs/plugin/plugin-instance.cjs +450 -0
  236. package/dist/lib/cjs/plugin/plugin-instance.d.cts +258 -0
  237. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
  238. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
  239. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
  240. package/dist/lib/cjs/plugin/plugin.cjs +133 -34
  241. package/dist/lib/cjs/plugin/plugin.d.cts +35 -5
  242. package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
  243. package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
  244. package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
  245. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
  246. package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
  247. package/dist/lib/cjs/popovers/index.cjs +3 -3
  248. package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
  249. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  250. package/dist/lib/cjs/queue.cjs +8 -8
  251. package/dist/lib/cjs/react/app-context.cjs +3 -3
  252. package/dist/lib/cjs/react/index.cjs +1 -1
  253. package/dist/lib/cjs/reference-definition.cjs +1 -1
  254. package/dist/lib/cjs/reference.cjs +3 -3
  255. package/dist/lib/cjs/release-asset.cjs +5 -5
  256. package/dist/lib/cjs/rendered-markdown.cjs +4 -4
  257. package/dist/lib/cjs/request-url.cjs +4 -4
  258. package/dist/lib/cjs/resource-lock.cjs +46 -42
  259. package/dist/lib/cjs/resource-lock.d.cts +8 -7
  260. package/dist/lib/cjs/resource-url.cjs +3 -3
  261. package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
  262. package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
  263. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
  264. package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
  265. package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
  266. package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
  267. package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
  268. package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
  269. package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
  270. package/dist/lib/cjs/setting-components/index.cjs +30 -30
  271. package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
  272. package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
  273. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
  274. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
  275. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
  276. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
  277. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
  278. package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
  279. package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
  280. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
  281. package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
  282. package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
  283. package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
  284. package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
  285. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
  286. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
  287. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
  288. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
  289. package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
  290. package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
  291. package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
  292. package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
  293. package/dist/lib/cjs/setting-ex.cjs +26 -26
  294. package/dist/lib/cjs/setting-group-ex.cjs +2 -2
  295. package/dist/lib/cjs/settings-recovery.cjs +217 -0
  296. package/dist/lib/cjs/settings-recovery.d.cts +178 -0
  297. package/dist/lib/cjs/settings-tabs.cjs +5 -5
  298. package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
  299. package/dist/lib/cjs/templater.cjs +14 -4
  300. package/dist/lib/cjs/templater.d.cts +6 -0
  301. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
  302. package/dist/lib/cjs/transformers/index.cjs +1 -1
  303. package/dist/lib/cjs/trusted-input.cjs +1 -1
  304. package/dist/lib/cjs/validation.cjs +4 -4
  305. package/dist/lib/cjs/vault-delete.cjs +6 -6
  306. package/dist/lib/cjs/vault-transaction.cjs +5 -5
  307. package/dist/lib/cjs/vault.cjs +12 -12
  308. package/dist/lib/cjs/view-registrar.cjs +1 -1
  309. package/dist/lib/cjs/virtual-file.cjs +16 -14
  310. package/dist/lib/cjs/virtual-file.d.cts +2 -1
  311. package/dist/lib/cjs/wasm.cjs +119 -0
  312. package/dist/lib/cjs/wasm.d.cts +54 -0
  313. package/dist/lib/cjs/worker-protocol.cjs +209 -0
  314. package/dist/lib/cjs/worker-protocol.d.cts +282 -0
  315. package/dist/lib/cjs/workspace.cjs +1 -1
  316. package/dist/lib/esm/__merged.d.mts +26 -10
  317. package/dist/lib/esm/__merged.mjs +215 -5
  318. package/dist/lib/esm/app.mjs +2 -2
  319. package/dist/lib/esm/attachment-path.d.mts +3 -3
  320. package/dist/lib/esm/attachment-path.mjs +2 -2
  321. package/dist/lib/esm/backlink-index.mjs +2 -2
  322. package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
  323. package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
  324. package/dist/lib/esm/bug-report.d.mts +65 -0
  325. package/dist/lib/esm/bug-report.mjs +33 -10
  326. package/dist/lib/esm/canvas.d.mts +13 -0
  327. package/dist/lib/esm/canvas.mjs +6 -5
  328. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
  329. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
  330. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
  331. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
  332. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
  333. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
  334. package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
  335. package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
  336. package/dist/lib/esm/components/component-ex.d.mts +11 -0
  337. package/dist/lib/esm/components/component-ex.mjs +19 -6
  338. package/dist/lib/esm/components/disposable-component.mjs +1 -1
  339. package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
  340. package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
  341. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
  342. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
  343. package/dist/lib/esm/components/index.d.mts +5 -0
  344. package/dist/lib/esm/components/index.mjs +12 -2
  345. package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
  346. package/dist/lib/esm/components/plugin-gate-component.mjs +61 -26
  347. package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
  348. package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
  349. package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
  350. package/dist/lib/esm/components/plugin-settings-component.mjs +105 -4
  351. package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
  352. package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
  353. package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
  354. package/dist/lib/esm/components/worker-component.d.mts +156 -0
  355. package/dist/lib/esm/components/worker-component.mjs +279 -0
  356. package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
  357. package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
  358. package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
  359. package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
  360. package/dist/lib/esm/css-class.d.mts +16 -0
  361. package/dist/lib/esm/css-class.mjs +5 -1
  362. package/dist/lib/esm/data-handler.d.mts +219 -2
  363. package/dist/lib/esm/data-handler.mjs +262 -5
  364. package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
  365. package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
  366. package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
  367. package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
  368. package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
  369. package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
  370. package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
  371. package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
  372. package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
  373. package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
  374. package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
  375. package/dist/lib/esm/dataview.d.mts +14 -0
  376. package/dist/lib/esm/dataview.mjs +19 -1
  377. package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
  378. package/dist/lib/esm/demo-vault-helper.mjs +29 -1
  379. package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
  380. package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
  381. package/dist/lib/esm/desktop-git-runner.mjs +3 -3
  382. package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
  383. package/dist/lib/esm/disposable.d.mts +39 -0
  384. package/dist/lib/esm/disposable.mjs +64 -0
  385. package/dist/lib/esm/file-system.mjs +2 -2
  386. package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
  387. package/dist/lib/esm/generated-during-build.mjs +2 -2
  388. package/dist/lib/esm/git-rename-history.d.mts +2 -2
  389. package/dist/lib/esm/git-rename-history.mjs +1 -1
  390. package/dist/lib/esm/i18n/locales/en.d.mts +26 -0
  391. package/dist/lib/esm/i18n/locales/en.mjs +27 -1
  392. package/dist/lib/esm/i18n/locales/translations-map.d.mts +26 -0
  393. package/dist/lib/esm/index.d.mts +7 -0
  394. package/dist/lib/esm/index.mjs +15 -1
  395. package/dist/lib/esm/link.d.mts +20 -14
  396. package/dist/lib/esm/link.mjs +57 -38
  397. package/dist/lib/esm/loop.mjs +2 -8
  398. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
  399. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
  400. package/dist/lib/esm/markdown-view.d.mts +48 -1
  401. package/dist/lib/esm/markdown-view.mjs +192 -2
  402. package/dist/lib/esm/metadata-cache.d.mts +5 -4
  403. package/dist/lib/esm/metadata-cache.mjs +6 -6
  404. package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
  405. package/dist/lib/esm/misplaced-attachment.mjs +212 -0
  406. package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
  407. package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
  408. package/dist/lib/esm/modals/index.d.mts +2 -0
  409. package/dist/lib/esm/modals/index.mjs +5 -1
  410. package/dist/lib/esm/modals/prompt.d.mts +1 -1
  411. package/dist/lib/esm/modals/prompt.mjs +1 -1
  412. package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
  413. package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
  414. package/dist/lib/esm/notebook-navigator.d.mts +6 -0
  415. package/dist/lib/esm/notebook-navigator.mjs +11 -2
  416. package/dist/lib/esm/parse-link.mjs +4 -4
  417. package/dist/lib/esm/path-compatibility.d.mts +263 -0
  418. package/dist/lib/esm/path-compatibility.mjs +277 -0
  419. package/dist/lib/esm/plugin/index.d.mts +2 -0
  420. package/dist/lib/esm/plugin/index.mjs +6 -2
  421. package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
  422. package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
  423. package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
  424. package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
  425. package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
  426. package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
  427. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  428. package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
  429. package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
  430. package/dist/lib/esm/plugin/plugin-instance.d.mts +258 -0
  431. package/dist/lib/esm/plugin/plugin-instance.mjs +367 -0
  432. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
  433. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
  434. package/dist/lib/esm/plugin/plugin.d.mts +35 -5
  435. package/dist/lib/esm/plugin/plugin.mjs +118 -9
  436. package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
  437. package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
  438. package/dist/lib/esm/release-asset.mjs +1 -1
  439. package/dist/lib/esm/resource-lock.d.mts +8 -7
  440. package/dist/lib/esm/resource-lock.mjs +31 -26
  441. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
  442. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
  443. package/dist/lib/esm/settings-recovery.d.mts +178 -0
  444. package/dist/lib/esm/settings-recovery.mjs +125 -0
  445. package/dist/lib/esm/settings-tabs.mjs +2 -2
  446. package/dist/lib/esm/templater.d.mts +6 -0
  447. package/dist/lib/esm/templater.mjs +11 -2
  448. package/dist/lib/esm/vault.mjs +1 -1
  449. package/dist/lib/esm/virtual-file.d.mts +2 -1
  450. package/dist/lib/esm/virtual-file.mjs +7 -5
  451. package/dist/lib/esm/wasm.d.mts +54 -0
  452. package/dist/lib/esm/wasm.mjs +30 -0
  453. package/dist/lib/esm/worker-protocol.d.mts +282 -0
  454. package/dist/lib/esm/worker-protocol.mjs +113 -0
  455. package/dist/styles.css +16 -1
  456. package/modals/copy-text-manually/package.json +6 -0
  457. package/modals/review-bug-report-diagnostics/package.json +6 -0
  458. package/package.json +10 -8
  459. package/plugin/plugin-instance/package.json +6 -0
  460. package/plugin/third-party-plugin/package.json +6 -0
@@ -0,0 +1,282 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /// <reference lib="dom" />
3
+ /// <reference lib="dom.iterable" />
4
+ /**
5
+ * @file
6
+ *
7
+ * The message protocol between `WorkerComponent` on the main thread and {@link exposeWorkerApi} inside a worker.
8
+ *
9
+ * This module imports nothing, so a worker entry point bundled by `@mnaoumov/obsidian-dev-toolkit`'s `workers` feature
10
+ * can import it: a worker has no `obsidian` module and no Node builtins. Its message shapes are a wire format between
11
+ * the plugin's main bundle and its worker bundle, which may come from different copies of this library, so fields are
12
+ * only ever added and a change of meaning moves to a new {@link WORKER_PROTOCOL} value.
13
+ */
14
+ /**
15
+ * The tag every message of this protocol carries. Messages without it are ignored on both sides, so a worker can
16
+ * exchange its own messages too.
17
+ */
18
+ export declare const WORKER_PROTOCOL = "obsidian-lib-worker-v1";
19
+ /**
20
+ * An error reduced to plain data, because an `Error` loses its class across the worker boundary.
21
+ */
22
+ export interface SerializedWorkerError {
23
+ /**
24
+ * The error message.
25
+ */
26
+ readonly message: string;
27
+ /**
28
+ * The error name.
29
+ */
30
+ readonly name: string;
31
+ /**
32
+ * The stack in the worker, when there was one.
33
+ */
34
+ readonly stack?: string;
35
+ }
36
+ /**
37
+ * A result marked to transfer some of its objects rather than copy them. Build it with {@link withTransfer}.
38
+ *
39
+ * @typeParam TValue - The value type.
40
+ */
41
+ export interface TransferredValue<TValue> {
42
+ /**
43
+ * The marker that identifies the wrapper structurally, so a wrapper built by another copy of this library is
44
+ * recognized too.
45
+ */
46
+ readonly __obsidianLibTransferredValue: true;
47
+ /**
48
+ * The objects to transfer.
49
+ */
50
+ readonly transfer: readonly Transferable[];
51
+ /**
52
+ * The value.
53
+ */
54
+ readonly value: TValue;
55
+ }
56
+ /**
57
+ * A value split from its transfer list, ready to post.
58
+ */
59
+ export interface UnwrappedTransferredValue {
60
+ /**
61
+ * The objects to transfer.
62
+ */
63
+ readonly transfer: Transferable[];
64
+ /**
65
+ * The value to post.
66
+ */
67
+ readonly value: unknown;
68
+ }
69
+ /**
70
+ * An API a worker exposes: an object whose every member is a function.
71
+ *
72
+ * @typeParam TApi - The API type.
73
+ */
74
+ export type WorkerApi<TApi> = {
75
+ readonly [TMethod in keyof TApi]: (...parameters: never[]) => unknown;
76
+ };
77
+ /**
78
+ * The handlers implementing a {@link WorkerApi}, with the {@link WorkerCallContext} as `this`.
79
+ *
80
+ * Each handler takes the method's arguments and returns its result, or a promise of it, or the result wrapped by
81
+ * {@link withTransfer} to transfer buffers back instead of copying them. Declare the handlers as methods or `function`
82
+ * expressions, not arrow functions, when they need `this`.
83
+ *
84
+ * @typeParam TApi - The API type.
85
+ */
86
+ export type WorkerApiHandlers<TApi extends WorkerApi<TApi>> = {
87
+ readonly [TMethod in keyof TApi]: (this: WorkerCallContext, ...parameters: Parameters<TApi[TMethod]>) => WorkerHandlerResult<Awaited<ReturnType<TApi[TMethod]>>>;
88
+ };
89
+ /**
90
+ * The context of one call, passed to a handler as `this`.
91
+ */
92
+ export interface WorkerCallContext {
93
+ /**
94
+ * Aborted when the caller cancels the call. A long handler checks it between steps; nothing interrupts a synchronous
95
+ * loop, so a job that cannot check it is stopped only by terminating the worker.
96
+ */
97
+ readonly abortSignal: AbortSignal;
98
+ }
99
+ /**
100
+ * A call from the main thread.
101
+ */
102
+ export interface WorkerCallMessage {
103
+ /**
104
+ * The method's arguments.
105
+ */
106
+ readonly arguments: readonly unknown[];
107
+ /**
108
+ * The call id, unique per `WorkerComponent`.
109
+ */
110
+ readonly id: number;
111
+ /**
112
+ * The message kind.
113
+ */
114
+ readonly kind: 'call';
115
+ /**
116
+ * The method name.
117
+ */
118
+ readonly method: string;
119
+ /**
120
+ * The protocol tag.
121
+ */
122
+ readonly protocol: typeof WORKER_PROTOCOL;
123
+ }
124
+ /**
125
+ * A cancellation of a call from the main thread.
126
+ */
127
+ export interface WorkerCancelMessage {
128
+ /**
129
+ * The id of the call to cancel.
130
+ */
131
+ readonly id: number;
132
+ /**
133
+ * The message kind.
134
+ */
135
+ readonly kind: 'cancel';
136
+ /**
137
+ * The protocol tag.
138
+ */
139
+ readonly protocol: typeof WORKER_PROTOCOL;
140
+ }
141
+ /**
142
+ * A failed call, answered by the worker.
143
+ */
144
+ export interface WorkerErrorMessage {
145
+ /**
146
+ * The error, reduced to plain data.
147
+ */
148
+ readonly error: SerializedWorkerError;
149
+ /**
150
+ * The id of the call.
151
+ */
152
+ readonly id: number;
153
+ /**
154
+ * The message kind.
155
+ */
156
+ readonly kind: 'error';
157
+ /**
158
+ * The protocol tag.
159
+ */
160
+ readonly protocol: typeof WORKER_PROTOCOL;
161
+ }
162
+ /**
163
+ * What a handler may return.
164
+ *
165
+ * @typeParam TResult - The method's result type.
166
+ */
167
+ export type WorkerHandlerResult<TResult> = Promise<TransferredValue<TResult> | TResult> | TransferredValue<TResult> | TResult;
168
+ /**
169
+ * The port a worker talks through: the worker's global scope, or a test double.
170
+ */
171
+ export interface WorkerMessagePort {
172
+ /**
173
+ * Subscribes to messages.
174
+ *
175
+ * @param type - Always `message`.
176
+ * @param listener - The listener.
177
+ */
178
+ readonly addEventListener: (type: 'message', listener: ($event: MessageEvent<unknown>) => void) => void;
179
+ /**
180
+ * Posts a message.
181
+ *
182
+ * @param message - The message.
183
+ * @param transfer - The objects to transfer.
184
+ */
185
+ readonly postMessage: (message: unknown, transfer: Transferable[]) => void;
186
+ }
187
+ /**
188
+ * Any message sent to the worker.
189
+ */
190
+ export type WorkerRequestMessage = WorkerCallMessage | WorkerCancelMessage;
191
+ /**
192
+ * Any message sent by the worker.
193
+ */
194
+ export type WorkerResponseMessage = WorkerErrorMessage | WorkerResultMessage;
195
+ /**
196
+ * A successful call, answered by the worker.
197
+ */
198
+ export interface WorkerResultMessage {
199
+ /**
200
+ * The id of the call.
201
+ */
202
+ readonly id: number;
203
+ /**
204
+ * The message kind.
205
+ */
206
+ readonly kind: 'result';
207
+ /**
208
+ * The protocol tag.
209
+ */
210
+ readonly protocol: typeof WORKER_PROTOCOL;
211
+ /**
212
+ * The result.
213
+ */
214
+ readonly value: unknown;
215
+ }
216
+ /**
217
+ * Exposes handlers to the main thread. Call it once, at the top level of a worker entry point.
218
+ *
219
+ * A handler that throws or rejects answers with a {@link SerializedWorkerError}, which the caller receives as a
220
+ * `WorkerCallError`. An unknown method answers with an error too, so a caller never waits for nothing.
221
+ *
222
+ * @typeParam TApi - The API type.
223
+ * @param handlers - The handlers.
224
+ * @param port - The port to talk through. Defaults to the worker's global scope.
225
+ */
226
+ export declare function exposeWorkerApi<TApi extends WorkerApi<TApi>>(handlers: WorkerApiHandlers<TApi>, port?: WorkerMessagePort): void;
227
+ /**
228
+ * Calls one handler by name, as the worker does. `WorkerComponent` uses it for its main-thread fallback, so both paths
229
+ * behave alike.
230
+ *
231
+ * @param handlers - The handlers.
232
+ * @param method - The method name.
233
+ * @param callArguments - The arguments.
234
+ * @param context - The call context.
235
+ * @returns The result, or a {@link TransferredValue} wrapping it.
236
+ */
237
+ export declare function invokeWorkerHandler(handlers: object, method: string, callArguments: readonly unknown[], context: WorkerCallContext): Promise<unknown>;
238
+ /**
239
+ * Tells whether a value is a {@link TransferredValue}.
240
+ *
241
+ * @param value - The value.
242
+ * @returns Whether it is one.
243
+ */
244
+ export declare function isTransferredValue(value: unknown): value is TransferredValue<unknown>;
245
+ /**
246
+ * Tells whether a message is a request of this protocol.
247
+ *
248
+ * @param message - The message.
249
+ * @returns Whether it is one.
250
+ */
251
+ export declare function isWorkerRequestMessage(message: unknown): message is WorkerRequestMessage;
252
+ /**
253
+ * Tells whether a message is a response of this protocol.
254
+ *
255
+ * @param message - The message.
256
+ * @returns Whether it is one.
257
+ */
258
+ export declare function isWorkerResponseMessage(message: unknown): message is WorkerResponseMessage;
259
+ /**
260
+ * Reduces a thrown value to plain data.
261
+ *
262
+ * @param error - The thrown value.
263
+ * @returns The serialized error.
264
+ */
265
+ export declare function serializeWorkerError(error: unknown): SerializedWorkerError;
266
+ /**
267
+ * Splits a result into the value to post and the objects to transfer.
268
+ *
269
+ * @param result - A result, possibly wrapped by {@link withTransfer}.
270
+ * @returns The value and its transfer list.
271
+ */
272
+ export declare function unwrapTransferredValue(result: unknown): UnwrappedTransferredValue;
273
+ /**
274
+ * Marks a result to transfer some of its objects (an `ArrayBuffer`, a `MessagePort`, an `OffscreenCanvas`...) instead
275
+ * of copying them. A transferred object is unusable on the sending side afterwards.
276
+ *
277
+ * @typeParam TValue - The value type.
278
+ * @param value - The value.
279
+ * @param transfer - The objects inside it to transfer.
280
+ * @returns The wrapped value.
281
+ */
282
+ export declare function withTransfer<TValue>(value: TValue, transfer: readonly Transferable[]): TransferredValue<TValue>;
@@ -0,0 +1,113 @@
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
+
6
+ const WORKER_PROTOCOL = "obsidian-lib-worker-v1";
7
+ function exposeWorkerApi(handlers, port) {
8
+ const messagePort = port ?? getWorkerGlobalScope();
9
+ const abortControllers = /* @__PURE__ */ new Map();
10
+ messagePort.addEventListener("message", ($event) => {
11
+ const message = $event.data;
12
+ if (!isWorkerRequestMessage(message)) {
13
+ return;
14
+ }
15
+ if (message.kind === "cancel") {
16
+ abortControllers.get(message.id)?.abort(new Error("The call was cancelled"));
17
+ return;
18
+ }
19
+ const abortController = new AbortController();
20
+ abortControllers.set(message.id, abortController);
21
+ void answerCall(message, abortController.signal);
22
+ });
23
+ async function answerCall(message, abortSignal) {
24
+ let response;
25
+ try {
26
+ const value = await invokeWorkerHandler(handlers, message.method, message.arguments, { abortSignal });
27
+ response = { id: message.id, kind: "result", protocol: WORKER_PROTOCOL, value };
28
+ } catch (error) {
29
+ response = { error: serializeWorkerError(error), id: message.id, kind: "error", protocol: WORKER_PROTOCOL };
30
+ }
31
+ abortControllers.delete(message.id);
32
+ postResponse(messagePort, response);
33
+ }
34
+ }
35
+ async function invokeWorkerHandler(handlers, method, callArguments, context) {
36
+ const handler = Object.hasOwn(handlers, method) ? handlers[method] : void 0;
37
+ if (typeof handler !== "function") {
38
+ throw new TypeError(`The worker exposes no method named '${method}'`);
39
+ }
40
+ return await handler.apply(context, [...callArguments]);
41
+ }
42
+ function isTransferredValue(value) {
43
+ return typeof value === "object" && value !== null && value.__obsidianLibTransferredValue === true;
44
+ }
45
+ function isWorkerRequestMessage(message) {
46
+ if (!hasProtocol(message)) {
47
+ return false;
48
+ }
49
+ const candidate = message;
50
+ if (typeof candidate.id !== "number") {
51
+ return false;
52
+ }
53
+ if (candidate.kind === "cancel") {
54
+ return true;
55
+ }
56
+ return candidate.kind === "call" && typeof candidate.method === "string" && Array.isArray(candidate.arguments);
57
+ }
58
+ function isWorkerResponseMessage(message) {
59
+ if (!hasProtocol(message)) {
60
+ return false;
61
+ }
62
+ const candidate = message;
63
+ if (typeof candidate.id !== "number") {
64
+ return false;
65
+ }
66
+ if (candidate.kind === "result") {
67
+ return true;
68
+ }
69
+ return candidate.kind === "error" && typeof candidate.error === "object";
70
+ }
71
+ function serializeWorkerError(error) {
72
+ if (!(error instanceof Error)) {
73
+ return { message: String(error), name: "Error" };
74
+ }
75
+ return error.stack === void 0 ? { message: error.message, name: error.name } : { message: error.message, name: error.name, stack: error.stack };
76
+ }
77
+ function unwrapTransferredValue(result) {
78
+ return isTransferredValue(result) ? { transfer: [...result.transfer], value: result.value } : { transfer: [], value: result };
79
+ }
80
+ function withTransfer(value, transfer) {
81
+ return { __obsidianLibTransferredValue: true, transfer, value };
82
+ }
83
+ function getWorkerGlobalScope() {
84
+ const scope = globalThis;
85
+ return scope;
86
+ }
87
+ function hasProtocol(message) {
88
+ return typeof message === "object" && message !== null && message.protocol === WORKER_PROTOCOL;
89
+ }
90
+ function postResponse(port, response) {
91
+ if (response.kind === "error") {
92
+ port.postMessage(response, []);
93
+ return;
94
+ }
95
+ const { transfer, value } = unwrapTransferredValue(response.value);
96
+ try {
97
+ port.postMessage({ ...response, value }, transfer);
98
+ } catch (error) {
99
+ port.postMessage({ error: serializeWorkerError(error), id: response.id, kind: "error", protocol: WORKER_PROTOCOL }, []);
100
+ }
101
+ }
102
+ export {
103
+ WORKER_PROTOCOL,
104
+ exposeWorkerApi,
105
+ invokeWorkerHandler,
106
+ isTransferredValue,
107
+ isWorkerRequestMessage,
108
+ isWorkerResponseMessage,
109
+ serializeWorkerError,
110
+ unwrapTransferredValue,
111
+ withTransfer
112
+ };
113
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3dvcmtlci1wcm90b2NvbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBtZXNzYWdlIHByb3RvY29sIGJldHdlZW4gYFdvcmtlckNvbXBvbmVudGAgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB7QGxpbmsgZXhwb3NlV29ya2VyQXBpfSBpbnNpZGUgYSB3b3JrZXIuXG4gKlxuICogVGhpcyBtb2R1bGUgaW1wb3J0cyBub3RoaW5nLCBzbyBhIHdvcmtlciBlbnRyeSBwb2ludCBidW5kbGVkIGJ5IGBAbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXRvb2xraXRgJ3MgYHdvcmtlcnNgIGZlYXR1cmVcbiAqIGNhbiBpbXBvcnQgaXQ6IGEgd29ya2VyIGhhcyBubyBgb2JzaWRpYW5gIG1vZHVsZSBhbmQgbm8gTm9kZSBidWlsdGlucy4gSXRzIG1lc3NhZ2Ugc2hhcGVzIGFyZSBhIHdpcmUgZm9ybWF0IGJldHdlZW5cbiAqIHRoZSBwbHVnaW4ncyBtYWluIGJ1bmRsZSBhbmQgaXRzIHdvcmtlciBidW5kbGUsIHdoaWNoIG1heSBjb21lIGZyb20gZGlmZmVyZW50IGNvcGllcyBvZiB0aGlzIGxpYnJhcnksIHNvIGZpZWxkcyBhcmVcbiAqIG9ubHkgZXZlciBhZGRlZCBhbmQgYSBjaGFuZ2Ugb2YgbWVhbmluZyBtb3ZlcyB0byBhIG5ldyB7QGxpbmsgV09SS0VSX1BST1RPQ09MfSB2YWx1ZS5cbiAqL1xuXG4vKipcbiAqIFRoZSB0YWcgZXZlcnkgbWVzc2FnZSBvZiB0aGlzIHByb3RvY29sIGNhcnJpZXMuIE1lc3NhZ2VzIHdpdGhvdXQgaXQgYXJlIGlnbm9yZWQgb24gYm90aCBzaWRlcywgc28gYSB3b3JrZXIgY2FuXG4gKiBleGNoYW5nZSBpdHMgb3duIG1lc3NhZ2VzIHRvby5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktFUl9QUk9UT0NPTCA9ICdvYnNpZGlhbi1saWItd29ya2VyLXYxJztcblxuLyoqXG4gKiBBbiBlcnJvciByZWR1Y2VkIHRvIHBsYWluIGRhdGEsIGJlY2F1c2UgYW4gYEVycm9yYCBsb3NlcyBpdHMgY2xhc3MgYWNyb3NzIHRoZSB3b3JrZXIgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFdvcmtlckVycm9yIHtcbiAgLyoqXG4gICAqIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIGluIHRoZSB3b3JrZXIsIHdoZW4gdGhlcmUgd2FzIG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVzdWx0IG1hcmtlZCB0byB0cmFuc2ZlciBzb21lIG9mIGl0cyBvYmplY3RzIHJhdGhlciB0aGFuIGNvcHkgdGhlbS4gQnVpbGQgaXQgd2l0aCB7QGxpbmsgd2l0aFRyYW5zZmVyfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZmVycmVkVmFsdWU8VFZhbHVlPiB7XG4gIC8qKlxuICAgKiBUaGUgbWFya2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgd3JhcHBlciBzdHJ1Y3R1cmFsbHksIHNvIGEgd3JhcHBlciBidWlsdCBieSBhbm90aGVyIGNvcHkgb2YgdGhpcyBsaWJyYXJ5IGlzXG4gICAqIHJlY29nbml6ZWQgdG9vLlxuICAgKi9cbiAgcmVhZG9ubHkgX19vYnNpZGlhbkxpYlRyYW5zZmVycmVkVmFsdWU6IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3RzIHRvIHRyYW5zZmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNmZXI6IHJlYWRvbmx5IFRyYW5zZmVyYWJsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogVFZhbHVlO1xufVxuXG4vKipcbiAqIEEgdmFsdWUgc3BsaXQgZnJvbSBpdHMgdHJhbnNmZXIgbGlzdCwgcmVhZHkgdG8gcG9zdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbndyYXBwZWRUcmFuc2ZlcnJlZFZhbHVlIHtcbiAgLyoqXG4gICAqIFRoZSBvYmplY3RzIHRvIHRyYW5zZmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNmZXI6IFRyYW5zZmVyYWJsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdG8gcG9zdC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEFuIEFQSSBhIHdvcmtlciBleHBvc2VzOiBhbiBvYmplY3Qgd2hvc2UgZXZlcnkgbWVtYmVyIGlzIGEgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZXJBcGk8VEFwaT4gPSB7IHJlYWRvbmx5IFtUTWV0aG9kIGluIGtleW9mIFRBcGldOiAoLi4ucGFyYW1ldGVyczogbmV2ZXJbXSkgPT4gdW5rbm93biB9O1xuXG4vKipcbiAqIFRoZSBoYW5kbGVycyBpbXBsZW1lbnRpbmcgYSB7QGxpbmsgV29ya2VyQXBpfSwgd2l0aCB0aGUge0BsaW5rIFdvcmtlckNhbGxDb250ZXh0fSBhcyBgdGhpc2AuXG4gKlxuICogRWFjaCBoYW5kbGVyIHRha2VzIHRoZSBtZXRob2QncyBhcmd1bWVudHMgYW5kIHJldHVybnMgaXRzIHJlc3VsdCwgb3IgYSBwcm9taXNlIG9mIGl0LCBvciB0aGUgcmVzdWx0IHdyYXBwZWQgYnlcbiAqIHtAbGluayB3aXRoVHJhbnNmZXJ9IHRvIHRyYW5zZmVyIGJ1ZmZlcnMgYmFjayBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlbS4gRGVjbGFyZSB0aGUgaGFuZGxlcnMgYXMgbWV0aG9kcyBvciBgZnVuY3Rpb25gXG4gKiBleHByZXNzaW9ucywgbm90IGFycm93IGZ1bmN0aW9ucywgd2hlbiB0aGV5IG5lZWQgYHRoaXNgLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2VyQXBpSGFuZGxlcnM8VEFwaSBleHRlbmRzIFdvcmtlckFwaTxUQXBpPj4gPSB7XG4gIHJlYWRvbmx5IFtUTWV0aG9kIGluIGtleW9mIFRBcGldOiAoXG4gICAgdGhpczogV29ya2VyQ2FsbENvbnRleHQsXG4gICAgLi4ucGFyYW1ldGVyczogUGFyYW1ldGVyczxUQXBpW1RNZXRob2RdPlxuICApID0+IFdvcmtlckhhbmRsZXJSZXN1bHQ8QXdhaXRlZDxSZXR1cm5UeXBlPFRBcGlbVE1ldGhvZF0+Pj47XG59O1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IG9mIG9uZSBjYWxsLCBwYXNzZWQgdG8gYSBoYW5kbGVyIGFzIGB0aGlzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDYWxsQ29udGV4dCB7XG4gIC8qKlxuICAgKiBBYm9ydGVkIHdoZW4gdGhlIGNhbGxlciBjYW5jZWxzIHRoZSBjYWxsLiBBIGxvbmcgaGFuZGxlciBjaGVja3MgaXQgYmV0d2VlbiBzdGVwczsgbm90aGluZyBpbnRlcnJ1cHRzIGEgc3luY2hyb25vdXNcbiAgICogbG9vcCwgc28gYSBqb2IgdGhhdCBjYW5ub3QgY2hlY2sgaXQgaXMgc3RvcHBlZCBvbmx5IGJ5IHRlcm1pbmF0aW5nIHRoZSB3b3JrZXIuXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogQSBjYWxsIGZyb20gdGhlIG1haW4gdGhyZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlckNhbGxNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QncyBhcmd1bWVudHMuXG4gICAqL1xuICByZWFkb25seSBhcmd1bWVudHM6IHJlYWRvbmx5IHVua25vd25bXTtcblxuICAvKipcbiAgICogVGhlIGNhbGwgaWQsIHVuaXF1ZSBwZXIgYFdvcmtlckNvbXBvbmVudGAuXG4gICAqL1xuICByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBraW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogJ2NhbGwnO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHRhZy5cbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sOiB0eXBlb2YgV09SS0VSX1BST1RPQ09MO1xufVxuXG4vKipcbiAqIEEgY2FuY2VsbGF0aW9uIG9mIGEgY2FsbCBmcm9tIHRoZSBtYWluIHRocmVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDYW5jZWxNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY2FsbCB0byBjYW5jZWwuXG4gICAqL1xuICByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBraW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogJ2NhbmNlbCc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbCB0YWcuXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbDogdHlwZW9mIFdPUktFUl9QUk9UT0NPTDtcbn1cblxuLyoqXG4gKiBBIGZhaWxlZCBjYWxsLCBhbnN3ZXJlZCBieSB0aGUgd29ya2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlckVycm9yTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IsIHJlZHVjZWQgdG8gcGxhaW4gZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yOiBTZXJpYWxpemVkV29ya2VyRXJyb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIGtpbmQuXG4gICAqL1xuICByZWFkb25seSBraW5kOiAnZXJyb3InO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgdGFnLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w6IHR5cGVvZiBXT1JLRVJfUFJPVE9DT0w7XG59XG5cbi8qKlxuICogV2hhdCBhIGhhbmRsZXIgbWF5IHJldHVybi5cbiAqXG4gKiBAdHlwZVBhcmFtIFRSZXN1bHQgLSBUaGUgbWV0aG9kJ3MgcmVzdWx0IHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtlckhhbmRsZXJSZXN1bHQ8VFJlc3VsdD4gPSBQcm9taXNlPFRyYW5zZmVycmVkVmFsdWU8VFJlc3VsdD4gfCBUUmVzdWx0PiB8IFRyYW5zZmVycmVkVmFsdWU8VFJlc3VsdD4gfCBUUmVzdWx0O1xuXG4vKipcbiAqIFRoZSBwb3J0IGEgd29ya2VyIHRhbGtzIHRocm91Z2g6IHRoZSB3b3JrZXIncyBnbG9iYWwgc2NvcGUsIG9yIGEgdGVzdCBkb3VibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2VyTWVzc2FnZVBvcnQge1xuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byBtZXNzYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBBbHdheXMgYG1lc3NhZ2VgLlxuICAgKiBAcGFyYW0gbGlzdGVuZXIgLSBUaGUgbGlzdGVuZXIuXG4gICAqL1xuICByZWFkb25seSBhZGRFdmVudExpc3RlbmVyOiAodHlwZTogJ21lc3NhZ2UnLCBsaXN0ZW5lcjogKCRldmVudDogTWVzc2FnZUV2ZW50PHVua25vd24+KSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBQb3N0cyBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB0cmFuc2ZlciAtIFRoZSBvYmplY3RzIHRvIHRyYW5zZmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdE1lc3NhZ2U6IChtZXNzYWdlOiB1bmtub3duLCB0cmFuc2ZlcjogVHJhbnNmZXJhYmxlW10pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQW55IG1lc3NhZ2Ugc2VudCB0byB0aGUgd29ya2VyLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZXJSZXF1ZXN0TWVzc2FnZSA9IFdvcmtlckNhbGxNZXNzYWdlIHwgV29ya2VyQ2FuY2VsTWVzc2FnZTtcblxuLyoqXG4gKiBBbnkgbWVzc2FnZSBzZW50IGJ5IHRoZSB3b3JrZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtlclJlc3BvbnNlTWVzc2FnZSA9IFdvcmtlckVycm9yTWVzc2FnZSB8IFdvcmtlclJlc3VsdE1lc3NhZ2U7XG5cbi8qKlxuICogQSBzdWNjZXNzZnVsIGNhbGwsIGFuc3dlcmVkIGJ5IHRoZSB3b3JrZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2VyUmVzdWx0TWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBraW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogJ3Jlc3VsdCc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbCB0YWcuXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbDogdHlwZW9mIFdPUktFUl9QUk9UT0NPTDtcblxuICAvKipcbiAgICogVGhlIHJlc3VsdC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgUHJvdG9jb2xUYWdnZWRNZXNzYWdlIHtcbiAgcmVhZG9ubHkgcHJvdG9jb2w/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEV4cG9zZXMgaGFuZGxlcnMgdG8gdGhlIG1haW4gdGhyZWFkLiBDYWxsIGl0IG9uY2UsIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSB3b3JrZXIgZW50cnkgcG9pbnQuXG4gKlxuICogQSBoYW5kbGVyIHRoYXQgdGhyb3dzIG9yIHJlamVjdHMgYW5zd2VycyB3aXRoIGEge0BsaW5rIFNlcmlhbGl6ZWRXb3JrZXJFcnJvcn0sIHdoaWNoIHRoZSBjYWxsZXIgcmVjZWl2ZXMgYXMgYVxuICogYFdvcmtlckNhbGxFcnJvcmAuIEFuIHVua25vd24gbWV0aG9kIGFuc3dlcnMgd2l0aCBhbiBlcnJvciB0b28sIHNvIGEgY2FsbGVyIG5ldmVyIHdhaXRzIGZvciBub3RoaW5nLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZS5cbiAqIEBwYXJhbSBoYW5kbGVycyAtIFRoZSBoYW5kbGVycy5cbiAqIEBwYXJhbSBwb3J0IC0gVGhlIHBvcnQgdG8gdGFsayB0aHJvdWdoLiBEZWZhdWx0cyB0byB0aGUgd29ya2VyJ3MgZ2xvYmFsIHNjb3BlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3NlV29ya2VyQXBpPFRBcGkgZXh0ZW5kcyBXb3JrZXJBcGk8VEFwaT4+KGhhbmRsZXJzOiBXb3JrZXJBcGlIYW5kbGVyczxUQXBpPiwgcG9ydD86IFdvcmtlck1lc3NhZ2VQb3J0KTogdm9pZCB7XG4gIGNvbnN0IG1lc3NhZ2VQb3J0ID0gcG9ydCA/PyBnZXRXb3JrZXJHbG9iYWxTY29wZSgpO1xuICBjb25zdCBhYm9ydENvbnRyb2xsZXJzID0gbmV3IE1hcDxudW1iZXIsIEFib3J0Q29udHJvbGxlcj4oKTtcblxuICBtZXNzYWdlUG9ydC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKCRldmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSAkZXZlbnQuZGF0YTtcbiAgICBpZiAoIWlzV29ya2VyUmVxdWVzdE1lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWVzc2FnZS5raW5kID09PSAnY2FuY2VsJykge1xuICAgICAgYWJvcnRDb250cm9sbGVycy5nZXQobWVzc2FnZS5pZCk/LmFib3J0KG5ldyBFcnJvcignVGhlIGNhbGwgd2FzIGNhbmNlbGxlZCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgYWJvcnRDb250cm9sbGVycy5zZXQobWVzc2FnZS5pZCwgYWJvcnRDb250cm9sbGVyKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZCAtLSBgYW5zd2VyQ2FsbGAgbmV2ZXIgcmVqZWN0czogaXQgYW5zd2VycyBldmVyeSBmYWlsdXJlIGFzIGEgbWVzc2FnZS5cbiAgICB2b2lkIGFuc3dlckNhbGwobWVzc2FnZSwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGFuc3dlckNhbGwobWVzc2FnZTogV29ya2VyQ2FsbE1lc3NhZ2UsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCByZXNwb25zZTogV29ya2VyUmVzcG9uc2VNZXNzYWdlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IGludm9rZVdvcmtlckhhbmRsZXIoaGFuZGxlcnMsIG1lc3NhZ2UubWV0aG9kLCBtZXNzYWdlLmFyZ3VtZW50cywgeyBhYm9ydFNpZ25hbCB9KTtcbiAgICAgIHJlc3BvbnNlID0geyBpZDogbWVzc2FnZS5pZCwga2luZDogJ3Jlc3VsdCcsIHByb3RvY29sOiBXT1JLRVJfUFJPVE9DT0wsIHZhbHVlIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlc3BvbnNlID0geyBlcnJvcjogc2VyaWFsaXplV29ya2VyRXJyb3IoZXJyb3IpLCBpZDogbWVzc2FnZS5pZCwga2luZDogJ2Vycm9yJywgcHJvdG9jb2w6IFdPUktFUl9QUk9UT0NPTCB9O1xuICAgIH1cbiAgICBhYm9ydENvbnRyb2xsZXJzLmRlbGV0ZShtZXNzYWdlLmlkKTtcbiAgICBwb3N0UmVzcG9uc2UobWVzc2FnZVBvcnQsIHJlc3BvbnNlKTtcbiAgfVxufVxuXG4vKipcbiAqIENhbGxzIG9uZSBoYW5kbGVyIGJ5IG5hbWUsIGFzIHRoZSB3b3JrZXIgZG9lcy4gYFdvcmtlckNvbXBvbmVudGAgdXNlcyBpdCBmb3IgaXRzIG1haW4tdGhyZWFkIGZhbGxiYWNrLCBzbyBib3RoIHBhdGhzXG4gKiBiZWhhdmUgYWxpa2UuXG4gKlxuICogQHBhcmFtIGhhbmRsZXJzIC0gVGhlIGhhbmRsZXJzLlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QgbmFtZS5cbiAqIEBwYXJhbSBjYWxsQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNhbGwgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSByZXN1bHQsIG9yIGEge0BsaW5rIFRyYW5zZmVycmVkVmFsdWV9IHdyYXBwaW5nIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlV29ya2VySGFuZGxlcihcbiAgaGFuZGxlcnM6IG9iamVjdCxcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIGNhbGxBcmd1bWVudHM6IHJlYWRvbmx5IHVua25vd25bXSxcbiAgY29udGV4dDogV29ya2VyQ2FsbENvbnRleHRcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCBoYW5kbGVyID0gT2JqZWN0Lmhhc093bihoYW5kbGVycywgbWV0aG9kKSA/IChoYW5kbGVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbWV0aG9kXSA6IHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIHdvcmtlciBleHBvc2VzIG5vIG1ldGhvZCBuYW1lZCAnJHttZXRob2R9J2ApO1xuICB9XG4gIHJldHVybiBhd2FpdCAoaGFuZGxlciBhcyAodGhpczogV29ya2VyQ2FsbENvbnRleHQsIC4uLmhhbmRsZXJBcmd1bWVudHM6IHVua25vd25bXSkgPT4gdW5rbm93bikuYXBwbHkoY29udGV4dCwgWy4uLmNhbGxBcmd1bWVudHNdKTtcbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGEgdmFsdWUgaXMgYSB7QGxpbmsgVHJhbnNmZXJyZWRWYWx1ZX0uXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlLlxuICogQHJldHVybnMgV2hldGhlciBpdCBpcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYW5zZmVycmVkVmFsdWUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUcmFuc2ZlcnJlZFZhbHVlPHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhcnRpYWw8VHJhbnNmZXJyZWRWYWx1ZTx1bmtub3duPj4pLl9fb2JzaWRpYW5MaWJUcmFuc2ZlcnJlZFZhbHVlID09PSB0cnVlO1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGEgcmVxdWVzdCBvZiB0aGlzIHByb3RvY29sLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGl0IGlzIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV29ya2VyUmVxdWVzdE1lc3NhZ2UobWVzc2FnZTogdW5rbm93bik6IG1lc3NhZ2UgaXMgV29ya2VyUmVxdWVzdE1lc3NhZ2Uge1xuICBpZiAoIWhhc1Byb3RvY29sKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IG1lc3NhZ2UgYXMgUGFydGlhbDxXb3JrZXJDYWxsTWVzc2FnZT4gfCBQYXJ0aWFsPFdvcmtlckNhbmNlbE1lc3NhZ2U+O1xuICBpZiAodHlwZW9mIGNhbmRpZGF0ZS5pZCAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09PSAnY2FuY2VsJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBjYW5kaWRhdGUua2luZCA9PT0gJ2NhbGwnICYmIHR5cGVvZiBjYW5kaWRhdGUubWV0aG9kID09PSAnc3RyaW5nJyAmJiBBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpO1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGEgcmVzcG9uc2Ugb2YgdGhpcyBwcm90b2NvbC5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlLlxuICogQHJldHVybnMgV2hldGhlciBpdCBpcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dvcmtlclJlc3BvbnNlTWVzc2FnZShtZXNzYWdlOiB1bmtub3duKTogbWVzc2FnZSBpcyBXb3JrZXJSZXNwb25zZU1lc3NhZ2Uge1xuICBpZiAoIWhhc1Byb3RvY29sKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IG1lc3NhZ2UgYXMgUGFydGlhbDxXb3JrZXJFcnJvck1lc3NhZ2U+IHwgUGFydGlhbDxXb3JrZXJSZXN1bHRNZXNzYWdlPjtcbiAgaWYgKHR5cGVvZiBjYW5kaWRhdGUuaWQgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PT0gJ3Jlc3VsdCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlLmtpbmQgPT09ICdlcnJvcicgJiYgdHlwZW9mIGNhbmRpZGF0ZS5lcnJvciA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogUmVkdWNlcyBhIHRocm93biB2YWx1ZSB0byBwbGFpbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSB0aHJvd24gdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVdvcmtlckVycm9yKGVycm9yOiB1bmtub3duKTogU2VyaWFsaXplZFdvcmtlckVycm9yIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4geyBtZXNzYWdlOiBTdHJpbmcoZXJyb3IpLCBuYW1lOiAnRXJyb3InIH07XG4gIH1cbiAgcmV0dXJuIGVycm9yLnN0YWNrID09PSB1bmRlZmluZWRcbiAgICA/IHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgbmFtZTogZXJyb3IubmFtZSB9XG4gICAgOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIG5hbWU6IGVycm9yLm5hbWUsIHN0YWNrOiBlcnJvci5zdGFjayB9O1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIHJlc3VsdCBpbnRvIHRoZSB2YWx1ZSB0byBwb3N0IGFuZCB0aGUgb2JqZWN0cyB0byB0cmFuc2Zlci5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gQSByZXN1bHQsIHBvc3NpYmx5IHdyYXBwZWQgYnkge0BsaW5rIHdpdGhUcmFuc2Zlcn0uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgYW5kIGl0cyB0cmFuc2ZlciBsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwVHJhbnNmZXJyZWRWYWx1ZShyZXN1bHQ6IHVua25vd24pOiBVbndyYXBwZWRUcmFuc2ZlcnJlZFZhbHVlIHtcbiAgcmV0dXJuIGlzVHJhbnNmZXJyZWRWYWx1ZShyZXN1bHQpXG4gICAgPyB7IHRyYW5zZmVyOiBbLi4ucmVzdWx0LnRyYW5zZmVyXSwgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XG4gICAgOiB7IHRyYW5zZmVyOiBbXSwgdmFsdWU6IHJlc3VsdCB9O1xufVxuXG4vKipcbiAqIE1hcmtzIGEgcmVzdWx0IHRvIHRyYW5zZmVyIHNvbWUgb2YgaXRzIG9iamVjdHMgKGFuIGBBcnJheUJ1ZmZlcmAsIGEgYE1lc3NhZ2VQb3J0YCwgYW4gYE9mZnNjcmVlbkNhbnZhc2AuLi4pIGluc3RlYWRcbiAqIG9mIGNvcHlpbmcgdGhlbS4gQSB0cmFuc2ZlcnJlZCBvYmplY3QgaXMgdW51c2FibGUgb24gdGhlIHNlbmRpbmcgc2lkZSBhZnRlcndhcmRzLlxuICpcbiAqIEB0eXBlUGFyYW0gVFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUuXG4gKiBAcGFyYW0gdHJhbnNmZXIgLSBUaGUgb2JqZWN0cyBpbnNpZGUgaXQgdG8gdHJhbnNmZXIuXG4gKiBAcmV0dXJucyBUaGUgd3JhcHBlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUcmFuc2ZlcjxUVmFsdWU+KHZhbHVlOiBUVmFsdWUsIHRyYW5zZmVyOiByZWFkb25seSBUcmFuc2ZlcmFibGVbXSk6IFRyYW5zZmVycmVkVmFsdWU8VFZhbHVlPiB7XG4gIHJldHVybiB7IF9fb2JzaWRpYW5MaWJUcmFuc2ZlcnJlZFZhbHVlOiB0cnVlLCB0cmFuc2ZlciwgdmFsdWUgfTtcbn1cblxuZnVuY3Rpb24gZ2V0V29ya2VyR2xvYmFsU2NvcGUoKTogV29ya2VyTWVzc2FnZVBvcnQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBBIHdvcmtlciBoYXMgbm8gYHdpbmRvd2A6IGl0cyBnbG9iYWwgc2NvcGUgaXMgdGhlIHBvcnQuXG4gIGNvbnN0IHNjb3BlOiB1bmtub3duID0gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHNjb3BlIGFzIFdvcmtlck1lc3NhZ2VQb3J0O1xufVxuXG5mdW5jdGlvbiBoYXNQcm90b2NvbChtZXNzYWdlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZSA9PT0gJ29iamVjdCcgJiYgbWVzc2FnZSAhPT0gbnVsbCAmJiAobWVzc2FnZSBhcyBQcm90b2NvbFRhZ2dlZE1lc3NhZ2UpLnByb3RvY29sID09PSBXT1JLRVJfUFJPVE9DT0w7XG59XG5cbmZ1bmN0aW9uIHBvc3RSZXNwb25zZShwb3J0OiBXb3JrZXJNZXNzYWdlUG9ydCwgcmVzcG9uc2U6IFdvcmtlclJlc3BvbnNlTWVzc2FnZSk6IHZvaWQge1xuICBpZiAocmVzcG9uc2Uua2luZCA9PT0gJ2Vycm9yJykge1xuICAgIHBvcnQucG9zdE1lc3NhZ2UocmVzcG9uc2UsIFtdKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgeyB0cmFuc2ZlciwgdmFsdWUgfSA9IHVud3JhcFRyYW5zZmVycmVkVmFsdWUocmVzcG9uc2UudmFsdWUpO1xuICB0cnkge1xuICAgIHBvcnQucG9zdE1lc3NhZ2UoeyAuLi5yZXNwb25zZSwgdmFsdWUgfSwgdHJhbnNmZXIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEEgcmVzdWx0IHRoYXQgY2Fubm90IGJlIGNsb25lZCAoYSBmdW5jdGlvbiwgYSBET00gbm9kZSkgc3RpbGwgYW5zd2Vycywgc28gdGhlIGNhbGxlciBpcyBuZXZlciBsZWZ0IHdhaXRpbmcuXG4gICAgcG9ydC5wb3N0TWVzc2FnZSh7IGVycm9yOiBzZXJpYWxpemVXb3JrZXJFcnJvcihlcnJvciksIGlkOiByZXNwb25zZS5pZCwga2luZDogJ2Vycm9yJywgcHJvdG9jb2w6IFdPUktFUl9QUk9UT0NPTCB9LCBbXSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBZU8sTUFBTSxrQkFBa0I7QUFzUHhCLFNBQVMsZ0JBQThDLFVBQW1DLE1BQWdDO0FBQy9ILFFBQU0sY0FBYyxRQUFRLHFCQUFxQjtBQUNqRCxRQUFNLG1CQUFtQixvQkFBSSxJQUE2QjtBQUUxRCxjQUFZLGlCQUFpQixXQUFXLENBQUMsV0FBaUI7QUFDeEQsVUFBTSxVQUFVLE9BQU87QUFDdkIsUUFBSSxDQUFDLHVCQUF1QixPQUFPLEdBQUc7QUFDcEM7QUFBQSxJQUNGO0FBRUEsUUFBSSxRQUFRLFNBQVMsVUFBVTtBQUM3Qix1QkFBaUIsSUFBSSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksTUFBTSx3QkFBd0IsQ0FBQztBQUMzRTtBQUFBLElBQ0Y7QUFFQSxVQUFNLGtCQUFrQixJQUFJLGdCQUFnQjtBQUM1QyxxQkFBaUIsSUFBSSxRQUFRLElBQUksZUFBZTtBQUVoRCxTQUFLLFdBQVcsU0FBUyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ2pELENBQUM7QUFFRCxpQkFBZSxXQUFXLFNBQTRCLGFBQXlDO0FBQzdGLFFBQUk7QUFDSixRQUFJO0FBQ0YsWUFBTSxRQUFRLE1BQU0sb0JBQW9CLFVBQVUsUUFBUSxRQUFRLFFBQVEsV0FBVyxFQUFFLFlBQVksQ0FBQztBQUNwRyxpQkFBVyxFQUFFLElBQUksUUFBUSxJQUFJLE1BQU0sVUFBVSxVQUFVLGlCQUFpQixNQUFNO0FBQUEsSUFDaEYsU0FBUyxPQUFPO0FBQ2QsaUJBQVcsRUFBRSxPQUFPLHFCQUFxQixLQUFLLEdBQUcsSUFBSSxRQUFRLElBQUksTUFBTSxTQUFTLFVBQVUsZ0JBQWdCO0FBQUEsSUFDNUc7QUFDQSxxQkFBaUIsT0FBTyxRQUFRLEVBQUU7QUFDbEMsaUJBQWEsYUFBYSxRQUFRO0FBQUEsRUFDcEM7QUFDRjtBQVlBLGVBQXNCLG9CQUNwQixVQUNBLFFBQ0EsZUFDQSxTQUNrQjtBQUNsQixRQUFNLFVBQVUsT0FBTyxPQUFPLFVBQVUsTUFBTSxJQUFLLFNBQXFDLE1BQU0sSUFBSTtBQUNsRyxNQUFJLE9BQU8sWUFBWSxZQUFZO0FBQ2pDLFVBQU0sSUFBSSxVQUFVLHVDQUF1QyxNQUFNLEdBQUc7QUFBQSxFQUN0RTtBQUNBLFNBQU8sTUFBTyxRQUFpRixNQUFNLFNBQVMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztBQUNsSTtBQVFPLFNBQVMsbUJBQW1CLE9BQW9EO0FBQ3JGLFNBQU8sT0FBTyxVQUFVLFlBQVksVUFBVSxRQUFTLE1BQTZDLGtDQUFrQztBQUN4STtBQVFPLFNBQVMsdUJBQXVCLFNBQW1EO0FBQ3hGLE1BQUksQ0FBQyxZQUFZLE9BQU8sR0FBRztBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUNBLFFBQU0sWUFBWTtBQUNsQixNQUFJLE9BQU8sVUFBVSxPQUFPLFVBQVU7QUFDcEMsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLFVBQVUsU0FBUyxVQUFVO0FBQy9CLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxVQUFVLFNBQVMsVUFBVSxPQUFPLFVBQVUsV0FBVyxZQUFZLE1BQU0sUUFBUSxVQUFVLFNBQVM7QUFDL0c7QUFRTyxTQUFTLHdCQUF3QixTQUFvRDtBQUMxRixNQUFJLENBQUMsWUFBWSxPQUFPLEdBQUc7QUFDekIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLFlBQVk7QUFDbEIsTUFBSSxPQUFPLFVBQVUsT0FBTyxVQUFVO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxVQUFVLFNBQVMsVUFBVTtBQUMvQixXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sVUFBVSxTQUFTLFdBQVcsT0FBTyxVQUFVLFVBQVU7QUFDbEU7QUFRTyxTQUFTLHFCQUFxQixPQUF1QztBQUMxRSxNQUFJLEVBQUUsaUJBQWlCLFFBQVE7QUFDN0IsV0FBTyxFQUFFLFNBQVMsT0FBTyxLQUFLLEdBQUcsTUFBTSxRQUFRO0FBQUEsRUFDakQ7QUFDQSxTQUFPLE1BQU0sVUFBVSxTQUNuQixFQUFFLFNBQVMsTUFBTSxTQUFTLE1BQU0sTUFBTSxLQUFLLElBQzNDLEVBQUUsU0FBUyxNQUFNLFNBQVMsTUFBTSxNQUFNLE1BQU0sT0FBTyxNQUFNLE1BQU07QUFDckU7QUFRTyxTQUFTLHVCQUF1QixRQUE0QztBQUNqRixTQUFPLG1CQUFtQixNQUFNLElBQzVCLEVBQUUsVUFBVSxDQUFDLEdBQUcsT0FBTyxRQUFRLEdBQUcsT0FBTyxPQUFPLE1BQU0sSUFDdEQsRUFBRSxVQUFVLENBQUMsR0FBRyxPQUFPLE9BQU87QUFDcEM7QUFXTyxTQUFTLGFBQXFCLE9BQWUsVUFBNkQ7QUFDL0csU0FBTyxFQUFFLCtCQUErQixNQUFNLFVBQVUsTUFBTTtBQUNoRTtBQUVBLFNBQVMsdUJBQTBDO0FBRWpELFFBQU0sUUFBaUI7QUFDdkIsU0FBTztBQUNUO0FBRUEsU0FBUyxZQUFZLFNBQTJCO0FBQzlDLFNBQU8sT0FBTyxZQUFZLFlBQVksWUFBWSxRQUFTLFFBQWtDLGFBQWE7QUFDNUc7QUFFQSxTQUFTLGFBQWEsTUFBeUIsVUFBdUM7QUFDcEYsTUFBSSxTQUFTLFNBQVMsU0FBUztBQUM3QixTQUFLLFlBQVksVUFBVSxDQUFDLENBQUM7QUFDN0I7QUFBQSxFQUNGO0FBQ0EsUUFBTSxFQUFFLFVBQVUsTUFBTSxJQUFJLHVCQUF1QixTQUFTLEtBQUs7QUFDakUsTUFBSTtBQUNGLFNBQUssWUFBWSxFQUFFLEdBQUcsVUFBVSxNQUFNLEdBQUcsUUFBUTtBQUFBLEVBQ25ELFNBQVMsT0FBTztBQUVkLFNBQUssWUFBWSxFQUFFLE9BQU8scUJBQXFCLEtBQUssR0FBRyxJQUFJLFNBQVMsSUFBSSxNQUFNLFNBQVMsVUFBVSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFBQSxFQUN4SDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
package/dist/styles.css CHANGED
@@ -1,3 +1,18 @@
1
+ .obsidian-lib.bug-report-review-modal .bug-report-preview {
2
+ max-height: 30vh;
3
+ overflow: auto;
4
+ font-family: var(--font-monospace);
5
+ font-size: var(--font-ui-smaller);
6
+ white-space: pre-wrap;
7
+ overflow-wrap: anywhere;
8
+ user-select: text;
9
+ }
10
+ .obsidian-lib.copy-text-manually-modal .copy-text-manually-text {
11
+ width: 100%;
12
+ font-family: var(--font-monospace);
13
+ resize: vertical;
14
+ }
15
+
1
16
  .obsidian-lib.code-block-builder-modal .code-block-builder-group {
2
17
  margin-bottom: var(--size-4-3);
3
18
  border-radius: var(--radius-m);
@@ -615,4 +630,4 @@ progress.obsidian-lib.loop {
615
630
  width: max-content;
616
631
  }
617
632
 
618
- /*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-block-builder-modal.scss%22,%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/foldable-markdown.scss%22,%22../src/styles/hotkey-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/list-component.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-commands.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/plugin-suggestion.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/settings-tabs.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;;ACjCJ;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;AClBE;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;;AC3BF;EACE;;AAGF;EACE;;;ACNJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;;AC3BK;EACP;;;ACJJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACpGN;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;;AAMF;EACE;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;;AAGA;EACE;EACA;;;ACrEF;EACE;EACA;;;ACCF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACZN;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;ACrCF;EACE;;;ACFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;EACA;;;ACjBF;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACDF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;;;ACdN;EACE;;;ACZE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-lib%20%7B%5Cn%20%20&.code-block-builder-modal%20%7B%5Cn%20%20%20%20.code-block-builder-group%20%7B%5Cn%20%20%20%20%20%20margin-bottom:%20var(--size-4-3);%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-m);%5Cn%5Cn%20%20%20%20%20%20&:not(.is-collapsed)%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20&.is-collapsed%20.code-block-builder-group-body%20%7B%5Cn%20%20%20%20%20%20%20%20display:%20none;%5Cn%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20.code-block-builder-group-body%20.setting-item%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline:%20var(--size-4-3);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.code-block-builder-preview%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.code-block-builder-output%20%7B%5Cn%20%20%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20%20%20align-items:%20stretch;%5Cn%5Cn%20%20%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20%20%20resize:%20vertical;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-lib%60.%5Cn.obsidian-lib-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-lib-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-lib-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-lib-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22//%20Obsidian%20lays%20its%20collapse%20indicators%20out%20only%20inside%20%60.markdown-preview-view%60%20(and%20the%20list%20one%20inside%5Cn//%20%60.markdown-rendered%60),%20so%20markdown%20rendered%20anywhere%20else%20and%20made%20foldable%20by%20%60registerFoldHandlers%60%5Cn//%20would%20get%20them%20inline,%20pushing%20the%20text%20aside.%20These%20are%20the%20Reading%20view's%20own%20rules,%20read%20from%5Cn//%20Obsidian%201.15.0.%20The%20opacity%20and%20hover%20rules%20are%20global%20in%20Obsidian%20and%20need%20no%20copy.%5Cn.obsidian-lib%20%7B%5Cn%20%20&.foldable-markdown%20%7B%5Cn%20%20%20%20.collapse-indicator%20%7B%5Cn%20%20%20%20%20%20cursor:%20var(--cursor);%5Cn%20%20%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20user-select:%20none;%5Cn%5Cn%20%20%20%20%20%20.svg-icon%20%7B%5Cn%20%20%20%20%20%20%20%20vertical-align:%20middle;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.heading-collapse-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%20-22px;%5Cn%20%20%20%20%20%20padding:%200%206px;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-collapse-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%20-2.65em;%5Cn%20%20%20%20%20%20padding-inline-end:%202em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20li.is-collapsed%20%3E%20ul,%5Cn%20%20%20%20li.is-collapsed%20%3E%20ol%20%7B%5Cn%20%20%20%20%20%20display:%20none;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.hotkey-component%20%7B%5Cn%20%20%20%20button.is-placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20button.is-active%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.list-component%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-1);%5Cn%20%20%20%20min-width:%2012em;%5Cn%5Cn%20%20%20%20.list-component-items%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-item,%5Cn%20%20%20%20.list-component-new-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-item-text%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20overflow-wrap:%20anywhere;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-new-item%20input%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-empty%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20Not%20%60&progress%60:%20that%20APPENDS%20the%20element%20name%20to%20the%20parent%20class,%20producing%20one%20long%20class%20that%20matches%5Cn%20%20//%20nothing.%20The%20element%20type%20has%20to%20lead%20the%20compound%20selector%20instead.%5Cn%20%20@at-root%20progress%23%7B&%7D.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-lib-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-lib-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-lib%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-lib-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-lib-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20The%20strip%20of%20commands%20along%20the%20bottom%20of%20a%20modal.%5Cn%20%20//%5Cn%20%20//%20In%20%60Instructions%60%20render%20mode%20it%20also%20carries%20Obsidian's%20own%20%60.prompt-instructions%60%20%E2%80%94%20whose%20rule%20is%5Cn%20%20//%20unscoped,%20so%20it%20applies%20to%20a%20plain%20%60Modal%60%20too%20%E2%80%94%20and%20this%20one%20only%20re-tunes%20that%20rule's%20%60gap%60%20and%5Cn%20%20//%20%60padding%60%20and%20adds%20the%20separator;%20in%20%60Buttons%60%20mode%20it%20is%20the%20whole%20strip.%5Cn%20%20&.modal-commands%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border-top:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20control%20the%20%60Instructions%60%20renderer%20injects%20into%20an%20instruction's%20purpose%20text%20%E2%80%94%20a%20checkbox,%20a%5Cn%20%20//%20dropdown.%20Obsidian%20styles%20the%20instruction%20bar%20itself,%20but%20its%20own%20bar%20never%20contains%20a%20control,%20so%5Cn%20%20//%20nothing%20upstream%20separates%20one%20from%20the%20label%20it%20belongs%20to.%20Sits%20on%20the%20control%20rather%20than%20on%20the%5Cn%20%20//%20strip,%20so%20it%20reaches%20a%20%60SuggestModal%60's%20native%20bar%20as%20well%20as%20a%20self-created%20one.%5Cn%20%20&.modal-command-control%20%7B%5Cn%20%20%20%20margin-inline-start:%20var(--size-2-2);%5Cn%20%20%20%20vertical-align:%20middle;%5Cn%20%20%7D%5Cn%5Cn%20%20//%20One%20command%20button.%20Replaces%20the%20instruction%20bar%20rather%20than%20supplementing%20it:%20the%20bar%20can%20only%20ever%5Cn%20%20//%20say%20which%20key%20to%20press,%20and%20on%20a%20phone%20there%20is%20no%20modifier%20key%20to%20press,%20so%20every%20control%20it%20names%5Cn%20%20//%20is%20unreachable%20there.%5Cn%20%20&.modal-command%20%7B%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20align-items:%20baseline;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20//%20Comfortably%20tappable%20on%20a%20phone,%20where%20this%20strip%20is%20the%20only%20way%20in.%5Cn%20%20%20%20min-height:%20var(--size-4-8);%5Cn%20%20%20%20padding:%20var(--size-2-1)%20var(--size-4-2);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20font-size:%20var(--font-ui-smaller);%5Cn%20%20%20%20white-space:%20nowrap;%5Cn%20%20%20%20cursor:%20pointer;%5Cn%5Cn%20%20%20%20//%20Touch%20can%20leave%20:hover%20latched%20until%20the%20next%20tap.%20Keep%20the%20ON%20fill%20in%20that%20state%20too.%5Cn%20%20%20%20&:hover:not(:disabled):not(.is-active)%20%7B%5Cn%20%20%20%20%20%20background-color:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20toggle%20that%20is%20ON.%20An%20action%20never%20carries%20it%20%E2%80%94%20it%20does%20something%20and%20is%20done,%20so%20there%20is%20no%5Cn%20%20%20%20//%20state%20for%20it%20to%20show.%5Cn%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20Disabled%20rather%20than%20removed:%20a%20strip%20that%20lost%20buttons%20as%20modes%20change%20would%20reflow%20under%20the%5Cn%20%20%20%20//%20pointer,%20which%20on%20a%20phone%20means%20a%20mis-tap.%5Cn%20%20%20%20&:disabled%20%7B%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%20%20cursor:%20default;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.modal-command-hotkey%20%7B%5Cn%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20font-size:%20var(--font-smallest);%5Cn%5Cn%20%20%20%20//%20Faint%20against%20the%20surface%20is%20right;%20faint%20against%20the%20accent%20fill%20is%20invisible.%5Cn%20%20%20%20.modal-command.is-active%20&%20%7B%5Cn%20%20%20%20%20%20opacity:%200.7;%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20Compound,%20not%20nested:%20%60addPluginCssClasses%60%20puts%20%60obsidian-lib%60%20and%20%60multiple-dropdown-component%60%20on%20the%5Cn%20%20//%20SAME%20element%20(the%20setting's%20control%20container),%20so%20a%20descendant%20selector%20matched%20nothing%20and%20every%20multiple%5Cn%20%20//%20dropdown%20rendered%20one%20row%20tall%20%E2%80%94%20Obsidian's%20%60.dropdown%60%20height,%20with%20no%20popup%20behind%20it%20to%20pick%20from.%5Cn%20%20&.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%5Cn%20%20%20%20//%20The%20name%20is%20inline%20code;%20it%20keeps%20the%20code%20background%20and%20font%20but%20takes%20the%20prefix's%20accent%20color.%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20color:%20inherit;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-lib.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-lib.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-lib.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-suggestion-banner%20%7B%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20border-left:%20var(--size-2-1)%20solid%20var(--text-accent);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-4);%5Cn%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%5Cn%20%20%20%20button%20%7B%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20notice%20lays%20its%20buttons%20out%20inline%20with%20no%20spacing,%20so%20the%20action%20button%20would%20touch%20the%20decline%20button.%5Cn%20%20&.plugin-suggestion-notice-buttons%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-lib%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.settings-tabs%20%7B%5Cn%20%20%20%20.settings-tabs-bar%20%7B%5Cn%20%20%20%20%20%20border-bottom:%20var(--border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%20%20margin-bottom:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.settings-tabs-button%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20background:%20none;%5Cn%20%20%20%20%20%20border-bottom:%202px%20solid%20transparent;%5Cn%20%20%20%20%20%20border-radius:%200;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%20%20%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20%20%20border-bottom-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.settings-tabs-icon%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20inside%20the%5Cn//%20Library's%20own%20UI%20(specificity%200,2,1),%20which%20wins%20over%20tldraw's%20(0,1,1)%20while%20staying%20correct%5Cn//%20For%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20It%20MUST%20stay%20scoped%20to%20%60.obsidian-lib%60:%20an%20unscoped%20re-assert%20(it%20was%20%60body%20button%E2%80%A6%60,%5Cn//%200,1,2)%20lands%20on%20every%20button%20in%20the%20app%20and%20beats%20any%20other%20plugin's%20own%20button%20color%5Cn//%20Written%20at%200,1,1,%20which%20Obsidian's%20own%20rule%20used%20to%20lose%20to%20(obsidian-custom-attachment-location%2395).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cn.obsidian-lib%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-lib%20%7B%5Cn%20%20:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */
633
+ /*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/bug-report.scss%22,%22../src/styles/code-block-builder-modal.scss%22,%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/foldable-markdown.scss%22,%22../src/styles/hotkey-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/list-component.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-commands.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/plugin-suggestion.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/settings-tabs.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AACE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;;ACZA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;;ACjCJ;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;AClBE;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;;AC3BF;EACE;;AAGF;EACE;;;ACNJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;;AC3BK;EACP;;;ACJJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACpGN;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;;AAMF;EACE;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;;AAGA;EACE;EACA;;;ACrEF;EACE;EACA;;;ACCF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACZN;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;ACrCF;EACE;;;ACFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;EACA;;;ACjBF;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACDF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;;;ACdN;EACE;;;ACZE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-lib%20%7B%5Cn%20%20&.bug-report-review-modal%20.bug-report-preview%20%7B%5Cn%20%20%20%20max-height:%2030vh;%5Cn%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20font-size:%20var(--font-ui-smaller);%5Cn%20%20%20%20white-space:%20pre-wrap;%5Cn%20%20%20%20overflow-wrap:%20anywhere;%5Cn%20%20%20%20user-select:%20text;%5Cn%20%20%7D%5Cn%5Cn%20%20&.copy-text-manually-modal%20.copy-text-manually-text%20%7B%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20resize:%20vertical;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.code-block-builder-modal%20%7B%5Cn%20%20%20%20.code-block-builder-group%20%7B%5Cn%20%20%20%20%20%20margin-bottom:%20var(--size-4-3);%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-m);%5Cn%5Cn%20%20%20%20%20%20&:not(.is-collapsed)%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20&.is-collapsed%20.code-block-builder-group-body%20%7B%5Cn%20%20%20%20%20%20%20%20display:%20none;%5Cn%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20.code-block-builder-group-body%20.setting-item%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline:%20var(--size-4-3);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.code-block-builder-preview%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.code-block-builder-output%20%7B%5Cn%20%20%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20%20%20align-items:%20stretch;%5Cn%5Cn%20%20%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%20%20%7D%5Cn%5Cn%20%20%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20%20%20resize:%20vertical;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-lib%60.%5Cn.obsidian-lib-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-lib-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-lib-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-lib-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22//%20Obsidian%20lays%20its%20collapse%20indicators%20out%20only%20inside%20%60.markdown-preview-view%60%20(and%20the%20list%20one%20inside%5Cn//%20%60.markdown-rendered%60),%20so%20markdown%20rendered%20anywhere%20else%20and%20made%20foldable%20by%20%60registerFoldHandlers%60%5Cn//%20would%20get%20them%20inline,%20pushing%20the%20text%20aside.%20These%20are%20the%20Reading%20view's%20own%20rules,%20read%20from%5Cn//%20Obsidian%201.15.0.%20The%20opacity%20and%20hover%20rules%20are%20global%20in%20Obsidian%20and%20need%20no%20copy.%5Cn.obsidian-lib%20%7B%5Cn%20%20&.foldable-markdown%20%7B%5Cn%20%20%20%20.collapse-indicator%20%7B%5Cn%20%20%20%20%20%20cursor:%20var(--cursor);%5Cn%20%20%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20user-select:%20none;%5Cn%5Cn%20%20%20%20%20%20.svg-icon%20%7B%5Cn%20%20%20%20%20%20%20%20vertical-align:%20middle;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.heading-collapse-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%20-22px;%5Cn%20%20%20%20%20%20padding:%200%206px;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-collapse-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%20-2.65em;%5Cn%20%20%20%20%20%20padding-inline-end:%202em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20li.is-collapsed%20%3E%20ul,%5Cn%20%20%20%20li.is-collapsed%20%3E%20ol%20%7B%5Cn%20%20%20%20%20%20display:%20none;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.hotkey-component%20%7B%5Cn%20%20%20%20button.is-placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20button.is-active%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.list-component%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-1);%5Cn%20%20%20%20min-width:%2012em;%5Cn%5Cn%20%20%20%20.list-component-items%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-item,%5Cn%20%20%20%20.list-component-new-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-item-text%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20overflow-wrap:%20anywhere;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-new-item%20input%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.list-component-empty%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20Not%20%60&progress%60:%20that%20APPENDS%20the%20element%20name%20to%20the%20parent%20class,%20producing%20one%20long%20class%20that%20matches%5Cn%20%20//%20nothing.%20The%20element%20type%20has%20to%20lead%20the%20compound%20selector%20instead.%5Cn%20%20@at-root%20progress%23%7B&%7D.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-lib-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-lib-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-lib%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-lib-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-lib-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20The%20strip%20of%20commands%20along%20the%20bottom%20of%20a%20modal.%5Cn%20%20//%5Cn%20%20//%20In%20%60Instructions%60%20render%20mode%20it%20also%20carries%20Obsidian's%20own%20%60.prompt-instructions%60%20%E2%80%94%20whose%20rule%20is%5Cn%20%20//%20unscoped,%20so%20it%20applies%20to%20a%20plain%20%60Modal%60%20too%20%E2%80%94%20and%20this%20one%20only%20re-tunes%20that%20rule's%20%60gap%60%20and%5Cn%20%20//%20%60padding%60%20and%20adds%20the%20separator;%20in%20%60Buttons%60%20mode%20it%20is%20the%20whole%20strip.%5Cn%20%20&.modal-commands%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border-top:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20control%20the%20%60Instructions%60%20renderer%20injects%20into%20an%20instruction's%20purpose%20text%20%E2%80%94%20a%20checkbox,%20a%5Cn%20%20//%20dropdown.%20Obsidian%20styles%20the%20instruction%20bar%20itself,%20but%20its%20own%20bar%20never%20contains%20a%20control,%20so%5Cn%20%20//%20nothing%20upstream%20separates%20one%20from%20the%20label%20it%20belongs%20to.%20Sits%20on%20the%20control%20rather%20than%20on%20the%5Cn%20%20//%20strip,%20so%20it%20reaches%20a%20%60SuggestModal%60's%20native%20bar%20as%20well%20as%20a%20self-created%20one.%5Cn%20%20&.modal-command-control%20%7B%5Cn%20%20%20%20margin-inline-start:%20var(--size-2-2);%5Cn%20%20%20%20vertical-align:%20middle;%5Cn%20%20%7D%5Cn%5Cn%20%20//%20One%20command%20button.%20Replaces%20the%20instruction%20bar%20rather%20than%20supplementing%20it:%20the%20bar%20can%20only%20ever%5Cn%20%20//%20say%20which%20key%20to%20press,%20and%20on%20a%20phone%20there%20is%20no%20modifier%20key%20to%20press,%20so%20every%20control%20it%20names%5Cn%20%20//%20is%20unreachable%20there.%5Cn%20%20&.modal-command%20%7B%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20align-items:%20baseline;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20//%20Comfortably%20tappable%20on%20a%20phone,%20where%20this%20strip%20is%20the%20only%20way%20in.%5Cn%20%20%20%20min-height:%20var(--size-4-8);%5Cn%20%20%20%20padding:%20var(--size-2-1)%20var(--size-4-2);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20font-size:%20var(--font-ui-smaller);%5Cn%20%20%20%20white-space:%20nowrap;%5Cn%20%20%20%20cursor:%20pointer;%5Cn%5Cn%20%20%20%20//%20Touch%20can%20leave%20:hover%20latched%20until%20the%20next%20tap.%20Keep%20the%20ON%20fill%20in%20that%20state%20too.%5Cn%20%20%20%20&:hover:not(:disabled):not(.is-active)%20%7B%5Cn%20%20%20%20%20%20background-color:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20toggle%20that%20is%20ON.%20An%20action%20never%20carries%20it%20%E2%80%94%20it%20does%20something%20and%20is%20done,%20so%20there%20is%20no%5Cn%20%20%20%20//%20state%20for%20it%20to%20show.%5Cn%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20Disabled%20rather%20than%20removed:%20a%20strip%20that%20lost%20buttons%20as%20modes%20change%20would%20reflow%20under%20the%5Cn%20%20%20%20//%20pointer,%20which%20on%20a%20phone%20means%20a%20mis-tap.%5Cn%20%20%20%20&:disabled%20%7B%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%20%20cursor:%20default;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.modal-command-hotkey%20%7B%5Cn%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20font-size:%20var(--font-smallest);%5Cn%5Cn%20%20%20%20//%20Faint%20against%20the%20surface%20is%20right;%20faint%20against%20the%20accent%20fill%20is%20invisible.%5Cn%20%20%20%20.modal-command.is-active%20&%20%7B%5Cn%20%20%20%20%20%20opacity:%200.7;%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20//%20Compound,%20not%20nested:%20%60addPluginCssClasses%60%20puts%20%60obsidian-lib%60%20and%20%60multiple-dropdown-component%60%20on%20the%5Cn%20%20//%20SAME%20element%20(the%20setting's%20control%20container),%20so%20a%20descendant%20selector%20matched%20nothing%20and%20every%20multiple%5Cn%20%20//%20dropdown%20rendered%20one%20row%20tall%20%E2%80%94%20Obsidian's%20%60.dropdown%60%20height,%20with%20no%20popup%20behind%20it%20to%20pick%20from.%5Cn%20%20&.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%5Cn%20%20%20%20//%20The%20name%20is%20inline%20code;%20it%20keeps%20the%20code%20background%20and%20font%20but%20takes%20the%20prefix's%20accent%20color.%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20color:%20inherit;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-lib.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-lib.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-lib.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.plugin-suggestion-banner%20%7B%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20border-left:%20var(--size-2-1)%20solid%20var(--text-accent);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-4);%5Cn%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%5Cn%20%20%20%20button%20%7B%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20notice%20lays%20its%20buttons%20out%20inline%20with%20no%20spacing,%20so%20the%20action%20button%20would%20touch%20the%20decline%20button.%5Cn%20%20&.plugin-suggestion-notice-buttons%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-lib%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.settings-tabs%20%7B%5Cn%20%20%20%20.settings-tabs-bar%20%7B%5Cn%20%20%20%20%20%20border-bottom:%20var(--border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-1);%5Cn%20%20%20%20%20%20margin-bottom:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.settings-tabs-button%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20background:%20none;%5Cn%20%20%20%20%20%20border-bottom:%202px%20solid%20transparent;%5Cn%20%20%20%20%20%20border-radius:%200;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%20%20%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20%20%20border-bottom-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.settings-tabs-icon%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20inside%20the%5Cn//%20Library's%20own%20UI%20(specificity%200,2,1),%20which%20wins%20over%20tldraw's%20(0,1,1)%20while%20staying%20correct%5Cn//%20For%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20It%20MUST%20stay%20scoped%20to%20%60.obsidian-lib%60:%20an%20unscoped%20re-assert%20(it%20was%20%60body%20button%E2%80%A6%60,%5Cn//%200,1,2)%20lands%20on%20every%20button%20in%20the%20app%20and%20beats%20any%20other%20plugin's%20own%20button%20color%5Cn//%20Written%20at%200,1,1,%20which%20Obsidian's%20own%20rule%20used%20to%20lose%20to%20(obsidian-custom-attachment-location%2395).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cn.obsidian-lib%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-lib%20%7B%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-lib%20%7B%5Cn%20%20:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/modals/copy-text-manually.cjs",
3
+ "module": "../../dist/lib/esm/modals/copy-text-manually.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/modals/copy-text-manually.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/modals/review-bug-report-diagnostics.cjs",
3
+ "module": "../../dist/lib/esm/modals/review-bug-report-diagnostics.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts"
6
+ }