obsidian-dev-utils 96.5.4 → 96.6.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.
- package/CHANGELOG.md +4 -0
- package/dist/integration-test-plugin/main.js +335 -142
- package/dist/lib/cjs/__merged.cjs +6 -1
- package/dist/lib/cjs/__merged.d.cts +1 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/obsidian/css-class.cjs +7 -1
- package/dist/lib/cjs/obsidian/css-class.d.cts +27 -0
- package/dist/lib/cjs/obsidian/modals/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/modals/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/modals/modal-command-builder.cjs +460 -0
- package/dist/lib/cjs/obsidian/modals/modal-command-builder.d.cts +281 -0
- package/dist/lib/cjs/obsidian/modals/prompt.cjs +7 -1
- package/dist/lib/cjs/obsidian/modals/prompt.d.cts +15 -0
- package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.cjs +3 -137
- package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.d.cts +23 -159
- package/dist/lib/esm/__merged.d.mts +1 -0
- package/dist/lib/esm/__merged.mjs +7 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/obsidian/css-class.d.mts +27 -0
- package/dist/lib/esm/obsidian/css-class.mjs +7 -1
- package/dist/lib/esm/obsidian/modals/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/modals/index.mjs +3 -1
- package/dist/lib/esm/obsidian/modals/modal-command-builder.d.mts +281 -0
- package/dist/lib/esm/obsidian/modals/modal-command-builder.mjs +357 -0
- package/dist/lib/esm/obsidian/modals/prompt.d.mts +15 -0
- package/dist/lib/esm/obsidian/modals/prompt.mjs +7 -1
- package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.d.mts +23 -159
- package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.mjs +3 -140
- package/dist/styles.css +44 -1
- package/obsidian/modals/modal-command-builder/package.json +6 -0
- package/package.json +1 -1
|
@@ -2,170 +2,34 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* @file
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* The former home of the `SuggestModal` instruction-bar builder.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* ({@link SuggestModalCommandBuilder.addDropDown}). Chain the `add*` calls, then apply everything to a
|
|
12
|
-
* modal with {@link SuggestModalCommandBuilder.build}:
|
|
13
|
-
*
|
|
14
|
-
* ```ts
|
|
15
|
-
* new SuggestModalCommandBuilder()
|
|
16
|
-
* .addKeyboardCommand({ key: 'Enter', modifiers: ['Mod'], onKey, purpose: 'to create' })
|
|
17
|
-
* .addCheckbox({ key: '1', modifiers: ['Alt'], onChange, onInit, purpose: 'Fix footnotes' })
|
|
18
|
-
* .build(modal);
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* {@link SuggestModalCommandBuilder.build} always registers the essential navigation/action key
|
|
22
|
-
* handlers, but only renders the instruction UI and registers the option-toggle shortcuts when
|
|
23
|
-
* {@link SuggestModalCommandBuilderBuildOptions.shouldShowInstructions} is `true` (the default).
|
|
24
|
-
*/
|
|
25
|
-
import type { KeymapContext, Modifier, SuggestModal } from 'obsidian';
|
|
26
|
-
import { DropdownComponent } from 'obsidian';
|
|
27
|
-
/**
|
|
28
|
-
* A checkbox command shown in a {@link SuggestModal}'s instruction bar and bound to a modifier+key
|
|
29
|
-
* shortcut that toggles it.
|
|
30
|
-
*/
|
|
31
|
-
export interface CheckboxCommand {
|
|
32
|
-
/**
|
|
33
|
-
* The key that toggles the checkbox.
|
|
34
|
-
*/
|
|
35
|
-
key: string;
|
|
36
|
-
/**
|
|
37
|
-
* The modifiers combined with {@link CheckboxCommand.key} to toggle the checkbox. When omitted, no
|
|
38
|
-
* modifiers are required.
|
|
39
|
-
*/
|
|
40
|
-
modifiers?: Modifier[];
|
|
41
|
-
/**
|
|
42
|
-
* Called when the checkbox value changes.
|
|
43
|
-
*
|
|
44
|
-
* @param isChecked - The new checked state.
|
|
45
|
-
*/
|
|
46
|
-
onChange(isChecked: boolean): void;
|
|
47
|
-
/**
|
|
48
|
-
* Called once with the created checkbox element, to initialize its state.
|
|
49
|
-
*
|
|
50
|
-
* @param checkboxEl - The created checkbox element.
|
|
51
|
-
*/
|
|
52
|
-
onInit(checkboxEl: HTMLInputElement): void;
|
|
53
|
-
/**
|
|
54
|
-
* The human-readable description shown next to the checkbox in the instruction bar.
|
|
55
|
-
*/
|
|
56
|
-
purpose: string;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* A dropdown command shown in a {@link SuggestModal}'s instruction bar and bound to a modifier+key
|
|
60
|
-
* shortcut that cycles through its options.
|
|
7
|
+
* The builder is no longer tied to `SuggestModal` — it renders into a plain `Modal` and into a bare
|
|
8
|
+
* element + `Scope` too — so it moved to `modal-command-builder.ts` under the honest name
|
|
9
|
+
* {@link ModalCommandBuilder}. This module stays as a deprecated alias so existing importers keep working
|
|
10
|
+
* unchanged; it re-exports the very same class, not a copy.
|
|
61
11
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
*/
|
|
66
|
-
key: string;
|
|
67
|
-
/**
|
|
68
|
-
* The modifiers combined with {@link DropDownCommand.key} to cycle the dropdown. When omitted, no
|
|
69
|
-
* modifiers are required.
|
|
70
|
-
*/
|
|
71
|
-
modifiers?: Modifier[];
|
|
72
|
-
/**
|
|
73
|
-
* Called when the dropdown value changes.
|
|
74
|
-
*
|
|
75
|
-
* @param value - The newly selected value.
|
|
76
|
-
*/
|
|
77
|
-
onChange(value: string): void;
|
|
78
|
-
/**
|
|
79
|
-
* Called once with the created dropdown component, to initialize its options and state.
|
|
80
|
-
*
|
|
81
|
-
* @param dropdownComponent - The created dropdown component.
|
|
82
|
-
*/
|
|
83
|
-
onInit(dropdownComponent: DropdownComponent): void;
|
|
84
|
-
/**
|
|
85
|
-
* The human-readable description shown next to the dropdown in the instruction bar.
|
|
86
|
-
*/
|
|
87
|
-
purpose: string;
|
|
88
|
-
}
|
|
12
|
+
import type { ModalCommandBuilderBuildOptions } from './modal-command-builder.mjs';
|
|
13
|
+
import { ModalCommandBuilder } from './modal-command-builder.mjs';
|
|
14
|
+
export type { CheckboxCommand, DropDownCommand, KeyboardCommand } from './modal-command-builder.mjs';
|
|
89
15
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
16
|
+
* Options for {@link SuggestModalCommandBuilder.build}.
|
|
17
|
+
*
|
|
18
|
+
* @deprecated Use {@link ModalCommandBuilderBuildOptions} from
|
|
19
|
+
* `obsidian-dev-utils/obsidian/modals/modal-command-builder` instead.
|
|
92
20
|
*/
|
|
93
|
-
export
|
|
94
|
-
/**
|
|
95
|
-
* The key shown in the instruction bar (and registered with the modal scope when
|
|
96
|
-
* {@link KeyboardCommand.onKey} is provided).
|
|
97
|
-
*/
|
|
98
|
-
key: string;
|
|
99
|
-
/**
|
|
100
|
-
* The modifiers combined with {@link KeyboardCommand.key}. When omitted, no modifiers are required.
|
|
101
|
-
*/
|
|
102
|
-
modifiers?: Modifier[];
|
|
103
|
-
/**
|
|
104
|
-
* The handler invoked when the shortcut is pressed. When omitted, the command is a hint only and no
|
|
105
|
-
* scope handler is registered.
|
|
106
|
-
*
|
|
107
|
-
* @param $event - The keyboard event.
|
|
108
|
-
* @param context - The keymap context.
|
|
109
|
-
* @returns `false` to prevent Obsidian's default handling, or `void`/`true` otherwise.
|
|
110
|
-
*/
|
|
111
|
-
onKey?($event: KeyboardEvent, context: KeymapContext): boolean;
|
|
112
|
-
/**
|
|
113
|
-
* The human-readable description shown next to the key in the instruction bar.
|
|
114
|
-
*/
|
|
115
|
-
purpose: string;
|
|
116
|
-
}
|
|
21
|
+
export type SuggestModalCommandBuilderBuildOptions = ModalCommandBuilderBuildOptions;
|
|
117
22
|
/**
|
|
118
|
-
*
|
|
23
|
+
* Builds a `SuggestModal`'s instruction bar.
|
|
24
|
+
*
|
|
25
|
+
* @deprecated Use {@link ModalCommandBuilder} from
|
|
26
|
+
* `obsidian-dev-utils/obsidian/modals/modal-command-builder` instead.
|
|
119
27
|
*/
|
|
120
|
-
export
|
|
121
|
-
/**
|
|
122
|
-
* Whether to render the instruction bar (checkboxes, dropdowns, keyboard hints) and register the
|
|
123
|
-
* option-toggle keyboard shortcuts. When `false`, no instruction UI is shown and the option-toggle
|
|
124
|
-
* shortcuts are not registered; only the essential navigation key handlers remain active.
|
|
125
|
-
*
|
|
126
|
-
* @default `true`
|
|
127
|
-
*/
|
|
128
|
-
readonly shouldShowInstructions?: boolean;
|
|
129
|
-
}
|
|
28
|
+
export declare const SuggestModalCommandBuilder: typeof ModalCommandBuilder;
|
|
130
29
|
/**
|
|
131
|
-
* Builds a
|
|
132
|
-
*
|
|
30
|
+
* Builds a `SuggestModal`'s instruction bar.
|
|
31
|
+
*
|
|
32
|
+
* @deprecated Use {@link ModalCommandBuilder} from
|
|
33
|
+
* `obsidian-dev-utils/obsidian/modals/modal-command-builder` instead.
|
|
133
34
|
*/
|
|
134
|
-
export
|
|
135
|
-
private readonly instructions;
|
|
136
|
-
/**
|
|
137
|
-
* Adds an interactive checkbox to the instruction bar, bound to a modifier+key shortcut that toggles
|
|
138
|
-
* it.
|
|
139
|
-
*
|
|
140
|
-
* @param command - The checkbox command to add.
|
|
141
|
-
* @returns The builder instance for chaining.
|
|
142
|
-
*/
|
|
143
|
-
addCheckbox(command: CheckboxCommand): this;
|
|
144
|
-
/**
|
|
145
|
-
* Adds a dropdown to the instruction bar, bound to a modifier+key shortcut that cycles through its
|
|
146
|
-
* options.
|
|
147
|
-
*
|
|
148
|
-
* @param command - The dropdown command to add.
|
|
149
|
-
* @returns The builder instance for chaining.
|
|
150
|
-
*/
|
|
151
|
-
addDropDown(command: DropDownCommand): this;
|
|
152
|
-
/**
|
|
153
|
-
* Adds a keyboard command to the instruction bar. When {@link KeyboardCommand.onKey} is provided, its
|
|
154
|
-
* handler is registered with the modal scope; otherwise the command is a hint only.
|
|
155
|
-
*
|
|
156
|
-
* @param command - The keyboard command to add.
|
|
157
|
-
* @returns The builder instance for chaining.
|
|
158
|
-
*/
|
|
159
|
-
addKeyboardCommand(command: KeyboardCommand): this;
|
|
160
|
-
/**
|
|
161
|
-
* Applies the accumulated commands to a modal. Always registers the essential navigation/action key
|
|
162
|
-
* handlers; only renders the instruction UI and registers the option-toggle shortcuts when
|
|
163
|
-
* {@link SuggestModalCommandBuilderBuildOptions.shouldShowInstructions} is `true`.
|
|
164
|
-
*
|
|
165
|
-
* @param modal - The modal to apply the commands to.
|
|
166
|
-
* @param options - The build options.
|
|
167
|
-
*/
|
|
168
|
-
build(modal: SuggestModal<unknown>, options?: SuggestModalCommandBuilderBuildOptions): void;
|
|
169
|
-
private buildCommand;
|
|
170
|
-
private getModifierString;
|
|
171
|
-
}
|
|
35
|
+
export type SuggestModalCommandBuilder = ModalCommandBuilder;
|
|
@@ -41,146 +41,9 @@ function ensureBrowserProcess() {
|
|
|
41
41
|
})();
|
|
42
42
|
})();
|
|
43
43
|
|
|
44
|
-
import {
|
|
45
|
-
|
|
46
|
-
Platform
|
|
47
|
-
} from "obsidian";
|
|
48
|
-
const KEYS_MAP = /* @__PURE__ */ new Map([
|
|
49
|
-
["Enter", "\u21B5"],
|
|
50
|
-
["UpDown", "\u2191\u2193"]
|
|
51
|
-
]);
|
|
52
|
-
class SuggestModalCommandBuilder {
|
|
53
|
-
instructions = [];
|
|
54
|
-
/**
|
|
55
|
-
* Adds an interactive checkbox to the instruction bar, bound to a modifier+key shortcut that toggles
|
|
56
|
-
* it.
|
|
57
|
-
*
|
|
58
|
-
* @param command - The checkbox command to add.
|
|
59
|
-
* @returns The builder instance for chaining.
|
|
60
|
-
*/
|
|
61
|
-
addCheckbox(command) {
|
|
62
|
-
this.instructions.push({
|
|
63
|
-
command: this.buildCommand(command),
|
|
64
|
-
init: (purposeEl, scope) => {
|
|
65
|
-
const checkboxEl = purposeEl.createEl("input", { type: "checkbox" });
|
|
66
|
-
command.onInit(checkboxEl);
|
|
67
|
-
checkboxEl.addEventListener("change", () => {
|
|
68
|
-
command.onChange(checkboxEl.checked);
|
|
69
|
-
});
|
|
70
|
-
scope.register(command.modifiers ?? [], command.key, () => {
|
|
71
|
-
if (checkboxEl.disabled) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
checkboxEl.checked = !checkboxEl.checked;
|
|
75
|
-
checkboxEl.trigger("change");
|
|
76
|
-
});
|
|
77
|
-
},
|
|
78
|
-
purpose: command.purpose
|
|
79
|
-
});
|
|
80
|
-
return this;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Adds a dropdown to the instruction bar, bound to a modifier+key shortcut that cycles through its
|
|
84
|
-
* options.
|
|
85
|
-
*
|
|
86
|
-
* @param command - The dropdown command to add.
|
|
87
|
-
* @returns The builder instance for chaining.
|
|
88
|
-
*/
|
|
89
|
-
addDropDown(command) {
|
|
90
|
-
this.instructions.push({
|
|
91
|
-
command: this.buildCommand(command),
|
|
92
|
-
init: (purposeEl, scope) => {
|
|
93
|
-
purposeEl.appendText(" ");
|
|
94
|
-
const dropdownComponent = new DropdownComponent(purposeEl);
|
|
95
|
-
command.onInit(dropdownComponent);
|
|
96
|
-
dropdownComponent.onChange((value) => {
|
|
97
|
-
command.onChange(value);
|
|
98
|
-
});
|
|
99
|
-
scope.register(command.modifiers ?? [], command.key, () => {
|
|
100
|
-
if (dropdownComponent.disabled) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
const selectEl = dropdownComponent.selectEl;
|
|
104
|
-
selectEl.selectedIndex = (selectEl.selectedIndex + 1) % selectEl.options.length;
|
|
105
|
-
selectEl.trigger("change");
|
|
106
|
-
});
|
|
107
|
-
},
|
|
108
|
-
purpose: command.purpose
|
|
109
|
-
});
|
|
110
|
-
return this;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Adds a keyboard command to the instruction bar. When {@link KeyboardCommand.onKey} is provided, its
|
|
114
|
-
* handler is registered with the modal scope; otherwise the command is a hint only.
|
|
115
|
-
*
|
|
116
|
-
* @param command - The keyboard command to add.
|
|
117
|
-
* @returns The builder instance for chaining.
|
|
118
|
-
*/
|
|
119
|
-
addKeyboardCommand(command) {
|
|
120
|
-
this.instructions.push({
|
|
121
|
-
command: this.buildCommand(command),
|
|
122
|
-
purpose: command.purpose,
|
|
123
|
-
registerScope: (scope) => {
|
|
124
|
-
if (command.onKey) {
|
|
125
|
-
scope.register(command.modifiers ?? [], command.key, command.onKey.bind(command));
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
return this;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Applies the accumulated commands to a modal. Always registers the essential navigation/action key
|
|
133
|
-
* handlers; only renders the instruction UI and registers the option-toggle shortcuts when
|
|
134
|
-
* {@link SuggestModalCommandBuilderBuildOptions.shouldShowInstructions} is `true`.
|
|
135
|
-
*
|
|
136
|
-
* @param modal - The modal to apply the commands to.
|
|
137
|
-
* @param options - The build options.
|
|
138
|
-
*/
|
|
139
|
-
build(modal, options = {}) {
|
|
140
|
-
const { shouldShowInstructions = true } = options;
|
|
141
|
-
for (const instruction of this.instructions) {
|
|
142
|
-
instruction.registerScope?.(modal.scope);
|
|
143
|
-
}
|
|
144
|
-
if (!shouldShowInstructions) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
modal.setInstructions(this.instructions);
|
|
148
|
-
const purposeEls = [...modal.instructionsEl.findAll(".prompt-instruction > span:nth-child(2)")];
|
|
149
|
-
for (const [index, purposeEl] of purposeEls.entries()) {
|
|
150
|
-
this.instructions[index]?.init?.(purposeEl, modal.scope);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
buildCommand(entry) {
|
|
154
|
-
let command = KEYS_MAP.get(entry.key) ?? entry.key;
|
|
155
|
-
for (const modifier of entry.modifiers ?? []) {
|
|
156
|
-
command = `${this.getModifierString(modifier)} ${command}`;
|
|
157
|
-
}
|
|
158
|
-
return command;
|
|
159
|
-
}
|
|
160
|
-
getModifierString(modifier) {
|
|
161
|
-
switch (modifier) {
|
|
162
|
-
case "Alt": {
|
|
163
|
-
return "alt";
|
|
164
|
-
}
|
|
165
|
-
case "Ctrl": {
|
|
166
|
-
return "ctrl";
|
|
167
|
-
}
|
|
168
|
-
case "Meta": {
|
|
169
|
-
return Platform.isMacOS ? "cmd" : "win";
|
|
170
|
-
}
|
|
171
|
-
case "Mod": {
|
|
172
|
-
return Platform.isMacOS ? "cmd" : "ctrl";
|
|
173
|
-
}
|
|
174
|
-
case "Shift": {
|
|
175
|
-
return "shift";
|
|
176
|
-
}
|
|
177
|
-
default: {
|
|
178
|
-
return modifier;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
44
|
+
import { ModalCommandBuilder } from "./modal-command-builder.mjs";
|
|
45
|
+
const SuggestModalCommandBuilder = ModalCommandBuilder;
|
|
183
46
|
export {
|
|
184
47
|
SuggestModalCommandBuilder
|
|
185
48
|
};
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9zdWdnZXN0LW1vZGFsLWNvbW1hbmQtYnVpbGRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgYnVpbGRlciBmb3IgYSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSdzIGluc3RydWN0aW9uIGJhci5cbiAqXG4gKiB7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXJ9IGFzc2VtYmxlcyB0aGUgaW5zdHJ1Y3Rpb24gYmFyIHNob3duIGF0IHRoZSBib3R0b20gb2YgYVxuICoge0BsaW5rIFN1Z2dlc3RNb2RhbH06IGtleWJvYXJkLWNvbW1hbmQgaGludHMgKHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5hZGRLZXlib2FyZENvbW1hbmR9KSxcbiAqIGludGVyYWN0aXZlIGNoZWNrYm94ZXMgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXRcbiAqICh7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIuYWRkQ2hlY2tib3h9KSwgYW5kIGRyb3Bkb3ducyBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dFxuICogKHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5hZGREcm9wRG93bn0pLiBDaGFpbiB0aGUgYGFkZCpgIGNhbGxzLCB0aGVuIGFwcGx5IGV2ZXJ5dGhpbmcgdG8gYVxuICogbW9kYWwgd2l0aCB7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIuYnVpbGR9OlxuICpcbiAqIGBgYHRzXG4gKiBuZXcgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIoKVxuICogICAuYWRkS2V5Ym9hcmRDb21tYW5kKHsga2V5OiAnRW50ZXInLCBtb2RpZmllcnM6IFsnTW9kJ10sIG9uS2V5LCBwdXJwb3NlOiAndG8gY3JlYXRlJyB9KVxuICogICAuYWRkQ2hlY2tib3goeyBrZXk6ICcxJywgbW9kaWZpZXJzOiBbJ0FsdCddLCBvbkNoYW5nZSwgb25Jbml0LCBwdXJwb3NlOiAnRml4IGZvb3Rub3RlcycgfSlcbiAqICAgLmJ1aWxkKG1vZGFsKTtcbiAqIGBgYFxuICpcbiAqIHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0gYWx3YXlzIHJlZ2lzdGVycyB0aGUgZXNzZW50aWFsIG5hdmlnYXRpb24vYWN0aW9uIGtleVxuICogaGFuZGxlcnMsIGJ1dCBvbmx5IHJlbmRlcnMgdGhlIGluc3RydWN0aW9uIFVJIGFuZCByZWdpc3RlcnMgdGhlIG9wdGlvbi10b2dnbGUgc2hvcnRjdXRzIHdoZW5cbiAqIHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEluc3RydWN0aW9uLFxuICBLZXltYXBDb250ZXh0LFxuICBNb2RpZmllcixcbiAgU2NvcGUsXG4gIFN1Z2dlc3RNb2RhbFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIERyb3Bkb3duQ29tcG9uZW50LFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmNvbnN0IEtFWVNfTUFQID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbJ0VudGVyJywgJ1x1MjFCNSddLFxuICBbJ1VwRG93bicsICdcdTIxOTFcdTIxOTMnXVxuXSk7XG5cbi8qKlxuICogQSBjaGVja2JveCBjb21tYW5kIHNob3duIGluIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0ncyBpbnN0cnVjdGlvbiBiYXIgYW5kIGJvdW5kIHRvIGEgbW9kaWZpZXIra2V5XG4gKiBzaG9ydGN1dCB0aGF0IHRvZ2dsZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tib3hDb21tYW5kIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdGhhdCB0b2dnbGVzIHRoZSBjaGVja2JveC5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXJzIGNvbWJpbmVkIHdpdGgge0BsaW5rIENoZWNrYm94Q29tbWFuZC5rZXl9IHRvIHRvZ2dsZSB0aGUgY2hlY2tib3guIFdoZW4gb21pdHRlZCwgbm9cbiAgICogbW9kaWZpZXJzIGFyZSByZXF1aXJlZC5cbiAgICovXG4gIG1vZGlmaWVycz86IE1vZGlmaWVyW107XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjaGVja2JveCB2YWx1ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaXNDaGVja2VkIC0gVGhlIG5ldyBjaGVja2VkIHN0YXRlLlxuICAgKi9cbiAgb25DaGFuZ2UoaXNDaGVja2VkOiBib29sZWFuKTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIG9uY2Ugd2l0aCB0aGUgY3JlYXRlZCBjaGVja2JveCBlbGVtZW50LCB0byBpbml0aWFsaXplIGl0cyBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGNoZWNrYm94RWwgLSBUaGUgY3JlYXRlZCBjaGVja2JveCBlbGVtZW50LlxuICAgKi9cbiAgb25Jbml0KGNoZWNrYm94RWw6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc2hvd24gbmV4dCB0byB0aGUgY2hlY2tib3ggaW4gdGhlIGluc3RydWN0aW9uIGJhci5cbiAgICovXG4gIHB1cnBvc2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGRyb3Bkb3duIGNvbW1hbmQgc2hvd24gaW4gYSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSdzIGluc3RydWN0aW9uIGJhciBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXlcbiAqIHNob3J0Y3V0IHRoYXQgY3ljbGVzIHRocm91Z2ggaXRzIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcERvd25Db21tYW5kIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdGhhdCBjeWNsZXMgdGhlIGRyb3Bkb3duIHRvIGl0cyBuZXh0IG9wdGlvbi5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXJzIGNvbWJpbmVkIHdpdGgge0BsaW5rIERyb3BEb3duQ29tbWFuZC5rZXl9IHRvIGN5Y2xlIHRoZSBkcm9wZG93bi4gV2hlbiBvbWl0dGVkLCBub1xuICAgKiBtb2RpZmllcnMgYXJlIHJlcXVpcmVkLlxuICAgKi9cbiAgbW9kaWZpZXJzPzogTW9kaWZpZXJbXTtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGRyb3Bkb3duIHZhbHVlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXdseSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIG9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSB3aXRoIHRoZSBjcmVhdGVkIGRyb3Bkb3duIGNvbXBvbmVudCwgdG8gaW5pdGlhbGl6ZSBpdHMgb3B0aW9ucyBhbmQgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBkcm9wZG93bkNvbXBvbmVudCAtIFRoZSBjcmVhdGVkIGRyb3Bkb3duIGNvbXBvbmVudC5cbiAgICovXG4gIG9uSW5pdChkcm9wZG93bkNvbXBvbmVudDogRHJvcGRvd25Db21wb25lbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc2hvd24gbmV4dCB0byB0aGUgZHJvcGRvd24gaW4gdGhlIGluc3RydWN0aW9uIGJhci5cbiAgICovXG4gIHB1cnBvc2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGtleWJvYXJkIGNvbW1hbmQgc2hvd24gaW4gYSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSdzIGluc3RydWN0aW9uIGJhciBhbmQgb3B0aW9uYWxseSBib3VuZCB0byBhXG4gKiBtb2RpZmllcitrZXkgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlib2FyZENvbW1hbmQge1xuICAvKipcbiAgICogVGhlIGtleSBzaG93biBpbiB0aGUgaW5zdHJ1Y3Rpb24gYmFyIChhbmQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBtb2RhbCBzY29wZSB3aGVuXG4gICAqIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkKS5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXJzIGNvbWJpbmVkIHdpdGgge0BsaW5rIEtleWJvYXJkQ29tbWFuZC5rZXl9LiBXaGVuIG9taXR0ZWQsIG5vIG1vZGlmaWVycyBhcmUgcmVxdWlyZWQuXG4gICAqL1xuICBtb2RpZmllcnM/OiBNb2RpZmllcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgaGFuZGxlciBpbnZva2VkIHdoZW4gdGhlIHNob3J0Y3V0IGlzIHByZXNzZWQuIFdoZW4gb21pdHRlZCwgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkgYW5kIG5vXG4gICAqIHNjb3BlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtICRldmVudCAtIFRoZSBrZXlib2FyZCBldmVudC5cbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUga2V5bWFwIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIGBmYWxzZWAgdG8gcHJldmVudCBPYnNpZGlhbidzIGRlZmF1bHQgaGFuZGxpbmcsIG9yIGB2b2lkYC9gdHJ1ZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgb25LZXk/KCRldmVudDogS2V5Ym9hcmRFdmVudCwgY29udGV4dDogS2V5bWFwQ29udGV4dCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzaG93biBuZXh0IHRvIHRoZSBrZXkgaW4gdGhlIGluc3RydWN0aW9uIGJhci5cbiAgICovXG4gIHB1cnBvc2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIuYnVpbGR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3RNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBpbnN0cnVjdGlvbiBiYXIgKGNoZWNrYm94ZXMsIGRyb3Bkb3ducywga2V5Ym9hcmQgaGludHMpIGFuZCByZWdpc3RlciB0aGVcbiAgICogb3B0aW9uLXRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dHMuIFdoZW4gYGZhbHNlYCwgbm8gaW5zdHJ1Y3Rpb24gVUkgaXMgc2hvd24gYW5kIHRoZSBvcHRpb24tdG9nZ2xlXG4gICAqIHNob3J0Y3V0cyBhcmUgbm90IHJlZ2lzdGVyZWQ7IG9ubHkgdGhlIGVzc2VudGlhbCBuYXZpZ2F0aW9uIGtleSBoYW5kbGVycyByZW1haW4gYWN0aXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dJbnN0cnVjdGlvbnM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSW5zdHJ1Y3Rpb25FeCBleHRlbmRzIEluc3RydWN0aW9uIHtcbiAgaW5pdD8ocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IHZvaWQ7XG4gIHJlZ2lzdGVyU2NvcGU/KHNjb3BlOiBTY29wZSk6IHZvaWQ7XG59XG5cbi8qKlxuICogQnVpbGRzIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0ncyBpbnN0cnVjdGlvbiBiYXIgZnJvbSBrZXlib2FyZCBjb21tYW5kcywgaW50ZXJhY3RpdmUgY2hlY2tib3hlcywgYW5kXG4gKiBkcm9wZG93bnMsIHRoZW4gYXBwbGllcyB0aGVtIHRvIGEgbW9kYWwgdmlhIHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10gPSBbXTtcblxuICAvKipcbiAgICogQWRkcyBhbiBpbnRlcmFjdGl2ZSBjaGVja2JveCB0byB0aGUgaW5zdHJ1Y3Rpb24gYmFyLCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IHRvZ2dsZXNcbiAgICogaXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNoZWNrYm94IGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hlY2tib3goY29tbWFuZDogQ2hlY2tib3hDb21tYW5kKTogdGhpcyB7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICBjb21tYW5kOiB0aGlzLmJ1aWxkQ29tbWFuZChjb21tYW5kKSxcbiAgICAgIGluaXQ6IChwdXJwb3NlRWwsIHNjb3BlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWwgPSBwdXJwb3NlRWwuY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICBjb21tYW5kLm9uSW5pdChjaGVja2JveEVsKTtcbiAgICAgICAgY2hlY2tib3hFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgY29tbWFuZC5vbkNoYW5nZShjaGVja2JveEVsLmNoZWNrZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksICgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tib3hFbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaGVja2JveEVsLmNoZWNrZWQgPSAhY2hlY2tib3hFbC5jaGVja2VkO1xuICAgICAgICAgIGNoZWNrYm94RWwudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkcm9wZG93biB0byB0aGUgaW5zdHJ1Y3Rpb24gYmFyLCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IGN5Y2xlcyB0aHJvdWdoIGl0c1xuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBkcm9wZG93biBjb21tYW5kIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgcHVibGljIGFkZERyb3BEb3duKGNvbW1hbmQ6IERyb3BEb3duQ29tbWFuZCk6IHRoaXMge1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgY29tbWFuZDogdGhpcy5idWlsZENvbW1hbmQoY29tbWFuZCksXG4gICAgICBpbml0OiAocHVycG9zZUVsLCBzY29wZSkgPT4ge1xuICAgICAgICBwdXJwb3NlRWwuYXBwZW5kVGV4dCgnICcpO1xuICAgICAgICBjb25zdCBkcm9wZG93bkNvbXBvbmVudCA9IG5ldyBEcm9wZG93bkNvbXBvbmVudChwdXJwb3NlRWwpO1xuICAgICAgICBjb21tYW5kLm9uSW5pdChkcm9wZG93bkNvbXBvbmVudCk7XG4gICAgICAgIGRyb3Bkb3duQ29tcG9uZW50Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbW1hbmQub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gZGVmZW5zaXZlID8/IG9uIG9wdGlvbmFsIG1vZGlmaWVycy4gKi9cbiAgICAgICAgc2NvcGUucmVnaXN0ZXIoY29tbWFuZC5tb2RpZmllcnMgPz8gW10sIGNvbW1hbmQua2V5LCAoKSA9PiB7XG4gICAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICBpZiAoZHJvcGRvd25Db21wb25lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2VsZWN0RWwgPSBkcm9wZG93bkNvbXBvbmVudC5zZWxlY3RFbDtcbiAgICAgICAgICBzZWxlY3RFbC5zZWxlY3RlZEluZGV4ID0gKHNlbGVjdEVsLnNlbGVjdGVkSW5kZXggKyAxKSAlIHNlbGVjdEVsLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIHNlbGVjdEVsLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2VcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEga2V5Ym9hcmQgY29tbWFuZCB0byB0aGUgaW5zdHJ1Y3Rpb24gYmFyLiBXaGVuIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkLCBpdHNcbiAgICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIG1vZGFsIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGtleWJvYXJkIGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkS2V5Ym9hcmRDb21tYW5kKGNvbW1hbmQ6IEtleWJvYXJkQ29tbWFuZCk6IHRoaXMge1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgY29tbWFuZDogdGhpcy5idWlsZENvbW1hbmQoY29tbWFuZCksXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2UsXG4gICAgICByZWdpc3RlclNjb3BlOiAoc2NvcGUpID0+IHtcbiAgICAgICAgaWYgKGNvbW1hbmQub25LZXkpIHtcbiAgICAgICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gZGVmZW5zaXZlID8/IG9uIG9wdGlvbmFsIG1vZGlmaWVycy4gKi9cbiAgICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksIGNvbW1hbmQub25LZXkuYmluZChjb21tYW5kKSk7XG4gICAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIHRvIGEgbW9kYWwuIEFsd2F5cyByZWdpc3RlcnMgdGhlIGVzc2VudGlhbCBuYXZpZ2F0aW9uL2FjdGlvbiBrZXlcbiAgICogaGFuZGxlcnM7IG9ubHkgcmVuZGVycyB0aGUgaW5zdHJ1Y3Rpb24gVUkgYW5kIHJlZ2lzdGVycyB0aGUgb3B0aW9uLXRvZ2dsZSBzaG9ydGN1dHMgd2hlblxuICAgKiB7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXJCdWlsZE9wdGlvbnMuc2hvdWxkU2hvd0luc3RydWN0aW9uc30gaXMgYHRydWVgLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kYWwgLSBUaGUgbW9kYWwgdG8gYXBwbHkgdGhlIGNvbW1hbmRzIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGJ1aWxkKG1vZGFsOiBTdWdnZXN0TW9kYWw8dW5rbm93bj4sIG9wdGlvbnM6IFN1Z2dlc3RNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICBjb25zdCB7IHNob3VsZFNob3dJbnN0cnVjdGlvbnMgPSB0cnVlIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gRXNzZW50aWFsIG5hdmlnYXRpb24vYWN0aW9uIGtleSBoYW5kbGVycyBtdXN0IHN0YXkgYWN0aXZlIGV2ZW4gd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gYmFyIGlzIGhpZGRlbi5cbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpbnN0cnVjdGlvbi5yZWdpc3RlclNjb3BlPy4obW9kYWwuc2NvcGUpO1xuICAgIH1cblxuICAgIGlmICghc2hvdWxkU2hvd0luc3RydWN0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vZGFsLnNldEluc3RydWN0aW9ucyh0aGlzLmluc3RydWN0aW9ucyk7XG4gICAgY29uc3QgcHVycG9zZUVscyA9IFsuLi5tb2RhbC5pbnN0cnVjdGlvbnNFbC5maW5kQWxsKCcucHJvbXB0LWluc3RydWN0aW9uID4gc3BhbjpudGgtY2hpbGQoMiknKV0gYXMgSFRNTFNwYW5FbGVtZW50W107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHB1cnBvc2VFbF0gb2YgcHVycG9zZUVscy5lbnRyaWVzKCkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zW2luZGV4XT8uaW5pdD8uKHB1cnBvc2VFbCwgbW9kYWwuc2NvcGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb21tYW5kKGVudHJ5OiBLZXlib2FyZENvbW1hbmQpOiBzdHJpbmcge1xuICAgIGxldCBjb21tYW5kID0gS0VZU19NQVAuZ2V0KGVudHJ5LmtleSkgPz8gZW50cnkua2V5O1xuXG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBlbnRyeS5tb2RpZmllcnMgPz8gW10pIHtcbiAgICAgIGNvbW1hbmQgPSBgJHt0aGlzLmdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyKX0gJHtjb21tYW5kfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW1hbmQ7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyOiBNb2RpZmllcik6IHN0cmluZyB7XG4gICAgc3dpdGNoIChtb2RpZmllcikge1xuICAgICAgY2FzZSAnQWx0Jzoge1xuICAgICAgICByZXR1cm4gJ2FsdCc7XG4gICAgICB9XG4gICAgICBjYXNlICdDdHJsJzoge1xuICAgICAgICByZXR1cm4gJ2N0cmwnO1xuICAgICAgfVxuICAgICAgY2FzZSAnTWV0YSc6IHtcbiAgICAgICAgcmV0dXJuIFBsYXRmb3JtLmlzTWFjT1MgPyAnY21kJyA6ICd3aW4nO1xuICAgICAgfVxuICAgICAgY2FzZSAnTW9kJzoge1xuICAgICAgICByZXR1cm4gUGxhdGZvcm0uaXNNYWNPUyA/ICdjbWQnIDogJ2N0cmwnO1xuICAgICAgfVxuICAgICAgY2FzZSAnU2hpZnQnOiB7XG4gICAgICAgIHJldHVybiAnc2hpZnQnO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gbW9kaWZpZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSxXQUFXLG9CQUFJLElBQW9CO0FBQUEsRUFDdkMsQ0FBQyxTQUFTLFFBQUc7QUFBQSxFQUNiLENBQUMsVUFBVSxjQUFJO0FBQ2pCLENBQUM7QUFpSU0sTUFBTSwyQkFBMkI7QUFBQSxFQUNyQixlQUFnQyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVMzQyxZQUFZLFNBQWdDO0FBQ2pELFNBQUssYUFBYSxLQUFLO0FBQUEsTUFDckIsU0FBUyxLQUFLLGFBQWEsT0FBTztBQUFBLE1BQ2xDLE1BQU0sQ0FBQyxXQUFXLFVBQVU7QUFDMUIsY0FBTSxhQUFhLFVBQVUsU0FBUyxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsZ0JBQVEsT0FBTyxVQUFVO0FBQ3pCLG1CQUFXLGlCQUFpQixVQUFVLE1BQU07QUFDMUMsa0JBQVEsU0FBUyxXQUFXLE9BQU87QUFBQSxRQUNyQyxDQUFDO0FBRUQsY0FBTSxTQUFTLFFBQVEsYUFBYSxDQUFDLEdBQUcsUUFBUSxLQUFLLE1BQU07QUFDekQsY0FBSSxXQUFXLFVBQVU7QUFDdkI7QUFBQSxVQUNGO0FBQ0EscUJBQVcsVUFBVSxDQUFDLFdBQVc7QUFDakMscUJBQVcsUUFBUSxRQUFRO0FBQUEsUUFDN0IsQ0FBQztBQUFBLE1BQ0g7QUFBQSxNQUNBLFNBQVMsUUFBUTtBQUFBLElBQ25CLENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTTyxZQUFZLFNBQWdDO0FBQ2pELFNBQUssYUFBYSxLQUFLO0FBQUEsTUFDckIsU0FBUyxLQUFLLGFBQWEsT0FBTztBQUFBLE1BQ2xDLE1BQU0sQ0FBQyxXQUFXLFVBQVU7QUFDMUIsa0JBQVUsV0FBVyxHQUFHO0FBQ3hCLGNBQU0sb0JBQW9CLElBQUksa0JBQWtCLFNBQVM7QUFDekQsZ0JBQVEsT0FBTyxpQkFBaUI7QUFDaEMsMEJBQWtCLFNBQVMsQ0FBQyxVQUFVO0FBQ3BDLGtCQUFRLFNBQVMsS0FBSztBQUFBLFFBQ3hCLENBQUM7QUFHRCxjQUFNLFNBQVMsUUFBUSxhQUFhLENBQUMsR0FBRyxRQUFRLEtBQUssTUFBTTtBQUV6RCxjQUFJLGtCQUFrQixVQUFVO0FBQzlCO0FBQUEsVUFDRjtBQUNBLGdCQUFNLFdBQVcsa0JBQWtCO0FBQ25DLG1CQUFTLGlCQUFpQixTQUFTLGdCQUFnQixLQUFLLFNBQVMsUUFBUTtBQUN6RSxtQkFBUyxRQUFRLFFBQVE7QUFBQSxRQUMzQixDQUFDO0FBQUEsTUFDSDtBQUFBLE1BQ0EsU0FBUyxRQUFRO0FBQUEsSUFDbkIsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNPLG1CQUFtQixTQUFnQztBQUN4RCxTQUFLLGFBQWEsS0FBSztBQUFBLE1BQ3JCLFNBQVMsS0FBSyxhQUFhLE9BQU87QUFBQSxNQUNsQyxTQUFTLFFBQVE7QUFBQSxNQUNqQixlQUFlLENBQUMsVUFBVTtBQUN4QixZQUFJLFFBQVEsT0FBTztBQUVqQixnQkFBTSxTQUFTLFFBQVEsYUFBYSxDQUFDLEdBQUcsUUFBUSxLQUFLLFFBQVEsTUFBTSxLQUFLLE9BQU8sQ0FBQztBQUFBLFFBRWxGO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVU8sTUFBTSxPQUE4QixVQUFrRCxDQUFDLEdBQVM7QUFDckcsVUFBTSxFQUFFLHlCQUF5QixLQUFLLElBQUk7QUFHMUMsZUFBVyxlQUFlLEtBQUssY0FBYztBQUMzQyxrQkFBWSxnQkFBZ0IsTUFBTSxLQUFLO0FBQUEsSUFDekM7QUFFQSxRQUFJLENBQUMsd0JBQXdCO0FBQzNCO0FBQUEsSUFDRjtBQUVBLFVBQU0sZ0JBQWdCLEtBQUssWUFBWTtBQUN2QyxVQUFNLGFBQWEsQ0FBQyxHQUFHLE1BQU0sZUFBZSxRQUFRLHlDQUF5QyxDQUFDO0FBQzlGLGVBQVcsQ0FBQyxPQUFPLFNBQVMsS0FBSyxXQUFXLFFBQVEsR0FBRztBQUdyRCxXQUFLLGFBQWEsS0FBSyxHQUFHLE9BQU8sV0FBVyxNQUFNLEtBQUs7QUFBQSxJQUN6RDtBQUFBLEVBQ0Y7QUFBQSxFQUVRLGFBQWEsT0FBZ0M7QUFDbkQsUUFBSSxVQUFVLFNBQVMsSUFBSSxNQUFNLEdBQUcsS0FBSyxNQUFNO0FBRS9DLGVBQVcsWUFBWSxNQUFNLGFBQWEsQ0FBQyxHQUFHO0FBQzVDLGdCQUFVLEdBQUcsS0FBSyxrQkFBa0IsUUFBUSxDQUFDLElBQUksT0FBTztBQUFBLElBQzFEO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVRLGtCQUFrQixVQUE0QjtBQUNwRCxZQUFRLFVBQVU7QUFBQSxNQUNoQixLQUFLLE9BQU87QUFDVixlQUFPO0FBQUEsTUFDVDtBQUFBLE1BQ0EsS0FBSyxRQUFRO0FBQ1gsZUFBTztBQUFBLE1BQ1Q7QUFBQSxNQUNBLEtBQUssUUFBUTtBQUNYLGVBQU8sU0FBUyxVQUFVLFFBQVE7QUFBQSxNQUNwQztBQUFBLE1BQ0EsS0FBSyxPQUFPO0FBQ1YsZUFBTyxTQUFTLFVBQVUsUUFBUTtBQUFBLE1BQ3BDO0FBQUEsTUFDQSxLQUFLLFNBQVM7QUFDWixlQUFPO0FBQUEsTUFDVDtBQUFBLE1BQ0EsU0FBUztBQUNQLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9zdWdnZXN0LW1vZGFsLWNvbW1hbmQtYnVpbGRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBmb3JtZXIgaG9tZSBvZiB0aGUgYFN1Z2dlc3RNb2RhbGAgaW5zdHJ1Y3Rpb24tYmFyIGJ1aWxkZXIuXG4gKlxuICogVGhlIGJ1aWxkZXIgaXMgbm8gbG9uZ2VyIHRpZWQgdG8gYFN1Z2dlc3RNb2RhbGAgXHUyMDE0IGl0IHJlbmRlcnMgaW50byBhIHBsYWluIGBNb2RhbGAgYW5kIGludG8gYSBiYXJlXG4gKiBlbGVtZW50ICsgYFNjb3BlYCB0b28gXHUyMDE0IHNvIGl0IG1vdmVkIHRvIGBtb2RhbC1jb21tYW5kLWJ1aWxkZXIudHNgIHVuZGVyIHRoZSBob25lc3QgbmFtZVxuICoge0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXJ9LiBUaGlzIG1vZHVsZSBzdGF5cyBhcyBhIGRlcHJlY2F0ZWQgYWxpYXMgc28gZXhpc3RpbmcgaW1wb3J0ZXJzIGtlZXAgd29ya2luZ1xuICogdW5jaGFuZ2VkOyBpdCByZS1leHBvcnRzIHRoZSB2ZXJ5IHNhbWUgY2xhc3MsIG5vdCBhIGNvcHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zIH0gZnJvbSAnLi9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMnO1xuXG5pbXBvcnQgeyBNb2RhbENvbW1hbmRCdWlsZGVyIH0gZnJvbSAnLi9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIENoZWNrYm94Q29tbWFuZCxcbiAgRHJvcERvd25Db21tYW5kLFxuICBLZXlib2FyZENvbW1hbmRcbn0gZnJvbSAnLi9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zfSBmcm9tXG4gKiBgb2JzaWRpYW4tZGV2LXV0aWxzL29ic2lkaWFuL21vZGFscy9tb2RhbC1jb21tYW5kLWJ1aWxkZXJgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCB0eXBlIFN1Z2dlc3RNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zID0gTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucztcblxuLyoqXG4gKiBCdWlsZHMgYSBgU3VnZ2VzdE1vZGFsYCdzIGluc3RydWN0aW9uIGJhci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXJ9IGZyb21cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbW9kYWxzL21vZGFsLWNvbW1hbmQtYnVpbGRlcmAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1Z2dlc3RNb2RhbENvbW1hbmRCdWlsZGVyID0gTW9kYWxDb21tYW5kQnVpbGRlcjtcblxuLyoqXG4gKiBCdWlsZHMgYSBgU3VnZ2VzdE1vZGFsYCdzIGluc3RydWN0aW9uIGJhci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXJ9IGZyb21cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbW9kYWxzL21vZGFsLWNvbW1hbmQtYnVpbGRlcmAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IHR5cGUgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIgPSBNb2RhbENvbW1hbmRCdWlsZGVyO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWFBLFNBQVMsMkJBQTJCO0FBc0I3QixNQUFNLDZCQUE2QjsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/styles.css
CHANGED
|
@@ -294,6 +294,49 @@ body:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {
|
|
|
294
294
|
color: var(--icon-color-hover);
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
+
.obsidian-dev-utils.modal-commands {
|
|
298
|
+
display: flex;
|
|
299
|
+
flex-wrap: wrap;
|
|
300
|
+
gap: var(--size-2-2);
|
|
301
|
+
padding: var(--size-4-2) var(--size-4-3);
|
|
302
|
+
border-top: 1px solid var(--background-modifier-border);
|
|
303
|
+
}
|
|
304
|
+
.obsidian-dev-utils.modal-command {
|
|
305
|
+
display: inline-flex;
|
|
306
|
+
align-items: baseline;
|
|
307
|
+
gap: var(--size-2-2);
|
|
308
|
+
min-height: var(--size-4-8);
|
|
309
|
+
padding: var(--size-2-1) var(--size-4-2);
|
|
310
|
+
border: 1px solid var(--background-modifier-border);
|
|
311
|
+
border-radius: var(--radius-s);
|
|
312
|
+
background-color: var(--background-secondary);
|
|
313
|
+
color: var(--text-muted);
|
|
314
|
+
font-size: var(--font-ui-smaller);
|
|
315
|
+
white-space: nowrap;
|
|
316
|
+
cursor: pointer;
|
|
317
|
+
}
|
|
318
|
+
.obsidian-dev-utils.modal-command:hover:not(:disabled) {
|
|
319
|
+
background-color: var(--background-modifier-hover);
|
|
320
|
+
color: var(--text-normal);
|
|
321
|
+
}
|
|
322
|
+
.obsidian-dev-utils.modal-command.is-active {
|
|
323
|
+
border-color: var(--interactive-accent);
|
|
324
|
+
background-color: var(--interactive-accent);
|
|
325
|
+
color: var(--text-on-accent);
|
|
326
|
+
}
|
|
327
|
+
.obsidian-dev-utils.modal-command:disabled {
|
|
328
|
+
opacity: 0.5;
|
|
329
|
+
cursor: default;
|
|
330
|
+
}
|
|
331
|
+
.obsidian-dev-utils.modal-command-hotkey {
|
|
332
|
+
color: var(--text-faint);
|
|
333
|
+
font-size: var(--font-smallest);
|
|
334
|
+
}
|
|
335
|
+
.modal-command.is-active .obsidian-dev-utils.modal-command-hotkey {
|
|
336
|
+
opacity: 0.7;
|
|
337
|
+
color: var(--text-on-accent);
|
|
338
|
+
}
|
|
339
|
+
|
|
297
340
|
.obsidian-dev-utils.modal-container .ok-button {
|
|
298
341
|
margin-right: 10px;
|
|
299
342
|
margin-top: 20px;
|
|
@@ -447,4 +490,4 @@ body button:not(.clickable-icon) {
|
|
|
447
490
|
width: max-content;
|
|
448
491
|
}
|
|
449
492
|
|
|
450
|
-
/*# 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-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;;;ACjDJ;EACE;;;ACFJ;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;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;ACRJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;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-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%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-dev-utils%60.%5Cn.obsidian-dev-utils-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-dev-utils-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-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-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-dev-utils-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-dev-utils%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-dev-utils-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-dev-utils-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-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-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%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-dev-utils.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-dev-utils.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-dev-utils.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-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.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%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-dev-utils%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-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%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%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%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-dev-utils%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 */
|
|
493
|
+
/*# 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;;;ACjDJ;EACE;;;ACFJ;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;;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;;;AC3DF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;ACRJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;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-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%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-dev-utils%60.%5Cn.obsidian-dev-utils-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-dev-utils-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-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-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-dev-utils-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-dev-utils%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-dev-utils-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-dev-utils-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-dev-utils%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,%20so%20this%20rule%20only%5Cn%20%20//%20has%20to%20supply%20the%20separator%20and%20the%20wrapping%20that%20a%20self-created%20bar%20does%20not%20inherit;%20in%20%60Buttons%60%5Cn%20%20//%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//%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-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-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%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-dev-utils.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-dev-utils.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-dev-utils.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-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.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%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-dev-utils%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-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%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%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%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-dev-utils%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 */
|