@mnaoumov/obsidian-lib 6.2.0 → 6.3.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.
@@ -116,6 +116,7 @@ var folder_note_exports = {};
116
116
  __export(folder_note_exports, {
117
117
  FOLDER_NOTES_PLUGIN_ID: () => FOLDER_NOTES_PLUGIN_ID,
118
118
  FolderNoteLocation: () => FolderNoteLocation,
119
+ getFolderNoteFolder: () => getFolderNoteFolder,
119
120
  resolveFolderNote: () => resolveFolderNote,
120
121
  resolveFolderNoteConfig: () => resolveFolderNoteConfig
121
122
  });
@@ -140,6 +141,21 @@ const FALLBACK_FOLDER_NOTE_CONFIG = {
140
141
  location: "InsideFolder" /* InsideFolder */,
141
142
  resolveName: (folder) => folder.name
142
143
  };
144
+ function getFolderNoteFolder(params) {
145
+ const { app, file } = params;
146
+ const config = params.config ?? resolveFolderNoteConfig({ app });
147
+ const parent = file.parent;
148
+ if (!parent || config.location === "None" /* None */) {
149
+ return null;
150
+ }
151
+ let candidateFolders;
152
+ if (config.location === "InsideFolder" /* InsideFolder */) {
153
+ candidateFolders = parent.isRoot() ? [] : [parent];
154
+ } else {
155
+ candidateFolders = parent.children.filter(import_file_system.isFolder);
156
+ }
157
+ return candidateFolders.find((folder) => resolveFolderNote({ app, config, folder }) === file) ?? null;
158
+ }
143
159
  function resolveFolderNote(params) {
144
160
  const { app, folder } = params;
145
161
  const config = params.config ?? resolveFolderNoteConfig({ app });
@@ -237,7 +253,8 @@ function toFolderNoteLocation(storageLocation) {
237
253
  0 && (module.exports = {
238
254
  FOLDER_NOTES_PLUGIN_ID,
239
255
  FolderNoteLocation,
256
+ getFolderNoteFolder,
240
257
  resolveFolderNote,
241
258
  resolveFolderNoteConfig
242
259
  });
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb2xkZXItbm90ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IOKAlCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vY29tbXVuaXR5Lm9ic2lkaWFuLm1kL3BsdWdpbnMvZm9sZGVyLW5vdGVzKS4gU28gdGhlIGFuc3dlciB0b1xuICogXCJ3aGljaCBub3RlIGJlbG9uZ3MgdG8gdGhpcyBmb2xkZXJcIiBpcyB0aGF0IHBsdWdpbidzIHRvIGdpdmUgd2hlbmV2ZXIgaXQgaXMgaW5zdGFsbGVkLCBhbmQgdGhpcyBtb2R1bGVcbiAqIGFza3MgaXQgcmF0aGVyIHRoYW4gaW52ZW50aW5nIGEgc2Vjb25kIGFuc3dlcjoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIGRlZmF1bHQg4oCUIHJlYWRzIGl0c1xuICogbGl2ZSBjb25maWd1cmF0aW9uIGF0IGV2ZXJ5IHVzZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGxpdmUgcmF0aGVyIHRoYW4gY29weWluZyBpdHMgdmFsdWVzIGludG8gYSBjb25zdW1lcidzIG93biBzZXR0aW5ncyBpcyBkZWxpYmVyYXRlOiBhIGNvcHkgZ29lc1xuICogc3RhbGUgdGhlIG1vbWVudCB0aGF0IHBsdWdpbiBpcyByZWNvbmZpZ3VyZWQsIGFuZCBpdCB3b3VsZCBuZWVkIGEgc2V0dGluZ3MgbWlncmF0aW9uIHRvIHNlZWQuIEV2ZXJ5dGhpbmdcbiAqIGVsc2UgaXMgdGhlIGNhbGxlcidzIGV4cGxpY2l0IGNob2ljZSwgYW5kIHRoZW4gdGhlIG90aGVyIHBsdWdpbiBpcyBub3QgY29uc3VsdGVkIGF0IGFsbC5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXZlciBDUkVBVEVTIGEgbm90ZS4gQSBmb2xkZXIgd2l0aCBubyBmb2xkZXIgbm90ZSBhbnN3ZXJzIGBudWxsYCwgd2hpY2ggaXMgd2hhdCBsZXRzIGFcbiAqIGNhbGxlciBsYXllciBmb2xkZXItbm90ZSBiZWhhdmlvciBvbnRvIGEgY2xpY2sgd2l0aG91dCByaXNraW5nIGEgZmlsZSBhcHBlYXJpbmcgb24gdGhlIHVzZXIncyBkaXNrLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG4vKipcbiAqIFdoZXJlIGEgZm9sZGVyJ3MgZm9sZGVyIG5vdGUgbGl2ZXMuXG4gKlxuICogVGhlIHRocmVlIGNvbmNyZXRlIG1lbWJlcnMgYXJlIHRoZSBzaGFwZXMgdGhlIGZvbGRlci1ub3RlIGVjb3N5c3RlbSBhY3R1YWxseSB1c2VzOlxuICogYGNoYXJsaWUvY2hhcmxpZS5tZGAgYW5kIGBjaGFybGllL2luZGV4Lm1kYCBhcmUgYm90aCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcn0gKHRoZXlcbiAqIGRpZmZlciBvbmx5IGluIHRoZSBOQU1FLCB3aGljaCBpcyB3aHkgbmFtaW5nIGlzIGEgY2FsbGJhY2sgYW5kIG5vdCBhIGZvdXJ0aCBtZW1iZXIpLCB3aGlsZVxuICogYGNoYXJsaWUubWRgIGJlc2lkZSB0aGUgZm9sZGVyIGlzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyfSDigJQgd2hvc2Ugd2hvbGUgcG9pbnQgaXMgdGhhdFxuICogYFtbYWxwaGEvYnJhdm8vY2hhcmxpZV1dYCBsaW5rcyB0byBhIGZvbGRlciB3aXRoIG5vIHNwZWNpYWwgc3ludGF4LlxuICovXG5leHBvcnQgZW51bSBGb2xkZXJOb3RlTG9jYXRpb24ge1xuICAvKipcbiAgICogVGFrZSB0aGUgYW5zd2VyIGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4sIGZhbGxpbmcgYmFjayB0byBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzXG4gICAqIGZvbGRlciwgaW5zaWRlIGl0LiBUaGUgZGVmYXVsdCwgYW5kIHJlc29sdmVkIExJVkUgcmF0aGVyIHRoYW4gY29waWVkLlxuICAgKi9cbiAgQXV0byA9ICdBdXRvJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvL2NoYXJsaWUvPG5hbWU+Lm1kYC5cbiAgICovXG4gIEluc2lkZUZvbGRlciA9ICdJbnNpZGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgaGFzIG5vIGZvbGRlciBub3RlcyBhdCBhbGwsIHNvIGV2ZXJ5IGZvbGRlciBhbnN3ZXJzIGBudWxsYC4gVGhpcyBpcyBhbHNvIGhvdyBhIGNhbGxlciBvcHRzXG4gICAqIG91dCBvZiBmb2xkZXItbm90ZSBiZWhhdmlvciBlbnRpcmVseS5cbiAgICovXG4gIE5vbmUgPSAnTm9uZScsXG5cbiAgLyoqXG4gICAqIGBhbHBoYS9icmF2by88bmFtZT4ubWRgLCBiZXNpZGUgdGhlIGZvbGRlci5cbiAgICovXG4gIFBhcmVudEZvbGRlciA9ICdQYXJlbnRGb2xkZXInXG59XG5cbi8qKlxuICogQSBmb2xkZXItbm90ZSBzZXR1cCB3aXRoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gYWxyZWFkeSByZXNvbHZlZCB0byBhIGNvbmNyZXRlIGFuc3dlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCBXSVRIT1VUIHRoZSBsZWFkaW5nIGRvdCwgaW4gcmVzb2x1dGlvbiBvcmRlciDigJQgdGhlIGZpcnN0IG9uZVxuICAgKiB0aGF0IG5hbWVzIGFuIGV4aXN0aW5nIGZpbGUgd2lucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gICAqXG4gICAqIFJlYWQgcmF0aGVyIHRoYW4gYWN0ZWQgdXBvbiBoZXJlOiBpdCBjaGFuZ2VzIG5vdGhpbmcgYWJvdXQgV0hJQ0ggZmlsZSBpcyB0aGUgZm9sZGVyIG5vdGUsIGJ1dCBhIGNhbGxlclxuICAgKiB0aGF0IHJldmVhbHMgdGhlIG5vdGUgaGFzIHRvIGtub3cgdGhlcmUgaXMgbm90aGluZyB0byByZXZlYWwgYW5kIGZhbGwgYmFjayB0byByZXZlYWxpbmcgdGhlIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlciB8IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lIHwgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIGZvbGRlciBub3RlIG9mIGEgZm9sZGVyLCBXSVRIT1VUIGl0cyBleHRlbnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZTsgYW4gZW1wdHkgKG9yIGJsYW5rKSBuYW1lIG1lYW5zIHRoZSBmb2xkZXIgaGFzIG5vIGZvbGRlciBub3RlLlxuICAgKi9cbiAgLy8gQSBmdW5jdGlvbiBwcm9wZXJ0eSByYXRoZXIgdGhhbiBhIG1ldGhvZCwgYmVjYXVzZSBpdCBpcyBhIHN0YW5kYWxvbmUgY2FsbGJhY2ssIG5ldmVyIGEgbWV0aG9kIG9mIHRoZVxuICAvLyBjb25maWcg4oCUIHdoaWNoIGlzIGFsc28gd2hhdCBsZXRzIGl0IGJlIGRlc3RydWN0dXJlZCBhbmQgaGFuZGVkIG9uIHdpdGhvdXQgdHJpcHBpbmcgYHVuYm91bmQtbWV0aG9kYC5cbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpID0+IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIHdpdGggb3Igd2l0aG91dCB0aGUgbGVhZGluZyBkb3QsIGluIHJlc29sdXRpb24gb3JkZXIuIElnbm9yZWRcbiAgICogdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSwgd2hpY2ggdGFrZXMgdGhlIGluc3RhbGxlZCBwbHVnaW4ncyBhbnN3ZXIgd2hvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gSWdub3JlZCB1bmRlciB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0hpZGRlbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlciwgV0lUSE9VVCBpdHMgZXh0ZW5zaW9uLiBJZ25vcmVkIHVuZGVyXG4gICAqIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIG5hbWVzIHRoZSBub3RlIHRoZSB3YXkgdGhlIGluc3RhbGxlZCBwbHVnaW4gZG9lcy5cbiAgICpcbiAgICogQSBjYWxsYmFjayByYXRoZXIgdGhhbiBhIG5hbWUgdGVtcGxhdGUsIGJlY2F1c2UgYSB0ZW1wbGF0ZSBuZWVkcyBhIHRva2VuIHZvY2FidWxhcnkgYW5kIHRoaXMgbGlicmFyeVxuICAgKiBoYXMgbm9uZSB0byBpbXBvc2Ug4oCUIGEgY2FsbGVyIHRoYXQgaGFzIG9uZSAoYHt7Zm9sZGVyTmFtZX19YCwgYHt7Zm9sZGVyUGF0aH19YCwg4oCmKSByZW5kZXJzIGl0IGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgLy8gU2VlIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLnJlc29sdmVOYW1lfSBmb3Igd2h5IHRoaXMgaXMgYSBmdW5jdGlvbiBwcm9wZXJ0eS5cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVGb2xkZXJOb3RlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBhbHJlYWR5LXJlc29sdmVkIHNldHVwIHRvIHVzZS5cbiAgICpcbiAgICogT21pdHRlZCBtZWFucyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IOKAlCB0aGUgc2V0dXAgaXMgcmVzb2x2ZWQgb24gdGhlIHNwb3QsIHdoaWNoIGlzIHdoYXQgbWFrZXNcbiAgICogYHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBmb2xkZXIgfSlgIHRoZSBvbmUtbGluZXIgZXZlcnkgY2FsbGVyIHdhbnRzLiBQYXNzIG9uZSB3aGVuIHRoZSBzYW1lIHNldHVwIGlzXG4gICAqIHVzZWQgbW9yZSB0aGFuIG9uY2UsIG9yIHdoZW4gaXRzIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLmlzSGlkZGVufSBpcyBuZWVkZWQgYWxvbmdzaWRlIHRoZSBub3RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSlgXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBGb2xkZXJOb3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIGZvbGRlciBub3RlIGlzIHdhbnRlZC4gUmVhZCBBRlRFUiBhbnkgcmVuYW1lOiB0aGUgbm90ZSBpcyBuYW1lZCBmcm9tIHRoZSBmb2xkZXInc1xuICAgKiBDVVJSRU5UIG5hbWUsIGFuZCBhIGBmb2xkZXItbm90ZXNgIGluc3RhbGwgd2l0aCBgc3luY0ZvbGRlck5hbWVgIG9uIHdpbGwgaGF2ZSByZW5hbWVkIGl0IGFscmVhZHkuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI6IFRGb2xkZXI7XG59XG5cbi8qKlxuICogVGhlIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIGlkLCBhcyBpdHMgbWFuaWZlc3QgZGVjbGFyZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBGT0xERVJfTk9URVNfUExVR0lOX0lEID0gJ2ZvbGRlci1ub3Rlcyc7XG5cbi8qKlxuICogVGhlIG9uZSB0b2tlbiBgZm9sZGVyLW5vdGVzYCcgb3duIG5hbWUgdGVtcGxhdGUgdW5kZXJzdGFuZHMuIEV2ZXJ5IG90aGVyIGNoYXJhY3RlciBpbiB0aGF0IHRlbXBsYXRlIGlzXG4gKiBhIGxpdGVyYWwsIHNvIHRyYW5zbGF0aW5nIHRoaXMgdG9rZW4gaXMgdGhlIHdob2xlIG9mIHRoZSB0cmFuc2xhdGlvbi5cbiAqL1xuY29uc3QgRk9MREVSX05PVEVTX0ZPTERFUl9OQU1FX1RPS0VOX1JFR19FWFAgPSAvXFx7XFx7Zm9sZGVyX25hbWVcXH1cXH0vZ2k7XG5cbi8qKlxuICogYGZvbGRlci1ub3Rlc2Agb2ZmZXJzIGBFeGNhbGlkcmF3YCBmb2xkZXIgbm90ZXMsIHdoaWNoIGFyZSBNYXJrZG93biBmaWxlcyB3aXRoIGFuIGBFeGNhbGlkcmF3YCBwYXlsb2FkIOKAlCBpdHNcbiAqIG93biByZXNvbHZlciBub3JtYWxpemVzIHRoZSB0eXBlIHRoZSBzYW1lIHdheSBiZWZvcmUgbG9va2luZyB0aGUgZmlsZSB1cC5cbiAqL1xuY29uc3QgRVhDQUxJRFJBV19GSUxFX0VYVEVOU0lPTiA9ICdleGNhbGlkcmF3JztcblxuLyoqXG4gKiBXaGF0IHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gZmFsbHMgYmFjayB0bzogdGhlIGxheW91dCBldmVyeSBmb2xkZXItbm90ZSBwbHVnaW4gc3VwcG9ydHMsIGFuZFxuICogdGhlIG9uZSBgZm9sZGVyLW5vdGVzYCBpdHNlbGYgc2hpcHMgYXMgaXRzIGRlZmF1bHQuIE5vdGhpbmcgaGlkZXMgYSBub3RlIHdoZW4gbm8gcGx1Z2luIGlzIHRoZXJlIHRvIGhpZGVcbiAqIGl0LCBzbyB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5pc0hpZGRlbn0gaXMgYGZhbHNlYC5cbiAqL1xuY29uc3QgRkFMTEJBQ0tfRk9MREVSX05PVEVfQ09ORklHOiBGb2xkZXJOb3RlQ29uZmlnID0ge1xuICBleHRlbnNpb25zOiBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dLFxuICBpc0hpZGRlbjogZmFsc2UsXG4gIGxvY2F0aW9uOiBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyLFxuICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PiBmb2xkZXIubmFtZVxufTtcblxuLyoqXG4gKiBGaW5kcyBhIGZvbGRlcidzIGZvbGRlciBub3RlIOKAlCB0aGUgb25lIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyIGl0c2VsZi5cbiAqXG4gKiAqKk5ldmVyIGNyZWF0ZXMuKiogQSBmb2xkZXIgdGhhdCBoYXMgbm8gZm9sZGVyIG5vdGUgYW5zd2VycyBgbnVsbGAsIGFuZCBzbyBkb2VzIHRoZSB2YXVsdCByb290IHVuZGVyXG4gKiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcn0gKG5vdGhpbmcgY2FuIHNpdCBiZXNpZGUgaXQpLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZm9sZGVyLCBhbmQgb3B0aW9uYWxseSB0aGUgc2V0dXAgdG8gcmVzb2x2ZSBpdCB3aXRoLlxuICogQHJldHVybnMgVGhlIGZvbGRlciBub3RlLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGUocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgYXBwLCBmb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnID0gcGFyYW1zLmNvbmZpZyA/PyByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KTtcbiAgaWYgKGNvbmZpZy5sb2NhdGlvbiA9PT0gRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudEZvbGRlclBhdGggPSBjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXIgPyBmb2xkZXIucGFyZW50Py5wYXRoIDogZm9sZGVyLnBhdGg7XG4gIGlmIChwYXJlbnRGb2xkZXJQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vdGVOYW1lID0gY29uZmlnLnJlc29sdmVOYW1lKGZvbGRlcikudHJpbSgpO1xuICBpZiAoIW5vdGVOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBjb25maWcuZXh0ZW5zaW9ucykge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChub3JtYWxpemVQYXRoKGpvaW4ocGFyZW50Rm9sZGVyUGF0aCwgYCR7bm90ZU5hbWV9LiR7ZXh0ZW5zaW9ufWApKSk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gaW50byBhIGNvbmNyZXRlIGZvbGRlci1ub3RlIHNldHVwLlxuICpcbiAqIGBmb2xkZXItbm90ZXNgJyBgdmF1bHRGb2xkZXJgIHN0b3JhZ2UgKGV2ZXJ5IGZvbGRlciBub3RlIHBvb2xlZCBpbiBvbmUgY2VudHJhbCBmb2xkZXIpIGhhcyBub1xuICogY291bnRlcnBhcnQgaGVyZSBhbmQgZmFsbHMgYmFjayByYXRoZXIgdGhhbiBndWVzc2luZzogd2l0aCB0aGUgbm90ZXMgcG9vbGVkLCB0aGUgbm90ZSBiZWxvbmdpbmcgdG8gYVxuICogZm9sZGVyIGlzIG5vIGxvbmdlciBkZXJpdmFibGUgZnJvbSB0aGF0IGZvbGRlcidzIHBhdGggYWxvbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzZXR1cCwgYW5kIHRoZSBhcHAgdG8gcmVhZCB0aGUgaW5zdGFsbGVkIHBsdWdpbiBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHNldHVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcyk6IEZvbGRlck5vdGVDb25maWcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgaXNIaWRkZW4sXG4gICAgbG9jYXRpb24sXG4gICAgcmVzb2x2ZU5hbWVcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gbG9jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbiAhPT0gRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG9cbiAgICA/IHtcbiAgICAgIGV4dGVuc2lvbnM6IG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucyA/PyBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dKSxcbiAgICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA/PyBmYWxzZSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVzb2x2ZU5hbWU6IHJlc29sdmVOYW1lID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRy5yZXNvbHZlTmFtZVxuICAgIH1cbiAgICA6IHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHApID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGV4dGVuc2lvbnMgdGhlIHdheSBgZm9sZGVyLW5vdGVzYCBkb2VzIGJlZm9yZSBpdCBsb29rcyBhIGZpbGUgdXA6IG5vIGxlYWRpbmcgZG90LCBsb3dlci1jYXNlLFxuICogYEV4Y2FsaWRyYXdgIHRyZWF0ZWQgYXMgTWFya2Rvd24sIGJsYW5rcyBkcm9wcGVkLCBkdXBsaWNhdGVzIGNvbGxhcHNlZCB3aGlsZSBrZWVwaW5nIHRoZSBmaXJzdCBvY2N1cnJlbmNlJ3NcbiAqIHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25zIC0gVGhlIGV4dGVuc2lvbnMgYXMgY29uZmlndXJlZC5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGV4dGVuc2lvbnMsIGluIHJlc29sdXRpb24gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFeHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15cXC4vLCAnJykpXG4gICAgLm1hcCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24gPT09IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA6IGV4dGVuc2lvbilcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gWy4uLm5ldyBTZXQobm9ybWFsaXplZEV4dGVuc2lvbnMpXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIG93biBjb25maWd1cmF0aW9uLCBpZiBpdCBpcyBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgdGhlIHdheVxuICogaXQgZG9jdW1lbnRzLlxuICpcbiAqIEV2ZXJ5IHZhbHVlIGlzIHJlYWQgYXMgYHVua25vd25gIGFuZCBjaGVja2VkLCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoaXMgaXMgYW5vdGhlclxuICogcGx1Z2luJ3MgcHJpdmF0ZSBzZXR0aW5ncyBvYmplY3QsIHNvIGEgdmVyc2lvbiB0aGF0IHJlbmFtZXMgb3IgZHJvcHMgYSBrZXkgbXVzdCBkZWdyYWRlIHRvIHRoZSBmYWxsYmFja1xuICogaW5zdGVhZCBvZiB0aHJvd2luZyBpbnNpZGUgYSBjbGljayBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiwgb3IgYG51bGxgIHdoZW4gdGhlIHBsdWdpbiBpcyBhYnNlbnQsIG5vdCBjb25maWd1cmVkLCBvciBzZXQgdG8gYSBzdG9yYWdlXG4gKiBsb2NhdGlvbiB3aXRoIG5vIGNvdW50ZXJwYXJ0IGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHA6IEFwcCk6IEZvbGRlck5vdGVDb25maWcgfCBudWxsIHtcbiAgY29uc3QgZm9sZGVyTm90ZXNQbHVnaW4gPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oRk9MREVSX05PVEVTX1BMVUdJTl9JRCk7XG4gIC8vIE5hcnJvd2VkIHdpdGggYGluYCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoYXQga2VlcHMgZXZlcnkgdmFsdWUgYmVsb3cgdHlwZWQgYHVua25vd25gLFxuICAvLyB3aGljaCBpcyBleGFjdGx5IHdoYXQgYSBmb3JlaWduIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3MgYXJlLlxuICBpZiAoIWZvbGRlck5vdGVzUGx1Z2luIHx8ICEoJ3NldHRpbmdzJyBpbiBmb2xkZXJOb3Rlc1BsdWdpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVzU2V0dGluZ3M6IHVua25vd24gPSBmb2xkZXJOb3Rlc1BsdWdpbi5zZXR0aW5ncztcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3Rlc1NldHRpbmdzICE9PSAnb2JqZWN0JyB8fCBmb2xkZXJOb3Rlc1NldHRpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsb2NhdGlvbiA9IHRvRm9sZGVyTm90ZUxvY2F0aW9uKCdzdG9yYWdlTG9jYXRpb24nIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN0b3JhZ2VMb2NhdGlvbiA6IG51bGwpO1xuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlTmFtZSA9ICdmb2xkZXJOb3RlTmFtZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZU5hbWUgOiBudWxsO1xuICBpZiAodHlwZW9mIGZvbGRlck5vdGVOYW1lICE9PSAnc3RyaW5nJyB8fCAhZm9sZGVyTm90ZU5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVUeXBlID0gJ2ZvbGRlck5vdGVUeXBlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5mb2xkZXJOb3RlVHlwZSA6IG51bGw7XG4gIGNvbnN0IHN1cHBvcnRlZEZpbGVUeXBlcyA9ICdzdXBwb3J0ZWRGaWxlVHlwZXMnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN1cHBvcnRlZEZpbGVUeXBlcyA6IG51bGw7XG4gIGNvbnN0IGlzSGlkZGVuID0gJ2hpZGVGb2xkZXJOb3RlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5oaWRlRm9sZGVyTm90ZSA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBJdHMgb3duIHJlc29sdmVyIHRyaWVzIHRoZSBwcmltYXJ5IHR5cGUgZmlyc3QgYW5kIGV2ZXJ5IG90aGVyIHN1cHBvcnRlZCB0eXBlIGFmdGVyIGl0LCB3aGljaCBpcyB0aGVcbiAgICAvLyBvcmRlciByZXByb2R1Y2VkIGhlcmUuIEFuIHVudXNhYmxlIHBhaXIgbGVhdmVzIE1hcmtkb3duLCB0aGUgZXh0ZW5zaW9uIGl0IGNhbm5vdCBiZSBjb25maWd1cmVkXG4gICAgLy8gd2l0aG91dC5cbiAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKFtcbiAgICAgIHR5cGVvZiBmb2xkZXJOb3RlVHlwZSA9PT0gJ3N0cmluZycgPyBmb2xkZXJOb3RlVHlwZSA6IE1BUktET1dOX0ZJTEVfRVhURU5TSU9OLFxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkoc3VwcG9ydGVkRmlsZVR5cGVzKSA/IHN1cHBvcnRlZEZpbGVUeXBlcy5maWx0ZXIoKHR5cGU6IHVua25vd24pID0+IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykgOiBbXSksXG4gICAgICBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTlxuICAgIF0pLFxuICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA9PT0gdHJ1ZSxcbiAgICBsb2NhdGlvbixcbiAgICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PlxuICAgICAgcmVwbGFjZUFsbCh7XG4gICAgICAgICRzdHJpbmc6IGZvbGRlck5vdGVOYW1lLFxuICAgICAgICAvLyBBIGZ1bmN0aW9uIHJlcGxhY2VyLCBzbyBhIGZvbGRlciBuYW1lIGNvbnRhaW5pbmcgYCQmYCBpcyBpbnNlcnRlZCBsaXRlcmFsbHkuXG4gICAgICAgIHJlcGxhY2VyOiAoKSA9PiBmb2xkZXIubmFtZSxcbiAgICAgICAgc2VhcmNoVmFsdWU6IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQXG4gICAgICB9KVxuICB9O1xufVxuXG4vKipcbiAqIE1hcHMgYGZvbGRlci1ub3Rlc2AnIGBzdG9yYWdlTG9jYXRpb25gIG9udG8gdGhpcyBsaWJyYXJ5J3Mgb3duIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBzdG9yYWdlTG9jYXRpb24gLSBUaGUgdmFsdWUgcmVhZCBvdXQgb2YgdGhhdCBwbHVnaW4ncyBzZXR0aW5ncy5cbiAqIEByZXR1cm5zIFRoZSBsb2NhdGlvbiwgb3IgYG51bGxgIGZvciBgdmF1bHRGb2xkZXJgIGFuZCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3Qgb25lIG9mIGl0cyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHRvRm9sZGVyTm90ZUxvY2F0aW9uKHN0b3JhZ2VMb2NhdGlvbjogdW5rbm93bik6IEZvbGRlck5vdGVDb25maWdbJ2xvY2F0aW9uJ10gfCBudWxsIHtcbiAgc3dpdGNoIChzdG9yYWdlTG9jYXRpb24pIHtcbiAgICBjYXNlICdpbnNpZGVGb2xkZXInOiB7XG4gICAgICByZXR1cm4gRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcjtcbiAgICB9XG4gICAgY2FzZSAncGFyZW50Rm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXI7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLGtCQUFxQjtBQUNyQixvQkFBMkI7QUFDM0Isc0JBQThCO0FBRTlCLHlCQUF3QztBQVdqQyxJQUFLLHFCQUFMLGtCQUFLQSx3QkFBTDtBQUtMLEVBQUFBLG9CQUFBLFVBQU87QUFLUCxFQUFBQSxvQkFBQSxrQkFBZTtBQU1mLEVBQUFBLG9CQUFBLFVBQU87QUFLUCxFQUFBQSxvQkFBQSxrQkFBZTtBQXJCTCxTQUFBQTtBQUFBLEdBQUE7QUFzSUwsTUFBTSx5QkFBeUI7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
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb2xkZXItbm90ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IOKAlCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vY29tbXVuaXR5Lm9ic2lkaWFuLm1kL3BsdWdpbnMvZm9sZGVyLW5vdGVzKS4gU28gdGhlIGFuc3dlciB0b1xuICogXCJ3aGljaCBub3RlIGJlbG9uZ3MgdG8gdGhpcyBmb2xkZXJcIiBpcyB0aGF0IHBsdWdpbidzIHRvIGdpdmUgd2hlbmV2ZXIgaXQgaXMgaW5zdGFsbGVkLCBhbmQgdGhpcyBtb2R1bGVcbiAqIGFza3MgaXQgcmF0aGVyIHRoYW4gaW52ZW50aW5nIGEgc2Vjb25kIGFuc3dlcjoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIGRlZmF1bHQg4oCUIHJlYWRzIGl0c1xuICogbGl2ZSBjb25maWd1cmF0aW9uIGF0IGV2ZXJ5IHVzZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGxpdmUgcmF0aGVyIHRoYW4gY29weWluZyBpdHMgdmFsdWVzIGludG8gYSBjb25zdW1lcidzIG93biBzZXR0aW5ncyBpcyBkZWxpYmVyYXRlOiBhIGNvcHkgZ29lc1xuICogc3RhbGUgdGhlIG1vbWVudCB0aGF0IHBsdWdpbiBpcyByZWNvbmZpZ3VyZWQsIGFuZCBpdCB3b3VsZCBuZWVkIGEgc2V0dGluZ3MgbWlncmF0aW9uIHRvIHNlZWQuIEV2ZXJ5dGhpbmdcbiAqIGVsc2UgaXMgdGhlIGNhbGxlcidzIGV4cGxpY2l0IGNob2ljZSwgYW5kIHRoZW4gdGhlIG90aGVyIHBsdWdpbiBpcyBub3QgY29uc3VsdGVkIGF0IGFsbC5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXZlciBDUkVBVEVTIGEgbm90ZS4gQSBmb2xkZXIgd2l0aCBubyBmb2xkZXIgbm90ZSBhbnN3ZXJzIGBudWxsYCwgd2hpY2ggaXMgd2hhdCBsZXRzIGFcbiAqIGNhbGxlciBsYXllciBmb2xkZXItbm90ZSBiZWhhdmlvciBvbnRvIGEgY2xpY2sgd2l0aG91dCByaXNraW5nIGEgZmlsZSBhcHBlYXJpbmcgb24gdGhlIHVzZXIncyBkaXNrLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBpc0ZvbGRlcixcbiAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbi8qKlxuICogV2hlcmUgYSBmb2xkZXIncyBmb2xkZXIgbm90ZSBsaXZlcy5cbiAqXG4gKiBUaGUgdGhyZWUgY29uY3JldGUgbWVtYmVycyBhcmUgdGhlIHNoYXBlcyB0aGUgZm9sZGVyLW5vdGUgZWNvc3lzdGVtIGFjdHVhbGx5IHVzZXM6XG4gKiBgY2hhcmxpZS9jaGFybGllLm1kYCBhbmQgYGNoYXJsaWUvaW5kZXgubWRgIGFyZSBib3RoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyfSAodGhleVxuICogZGlmZmVyIG9ubHkgaW4gdGhlIE5BTUUsIHdoaWNoIGlzIHdoeSBuYW1pbmcgaXMgYSBjYWxsYmFjayBhbmQgbm90IGEgZm91cnRoIG1lbWJlciksIHdoaWxlXG4gKiBgY2hhcmxpZS5tZGAgYmVzaWRlIHRoZSBmb2xkZXIgaXMge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXJ9IOKAlCB3aG9zZSB3aG9sZSBwb2ludCBpcyB0aGF0XG4gKiBgW1thbHBoYS9icmF2by9jaGFybGllXV1gIGxpbmtzIHRvIGEgZm9sZGVyIHdpdGggbm8gc3BlY2lhbCBzeW50YXguXG4gKi9cbmV4cG9ydCBlbnVtIEZvbGRlck5vdGVMb2NhdGlvbiB7XG4gIC8qKlxuICAgKiBUYWtlIHRoZSBhbnN3ZXIgZnJvbSB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbiwgZmFsbGluZyBiYWNrIHRvIGEgbm90ZSBuYW1lZCBhZnRlciBpdHNcbiAgICogZm9sZGVyLCBpbnNpZGUgaXQuIFRoZSBkZWZhdWx0LCBhbmQgcmVzb2x2ZWQgTElWRSByYXRoZXIgdGhhbiBjb3BpZWQuXG4gICAqL1xuICBBdXRvID0gJ0F1dG8nLFxuXG4gIC8qKlxuICAgKiBgYWxwaGEvYnJhdm8vY2hhcmxpZS88bmFtZT4ubWRgLlxuICAgKi9cbiAgSW5zaWRlRm9sZGVyID0gJ0luc2lkZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBoYXMgbm8gZm9sZGVyIG5vdGVzIGF0IGFsbCwgc28gZXZlcnkgZm9sZGVyIGFuc3dlcnMgYG51bGxgLiBUaGlzIGlzIGFsc28gaG93IGEgY2FsbGVyIG9wdHNcbiAgICogb3V0IG9mIGZvbGRlci1ub3RlIGJlaGF2aW9yIGVudGlyZWx5LlxuICAgKi9cbiAgTm9uZSA9ICdOb25lJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvLzxuYW1lPi5tZGAsIGJlc2lkZSB0aGUgZm9sZGVyLlxuICAgKi9cbiAgUGFyZW50Rm9sZGVyID0gJ1BhcmVudEZvbGRlcidcbn1cblxuLyoqXG4gKiBBIGZvbGRlci1ub3RlIHNldHVwIHdpdGgge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSBhbHJlYWR5IHJlc29sdmVkIHRvIGEgY29uY3JldGUgYW5zd2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvbGRlck5vdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIFdJVEhPVVQgdGhlIGxlYWRpbmcgZG90LCBpbiByZXNvbHV0aW9uIG9yZGVyIOKAlCB0aGUgZmlyc3Qgb25lXG4gICAqIHRoYXQgbmFtZXMgYW4gZXhpc3RpbmcgZmlsZSB3aW5zLlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci5cbiAgICpcbiAgICogUmVhZCByYXRoZXIgdGhhbiBhY3RlZCB1cG9uIGhlcmU6IGl0IGNoYW5nZXMgbm90aGluZyBhYm91dCBXSElDSCBmaWxlIGlzIHRoZSBmb2xkZXIgbm90ZSwgYnV0IGEgY2FsbGVyXG4gICAqIHRoYXQgcmV2ZWFscyB0aGUgbm90ZSBoYXMgdG8ga25vdyB0aGVyZSBpcyBub3RoaW5nIHRvIHJldmVhbCBhbmQgZmFsbCBiYWNrIHRvIHJldmVhbGluZyB0aGUgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNIaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyIHwgRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUgfCBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyO1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGUgZm9sZGVyIG5vdGUgb2YgYSBmb2xkZXIsIFdJVEhPVVQgaXRzIGV4dGVuc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGZvbGRlciAtIFRoZSBmb2xkZXIgd2hvc2Ugbm90ZSBpcyBiZWluZyBuYW1lZC5cbiAgICogQHJldHVybnMgVGhlIG5vdGUncyBuYW1lOyBhbiBlbXB0eSAob3IgYmxhbmspIG5hbWUgbWVhbnMgdGhlIGZvbGRlciBoYXMgbm8gZm9sZGVyIG5vdGUuXG4gICAqL1xuICAvLyBBIGZ1bmN0aW9uIHByb3BlcnR5IHJhdGhlciB0aGFuIGEgbWV0aG9kLCBiZWNhdXNlIGl0IGlzIGEgc3RhbmRhbG9uZSBjYWxsYmFjaywgbmV2ZXIgYSBtZXRob2Qgb2YgdGhlXG4gIC8vIGNvbmZpZyDigJQgd2hpY2ggaXMgYWxzbyB3aGF0IGxldHMgaXQgYmUgZGVzdHJ1Y3R1cmVkIGFuZCBoYW5kZWQgb24gd2l0aG91dCB0cmlwcGluZyBgdW5ib3VuZC1tZXRob2RgLlxuICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcikgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGb2xkZXJOb3RlRm9sZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRGb2xkZXJOb3RlRm9sZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGFscmVhZHktcmVzb2x2ZWQgc2V0dXAgdG8gdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSlgXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBGb2xkZXJOb3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSB0aGF0IG1heSBiZSBhIGZvbGRlciBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogVEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCB3aXRoIG9yIHdpdGhvdXQgdGhlIGxlYWRpbmcgZG90LCBpbiByZXNvbHV0aW9uIG9yZGVyLiBJZ25vcmVkXG4gICAqIHVuZGVyIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIHRha2VzIHRoZSBpbnN0YWxsZWQgcGx1Z2luJ3MgYW5zd2VyIHdob2xlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgWydtZCddYFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuIElnbm9yZWQgdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNIaWRkZW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b31cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogRm9sZGVyTm90ZUxvY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBOYW1lcyB0aGUgZm9sZGVyIG5vdGUgb2YgYSBmb2xkZXIsIFdJVEhPVVQgaXRzIGV4dGVuc2lvbi4gSWdub3JlZCB1bmRlclxuICAgKiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LCB3aGljaCBuYW1lcyB0aGUgbm90ZSB0aGUgd2F5IHRoZSBpbnN0YWxsZWQgcGx1Z2luIGRvZXMuXG4gICAqXG4gICAqIEEgY2FsbGJhY2sgcmF0aGVyIHRoYW4gYSBuYW1lIHRlbXBsYXRlLCBiZWNhdXNlIGEgdGVtcGxhdGUgbmVlZHMgYSB0b2tlbiB2b2NhYnVsYXJ5IGFuZCB0aGlzIGxpYnJhcnlcbiAgICogaGFzIG5vbmUgdG8gaW1wb3NlIOKAlCBhIGNhbGxlciB0aGF0IGhhcyBvbmUgKGB7e2ZvbGRlck5hbWV9fWAsIGB7e2ZvbGRlclBhdGh9fWAsIOKApikgcmVuZGVycyBpdCBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0gZm9sZGVyIC0gVGhlIGZvbGRlciB3aG9zZSBub3RlIGlzIGJlaW5nIG5hbWVkLlxuICAgKiBAcmV0dXJucyBUaGUgbm90ZSdzIG5hbWUuXG4gICAqIEBkZWZhdWx0IGAoZm9sZGVyKSA9PiBmb2xkZXIubmFtZWBcbiAgICovXG4gIC8vIFNlZSB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5yZXNvbHZlTmFtZX0gZm9yIHdoeSB0aGlzIGlzIGEgZnVuY3Rpb24gcHJvcGVydHkuXG4gIHJlYWRvbmx5IHJlc29sdmVOYW1lPzogKGZvbGRlcjogVEZvbGRlcikgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXNvbHZlRm9sZGVyTm90ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUZvbGRlck5vdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgYWxyZWFkeS1yZXNvbHZlZCBzZXR1cCB0byB1c2UuXG4gICAqXG4gICAqIE9taXR0ZWQgbWVhbnMge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIHNldHVwIGlzIHJlc29sdmVkIG9uIHRoZSBzcG90LCB3aGljaCBpcyB3aGF0IG1ha2VzXG4gICAqIGByZXNvbHZlRm9sZGVyTm90ZSh7IGFwcCwgZm9sZGVyIH0pYCB0aGUgb25lLWxpbmVyIGV2ZXJ5IGNhbGxlciB3YW50cy4gUGFzcyBvbmUgd2hlbiB0aGUgc2FtZSBzZXR1cCBpc1xuICAgKiB1c2VkIG1vcmUgdGhhbiBvbmNlLCBvciB3aGVuIGl0cyB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5pc0hpZGRlbn0gaXMgbmVlZGVkIGFsb25nc2lkZSB0aGUgbm90ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHsgYXBwIH0pYFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnPzogRm9sZGVyTm90ZUNvbmZpZztcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB3aG9zZSBmb2xkZXIgbm90ZSBpcyB3YW50ZWQuIFJlYWQgQUZURVIgYW55IHJlbmFtZTogdGhlIG5vdGUgaXMgbmFtZWQgZnJvbSB0aGUgZm9sZGVyJ3NcbiAgICogQ1VSUkVOVCBuYW1lLCBhbmQgYSBgZm9sZGVyLW5vdGVzYCBpbnN0YWxsIHdpdGggYHN5bmNGb2xkZXJOYW1lYCBvbiB3aWxsIGhhdmUgcmVuYW1lZCBpdCBhbHJlYWR5LlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyOiBURm9sZGVyO1xufVxuXG4vKipcbiAqIFRoZSBgZm9sZGVyLW5vdGVzYCBwbHVnaW4ncyBpZCwgYXMgaXRzIG1hbmlmZXN0IGRlY2xhcmVzIGl0LlxuICovXG5leHBvcnQgY29uc3QgRk9MREVSX05PVEVTX1BMVUdJTl9JRCA9ICdmb2xkZXItbm90ZXMnO1xuXG4vKipcbiAqIFRoZSBvbmUgdG9rZW4gYGZvbGRlci1ub3Rlc2AnIG93biBuYW1lIHRlbXBsYXRlIHVuZGVyc3RhbmRzLiBFdmVyeSBvdGhlciBjaGFyYWN0ZXIgaW4gdGhhdCB0ZW1wbGF0ZSBpc1xuICogYSBsaXRlcmFsLCBzbyB0cmFuc2xhdGluZyB0aGlzIHRva2VuIGlzIHRoZSB3aG9sZSBvZiB0aGUgdHJhbnNsYXRpb24uXG4gKi9cbmNvbnN0IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQID0gL1xce1xce2ZvbGRlcl9uYW1lXFx9XFx9L2dpO1xuXG4vKipcbiAqIGBmb2xkZXItbm90ZXNgIG9mZmVycyBgRXhjYWxpZHJhd2AgZm9sZGVyIG5vdGVzLCB3aGljaCBhcmUgTWFya2Rvd24gZmlsZXMgd2l0aCBhbiBgRXhjYWxpZHJhd2AgcGF5bG9hZCDigJQgaXRzXG4gKiBvd24gcmVzb2x2ZXIgbm9ybWFsaXplcyB0aGUgdHlwZSB0aGUgc2FtZSB3YXkgYmVmb3JlIGxvb2tpbmcgdGhlIGZpbGUgdXAuXG4gKi9cbmNvbnN0IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPSAnZXhjYWxpZHJhdyc7XG5cbi8qKlxuICogV2hhdCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IGZhbGxzIGJhY2sgdG86IHRoZSBsYXlvdXQgZXZlcnkgZm9sZGVyLW5vdGUgcGx1Z2luIHN1cHBvcnRzLCBhbmRcbiAqIHRoZSBvbmUgYGZvbGRlci1ub3Rlc2AgaXRzZWxmIHNoaXBzIGFzIGl0cyBkZWZhdWx0LiBOb3RoaW5nIGhpZGVzIGEgbm90ZSB3aGVuIG5vIHBsdWdpbiBpcyB0aGVyZSB0byBoaWRlXG4gKiBpdCwgc28ge0BsaW5rIEZvbGRlck5vdGVDb25maWcuaXNIaWRkZW59IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRzogRm9sZGVyTm90ZUNvbmZpZyA9IHtcbiAgZXh0ZW5zaW9uczogW01BUktET1dOX0ZJTEVfRVhURU5TSU9OXSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcixcbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpOiBzdHJpbmcgPT4gZm9sZGVyLm5hbWVcbn07XG5cbi8qKlxuICogRmluZHMgdGhlIGZvbGRlciBhIGZpbGUgaXMgdGhlIGZvbGRlciBub3RlIG9mIOKAlCB0aGUgaW52ZXJzZSBvZiB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGV9LlxuICpcbiAqIFRoZSBhbnN3ZXIgaXMgY2hlY2tlZCB0aHJvdWdoIHtAbGluayByZXNvbHZlRm9sZGVyTm90ZX0gaXRzZWxmLCBzbyB0aGUgdHdvIGNhbiBuZXZlciBkaXNhZ3JlZTogYSBmaWxlIGlzXG4gKiBhIGZvbGRlcidzIG5vdGUgZXhhY3RseSB3aGVuIHJlc29sdmluZyB0aGF0IGZvbGRlcidzIG5vdGUgeWllbGRzIHRoaXMgdmVyeSBmaWxlLiBBIGZpbGUgdGhhdCBkb2VzIG5vdFxuICogZXhpc3QgaW4gdGhlIHZhdWx0IChvbmUgYnVpbHQgZm9yIGEgcGF0aCB3aXRoIG5vdGhpbmcgYXQgaXQpIGlzIG5ldmVyIGEgZm9sZGVyIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBmaWxlLCBhbmQgb3B0aW9uYWxseSB0aGUgc2V0dXAgdG8gcmVzb2x2ZSBpdCB3aXRoLlxuICogQHJldHVybnMgVGhlIGZvbGRlciwgb3IgYG51bGxgIHdoZW4gdGhlIGZpbGUgaXMgbm90IGEgZm9sZGVyIG5vdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJOb3RlRm9sZGVyKHBhcmFtczogR2V0Rm9sZGVyTm90ZUZvbGRlclBhcmFtcyk6IG51bGwgfCBURm9sZGVyIHtcbiAgY29uc3QgeyBhcHAsIGZpbGUgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnID0gcGFyYW1zLmNvbmZpZyA/PyByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KTtcbiAgY29uc3QgcGFyZW50ID0gZmlsZS5wYXJlbnQ7XG4gIGlmICghcGFyZW50IHx8IGNvbmZpZy5sb2NhdGlvbiA9PT0gRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGVGb2xkZXJzOiBURm9sZGVyW107XG4gIGlmIChjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5JbnNpZGVGb2xkZXIpIHtcbiAgICAvLyBUaGUgdmF1bHQgcm9vdCBoYXMgbm8gZm9sZGVyIG5vdGUgdW5kZXIgdGhpcyBsYXlvdXQsIHNpbmNlIG5vdGhpbmcgbmFtZXMgaXQuXG4gICAgY2FuZGlkYXRlRm9sZGVycyA9IHBhcmVudC5pc1Jvb3QoKSA/IFtdIDogW3BhcmVudF07XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlRm9sZGVycyA9IHBhcmVudC5jaGlsZHJlbi5maWx0ZXIoaXNGb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbmRpZGF0ZUZvbGRlcnMuZmluZCgoZm9sZGVyKSA9PiByZXNvbHZlRm9sZGVyTm90ZSh7IGFwcCwgY29uZmlnLCBmb2xkZXIgfSkgPT09IGZpbGUpID8/IG51bGw7XG59XG5cbi8qKlxuICogRmluZHMgYSBmb2xkZXIncyBmb2xkZXIgbm90ZSDigJQgdGhlIG9uZSBub3RlIHdob3NlIHByb3BlcnRpZXMgZGVzY3JpYmUgdGhlIGZvbGRlciBpdHNlbGYuXG4gKlxuICogKipOZXZlciBjcmVhdGVzLioqIEEgZm9sZGVyIHRoYXQgaGFzIG5vIGZvbGRlciBub3RlIGFuc3dlcnMgYG51bGxgLCBhbmQgc28gZG9lcyB0aGUgdmF1bHQgcm9vdCB1bmRlclxuICoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXJ9IChub3RoaW5nIGNhbiBzaXQgYmVzaWRlIGl0KS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGZvbGRlciwgYW5kIG9wdGlvbmFsbHkgdGhlIHNldHVwIHRvIHJlc29sdmUgaXQgd2l0aC5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIgbm90ZSwgb3IgYG51bGxgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xkZXJOb3RlKHBhcmFtczogUmVzb2x2ZUZvbGRlck5vdGVQYXJhbXMpOiBudWxsIHwgVEZpbGUge1xuICBjb25zdCB7IGFwcCwgZm9sZGVyIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbmZpZyA9IHBhcmFtcy5jb25maWcgPz8gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSk7XG4gIGlmIChjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJlbnRGb2xkZXJQYXRoID0gY29uZmlnLmxvY2F0aW9uID09PSBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyID8gZm9sZGVyLnBhcmVudD8ucGF0aCA6IGZvbGRlci5wYXRoO1xuICBpZiAocGFyZW50Rm9sZGVyUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBub3RlTmFtZSA9IGNvbmZpZy5yZXNvbHZlTmFtZShmb2xkZXIpLnRyaW0oKTtcbiAgaWYgKCFub3RlTmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgY29uZmlnLmV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobm9ybWFsaXplUGF0aChqb2luKHBhcmVudEZvbGRlclBhdGgsIGAke25vdGVOYW1lfS4ke2V4dGVuc2lvbn1gKSkpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IGludG8gYSBjb25jcmV0ZSBmb2xkZXItbm90ZSBzZXR1cC5cbiAqXG4gKiBgZm9sZGVyLW5vdGVzYCcgYHZhdWx0Rm9sZGVyYCBzdG9yYWdlIChldmVyeSBmb2xkZXIgbm90ZSBwb29sZWQgaW4gb25lIGNlbnRyYWwgZm9sZGVyKSBoYXMgbm9cbiAqIGNvdW50ZXJwYXJ0IGhlcmUgYW5kIGZhbGxzIGJhY2sgcmF0aGVyIHRoYW4gZ3Vlc3Npbmc6IHdpdGggdGhlIG5vdGVzIHBvb2xlZCwgdGhlIG5vdGUgYmVsb25naW5nIHRvIGFcbiAqIGZvbGRlciBpcyBubyBsb25nZXIgZGVyaXZhYmxlIGZyb20gdGhhdCBmb2xkZXIncyBwYXRoIGFsb25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc2V0dXAsIGFuZCB0aGUgYXBwIHRvIHJlYWQgdGhlIGluc3RhbGxlZCBwbHVnaW4gZnJvbS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBzZXR1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHBhcmFtczogUmVzb2x2ZUZvbGRlck5vdGVDb25maWdQYXJhbXMpOiBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBleHRlbnNpb25zLFxuICAgIGlzSGlkZGVuLFxuICAgIGxvY2F0aW9uLFxuICAgIHJlc29sdmVOYW1lXG4gIH0gPSBwYXJhbXM7XG5cbiAgcmV0dXJuIGxvY2F0aW9uICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb24gIT09IEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvXG4gICAgPyB7XG4gICAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKGV4dGVuc2lvbnMgPz8gW01BUktET1dOX0ZJTEVfRVhURU5TSU9OXSksXG4gICAgICBpc0hpZGRlbjogaXNIaWRkZW4gPz8gZmFsc2UsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlc29sdmVOYW1lOiByZXNvbHZlTmFtZSA/PyBGQUxMQkFDS19GT0xERVJfTk9URV9DT05GSUcucmVzb2x2ZU5hbWVcbiAgICB9XG4gICAgOiByZWFkRm9sZGVyTm90ZXNQbHVnaW5Db25maWcoYXBwKSA/PyBGQUxMQkFDS19GT0xERVJfTk9URV9DT05GSUc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBleHRlbnNpb25zIHRoZSB3YXkgYGZvbGRlci1ub3Rlc2AgZG9lcyBiZWZvcmUgaXQgbG9va3MgYSBmaWxlIHVwOiBubyBsZWFkaW5nIGRvdCwgbG93ZXItY2FzZSxcbiAqIGBFeGNhbGlkcmF3YCB0cmVhdGVkIGFzIE1hcmtkb3duLCBibGFua3MgZHJvcHBlZCwgZHVwbGljYXRlcyBjb2xsYXBzZWQgd2hpbGUga2VlcGluZyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSdzXG4gKiBwb3NpdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9ucyAtIFRoZSBleHRlbnNpb25zIGFzIGNvbmZpZ3VyZWQuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBleHRlbnNpb25zLCBpbiByZXNvbHV0aW9uIG9yZGVyLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVFeHRlbnNpb25zKGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICBjb25zdCBub3JtYWxpemVkRXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnNcbiAgICAubWFwKChleHRlbnNpb24pID0+IGV4dGVuc2lvbi50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eXFwuLywgJycpKVxuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uID09PSBFWENBTElEUkFXX0ZJTEVfRVhURU5TSU9OID8gTUFSS0RPV05fRklMRV9FWFRFTlNJT04gOiBleHRlbnNpb24pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIFsuLi5uZXcgU2V0KG5vcm1hbGl6ZWRFeHRlbnNpb25zKV07XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4ncyBvd24gY29uZmlndXJhdGlvbiwgaWYgaXQgaXMgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIHRoZSB3YXlcbiAqIGl0IGRvY3VtZW50cy5cbiAqXG4gKiBFdmVyeSB2YWx1ZSBpcyByZWFkIGFzIGB1bmtub3duYCBhbmQgY2hlY2tlZCwgcmF0aGVyIHRoYW4gYXNzZXJ0ZWQgaW50byBhIHNoYXBlOiB0aGlzIGlzIGFub3RoZXJcbiAqIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3Mgb2JqZWN0LCBzbyBhIHZlcnNpb24gdGhhdCByZW5hbWVzIG9yIGRyb3BzIGEga2V5IG11c3QgZGVncmFkZSB0byB0aGUgZmFsbGJhY2tcbiAqIGluc3RlYWQgb2YgdGhyb3dpbmcgaW5zaWRlIGEgY2xpY2sgaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIG9yIGBudWxsYCB3aGVuIHRoZSBwbHVnaW4gaXMgYWJzZW50LCBub3QgY29uZmlndXJlZCwgb3Igc2V0IHRvIGEgc3RvcmFnZVxuICogbG9jYXRpb24gd2l0aCBubyBjb3VudGVycGFydCBoZXJlLlxuICovXG5mdW5jdGlvbiByZWFkRm9sZGVyTm90ZXNQbHVnaW5Db25maWcoYXBwOiBBcHApOiBGb2xkZXJOb3RlQ29uZmlnIHwgbnVsbCB7XG4gIGNvbnN0IGZvbGRlck5vdGVzUGx1Z2luID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEZPTERFUl9OT1RFU19QTFVHSU5fSUQpO1xuICAvLyBOYXJyb3dlZCB3aXRoIGBpbmAgcmF0aGVyIHRoYW4gYXNzZXJ0ZWQgaW50byBhIHNoYXBlOiB0aGF0IGtlZXBzIGV2ZXJ5IHZhbHVlIGJlbG93IHR5cGVkIGB1bmtub3duYCxcbiAgLy8gd2hpY2ggaXMgZXhhY3RseSB3aGF0IGEgZm9yZWlnbiBwbHVnaW4ncyBwcml2YXRlIHNldHRpbmdzIGFyZS5cbiAgaWYgKCFmb2xkZXJOb3Rlc1BsdWdpbiB8fCAhKCdzZXR0aW5ncycgaW4gZm9sZGVyTm90ZXNQbHVnaW4pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3Rlc1NldHRpbmdzOiB1bmtub3duID0gZm9sZGVyTm90ZXNQbHVnaW4uc2V0dGluZ3M7XG4gIGlmICh0eXBlb2YgZm9sZGVyTm90ZXNTZXR0aW5ncyAhPT0gJ29iamVjdCcgfHwgZm9sZGVyTm90ZXNTZXR0aW5ncyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbG9jYXRpb24gPSB0b0ZvbGRlck5vdGVMb2NhdGlvbignc3RvcmFnZUxvY2F0aW9uJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5zdG9yYWdlTG9jYXRpb24gOiBudWxsKTtcbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZm9sZGVyTm90ZU5hbWUgPSAnZm9sZGVyTm90ZU5hbWUnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLmZvbGRlck5vdGVOYW1lIDogbnVsbDtcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3RlTmFtZSAhPT0gJ3N0cmluZycgfHwgIWZvbGRlck5vdGVOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlVHlwZSA9ICdmb2xkZXJOb3RlVHlwZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZVR5cGUgOiBudWxsO1xuICBjb25zdCBzdXBwb3J0ZWRGaWxlVHlwZXMgPSAnc3VwcG9ydGVkRmlsZVR5cGVzJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5zdXBwb3J0ZWRGaWxlVHlwZXMgOiBudWxsO1xuICBjb25zdCBpc0hpZGRlbiA9ICdoaWRlRm9sZGVyTm90ZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuaGlkZUZvbGRlck5vdGUgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLy8gSXRzIG93biByZXNvbHZlciB0cmllcyB0aGUgcHJpbWFyeSB0eXBlIGZpcnN0IGFuZCBldmVyeSBvdGhlciBzdXBwb3J0ZWQgdHlwZSBhZnRlciBpdCwgd2hpY2ggaXMgdGhlXG4gICAgLy8gb3JkZXIgcmVwcm9kdWNlZCBoZXJlLiBBbiB1bnVzYWJsZSBwYWlyIGxlYXZlcyBNYXJrZG93biwgdGhlIGV4dGVuc2lvbiBpdCBjYW5ub3QgYmUgY29uZmlndXJlZFxuICAgIC8vIHdpdGhvdXQuXG4gICAgZXh0ZW5zaW9uczogbm9ybWFsaXplRXh0ZW5zaW9ucyhbXG4gICAgICB0eXBlb2YgZm9sZGVyTm90ZVR5cGUgPT09ICdzdHJpbmcnID8gZm9sZGVyTm90ZVR5cGUgOiBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTixcbiAgICAgIC4uLihBcnJheS5pc0FycmF5KHN1cHBvcnRlZEZpbGVUeXBlcykgPyBzdXBwb3J0ZWRGaWxlVHlwZXMuZmlsdGVyKCh0eXBlOiB1bmtub3duKSA9PiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIDogW10pLFxuICAgICAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbiAgICBdKSxcbiAgICBpc0hpZGRlbjogaXNIaWRkZW4gPT09IHRydWUsXG4gICAgbG9jYXRpb24sXG4gICAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpOiBzdHJpbmcgPT5cbiAgICAgIHJlcGxhY2VBbGwoe1xuICAgICAgICAkc3RyaW5nOiBmb2xkZXJOb3RlTmFtZSxcbiAgICAgICAgLy8gQSBmdW5jdGlvbiByZXBsYWNlciwgc28gYSBmb2xkZXIgbmFtZSBjb250YWluaW5nIGAkJmAgaXMgaW5zZXJ0ZWQgbGl0ZXJhbGx5LlxuICAgICAgICByZXBsYWNlcjogKCkgPT4gZm9sZGVyLm5hbWUsXG4gICAgICAgIHNlYXJjaFZhbHVlOiBGT0xERVJfTk9URVNfRk9MREVSX05BTUVfVE9LRU5fUkVHX0VYUFxuICAgICAgfSlcbiAgfTtcbn1cblxuLyoqXG4gKiBNYXBzIGBmb2xkZXItbm90ZXNgJyBgc3RvcmFnZUxvY2F0aW9uYCBvbnRvIHRoaXMgbGlicmFyeSdzIG93biBsb2NhdGlvbi5cbiAqXG4gKiBAcGFyYW0gc3RvcmFnZUxvY2F0aW9uIC0gVGhlIHZhbHVlIHJlYWQgb3V0IG9mIHRoYXQgcGx1Z2luJ3Mgc2V0dGluZ3MuXG4gKiBAcmV0dXJucyBUaGUgbG9jYXRpb24sIG9yIGBudWxsYCBmb3IgYHZhdWx0Rm9sZGVyYCBhbmQgZm9yIGFueXRoaW5nIHRoYXQgaXMgbm90IG9uZSBvZiBpdHMgdmFsdWVzLlxuICovXG5mdW5jdGlvbiB0b0ZvbGRlck5vdGVMb2NhdGlvbihzdG9yYWdlTG9jYXRpb246IHVua25vd24pOiBGb2xkZXJOb3RlQ29uZmlnWydsb2NhdGlvbiddIHwgbnVsbCB7XG4gIHN3aXRjaCAoc3RvcmFnZUxvY2F0aW9uKSB7XG4gICAgY2FzZSAnaW5zaWRlRm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5JbnNpZGVGb2xkZXI7XG4gICAgfVxuICAgIGNhc2UgJ3BhcmVudEZvbGRlcic6IHtcbiAgICAgIHJldHVybiBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJBLGtCQUFxQjtBQUNyQixvQkFBMkI7QUFDM0Isc0JBQThCO0FBRTlCLHlCQUdPO0FBV0EsSUFBSyxxQkFBTCxrQkFBS0Esd0JBQUw7QUFLTCxFQUFBQSxvQkFBQSxVQUFPO0FBS1AsRUFBQUEsb0JBQUEsa0JBQWU7QUFNZixFQUFBQSxvQkFBQSxVQUFPO0FBS1AsRUFBQUEsb0JBQUEsa0JBQWU7QUFyQkwsU0FBQUE7QUFBQSxHQUFBO0FBNEpMLE1BQU0seUJBQXlCO0FBTXRDLE1BQU0seUNBQXlDO0FBTS9DLE1BQU0sNEJBQTRCO0FBT2xDLE1BQU0sOEJBQWdEO0FBQUEsRUFD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
@@ -75,6 +75,25 @@ export interface FolderNoteConfig {
75
75
  */
76
76
  resolveName: (folder: TFolder) => string;
77
77
  }
78
+ /**
79
+ * Parameters for {@link getFolderNoteFolder}.
80
+ */
81
+ export interface GetFolderNoteFolderParams {
82
+ /**
83
+ * The Obsidian app instance.
84
+ */
85
+ readonly app: App;
86
+ /**
87
+ * The already-resolved setup to use.
88
+ *
89
+ * @default `resolveFolderNoteConfig({ app })`
90
+ */
91
+ readonly config?: FolderNoteConfig;
92
+ /**
93
+ * The file that may be a folder note.
94
+ */
95
+ readonly file: TFile;
96
+ }
78
97
  /**
79
98
  * Parameters for {@link resolveFolderNoteConfig}.
80
99
  */
@@ -143,6 +162,17 @@ export interface ResolveFolderNoteParams {
143
162
  * The `folder-notes` plugin's id, as its manifest declares it.
144
163
  */
145
164
  export declare const FOLDER_NOTES_PLUGIN_ID = "folder-notes";
165
+ /**
166
+ * Finds the folder a file is the folder note of — the inverse of {@link resolveFolderNote}.
167
+ *
168
+ * The answer is checked through {@link resolveFolderNote} itself, so the two can never disagree: a file is
169
+ * a folder's note exactly when resolving that folder's note yields this very file. A file that does not
170
+ * exist in the vault (one built for a path with nothing at it) is never a folder note.
171
+ *
172
+ * @param params - The file, and optionally the setup to resolve it with.
173
+ * @returns The folder, or `null` when the file is not a folder note.
174
+ */
175
+ export declare function getFolderNoteFolder(params: GetFolderNoteFolderParams): null | TFolder;
146
176
  /**
147
177
  * Finds a folder's folder note — the one note whose properties describe the folder itself.
148
178
  *
@@ -91,7 +91,7 @@ __export(generated_during_build_exports, {
91
91
  LIBRARY_VERSION: () => LIBRARY_VERSION
92
92
  });
93
93
  module.exports = __toCommonJS(generated_during_build_exports);
94
- const LIBRARY_VERSION = "6.2.0";
94
+ const LIBRARY_VERSION = "6.3.0";
95
95
  const LIBRARY_STYLES = ".obsidian-lib.code-highlighter-component textarea, .obsidian-lib.code-highlighter-component pre, .obsidian-lib.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-lib.code-highlighter-component textarea, .obsidian-lib.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-lib.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-lib.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-lib.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-lib.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-lib.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-lib-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-lib-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-lib-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-lib-lock-indicator-flash {\n animation: obsidian-lib-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-lib input[type=url] {\n height: var(--input-height);\n}\n.obsidian-lib input[type=month],\n.obsidian-lib input[type=tel],\n.obsidian-lib input[type=time],\n.obsidian-lib input[type=url],\n.obsidian-lib 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-lib input[type=month]:hover,\n .obsidian-lib input[type=tel]:hover,\n .obsidian-lib input[type=time]:hover,\n .obsidian-lib input[type=url]:hover,\n .obsidian-lib 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-lib input[type=month]:active, .obsidian-lib input[type=month]:focus,\n.obsidian-lib input[type=tel]:active,\n.obsidian-lib input[type=tel]:focus,\n.obsidian-lib input[type=time]:active,\n.obsidian-lib input[type=time]:focus,\n.obsidian-lib input[type=url]:active,\n.obsidian-lib input[type=url]:focus,\n.obsidian-lib input[type=week]:active,\n.obsidian-lib 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-lib input[type=month]:active, .obsidian-lib input[type=month]:focus, .obsidian-lib input[type=month]:focus-visible,\n.obsidian-lib input[type=tel]:active,\n.obsidian-lib input[type=tel]:focus,\n.obsidian-lib input[type=tel]:focus-visible,\n.obsidian-lib input[type=time]:active,\n.obsidian-lib input[type=time]:focus,\n.obsidian-lib input[type=time]:focus-visible,\n.obsidian-lib input[type=url]:active,\n.obsidian-lib input[type=url]:focus,\n.obsidian-lib input[type=url]:focus-visible,\n.obsidian-lib input[type=week]:active,\n.obsidian-lib input[type=week]:focus,\n.obsidian-lib input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-lib input[type=month]::placeholder,\n.obsidian-lib input[type=tel]::placeholder,\n.obsidian-lib input[type=time]::placeholder,\n.obsidian-lib input[type=url]::placeholder,\n.obsidian-lib 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-lib input[type=month],\n.obsidian-lib input[type=time],\n.obsidian-lib input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-lib input[type=month]::-webkit-datetime-edit-text,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-text,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-lib input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-lib 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-lib input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-lib input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-lib input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-lib input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-lib input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-lib input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-lib 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-lib input[type=month], .is-rtl .obsidian-lib input[type=month], .rtl .obsidian-lib input[type=month],\n.mod-rtl .obsidian-lib input[type=time],\n.is-rtl .obsidian-lib input[type=time],\n.rtl .obsidian-lib input[type=time],\n.mod-rtl .obsidian-lib input[type=week],\n.is-rtl .obsidian-lib input[type=week],\n.rtl .obsidian-lib input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-lib input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-lib input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-lib input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-lib input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-lib 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-lib input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-lib input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-lib input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-lib input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\nprogress.obsidian-lib.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-lib-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-lib-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-lib.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-lib.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-lib.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-lib-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-lib.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-lib.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-lib-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-lib.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-lib.minimized-modal-bar .restore-button,\n.obsidian-lib.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-lib.minimized-modal-bar .restore-button:hover,\n.obsidian-lib.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-lib.modal-commands {\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-2-2);\n padding: var(--size-4-2) var(--size-4-3);\n border-top: 1px solid var(--background-modifier-border);\n}\n.obsidian-lib.modal-command-control {\n margin-inline-start: var(--size-2-2);\n vertical-align: middle;\n}\n.obsidian-lib.modal-command {\n display: inline-flex;\n align-items: baseline;\n gap: var(--size-2-2);\n min-height: var(--size-4-8);\n padding: var(--size-2-1) var(--size-4-2);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-s);\n background-color: var(--background-secondary);\n color: var(--text-muted);\n font-size: var(--font-ui-smaller);\n white-space: nowrap;\n cursor: pointer;\n}\n.obsidian-lib.modal-command:hover:not(:disabled) {\n background-color: var(--background-modifier-hover);\n color: var(--text-normal);\n}\n.obsidian-lib.modal-command.is-active {\n border-color: var(--interactive-accent);\n background-color: var(--interactive-accent);\n color: var(--text-on-accent);\n}\n.obsidian-lib.modal-command:disabled {\n opacity: 0.5;\n cursor: default;\n}\n.obsidian-lib.modal-command-hotkey {\n color: var(--text-faint);\n font-size: var(--font-smallest);\n}\n.modal-command.is-active .obsidian-lib.modal-command-hotkey {\n opacity: 0.7;\n color: var(--text-on-accent);\n}\n\n.obsidian-lib.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-lib.multiple-dropdown-component select,\n.obsidian-lib.multiple-dropdown-component select:focus,\n.obsidian-lib.multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-lib.multiple-dropdown-component select option:checked,\n.obsidian-lib.multiple-dropdown-component select:focus option:checked,\n.obsidian-lib.multiple-dropdown-component .dropdown option:checked {\n background-color: var(--interactive-accent);\n color: var(--text-on-accent);\n}\n\n.obsidian-lib.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-lib.plugin-notice-name code {\n color: inherit;\n}\n.obsidian-lib.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-lib.plugin-notice-content .obsidian-lib.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-lib.plugin-notice-content .obsidian-lib.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-lib.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-lib.plugin-notice-requires-explicit-close.notice .obsidian-lib.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-lib.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-lib.plugin-suggestion-banner {\n background-color: var(--background-secondary);\n border-left: var(--size-2-1) solid var(--text-accent);\n border-radius: var(--radius-s);\n display: flex;\n flex-direction: column;\n gap: var(--size-4-2);\n margin-bottom: var(--size-4-4);\n padding: var(--size-4-3) var(--size-4-4);\n}\n.obsidian-lib.plugin-suggestion-banner button {\n width: fit-content;\n}\n.obsidian-lib.plugin-suggestion-notice-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-4-2);\n margin-top: var(--size-4-2);\n}\n\n.obsidian-lib.popover {\n max-width: min(420px, 90vw);\n min-width: 320px;\n padding: var(--size-4-2) var(--size-4-3);\n position: absolute;\n z-index: var(--layer-menu);\n}\n.obsidian-lib.popover .setting-item {\n align-items: center;\n border-top: none;\n gap: var(--size-4-2);\n padding: var(--size-2-1) 0;\n}\n.obsidian-lib.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-lib.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-lib.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-lib.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-lib button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-lib.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-lib :invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-lib input.metadata-input-text:active:invalid:not(.untouched), .obsidian-lib input.metadata-input-text:focus-visible:invalid:not(.untouched), .obsidian-lib input.metadata-input-text:focus:invalid:not(.untouched),\n.obsidian-lib input[type=date]:active:invalid:not(.untouched),\n.obsidian-lib input[type=date]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=date]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:active:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=datetime-local]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=email]:active:invalid:not(.untouched),\n.obsidian-lib input[type=email]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=email]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=number]:active:invalid:not(.untouched),\n.obsidian-lib input[type=number]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=number]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=password]:active:invalid:not(.untouched),\n.obsidian-lib input[type=password]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=password]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=search]:active:invalid:not(.untouched),\n.obsidian-lib input[type=search]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=search]:focus:invalid:not(.untouched),\n.obsidian-lib input[type=text]:active:invalid:not(.untouched),\n.obsidian-lib input[type=text]:focus-visible:invalid:not(.untouched),\n.obsidian-lib input[type=text]:focus:invalid:not(.untouched),\n.obsidian-lib textarea:active:invalid:not(.untouched),\n.obsidian-lib textarea:focus-visible:invalid:not(.untouched),\n.obsidian-lib textarea:focus:invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-lib.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-lib.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-lib.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/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.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/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;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;;;ACvBA;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;;;AC/CK;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;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;;AAGA;EACE;EACA;;;ACpEF;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;;;ACUN;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-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.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//%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&:hover:not(:disabled)%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//%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 */\n";
96
96
  // Annotate the CommonJS export names for ESM import in node:
97
97
  0 && (module.exports = {