obsidian-dev-utils 57.0.2 → 58.0.1

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 (29) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/lib/cjs/library.cjs +1 -1
  3. package/dist/lib/cjs/obsidian/components/async-component.cjs +28 -11
  4. package/dist/lib/cjs/obsidian/components/async-component.d.cts +14 -0
  5. package/dist/lib/cjs/obsidian/plugin/components/index.cjs +4 -4
  6. package/dist/lib/cjs/obsidian/plugin/components/index.d.cts +1 -1
  7. package/dist/lib/cjs/obsidian/plugin/components/layout-ready-component.cjs +124 -0
  8. package/dist/lib/cjs/obsidian/plugin/components/layout-ready-component.d.cts +18 -0
  9. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +47 -81
  10. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +13 -51
  11. package/dist/lib/cjs/strict-proxy.cjs +15 -4
  12. package/dist/lib/cjs/strict-proxy.d.cts +12 -0
  13. package/dist/lib/esm/library.mjs +1 -1
  14. package/dist/lib/esm/obsidian/components/async-component.d.mts +14 -0
  15. package/dist/lib/esm/obsidian/components/async-component.mjs +25 -10
  16. package/dist/lib/esm/obsidian/plugin/components/index.d.mts +1 -1
  17. package/dist/lib/esm/obsidian/plugin/components/index.mjs +3 -3
  18. package/dist/lib/esm/obsidian/plugin/components/layout-ready-component.d.mts +18 -0
  19. package/dist/lib/esm/obsidian/plugin/components/layout-ready-component.mjs +24 -0
  20. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +13 -51
  21. package/dist/lib/esm/obsidian/plugin/plugin.mjs +48 -85
  22. package/dist/lib/esm/strict-proxy.d.mts +12 -0
  23. package/dist/lib/esm/strict-proxy.mjs +14 -4
  24. package/obsidian/Plugin/components/{lifecycle-events-component → layout-ready-component}/package.json +3 -3
  25. package/package.json +2 -2
  26. package/dist/lib/cjs/obsidian/plugin/components/lifecycle-events-component.cjs +0 -211
  27. package/dist/lib/cjs/obsidian/plugin/components/lifecycle-events-component.d.cts +0 -63
  28. package/dist/lib/esm/obsidian/plugin/components/lifecycle-events-component.d.mts +0 -63
  29. package/dist/lib/esm/obsidian/plugin/components/lifecycle-events-component.mjs +0 -106
@@ -12,25 +12,7 @@ import { Component, Plugin as ObsidianPlugin } from 'obsidian';
12
12
  import type { PluginSettingsComponentBase } from './components/plugin-settings-component.cjs';
13
13
  import { AbortSignalComponent } from './components/abort-signal-component.cjs';
14
14
  import { ConsoleDebugComponent } from './components/console-debug-component.cjs';
15
- import { LifecycleEventsComponent } from './components/lifecycle-events-component.cjs';
16
15
  import { PluginNoticeComponent } from './components/plugin-notice-component.cjs';
17
- /**
18
- * Params for {@link PluginBase.registerComponent}.
19
- *
20
- * @typeParam T - The component type.
21
- */
22
- export interface RegisterComponentParams<T extends Component = Component> {
23
- /**
24
- * The component to register.
25
- */
26
- readonly component: T;
27
- /**
28
- * Whether this component should be loaded before the plugin's `onloadImpl()` runs.
29
- * Components marked with this flag are force-loaded during `onload()`, ensuring they are
30
- * fully initialized before plugin logic executes.
31
- */
32
- readonly shouldPreload?: boolean;
33
- }
34
16
  /**
35
17
  * Base class for creating Obsidian plugins with a component-based architecture.
36
18
  *
@@ -46,10 +28,6 @@ export declare abstract class PluginBase extends ObsidianPlugin {
46
28
  * The console debug component. Provides namespaced debug logging.
47
29
  */
48
30
  protected readonly consoleDebugComponent: ConsoleDebugComponent;
49
- /**
50
- * The lifecycle events component. Provides load, layoutReady, and unload events.
51
- */
52
- protected readonly lifecycleEventsComponent: LifecycleEventsComponent;
53
31
  /**
54
32
  * The notice component. Displays notices to the user.
55
33
  */
@@ -58,7 +36,6 @@ export declare abstract class PluginBase extends ObsidianPlugin {
58
36
  * The settings component. Manages plugin settings lifecycle.
59
37
  */
60
38
  protected readonly settingsComponent: PluginSettingsComponentBase<object>;
61
- private readonly preloadComponents;
62
39
  private readonly singletonComponents;
63
40
  /**
64
41
  * Creates a new PluginBase.
@@ -68,42 +45,27 @@ export declare abstract class PluginBase extends ObsidianPlugin {
68
45
  */
69
46
  constructor(app: App, manifest: PluginManifest);
70
47
  /**
71
- * Called when the external settings change.
48
+ * Adds a component to the plugin.
72
49
  *
73
- * Override in subclass if needed. Make sure to call `await super.onExternalSettingsChange()` first.
74
- */
75
- onExternalSettingsChange(): Promise<void>;
76
- /**
77
- * Called when the plugin is loaded. Force-loads components that must be ready
78
- * before plugin logic, then calls `onloadImpl()`.
50
+ * If the component's class defines a static `COMPONENT_KEY` symbol, it is treated as a singleton —
51
+ * adding another component with the same key replaces the previous one.
52
+ * Components without a `COMPONENT_KEY` are multi-instance and simply added.
79
53
  *
80
- * Usually, you don't need to override this method. Override {@link onloadImpl} instead.
81
- */
82
- onload(): Promise<void>;
83
- /**
84
- * Called when the layout is ready.
54
+ * @typeParam T - The component type.
55
+ * @param component - The component to add.
56
+ * @returns The added component.
85
57
  */
86
- protected onLayoutReady(): Promise<void>;
58
+ addChild<T extends Component>(component: T): T;
87
59
  /**
88
- * Called after all pre-load components are initialized. Override this to add plugin-specific logic.
89
- *
90
- * @remarks It is important to call `super.onloadImpl()` in overridden method.
60
+ * Loads the plugin and its components.
91
61
  */
92
- protected onloadImpl(): Promise<void>;
62
+ load(): Promise<void>;
93
63
  /**
94
- * Registers a component with the plugin.
95
- *
96
- * If the component's class defines a static `COMPONENT_KEY` symbol, it is treated as a singleton —
97
- * registering another component with the same key replaces the previous one.
98
- * Components without a `COMPONENT_KEY` are multi-instance and simply added.
64
+ * Called when the external settings change.
99
65
  *
100
- * @typeParam T - The component type.
101
- * @param params - The registration params.
102
- * @returns The registered component.
66
+ * Override in subclass if needed. Make sure to call `await super.onExternalSettingsChange()` first.
103
67
  */
104
- protected registerComponent<T extends Component>(params: RegisterComponentParams<T>): T;
105
- private afterLoad;
106
- private onLayoutReadyBase;
68
+ onExternalSettingsChange(): Promise<void>;
107
69
  }
108
70
  /**
109
71
  * Reloads the specified plugin by disabling and then re-enabling it.
@@ -125,10 +125,11 @@ var __copyProps = (to, from, except, desc) => {
125
125
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
126
126
  var strict_proxy_exports = {};
127
127
  __export(strict_proxy_exports, {
128
+ bypassStrictProxy: () => bypassStrictProxy,
128
129
  strictProxy: () => strictProxy
129
130
  });
130
131
  module.exports = __toCommonJS(strict_proxy_exports);
131
- const STRICT_PROXY_MARKER = /* @__PURE__ */ Symbol("strictProxy");
132
+ const STRICT_PROXY_TARGET_SYMBOL = /* @__PURE__ */ Symbol.for("strictProxyTarget");
132
133
  const PASSTHROUGH_PROPS = /* @__PURE__ */ new Set([
133
134
  Symbol.iterator,
134
135
  Symbol.toPrimitive,
@@ -136,6 +137,15 @@ const PASSTHROUGH_PROPS = /* @__PURE__ */ new Set([
136
137
  "then",
137
138
  "toJSON"
138
139
  ]);
140
+ function bypassStrictProxy(obj) {
141
+ if (!isObjectLike(obj)) {
142
+ return obj;
143
+ }
144
+ if (!(STRICT_PROXY_TARGET_SYMBOL in obj)) {
145
+ return obj;
146
+ }
147
+ return obj[STRICT_PROXY_TARGET_SYMBOL];
148
+ }
139
149
  function strictProxy(partial) {
140
150
  return wrapProxy(partial);
141
151
  }
@@ -149,10 +159,10 @@ function wrapProxy(value) {
149
159
  if (!isObjectLike(value)) {
150
160
  return value;
151
161
  }
152
- if (STRICT_PROXY_MARKER in value) {
162
+ if (STRICT_PROXY_TARGET_SYMBOL in value) {
153
163
  return value;
154
164
  }
155
- Object.defineProperty(value, STRICT_PROXY_MARKER, { value: true });
165
+ Object.defineProperty(value, STRICT_PROXY_TARGET_SYMBOL, { value });
156
166
  const proxiedChildren = /* @__PURE__ */ new Map();
157
167
  return new Proxy(value, {
158
168
  get(target, prop, receiver) {
@@ -177,6 +187,7 @@ function wrapProxy(value) {
177
187
  }
178
188
  // Annotate the CommonJS export names for ESM import in node:
179
189
  0 && (module.exports = {
190
+ bypassStrictProxy,
180
191
  strictProxy
181
192
  });
182
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmljdC1wcm94eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0cmljdGx5LXR5cGVkIG1vY2sgb2JqZWN0IGZhY3RvcnkgdmlhIGBQcm94eWAuIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yXG4gKiB3aGVuIGFueSB1bm1vY2tlZCBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgcHJldmVudGluZyBzaWxlbnQgYHVuZGVmaW5lZGAgcmV0dXJucy5cbiAqXG4gKiBUaGUgcHJveHkgaW1wbGVtZW50YXRpb24gbWlycm9ycyB0aGUgZGVzaWduIG9mXG4gKiBgb2JzaWRpYW4tdGVzdC1tb2Nrcy9zcmMvaW50ZXJuYWwvc3RyaWN0LXByb3h5LnRzYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBhcnRpYWxEZWVwIH0gZnJvbSAndHlwZS1mZXN0JztcblxuY29uc3QgU1RSSUNUX1BST1hZX01BUktFUiA9IFN5bWJvbCgnc3RyaWN0UHJveHknKTtcblxuY29uc3QgUEFTU1RIUk9VR0hfUFJPUFMgPSBuZXcgU2V0PHN0cmluZyB8IHN5bWJvbD4oW1xuICBTeW1ib2wuaXRlcmF0b3IsXG4gIFN5bWJvbC50b1ByaW1pdGl2ZSxcbiAgU3ltYm9sLnRvU3RyaW5nVGFnLFxuICAndGhlbicsXG4gICd0b0pTT04nXG5dKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaWN0bHktdHlwZWQgbW9jayBvYmplY3QgZnJvbSBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uXG4gKiBVc2VzIGEgYFByb3h5YCB0aGF0IHRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIHdoZW4gYW55IHVubW9ja2VkXG4gKiBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgcHJldmVudGluZyBzaWxlbnQgYHVuZGVmaW5lZGAgcmV0dXJucy5cbiAqXG4gKiAtIElkZW1wb3RlbnQ6IGRvdWJsZS13cmFwcGluZyBpcyBhIG5vLW9wLlxuICogLSBQYXNzdGhyb3VnaCBmb3Igd2VsbC1rbm93biBwcm9wcyAoYHRoZW5gLCBgdG9KU09OYCwgYFN5bWJvbC5pdGVyYXRvcmAsIGV0Yy4pLlxuICogLSBSZWN1cnNpdmUgcHJveHlpbmcgb2YgbmVzdGVkIHBsYWluIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIHBhcnRpYWwgLSBBIHBhcnRpYWwgb2JqZWN0IGNvbnRhaW5pbmcgb25seSB0aGUgbW9ja2VkIG1lbWJlcnMuXG4gKiBAcmV0dXJucyBBIHByb3h5IHR5cGVkIGFzIGBUYCB0aGF0IHRocm93cyBvbiB1bm1vY2tlZCBwcm9wZXJ0eSBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpY3RQcm94eTxUPihwYXJ0aWFsOiBQYXJ0aWFsRGVlcDxUPik6IFQge1xuICByZXR1cm4gd3JhcFByb3h5PFQ+KHBhcnRpYWwpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGFuIG9iamVjdC1saWtlIHZhbHVlIChub3QgbnVsbCkuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaXMgb2JqZWN0LWxpa2UuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IChub3QgYSBjbGFzcyBpbnN0YW5jZSwgYXJyYXksIG51bGwsIGV0Yy4pLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgdmFsdWUgaW4gYSBzdHJpY3QgcHJveHkuIElkZW1wb3RlbnQgXHUyMDE0IGRvdWJsZS13cmFwcGluZyBpcyBhIG5vLW9wLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cmFwLlxuICogQHJldHVybnMgVGhlIHByb3hpZWQgdmFsdWUgdHlwZWQgYXMgYFRgLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBUIHByb3ZpZGVzIHJldHVybiB0eXBlIGluZmVyZW5jZSBhdCBjYWxsIHNpdGVzLlxuZnVuY3Rpb24gd3JhcFByb3h5PFQ+KHZhbHVlOiB1bmtub3duKTogVCB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSBhcyBUO1xuICB9XG5cbiAgaWYgKFNUUklDVF9QUk9YWV9NQVJLRVIgaW4gdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgVDtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUsIFNUUklDVF9QUk9YWV9NQVJLRVIsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgY29uc3QgcHJveGllZENoaWxkcmVuID0gbmV3IE1hcDxzdHJpbmcgfCBzeW1ib2w+KCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eSh2YWx1ZSwge1xuICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTogdW5rbm93biB7XG4gICAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgICAgaWYgKHByb3hpZWRDaGlsZHJlbi5oYXMocHJvcCkpIHtcbiAgICAgICAgICByZXR1cm4gcHJveGllZENoaWxkcmVuLmdldChwcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbDogdW5rbm93biA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gd3JhcFByb3h5PHVua25vd24+KHZhbCk7XG4gICAgICAgICAgcHJveGllZENoaWxkcmVuLnNldChwcm9wLCByZXN1bHQpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJyB8fCBQQVNTVEhST1VHSF9QUk9QUy5oYXMocHJvcCkpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubW9ja2VkIHByb3BlcnR5IFwiJHtwcm9wfVwiIHdhcyBhY2Nlc3NlZCBvbiBtb2NrIG9iamVjdGApO1xuICAgIH1cbiAgfSkgYXMgVDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLE1BQU0sc0JBQXNCLHVCQUFPLGFBQWE7QUFFaEQsTUFBTSxvQkFBb0Isb0JBQUksSUFBcUI7QUFBQSxFQUNqRCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUDtBQUFBLEVBQ0E7QUFDRixDQUFDO0FBY00sU0FBUyxZQUFlLFNBQTRCO0FBQ3pELFNBQU8sVUFBYSxPQUFPO0FBQzdCO0FBUUEsU0FBUyxhQUFhLE9BQWlDO0FBQ3JELFNBQU8sVUFBVSxRQUFRLE9BQU8sVUFBVTtBQUM1QztBQVFBLFNBQVMsY0FBYyxPQUFrRDtBQUN2RSxTQUFPLGFBQWEsS0FBSyxLQUFLLE9BQU8sZUFBZSxLQUFLLE1BQU0sT0FBTztBQUN4RTtBQVNBLFNBQVMsVUFBYSxPQUFtQjtBQUN2QyxNQUFJLENBQUMsYUFBYSxLQUFLLEdBQUc7QUFDeEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLHVCQUF1QixPQUFPO0FBQ2hDLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxlQUFlLE9BQU8scUJBQXFCLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFFakUsUUFBTSxrQkFBa0Isb0JBQUksSUFBcUI7QUFFakQsU0FBTyxJQUFJLE1BQU0sT0FBTztBQUFBLElBQ3RCLElBQUksUUFBUSxNQUFNLFVBQW1CO0FBQ25DLFVBQUksUUFBUSxRQUFRO0FBQ2xCLFlBQUksZ0JBQWdCLElBQUksSUFBSSxHQUFHO0FBQzdCLGlCQUFPLGdCQUFnQixJQUFJLElBQUk7QUFBQSxRQUNqQztBQUVBLGNBQU0sTUFBZSxRQUFRLElBQUksUUFBUSxNQUFNLFFBQVE7QUFDdkQsWUFBSSxjQUFjLEdBQUcsR0FBRztBQUN0QixnQkFBTSxTQUFTLFVBQW1CLEdBQUc7QUFDckMsMEJBQWdCLElBQUksTUFBTSxNQUFNO0FBQ2hDLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxPQUFPLFNBQVMsWUFBWSxrQkFBa0IsSUFBSSxJQUFJLEdBQUc7QUFDM0QsZUFBTyxRQUFRLElBQUksUUFBUSxNQUFNLFFBQVE7QUFBQSxNQUMzQztBQUVBLFlBQU0sSUFBSSxNQUFNLHNCQUFzQixJQUFJLCtCQUErQjtBQUFBLElBQzNFO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
193
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmljdC1wcm94eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0cmljdGx5LXR5cGVkIG1vY2sgb2JqZWN0IGZhY3RvcnkgdmlhIGBQcm94eWAuIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yXG4gKiB3aGVuIGFueSB1bm1vY2tlZCBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgcHJldmVudGluZyBzaWxlbnQgYHVuZGVmaW5lZGAgcmV0dXJucy5cbiAqXG4gKiBUaGUgcHJveHkgaW1wbGVtZW50YXRpb24gbWlycm9ycyB0aGUgZGVzaWduIG9mXG4gKiBgb2JzaWRpYW4tdGVzdC1tb2Nrcy9zcmMvaW50ZXJuYWwvc3RyaWN0LXByb3h5LnRzYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBhcnRpYWxEZWVwIH0gZnJvbSAndHlwZS1mZXN0JztcblxuY29uc3QgU1RSSUNUX1BST1hZX1RBUkdFVF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdzdHJpY3RQcm94eVRhcmdldCcpO1xuXG5jb25zdCBQQVNTVEhST1VHSF9QUk9QUyA9IG5ldyBTZXQ8c3RyaW5nIHwgc3ltYm9sPihbXG4gIFN5bWJvbC5pdGVyYXRvcixcbiAgU3ltYm9sLnRvUHJpbWl0aXZlLFxuICBTeW1ib2wudG9TdHJpbmdUYWcsXG4gICd0aGVuJyxcbiAgJ3RvSlNPTidcbl0pO1xuXG4vKipcbiAqIEJ5cGFzc2VzIHN0cmljdCBwcm94eSB0byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgb2JqZWN0LlxuICpcbiAqIElmIHRoZSBvYmplY3QgaXMgd3JhcHBlZCBpbiBhIHN0cmljdCBwcm94eSwgcmV0dXJucyB0aGUgdW53cmFwcGVkIHRhcmdldC5cbiAqIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgb2JqZWN0IGFzLWlzLiBUaGlzIGFsbG93cyBzYWZlbHkgYWNjZXNzaW5nXG4gKiBvcHRpb25hbCBwcm9wZXJ0aWVzIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgcHJveHkncyBlcnJvciBvbiBtaXNzaW5nIHByb3BzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBvYmplY3QgdHlwZS5cbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGJ5cGFzcy5cbiAqIEByZXR1cm5zIFRoZSB1bndyYXBwZWQgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnlwYXNzU3RyaWN0UHJveHk8VD4ob2JqOiBUKTogVCB7XG4gIGlmICghaXNPYmplY3RMaWtlKG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGlmICghKFNUUklDVF9QUk9YWV9UQVJHRVRfU1lNQk9MIGluIG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIHJldHVybiBvYmpbU1RSSUNUX1BST1hZX1RBUkdFVF9TWU1CT0xdIGFzIFQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmljdGx5LXR5cGVkIG1vY2sgb2JqZWN0IGZyb20gYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uLlxuICogVXNlcyBhIGBQcm94eWAgdGhhdCB0aHJvd3MgYSBkZXNjcmlwdGl2ZSBlcnJvciB3aGVuIGFueSB1bm1vY2tlZFxuICogcHJvcGVydHkgaXMgYWNjZXNzZWQsIHByZXZlbnRpbmcgc2lsZW50IGB1bmRlZmluZWRgIHJldHVybnMuXG4gKlxuICogLSBJZGVtcG90ZW50OiBkb3VibGUtd3JhcHBpbmcgaXMgYSBuby1vcC5cbiAqIC0gUGFzc3Rocm91Z2ggZm9yIHdlbGwta25vd24gcHJvcHMgKGB0aGVuYCwgYHRvSlNPTmAsIGBTeW1ib2wuaXRlcmF0b3JgLCBldGMuKS5cbiAqIC0gUmVjdXJzaXZlIHByb3h5aW5nIG9mIG5lc3RlZCBwbGFpbiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBwYXJ0aWFsIC0gQSBwYXJ0aWFsIG9iamVjdCBjb250YWluaW5nIG9ubHkgdGhlIG1vY2tlZCBtZW1iZXJzLlxuICogQHJldHVybnMgQSBwcm94eSB0eXBlZCBhcyBgVGAgdGhhdCB0aHJvd3Mgb24gdW5tb2NrZWQgcHJvcGVydHkgYWNjZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaWN0UHJveHk8VD4ocGFydGlhbDogUGFydGlhbERlZXA8VD4pOiBUIHtcbiAgcmV0dXJuIHdyYXBQcm94eTxUPihwYXJ0aWFsKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhbiBvYmplY3QtbGlrZSB2YWx1ZSAobm90IG51bGwpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIGlzIG9iamVjdC1saWtlLlxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBvYmplY3Qge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCAobm90IGEgY2xhc3MgaW5zdGFuY2UsIGFycmF5LCBudWxsLCBldGMuKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBXcmFwcyBhIHZhbHVlIGluIGEgc3RyaWN0IHByb3h5LiBJZGVtcG90ZW50IFx1MjAxNCBkb3VibGUtd3JhcHBpbmcgaXMgYSBuby1vcC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEByZXR1cm5zIFRoZSBwcm94aWVkIHZhbHVlIHR5cGVkIGFzIGBUYC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gVCBwcm92aWRlcyByZXR1cm4gdHlwZSBpbmZlcmVuY2UgYXQgY2FsbCBzaXRlcy5cbmZ1bmN0aW9uIHdyYXBQcm94eTxUPih2YWx1ZTogdW5rbm93bik6IFQge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgVDtcbiAgfVxuXG4gIGlmIChTVFJJQ1RfUFJPWFlfVEFSR0VUX1NZTUJPTCBpbiB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBhcyBUO1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgU1RSSUNUX1BST1hZX1RBUkdFVF9TWU1CT0wsIHsgdmFsdWUgfSk7XG5cbiAgY29uc3QgcHJveGllZENoaWxkcmVuID0gbmV3IE1hcDxzdHJpbmcgfCBzeW1ib2w+KCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eSh2YWx1ZSwge1xuICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTogdW5rbm93biB7XG4gICAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgICAgaWYgKHByb3hpZWRDaGlsZHJlbi5oYXMocHJvcCkpIHtcbiAgICAgICAgICByZXR1cm4gcHJveGllZENoaWxkcmVuLmdldChwcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbDogdW5rbm93biA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gd3JhcFByb3h5PHVua25vd24+KHZhbCk7XG4gICAgICAgICAgcHJveGllZENoaWxkcmVuLnNldChwcm9wLCByZXN1bHQpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJyB8fCBQQVNTVEhST1VHSF9QUk9QUy5oYXMocHJvcCkpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubW9ja2VkIHByb3BlcnR5IFwiJHtwcm9wfVwiIHdhcyBhY2Nlc3NlZCBvbiBtb2NrIG9iamVjdGApO1xuICAgIH1cbiAgfSkgYXMgVDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsTUFBTSw2QkFBNkIsdUJBQU8sSUFBSSxtQkFBbUI7QUFFakUsTUFBTSxvQkFBb0Isb0JBQUksSUFBcUI7QUFBQSxFQUNqRCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUDtBQUFBLEVBQ0E7QUFDRixDQUFDO0FBYU0sU0FBUyxrQkFBcUIsS0FBVztBQUM5QyxNQUFJLENBQUMsYUFBYSxHQUFHLEdBQUc7QUFDdEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLEVBQUUsOEJBQThCLE1BQU07QUFDeEMsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLElBQUksMEJBQTBCO0FBQ3ZDO0FBY08sU0FBUyxZQUFlLFNBQTRCO0FBQ3pELFNBQU8sVUFBYSxPQUFPO0FBQzdCO0FBUUEsU0FBUyxhQUFhLE9BQWlDO0FBQ3JELFNBQU8sVUFBVSxRQUFRLE9BQU8sVUFBVTtBQUM1QztBQVFBLFNBQVMsY0FBYyxPQUFrRDtBQUN2RSxTQUFPLGFBQWEsS0FBSyxLQUFLLE9BQU8sZUFBZSxLQUFLLE1BQU0sT0FBTztBQUN4RTtBQVNBLFNBQVMsVUFBYSxPQUFtQjtBQUN2QyxNQUFJLENBQUMsYUFBYSxLQUFLLEdBQUc7QUFDeEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLDhCQUE4QixPQUFPO0FBQ3ZDLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxlQUFlLE9BQU8sNEJBQTRCLEVBQUUsTUFBTSxDQUFDO0FBRWxFLFFBQU0sa0JBQWtCLG9CQUFJLElBQXFCO0FBRWpELFNBQU8sSUFBSSxNQUFNLE9BQU87QUFBQSxJQUN0QixJQUFJLFFBQVEsTUFBTSxVQUFtQjtBQUNuQyxVQUFJLFFBQVEsUUFBUTtBQUNsQixZQUFJLGdCQUFnQixJQUFJLElBQUksR0FBRztBQUM3QixpQkFBTyxnQkFBZ0IsSUFBSSxJQUFJO0FBQUEsUUFDakM7QUFFQSxjQUFNLE1BQWUsUUFBUSxJQUFJLFFBQVEsTUFBTSxRQUFRO0FBQ3ZELFlBQUksY0FBYyxHQUFHLEdBQUc7QUFDdEIsZ0JBQU0sU0FBUyxVQUFtQixHQUFHO0FBQ3JDLDBCQUFnQixJQUFJLE1BQU0sTUFBTTtBQUNoQyxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksT0FBTyxTQUFTLFlBQVksa0JBQWtCLElBQUksSUFBSSxHQUFHO0FBQzNELGVBQU8sUUFBUSxJQUFJLFFBQVEsTUFBTSxRQUFRO0FBQUEsTUFDM0M7QUFFQSxZQUFNLElBQUksTUFBTSxzQkFBc0IsSUFBSSwrQkFBK0I7QUFBQSxJQUMzRTtBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -8,6 +8,18 @@
8
8
  * `obsidian-test-mocks/src/internal/strict-proxy.ts`.
9
9
  */
10
10
  import type { PartialDeep } from 'type-fest';
11
+ /**
12
+ * Bypasses strict proxy to access the underlying object.
13
+ *
14
+ * If the object is wrapped in a strict proxy, returns the unwrapped target.
15
+ * Otherwise, returns the object as-is. This allows safely accessing
16
+ * optional properties without triggering the proxy's error on missing props.
17
+ *
18
+ * @typeParam T - The object type.
19
+ * @param obj - The object to bypass.
20
+ * @returns The unwrapped object.
21
+ */
22
+ export declare function bypassStrictProxy<T>(obj: T): T;
11
23
  /**
12
24
  * Creates a strictly-typed mock object from a partial implementation.
13
25
  * Uses a `Proxy` that throws a descriptive error when any unmocked
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
21
21
  globalThis.process = browserProcess;
22
22
  })();
23
23
 
24
- const LIBRARY_VERSION = "57.0.2";
24
+ const LIBRARY_VERSION = "58.0.1";
25
25
  const LIBRARY_NAME = "obsidian-dev-utils";
26
26
  const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/prompt-modal.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;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;;;ACzCJ;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;;;ACAA;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;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-dev-utils%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.obsidian-dev-utils%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-dev-utils%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-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%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-dev-utils%20%7B%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:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%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-dev-utils%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-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%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%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 */\n";
27
27
  export {
@@ -26,3 +26,17 @@ export declare abstract class AsyncComponentBase extends Component {
26
26
  */
27
27
  onload(): Promise<void>;
28
28
  }
29
+ /**
30
+ * Loads a component and its children sequentially.
31
+ *
32
+ * @param component - The component to load.
33
+ * @returns A {@link Promise} that resolves when the component is loaded.
34
+ */
35
+ export declare function loadAsync(component: Component): Promise<void>;
36
+ /**
37
+ * Loads a component and its children (children first).
38
+ *
39
+ * @param component - The component to load.
40
+ * @returns A {@link Promise} that resolves when the component is loaded.
41
+ */
42
+ export declare function loadChildrenFirstAsync(component: Component): Promise<void>;
@@ -31,14 +31,7 @@ class AsyncComponentBase extends Component {
31
31
  */
32
32
  // eslint-disable-next-line @typescript-eslint/no-misused-promises -- Obsidian's load() handles async returns at runtime.
33
33
  async load() {
34
- if (this._loaded) {
35
- return;
36
- }
37
- this._loaded = true;
38
- await this.onload();
39
- for (const child of this._children) {
40
- await child.load();
41
- }
34
+ await loadAsync(this);
42
35
  }
43
36
  /**
44
37
  * Override this method to perform async initialization.
@@ -50,7 +43,29 @@ class AsyncComponentBase extends Component {
50
43
  await Promise.resolve();
51
44
  }
52
45
  }
46
+ async function loadAsync(component) {
47
+ if (component._loaded) {
48
+ return;
49
+ }
50
+ component._loaded = true;
51
+ await component.onload();
52
+ for (const child of component._children) {
53
+ await loadAsync(child);
54
+ }
55
+ }
56
+ async function loadChildrenFirstAsync(component) {
57
+ if (component._loaded) {
58
+ return;
59
+ }
60
+ for (const child of component._children) {
61
+ await loadChildrenFirstAsync(child);
62
+ }
63
+ component._loaded = true;
64
+ await component.onload();
65
+ }
53
66
  export {
54
- AsyncComponentBase
67
+ AsyncComponentBase,
68
+ loadAsync,
69
+ loadChildrenFirstAsync
55
70
  };
56
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvYXN5bmMtY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQmFzZSBjbGFzcyBmb3IgY29tcG9uZW50cyB0aGF0IG5lZWQgYXN5bmMgbGlmZWN5Y2xlIG1ldGhvZHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIEEge0BsaW5rIENvbXBvbmVudH0gdGhhdCBzdXBwb3J0cyBhc3luYyBsaWZlY3ljbGUgbWV0aG9kcy5cbiAqXG4gKiBPYnNpZGlhbidzIGBDb21wb25lbnQubG9hZCgpYCBjYXB0dXJlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBvbmxvYWQoKWAgYW5kIGluY2x1ZGVzIFByb21pc2VzXG4gKiBpbiBhIGBQcm9taXNlLmFsbCgpYC4gVGhpcyBjbGFzcyBvdmVycmlkZXMgYGxvYWQoKWAgdG8gYGF3YWl0YCBgb25sb2FkKClgIGJlZm9yZSBsb2FkaW5nIGNoaWxkcmVuLFxuICogZW5zdXJpbmcgb3JkZXJlZCBpbml0aWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFzeW5jQ29tcG9uZW50QmFzZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBMb2FkcyB0aGlzIGNvbXBvbmVudCBhbmQgaXRzIGNoaWxkcmVuIHNlcXVlbnRpYWxseS5cbiAgICpcbiAgICogVW5saWtlIENvbXBvbmVudCdzIGBsb2FkKClgIHdoaWNoIHJ1bnMgYG9ubG9hZCgpYCBhbmQgY2hpbGRyZW4gY29uY3VycmVudGx5LFxuICAgKiB0aGlzIGF3YWl0cyBgb25sb2FkKClgIGZpcnN0LCB0aGVuIGxvYWRzIGNoaWxkcmVuIGluIG9yZGVyLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXByb21pc2VzIC0tIE9ic2lkaWFuJ3MgbG9hZCgpIGhhbmRsZXMgYXN5bmMgcmV0dXJucyBhdCBydW50aW1lLlxuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbmxvYWQoKTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5fY2hpbGRyZW4pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tY29uZnVzaW5nLXZvaWQtZXhwcmVzc2lvbiAtLSBDb21wb25lbnQubG9hZCgpIHJldHVybnMgdm9pZHxQcm9taXNlIGF0IHJ1bnRpbWUgZGVzcGl0ZSB2b2lkIHR5cGluZy5cbiAgICAgIGF3YWl0IChjaGlsZC5sb2FkKCkgYXMgUHJvbWlzYWJsZTx2b2lkPik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHBlcmZvcm0gYXN5bmMgaW5pdGlhbGl6YXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlcyAtLSBJbnRlbnRpb25hbCBhc3luYyBvdmVycmlkZTsgY2FsbGVkIGZyb20gb3VyIG93biBhc3luYyBsb2FkKCkuXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyxpQkFBaUI7QUFTbkIsTUFBZSwyQkFBMkIsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRekQsTUFBc0IsT0FBc0I7QUFDMUMsUUFBSSxLQUFLLFNBQVM7QUFDaEI7QUFBQSxJQUNGO0FBQ0EsU0FBSyxVQUFVO0FBQ2YsVUFBTSxLQUFLLE9BQU87QUFFbEIsZUFBVyxTQUFTLEtBQUssV0FBVztBQUVsQyxZQUFPLE1BQU0sS0FBSztBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBc0IsU0FBd0I7QUFDNUMsVUFBTSxRQUFRLFFBQVE7QUFBQSxFQUN4QjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
71
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvYXN5bmMtY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQmFzZSBjbGFzcyBmb3IgY29tcG9uZW50cyB0aGF0IG5lZWQgYXN5bmMgbGlmZWN5Y2xlIG1ldGhvZHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIEEge0BsaW5rIENvbXBvbmVudH0gdGhhdCBzdXBwb3J0cyBhc3luYyBsaWZlY3ljbGUgbWV0aG9kcy5cbiAqXG4gKiBPYnNpZGlhbidzIGBDb21wb25lbnQubG9hZCgpYCBjYXB0dXJlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBvbmxvYWQoKWAgYW5kIGluY2x1ZGVzIFByb21pc2VzXG4gKiBpbiBhIGBQcm9taXNlLmFsbCgpYC4gVGhpcyBjbGFzcyBvdmVycmlkZXMgYGxvYWQoKWAgdG8gYGF3YWl0YCBgb25sb2FkKClgIGJlZm9yZSBsb2FkaW5nIGNoaWxkcmVuLFxuICogZW5zdXJpbmcgb3JkZXJlZCBpbml0aWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFzeW5jQ29tcG9uZW50QmFzZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBMb2FkcyB0aGlzIGNvbXBvbmVudCBhbmQgaXRzIGNoaWxkcmVuIHNlcXVlbnRpYWxseS5cbiAgICpcbiAgICogVW5saWtlIENvbXBvbmVudCdzIGBsb2FkKClgIHdoaWNoIHJ1bnMgYG9ubG9hZCgpYCBhbmQgY2hpbGRyZW4gY29uY3VycmVudGx5LFxuICAgKiB0aGlzIGF3YWl0cyBgb25sb2FkKClgIGZpcnN0LCB0aGVuIGxvYWRzIGNoaWxkcmVuIGluIG9yZGVyLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXByb21pc2VzIC0tIE9ic2lkaWFuJ3MgbG9hZCgpIGhhbmRsZXMgYXN5bmMgcmV0dXJucyBhdCBydW50aW1lLlxuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBsb2FkQXN5bmModGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcGVyZm9ybSBhc3luYyBpbml0aWFsaXphdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXByb21pc2VzIC0tIEludGVudGlvbmFsIGFzeW5jIG92ZXJyaWRlOyBjYWxsZWQgZnJvbSBvdXIgb3duIGFzeW5jIGxvYWQoKS5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxufVxuXG4vKipcbiAqIExvYWRzIGEgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gc2VxdWVudGlhbGx5LlxuICpcbiAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRvIGxvYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQXN5bmMoY29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGNvbXBvbmVudC5fbG9hZGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbXBvbmVudC5fbG9hZGVkID0gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1jb25mdXNpbmctdm9pZC1leHByZXNzaW9uIC0tIENvbXBvbmVudC5sb2FkKCkgcmV0dXJucyB2b2lkfFByb21pc2UgYXQgcnVudGltZSBkZXNwaXRlIHZvaWQgdHlwaW5nLlxuICBhd2FpdCAoY29tcG9uZW50Lm9ubG9hZCgpIGFzIFByb21pc2FibGU8dm9pZD4pO1xuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY29tcG9uZW50Ll9jaGlsZHJlbikge1xuICAgIGF3YWl0IGxvYWRBc3luYyhjaGlsZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkcyBhIGNvbXBvbmVudCBhbmQgaXRzIGNoaWxkcmVuIChjaGlsZHJlbiBmaXJzdCkuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdG8gbG9hZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDaGlsZHJlbkZpcnN0QXN5bmMoY29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGNvbXBvbmVudC5fbG9hZGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjb21wb25lbnQuX2NoaWxkcmVuKSB7XG4gICAgYXdhaXQgbG9hZENoaWxkcmVuRmlyc3RBc3luYyhjaGlsZCk7XG4gIH1cblxuICBjb21wb25lbnQuX2xvYWRlZCA9IHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tY29uZnVzaW5nLXZvaWQtZXhwcmVzc2lvbiAtLSBDb21wb25lbnQubG9hZCgpIHJldHVybnMgdm9pZHxQcm9taXNlIGF0IHJ1bnRpbWUgZGVzcGl0ZSB2b2lkIHR5cGluZy5cbiAgYXdhaXQgKGNvbXBvbmVudC5vbmxvYWQoKSBhcyBQcm9taXNhYmxlPHZvaWQ+KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyxpQkFBaUI7QUFTbkIsTUFBZSwyQkFBMkIsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRekQsTUFBc0IsT0FBc0I7QUFDMUMsVUFBTSxVQUFVLElBQUk7QUFBQSxFQUN0QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBc0IsU0FBd0I7QUFDNUMsVUFBTSxRQUFRLFFBQVE7QUFBQSxFQUN4QjtBQUNGO0FBUUEsZUFBc0IsVUFBVSxXQUFxQztBQUNuRSxNQUFJLFVBQVUsU0FBUztBQUNyQjtBQUFBLEVBQ0Y7QUFDQSxZQUFVLFVBQVU7QUFFcEIsUUFBTyxVQUFVLE9BQU87QUFFeEIsYUFBVyxTQUFTLFVBQVUsV0FBVztBQUN2QyxVQUFNLFVBQVUsS0FBSztBQUFBLEVBQ3ZCO0FBQ0Y7QUFRQSxlQUFzQix1QkFBdUIsV0FBcUM7QUFDaEYsTUFBSSxVQUFVLFNBQVM7QUFDckI7QUFBQSxFQUNGO0FBRUEsYUFBVyxTQUFTLFVBQVUsV0FBVztBQUN2QyxVQUFNLHVCQUF1QixLQUFLO0FBQUEsRUFDcEM7QUFFQSxZQUFVLFVBQVU7QUFFcEIsUUFBTyxVQUFVLE9BQU87QUFDMUI7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -2,7 +2,7 @@ export * as abort_signal_component from './abort-signal-component.mjs';
2
2
  export * as async_error_handler_component from './async-error-handler-component.mjs';
3
3
  export * as console_debug_component from './console-debug-component.mjs';
4
4
  export * as i18n_component from './i18n-component.mjs';
5
- export * as lifecycle_events_component from './lifecycle-events-component.mjs';
5
+ export * as layout_ready_component from './layout-ready-component.mjs';
6
6
  export * as plugin_context_component from './plugin-context-component.mjs';
7
7
  export * as plugin_notice_component from './plugin-notice-component.mjs';
8
8
  export * as plugin_settings_component from './plugin-settings-component.mjs';
@@ -25,7 +25,7 @@ import * as abort_signal_component from "./abort-signal-component.mjs";
25
25
  import * as async_error_handler_component from "./async-error-handler-component.mjs";
26
26
  import * as console_debug_component from "./console-debug-component.mjs";
27
27
  import * as i18n_component from "./i18n-component.mjs";
28
- import * as lifecycle_events_component from "./lifecycle-events-component.mjs";
28
+ import * as layout_ready_component from "./layout-ready-component.mjs";
29
29
  import * as plugin_context_component from "./plugin-context-component.mjs";
30
30
  import * as plugin_notice_component from "./plugin-notice-component.mjs";
31
31
  import * as plugin_settings_component from "./plugin-settings-component.mjs";
@@ -35,10 +35,10 @@ export {
35
35
  async_error_handler_component,
36
36
  console_debug_component,
37
37
  i18n_component,
38
- lifecycle_events_component,
38
+ layout_ready_component,
39
39
  plugin_context_component,
40
40
  plugin_notice_component,
41
41
  plugin_settings_component,
42
42
  plugin_settings_tab_component
43
43
  };
44
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9jb21wb25lbnRzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgYWJvcnRfc2lnbmFsX2NvbXBvbmVudCBmcm9tICcuL2Fib3J0LXNpZ25hbC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgYXN5bmNfZXJyb3JfaGFuZGxlcl9jb21wb25lbnQgZnJvbSAnLi9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyBjb25zb2xlX2RlYnVnX2NvbXBvbmVudCBmcm9tICcuL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzIGkxOG5fY29tcG9uZW50IGZyb20gJy4vaTE4bi1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgbGlmZWN5Y2xlX2V2ZW50c19jb21wb25lbnQgZnJvbSAnLi9saWZlY3ljbGUtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyBwbHVnaW5fY29udGV4dF9jb21wb25lbnQgZnJvbSAnLi9wbHVnaW4tY29udGV4dC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgcGx1Z2luX25vdGljZV9jb21wb25lbnQgZnJvbSAnLi9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyBwbHVnaW5fc2V0dGluZ3NfY29tcG9uZW50IGZyb20gJy4vcGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyBwbHVnaW5fc2V0dGluZ3NfdGFiX2NvbXBvbmVudCBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy10YWItY29tcG9uZW50LnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWSw0QkFBNEI7QUFDeEMsWUFBWSxtQ0FBbUM7QUFDL0MsWUFBWSw2QkFBNkI7QUFDekMsWUFBWSxvQkFBb0I7QUFDaEMsWUFBWSxnQ0FBZ0M7QUFDNUMsWUFBWSw4QkFBOEI7QUFDMUMsWUFBWSw2QkFBNkI7QUFDekMsWUFBWSwrQkFBK0I7QUFDM0MsWUFBWSxtQ0FBbUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
44
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9jb21wb25lbnRzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgYWJvcnRfc2lnbmFsX2NvbXBvbmVudCBmcm9tICcuL2Fib3J0LXNpZ25hbC1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgYXN5bmNfZXJyb3JfaGFuZGxlcl9jb21wb25lbnQgZnJvbSAnLi9hc3luYy1lcnJvci1oYW5kbGVyLWNvbXBvbmVudC50cyc7XG5leHBvcnQgKiBhcyBjb25zb2xlX2RlYnVnX2NvbXBvbmVudCBmcm9tICcuL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzIGkxOG5fY29tcG9uZW50IGZyb20gJy4vaTE4bi1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgbGF5b3V0X3JlYWR5X2NvbXBvbmVudCBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgcGx1Z2luX2NvbnRleHRfY29tcG9uZW50IGZyb20gJy4vcGx1Z2luLWNvbnRleHQtY29tcG9uZW50LnRzJztcbmV4cG9ydCAqIGFzIHBsdWdpbl9ub3RpY2VfY29tcG9uZW50IGZyb20gJy4vcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgcGx1Z2luX3NldHRpbmdzX2NvbXBvbmVudCBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuZXhwb3J0ICogYXMgcGx1Z2luX3NldHRpbmdzX3RhYl9jb21wb25lbnQgZnJvbSAnLi9wbHVnaW4tc2V0dGluZ3MtdGFiLWNvbXBvbmVudC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLFlBQVksNEJBQTRCO0FBQ3hDLFlBQVksbUNBQW1DO0FBQy9DLFlBQVksNkJBQTZCO0FBQ3pDLFlBQVksb0JBQW9CO0FBQ2hDLFlBQVksNEJBQTRCO0FBQ3hDLFlBQVksOEJBQThCO0FBQzFDLFlBQVksNkJBQTZCO0FBQ3pDLFlBQVksK0JBQStCO0FBQzNDLFlBQVksbUNBQW1DOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @file
3
+ *
4
+ * Interface for components that need to perform work when the workspace layout is ready.
5
+ */
6
+ import type { Promisable } from 'type-fest';
7
+ /**
8
+ * Components implementing this interface will have {@link onLayoutReady} called
9
+ * by PluginBase after the workspace layout is ready, with error isolation.
10
+ */
11
+ export interface LayoutReadyComponent {
12
+ /**
13
+ * Called when the workspace layout is ready.
14
+ *
15
+ * @returns A {@link Promise} that resolves when layout-ready work is complete.
16
+ */
17
+ onLayoutReady(): Promisable<void>;
18
+ }
@@ -0,0 +1,24 @@
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
+ (function initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
@@ -12,25 +12,7 @@ import { Component, Plugin as ObsidianPlugin } from 'obsidian';
12
12
  import type { PluginSettingsComponentBase } from './components/plugin-settings-component.mjs';
13
13
  import { AbortSignalComponent } from './components/abort-signal-component.mjs';
14
14
  import { ConsoleDebugComponent } from './components/console-debug-component.mjs';
15
- import { LifecycleEventsComponent } from './components/lifecycle-events-component.mjs';
16
15
  import { PluginNoticeComponent } from './components/plugin-notice-component.mjs';
17
- /**
18
- * Params for {@link PluginBase.registerComponent}.
19
- *
20
- * @typeParam T - The component type.
21
- */
22
- export interface RegisterComponentParams<T extends Component = Component> {
23
- /**
24
- * The component to register.
25
- */
26
- readonly component: T;
27
- /**
28
- * Whether this component should be loaded before the plugin's `onloadImpl()` runs.
29
- * Components marked with this flag are force-loaded during `onload()`, ensuring they are
30
- * fully initialized before plugin logic executes.
31
- */
32
- readonly shouldPreload?: boolean;
33
- }
34
16
  /**
35
17
  * Base class for creating Obsidian plugins with a component-based architecture.
36
18
  *
@@ -46,10 +28,6 @@ export declare abstract class PluginBase extends ObsidianPlugin {
46
28
  * The console debug component. Provides namespaced debug logging.
47
29
  */
48
30
  protected readonly consoleDebugComponent: ConsoleDebugComponent;
49
- /**
50
- * The lifecycle events component. Provides load, layoutReady, and unload events.
51
- */
52
- protected readonly lifecycleEventsComponent: LifecycleEventsComponent;
53
31
  /**
54
32
  * The notice component. Displays notices to the user.
55
33
  */
@@ -58,7 +36,6 @@ export declare abstract class PluginBase extends ObsidianPlugin {
58
36
  * The settings component. Manages plugin settings lifecycle.
59
37
  */
60
38
  protected readonly settingsComponent: PluginSettingsComponentBase<object>;
61
- private readonly preloadComponents;
62
39
  private readonly singletonComponents;
63
40
  /**
64
41
  * Creates a new PluginBase.
@@ -68,42 +45,27 @@ export declare abstract class PluginBase extends ObsidianPlugin {
68
45
  */
69
46
  constructor(app: App, manifest: PluginManifest);
70
47
  /**
71
- * Called when the external settings change.
48
+ * Adds a component to the plugin.
72
49
  *
73
- * Override in subclass if needed. Make sure to call `await super.onExternalSettingsChange()` first.
74
- */
75
- onExternalSettingsChange(): Promise<void>;
76
- /**
77
- * Called when the plugin is loaded. Force-loads components that must be ready
78
- * before plugin logic, then calls `onloadImpl()`.
50
+ * If the component's class defines a static `COMPONENT_KEY` symbol, it is treated as a singleton —
51
+ * adding another component with the same key replaces the previous one.
52
+ * Components without a `COMPONENT_KEY` are multi-instance and simply added.
79
53
  *
80
- * Usually, you don't need to override this method. Override {@link onloadImpl} instead.
81
- */
82
- onload(): Promise<void>;
83
- /**
84
- * Called when the layout is ready.
54
+ * @typeParam T - The component type.
55
+ * @param component - The component to add.
56
+ * @returns The added component.
85
57
  */
86
- protected onLayoutReady(): Promise<void>;
58
+ addChild<T extends Component>(component: T): T;
87
59
  /**
88
- * Called after all pre-load components are initialized. Override this to add plugin-specific logic.
89
- *
90
- * @remarks It is important to call `super.onloadImpl()` in overridden method.
60
+ * Loads the plugin and its components.
91
61
  */
92
- protected onloadImpl(): Promise<void>;
62
+ load(): Promise<void>;
93
63
  /**
94
- * Registers a component with the plugin.
95
- *
96
- * If the component's class defines a static `COMPONENT_KEY` symbol, it is treated as a singleton —
97
- * registering another component with the same key replaces the previous one.
98
- * Components without a `COMPONENT_KEY` are multi-instance and simply added.
64
+ * Called when the external settings change.
99
65
  *
100
- * @typeParam T - The component type.
101
- * @param params - The registration params.
102
- * @returns The registered component.
66
+ * Override in subclass if needed. Make sure to call `await super.onExternalSettingsChange()` first.
103
67
  */
104
- protected registerComponent<T extends Component>(params: RegisterComponentParams<T>): T;
105
- private afterLoad;
106
- private onLayoutReadyBase;
68
+ onExternalSettingsChange(): Promise<void>;
107
69
  }
108
70
  /**
109
71
  * Reloads the specified plugin by disabling and then re-enabling it.