obsidian-dev-utils 96.5.4 → 97.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/integration-test-plugin/main.js +4603 -6986
- package/dist/lib/cjs/__merged.cjs +9 -1
- package/dist/lib/cjs/__merged.d.cts +2 -0
- package/dist/lib/cjs/desktop-zip-extractor.cjs +276 -0
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +94 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- 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/desktop-demo-vault-opener.cjs +11 -18
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +11 -8
- 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 +2 -0
- package/dist/lib/esm/__merged.mjs +9 -1
- package/dist/lib/esm/desktop-zip-extractor.d.mts +94 -0
- package/dist/lib/esm/desktop-zip-extractor.mjs +174 -0
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- 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/desktop-demo-vault-opener.d.mts +11 -8
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +11 -8
- 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
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/// <reference path="../../library.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* A builder for a modal's control strip.
|
|
6
|
+
*
|
|
7
|
+
* {@link ModalCommandBuilder} assembles the strip of controls shown at the bottom of a modal:
|
|
8
|
+
* keyboard-command hints ({@link ModalCommandBuilder.addKeyboardCommand}), interactive checkboxes bound to
|
|
9
|
+
* a modifier+key shortcut ({@link ModalCommandBuilder.addCheckbox}), and dropdowns bound to a modifier+key
|
|
10
|
+
* shortcut ({@link ModalCommandBuilder.addDropDown}). Chain the `add*` calls, then apply everything to a
|
|
11
|
+
* modal with {@link ModalCommandBuilder.build}:
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* new ModalCommandBuilder()
|
|
15
|
+
* .addKeyboardCommand({ key: 'Enter', modifiers: ['Mod'], onKey, purpose: 'to create' })
|
|
16
|
+
* .addCheckbox({ key: '1', modifiers: ['Alt'], onChange, onInit, purpose: 'Fix footnotes' })
|
|
17
|
+
* .build(modal);
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The strip is described by two independent axes:
|
|
21
|
+
*
|
|
22
|
+
* - **Where it is hosted.** A {@link SuggestModal} in {@link ModalCommandsRenderMode.Instructions} mode
|
|
23
|
+
* keeps Obsidian's own instruction bar (`setInstructions` + `instructionsEl`). Every other target — a
|
|
24
|
+
* plain {@link Modal}, or a bare {@link ModalCommandsHost} of an element plus a `Scope` — gets a strip
|
|
25
|
+
* element the builder creates itself.
|
|
26
|
+
* - **How each control looks.** {@link ModalCommandsRenderMode.Instructions} renders the purpose text with
|
|
27
|
+
* an inline checkbox or dropdown; {@link ModalCommandsRenderMode.Buttons} renders one clickable button
|
|
28
|
+
* per control, carrying its pressed and disabled state.
|
|
29
|
+
*
|
|
30
|
+
* The axes are independent because a button strip inside a {@link SuggestModal} is a real combination.
|
|
31
|
+
*
|
|
32
|
+
* {@link ModalCommandBuilder.build} always registers the essential navigation/action key handlers, but
|
|
33
|
+
* only renders the control UI and registers the option-toggle shortcuts when
|
|
34
|
+
* {@link ModalCommandBuilderBuildOptions.shouldShowInstructions} is `true` (the default).
|
|
35
|
+
*/
|
|
36
|
+
import type { KeymapContext, Modal, Modifier, Scope, SuggestModal } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
37
|
+
import { DropdownComponent } from 'obsidian';
|
|
38
|
+
/**
|
|
39
|
+
* The way {@link ModalCommandBuilder.build} renders each control.
|
|
40
|
+
*/
|
|
41
|
+
export declare enum ModalCommandsRenderMode {
|
|
42
|
+
/**
|
|
43
|
+
* One clickable button per control, carrying its pressed (`aria-pressed`) and disabled state.
|
|
44
|
+
*
|
|
45
|
+
* Only controls reachable by pointer are rendered — checkboxes, and keyboard commands that supply
|
|
46
|
+
* {@link KeyboardCommand.onActivate}. A hint-only or keyboard-only command still registers its handler
|
|
47
|
+
* but renders no button, because a button nobody can press is worse than no button. A dropdown throws:
|
|
48
|
+
* a control that CYCLES has no button form.
|
|
49
|
+
*/
|
|
50
|
+
Buttons = "buttons",
|
|
51
|
+
/**
|
|
52
|
+
* Obsidian's instruction-bar look: the shortcut, then the purpose text with an inline checkbox or
|
|
53
|
+
* dropdown.
|
|
54
|
+
*/
|
|
55
|
+
Instructions = "instructions"
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A checkbox command shown in a modal's control strip and bound to a modifier+key shortcut that toggles
|
|
59
|
+
* it.
|
|
60
|
+
*/
|
|
61
|
+
export interface CheckboxCommand extends CommandBase {
|
|
62
|
+
/**
|
|
63
|
+
* Called when the checkbox value changes.
|
|
64
|
+
*
|
|
65
|
+
* @param isChecked - The new checked state.
|
|
66
|
+
*/
|
|
67
|
+
onChange(isChecked: boolean): void;
|
|
68
|
+
/**
|
|
69
|
+
* Called once with the created checkbox element, to initialize its state.
|
|
70
|
+
*
|
|
71
|
+
* In {@link ModalCommandsRenderMode.Buttons} mode the element is created but never appended — the
|
|
72
|
+
* button is a view of it — so the same initialization code serves both render modes.
|
|
73
|
+
*
|
|
74
|
+
* @param checkboxEl - The created checkbox element.
|
|
75
|
+
*/
|
|
76
|
+
onInit(checkboxEl: HTMLInputElement): void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The members every command shares.
|
|
80
|
+
*/
|
|
81
|
+
export interface CommandBase {
|
|
82
|
+
/**
|
|
83
|
+
* Whether the control can be used right now. When it returns `false` the control is rendered
|
|
84
|
+
* **disabled rather than removed**, so the strip does not reflow under the pointer as modes change —
|
|
85
|
+
* which on a phone means a mis-tap.
|
|
86
|
+
*
|
|
87
|
+
* Re-read by {@link ModalCommands.refresh}. When omitted, the builder never touches the control's
|
|
88
|
+
* disabled state, leaving whatever {@link CheckboxCommand.onInit} / {@link DropDownCommand.onInit} set.
|
|
89
|
+
*
|
|
90
|
+
* @returns Whether the control can be used right now.
|
|
91
|
+
*/
|
|
92
|
+
checkIsAvailable?(this: void): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* The key that activates the command.
|
|
95
|
+
*/
|
|
96
|
+
key: string;
|
|
97
|
+
/**
|
|
98
|
+
* The modifiers combined with {@link CommandBase.key}. When omitted, no modifiers are required.
|
|
99
|
+
*/
|
|
100
|
+
modifiers?: Modifier[];
|
|
101
|
+
/**
|
|
102
|
+
* The human-readable description shown next to the control.
|
|
103
|
+
*/
|
|
104
|
+
purpose: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* A dropdown command shown in a modal's control strip and bound to a modifier+key shortcut that cycles
|
|
108
|
+
* through its options.
|
|
109
|
+
*
|
|
110
|
+
* Supported in {@link ModalCommandsRenderMode.Instructions} mode only.
|
|
111
|
+
*/
|
|
112
|
+
export interface DropDownCommand extends CommandBase {
|
|
113
|
+
/**
|
|
114
|
+
* Called when the dropdown value changes.
|
|
115
|
+
*
|
|
116
|
+
* @param value - The newly selected value.
|
|
117
|
+
*/
|
|
118
|
+
onChange(value: string): void;
|
|
119
|
+
/**
|
|
120
|
+
* Called once with the created dropdown component, to initialize its options and state.
|
|
121
|
+
*
|
|
122
|
+
* @param dropdownComponent - The created dropdown component.
|
|
123
|
+
*/
|
|
124
|
+
onInit(dropdownComponent: DropdownComponent): void;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A keyboard command shown in a modal's control strip and optionally bound to a modifier+key handler.
|
|
128
|
+
*/
|
|
129
|
+
export interface KeyboardCommand extends CommandBase {
|
|
130
|
+
/**
|
|
131
|
+
* Whether the command reads as ON. Supply it for a toggle whose state lives outside the strip; omit it
|
|
132
|
+
* for an action, which does something and is done. A {@link CheckboxCommand} needs no equivalent — its
|
|
133
|
+
* checkbox element is the state.
|
|
134
|
+
*
|
|
135
|
+
* Re-read by {@link ModalCommands.refresh}.
|
|
136
|
+
*
|
|
137
|
+
* @returns Whether the command reads as ON.
|
|
138
|
+
*/
|
|
139
|
+
checkIsOn?(this: void): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* The pointer route into the same handler the shortcut runs. Required for the command to render a
|
|
142
|
+
* button in {@link ModalCommandsRenderMode.Buttons} mode — on a phone there is no modifier key to
|
|
143
|
+
* press, so this is the only way in.
|
|
144
|
+
*
|
|
145
|
+
* @param $event - The click event, so a command that picks something has one to hand on.
|
|
146
|
+
*/
|
|
147
|
+
onActivate?(this: void, $event: MouseEvent): void;
|
|
148
|
+
/**
|
|
149
|
+
* The handler invoked when the shortcut is pressed. When omitted, the command is a hint only and no
|
|
150
|
+
* scope handler is registered.
|
|
151
|
+
*
|
|
152
|
+
* @param $event - The keyboard event.
|
|
153
|
+
* @param context - The keymap context.
|
|
154
|
+
* @returns `false` to prevent Obsidian's default handling, or `void`/`true` otherwise.
|
|
155
|
+
*/
|
|
156
|
+
onKey?($event: KeyboardEvent, context: KeymapContext): boolean;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Options for {@link ModalCommandBuilder.build}.
|
|
160
|
+
*/
|
|
161
|
+
export interface ModalCommandBuilderBuildOptions {
|
|
162
|
+
/**
|
|
163
|
+
* The way each control is rendered.
|
|
164
|
+
*
|
|
165
|
+
* @default {@link ModalCommandsRenderMode.Instructions}
|
|
166
|
+
*/
|
|
167
|
+
readonly renderMode?: ModalCommandsRenderMode;
|
|
168
|
+
/**
|
|
169
|
+
* Whether to render the control strip (checkboxes, dropdowns, keyboard hints) and register the
|
|
170
|
+
* option-toggle keyboard shortcuts. When `false`, no control UI is shown and the option-toggle
|
|
171
|
+
* shortcuts are not registered; only the essential navigation key handlers remain active.
|
|
172
|
+
*
|
|
173
|
+
* @default `true`
|
|
174
|
+
*/
|
|
175
|
+
readonly shouldShowInstructions?: boolean;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The handle returned by {@link ModalCommandBuilder.build}.
|
|
179
|
+
*/
|
|
180
|
+
export interface ModalCommands {
|
|
181
|
+
/**
|
|
182
|
+
* Brings every rendered control's disabled and pressed state up to date, by re-reading
|
|
183
|
+
* {@link CommandBase.checkIsAvailable} and {@link KeyboardCommand.checkIsOn}.
|
|
184
|
+
*
|
|
185
|
+
* The strip is built once and only re-stated afterwards, because rebuilding it would replace an element
|
|
186
|
+
* the pointer may be about to click.
|
|
187
|
+
*/
|
|
188
|
+
refresh(): void;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* A bare host for a control strip: the element to render into, plus the scope to register shortcuts with.
|
|
192
|
+
*/
|
|
193
|
+
export interface ModalCommandsHost {
|
|
194
|
+
/**
|
|
195
|
+
* The element the control strip is appended to.
|
|
196
|
+
*/
|
|
197
|
+
readonly containerEl: HTMLElement;
|
|
198
|
+
/**
|
|
199
|
+
* The scope the shortcuts are registered with.
|
|
200
|
+
*/
|
|
201
|
+
readonly scope: Scope;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Every target {@link ModalCommandBuilder.build} accepts.
|
|
205
|
+
*/
|
|
206
|
+
export type ModalCommandsTarget = Modal | ModalCommandsHost | SuggestModal<unknown>;
|
|
207
|
+
/**
|
|
208
|
+
* Builds a modal's control strip from keyboard commands, interactive checkboxes, and dropdowns, then
|
|
209
|
+
* applies them to a modal via {@link ModalCommandBuilder.build}.
|
|
210
|
+
*/
|
|
211
|
+
export declare class ModalCommandBuilder {
|
|
212
|
+
private readonly entries;
|
|
213
|
+
/**
|
|
214
|
+
* Adds an interactive checkbox to the control strip, bound to a modifier+key shortcut that toggles it.
|
|
215
|
+
*
|
|
216
|
+
* @param command - The checkbox command to add.
|
|
217
|
+
* @returns The builder instance for chaining.
|
|
218
|
+
*/
|
|
219
|
+
addCheckbox(command: CheckboxCommand): this;
|
|
220
|
+
/**
|
|
221
|
+
* Adds a dropdown to the control strip, bound to a modifier+key shortcut that cycles through its
|
|
222
|
+
* options.
|
|
223
|
+
*
|
|
224
|
+
* @param command - The dropdown command to add.
|
|
225
|
+
* @returns The builder instance for chaining.
|
|
226
|
+
*/
|
|
227
|
+
addDropDown(command: DropDownCommand): this;
|
|
228
|
+
/**
|
|
229
|
+
* Adds a keyboard command to the control strip. When {@link KeyboardCommand.onKey} is provided, its
|
|
230
|
+
* handler is registered with the modal scope; otherwise the command is a hint only.
|
|
231
|
+
*
|
|
232
|
+
* @param command - The keyboard command to add.
|
|
233
|
+
* @returns The builder instance for chaining.
|
|
234
|
+
*/
|
|
235
|
+
addKeyboardCommand(command: KeyboardCommand): this;
|
|
236
|
+
/**
|
|
237
|
+
* Applies the accumulated commands to a modal. Always registers the essential navigation/action key
|
|
238
|
+
* handlers; only renders the control strip and registers the option-toggle shortcuts when
|
|
239
|
+
* {@link ModalCommandBuilderBuildOptions.shouldShowInstructions} is `true`.
|
|
240
|
+
*
|
|
241
|
+
* @param target - The modal, or the bare element + scope, to apply the commands to.
|
|
242
|
+
* @param options - The build options.
|
|
243
|
+
* @returns A handle whose {@link ModalCommands.refresh} re-states every rendered control.
|
|
244
|
+
*/
|
|
245
|
+
build(target: ModalCommandsTarget, options?: ModalCommandBuilderBuildOptions): ModalCommands;
|
|
246
|
+
private buildCommandText;
|
|
247
|
+
private getModifierString;
|
|
248
|
+
/**
|
|
249
|
+
* Resolves the element a self-created strip is appended to.
|
|
250
|
+
*
|
|
251
|
+
* A {@link Modal} carries both `modalEl` and a `containerEl` that is the OUTER `.modal-container`, so
|
|
252
|
+
* `modalEl` has to win — otherwise the strip lands outside the modal frame. Discriminated with `in`
|
|
253
|
+
* rather than a property read, because tests hand `build` a `strictProxy` mock whose `get` trap throws
|
|
254
|
+
* on unmocked members.
|
|
255
|
+
*
|
|
256
|
+
* @param target - The build target.
|
|
257
|
+
* @returns The element to append the strip to.
|
|
258
|
+
*/
|
|
259
|
+
private getStripContainerEl;
|
|
260
|
+
private renderButtons;
|
|
261
|
+
private renderInstructions;
|
|
262
|
+
/**
|
|
263
|
+
* Renders through Obsidian's own instruction bar, the way every {@link SuggestModal} consumer has always
|
|
264
|
+
* had it.
|
|
265
|
+
*
|
|
266
|
+
* @param modal - The suggest modal.
|
|
267
|
+
* @param instructions - The instructions to render.
|
|
268
|
+
* @returns The purpose element of each rendered instruction.
|
|
269
|
+
*/
|
|
270
|
+
private renderNativeInstructions;
|
|
271
|
+
/**
|
|
272
|
+
* Renders an instruction bar of the builder's own, for a host that has none.
|
|
273
|
+
*
|
|
274
|
+
* The markup mirrors what `setInstructions` produces, so Obsidian's own styling applies unchanged.
|
|
275
|
+
*
|
|
276
|
+
* @param containerEl - The element to append the bar to.
|
|
277
|
+
* @param instructions - The instructions to render.
|
|
278
|
+
* @returns The purpose element of each rendered instruction.
|
|
279
|
+
*/
|
|
280
|
+
private renderOwnInstructions;
|
|
281
|
+
}
|
|
@@ -148,12 +148,15 @@ module.exports = __toCommonJS(prompt_exports);
|
|
|
148
148
|
var import_obsidian = require('obsidian');
|
|
149
149
|
var import_async = require('../../async.cjs');
|
|
150
150
|
var import_function = require('../../function.cjs');
|
|
151
|
+
var import_object_utils = require('../../object-utils.cjs');
|
|
151
152
|
var import_css_class = require('../css-class.cjs');
|
|
152
153
|
var import_i18n = require('../i18n/i18n.cjs');
|
|
153
154
|
var import_obsidian_settings = require('../obsidian-settings.cjs');
|
|
154
155
|
var import_modal = require('./modal.cjs');
|
|
155
156
|
class PromptModal extends import_modal.ModalBase {
|
|
156
157
|
cancelButtonText;
|
|
158
|
+
commandBuilder;
|
|
159
|
+
commandsRenderMode;
|
|
157
160
|
isOkClicked = false;
|
|
158
161
|
isTouched = false;
|
|
159
162
|
okButtonText;
|
|
@@ -165,6 +168,8 @@ class PromptModal extends import_modal.ModalBase {
|
|
|
165
168
|
super(params);
|
|
166
169
|
this.addCssClasses(import_css_class.CssClass.PromptModal);
|
|
167
170
|
this.cancelButtonText = params.cancelButtonText ?? (0, import_i18n.t)(($) => $.obsidianDevUtils.buttons.cancel);
|
|
171
|
+
this.commandBuilder = params.commandBuilder ?? null;
|
|
172
|
+
this.commandsRenderMode = params.commandsRenderMode;
|
|
168
173
|
this.okButtonText = params.okButtonText ?? (0, import_i18n.t)(($) => $.obsidianDevUtils.buttons.ok);
|
|
169
174
|
this.placeholder = params.placeholder ?? "";
|
|
170
175
|
this.title = params.title ?? "";
|
|
@@ -222,6 +227,7 @@ class PromptModal extends import_modal.ModalBase {
|
|
|
222
227
|
cancelButton.setButtonText(this.cancelButtonText);
|
|
223
228
|
cancelButton.onClick(this.close.bind(this));
|
|
224
229
|
cancelButton.setClass(import_css_class.CssClass.CancelButton);
|
|
230
|
+
this.commandBuilder?.build(this, (0, import_object_utils.normalizeOptionalProperties)({ renderMode: this.commandsRenderMode }));
|
|
225
231
|
}
|
|
226
232
|
handleOk(event, textComponent) {
|
|
227
233
|
event.preventDefault();
|
|
@@ -250,4 +256,4 @@ async function prompt(params) {
|
|
|
250
256
|
0 && (module.exports = {
|
|
251
257
|
prompt
|
|
252
258
|
});
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9wcm9tcHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBkaXNwbGF5aW5nIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBmdW5jdGlvbiB0byBkaXNwbGF5IGEgbW9kYWwgdGhhdCBwcm9tcHRzIHRoZSB1c2VyIGZvciBpbnB1dC4gVGhlIG1vZGFsIGluY2x1ZGVzIFwiT0tcIiBhbmQgXCJDYW5jZWxcIiBidXR0b25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgVGV4dENvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgTW9kYWxCYXNlQ29uc3RydWN0b3JQYXJhbXMsXG4gIE1vZGFsUGFyYW1zQmFzZVxufSBmcm9tICcuL21vZGFsLnRzJztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBpc1NwZWxsY2hlY2tFbmFibGVkIH0gZnJvbSAnLi4vb2JzaWRpYW4tc2V0dGluZ3MudHMnO1xuaW1wb3J0IHtcbiAgTW9kYWxCYXNlLFxuICBzaG93TW9kYWxcbn0gZnJvbSAnLi9tb2RhbC50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByb21wdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbXB0UGFyYW1zIGV4dGVuZHMgTW9kYWxQYXJhbXNCYXNlIHtcbiAgLyoqXG4gICAqIEEgdGV4dCBmb3IgdGhlIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZWZhdWx0IHZhbHVlIHRvIHByZS1maWxsIHRoZSBpbnB1dCBmaWVsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHRleHQgZm9yIHRoZSBcIk9LXCIgYnV0dG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb2tCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dCBmaWVsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgdGl0bGUgb2YgdGhlIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGlucHV0IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5wdXQgdmFsdWUgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQsIG9yIGBudWxsYCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqL1xuICB2YWx1ZVZhbGlkYXRvcj8odGhpczogdm9pZCwgdmFsdWU6IHN0cmluZyk6IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj47XG59XG5cbnR5cGUgUHJvbXB0TW9kYWxDb25zdHJ1Y3RvclBhcmFtcyA9IE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zPG51bGwgfCBzdHJpbmc+ICYgUHJvbXB0UGFyYW1zO1xuXG5jbGFzcyBQcm9tcHRNb2RhbCBleHRlbmRzIE1vZGFsQmFzZTxudWxsIHwgc3RyaW5nPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FuY2VsQnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIGlzT2tDbGlja2VkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNUb3VjaGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgb2tCdXR0b25UZXh0OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbiAgcHJpdmF0ZSB2YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlVmFsaWRhdG9yOiAodmFsdWU6IHN0cmluZykgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQcm9tcHRNb2RhbENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLmFkZENzc0NsYXNzZXMoQ3NzQ2xhc3MuUHJvbXB0TW9kYWwpO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uVGV4dCA9IHBhcmFtcy5jYW5jZWxCdXR0b25UZXh0ID8/IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5idXR0b25zLmNhbmNlbCk7XG4gICAgdGhpcy5va0J1dHRvblRleHQgPSBwYXJhbXMub2tCdXR0b25UZXh0ID8/IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5idXR0b25zLm9rKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGFyYW1zLnBsYWNlaG9sZGVyID8/ICcnO1xuICAgIHRoaXMudGl0bGUgPSBwYXJhbXMudGl0bGUgPz8gJyc7XG4gICAgdGhpcy52YWx1ZVZhbGlkYXRvciA9IHBhcmFtcy52YWx1ZVZhbGlkYXRvciA/PyBub29wO1xuICAgIHRoaXMudmFsdWUgPSBwYXJhbXMuZGVmYXVsdFZhbHVlID8/ICcnO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh0aGlzLmlzT2tDbGlja2VkID8gdGhpcy52YWx1ZSA6IG51bGwpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLnRpdGxlRWwuc2V0VGV4dCh0aGlzLnRpdGxlKTtcbiAgICBjb25zdCB0ZXh0Q29tcG9uZW50ID0gbmV3IFRleHRDb21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIGNvbnN0IGlucHV0RWwgPSB0ZXh0Q29tcG9uZW50LmlucHV0RWw7XG4gICAgLy8gYEFic3RyYWN0VGV4dENvbXBvbmVudGAgZm9yY2VzIGBzcGVsbGNoZWNrPVwiZmFsc2VcImAgb24gZXZlcnkgdGV4dCBjb21wb25lbnQsIHNvIHRoZSB2YXVsdCBzZXR0aW5nIGhhcyB0byBiZSByZS1hcHBsaWVkIGhlcmUuXG4gICAgLy8gT2JzaWRpYW4ncyBvd24gZmlsZSBleHBsb3JlciByZWFkcyB0aGUgc2FtZSBjb25maWcgd2hlbiBpdCBzdGFydHMgYW4gaW5saW5lIHJlbmFtZS5cbiAgICBpbnB1dEVsLnNldEF0dHJpYnV0ZSgnc3BlbGxjaGVjaycsIFN0cmluZyhpc1NwZWxsY2hlY2tFbmFibGVkKHRoaXMuYXBwKSkpO1xuXG4gICAgY29uc3QgdmFsaWRhdGUgPSBhc3luYyAoc2hvdWxkUmVwb3J0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBhd2FpdCB0aGlzLnZhbHVlVmFsaWRhdG9yKGlucHV0RWwudmFsdWUpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlucHV0RWwuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3JNZXNzYWdlID8/ICcnKTtcbiAgICAgIGlmIChzaG91bGRSZXBvcnQpIHtcbiAgICAgICAgaW5wdXRFbC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIHRoaXMubWFya1RvdWNoZWQoaW5wdXRFbCk7XG4gICAgICBhd2FpdCB2YWxpZGF0ZSh0cnVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlRm9jdXMgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCB2YWxpZGF0ZSh0aGlzLmlzVG91Y2hlZCk7XG4gICAgfTtcblxuICAgIHRleHRDb21wb25lbnQuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgdGV4dENvbXBvbmVudC5pbnB1dEVsLnNlbGVjdCgpO1xuICAgIHRleHRDb21wb25lbnQuc2V0UGxhY2Vob2xkZXIodGhpcy5wbGFjZWhvbGRlcik7XG4gICAgaW5wdXRFbC5hZGRDbGFzcyhDc3NDbGFzcy5UZXh0Qm94KTtcbiAgICAvLyBUaGUgbW9kYWwgb3BlbnMgaW52YWxpZCBieSBkZXNpZ24gKHNlZSBiZWxvdyksIHNvIHRoZSBpbnZhbGlkIHN0eWxpbmcgaXMgZGVmZXJyZWQgdW50aWwgdG91Y2hlZC5cbiAgICBpbnB1dEVsLmFkZENsYXNzKENzc0NsYXNzLlVudG91Y2hlZCk7XG4gICAgdGV4dENvbXBvbmVudC5vbkNoYW5nZSgobmV3VmFsdWUpID0+IHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9KTtcbiAgICBpbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPayhldmVudCwgdGV4dENvbXBvbmVudCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBjb252ZXJ0QXN5bmNUb1N5bmMoaGFuZGxlSW5wdXQpKTtcbiAgICBpbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgY29udmVydEFzeW5jVG9TeW5jKGhhbmRsZUZvY3VzKSk7XG4gICAgLy8gVGhlIG1vZGFsIG11c3Qgc3RhcnQgb3V0IGludmFsaWQgc28gT0sgcmVmdXNlcywgYnV0IHRoZSB2YWxpZGl0eSBpcyBub3QgcmVwb3J0ZWQgdW50aWwgdGhlIHVzZXIgdHlwZXMgb3Igc3VibWl0cy5cbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB2YWxpZGF0ZShmYWxzZSkpO1xuICAgIGNvbnN0IG9rQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgb2tCdXR0b24uc2V0QnV0dG9uVGV4dCh0aGlzLm9rQnV0dG9uVGV4dCk7XG4gICAgb2tCdXR0b24uc2V0Q3RhKCk7XG4gICAgb2tCdXR0b24ub25DbGljaygoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlT2soZXZlbnQsIHRleHRDb21wb25lbnQpO1xuICAgIH0pO1xuICAgIG9rQnV0dG9uLnNldENsYXNzKENzc0NsYXNzLk9rQnV0dG9uKTtcbiAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRoaXMuY29udGVudEVsKTtcbiAgICBjYW5jZWxCdXR0b24uc2V0QnV0dG9uVGV4dCh0aGlzLmNhbmNlbEJ1dHRvblRleHQpO1xuICAgIGNhbmNlbEJ1dHRvbi5vbkNsaWNrKHRoaXMuY2xvc2UuYmluZCh0aGlzKSk7XG4gICAgY2FuY2VsQnV0dG9uLnNldENsYXNzKENzc0NsYXNzLkNhbmNlbEJ1dHRvbik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU9rKGV2ZW50OiBFdmVudCwgdGV4dENvbXBvbmVudDogVGV4dENvbXBvbmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0ZXh0Q29tcG9uZW50LmlucHV0RWwuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKHRleHRDb21wb25lbnQuaW5wdXRFbCk7XG4gICAgICB0ZXh0Q29tcG9uZW50LmlucHV0RWwucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzT2tDbGlja2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtUb3VjaGVkKGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgaW5wdXRFbC5yZW1vdmVDbGFzcyhDc3NDbGFzcy5VbnRvdWNoZWQpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheXMgYSBwcm9tcHQgbW9kYWwgaW4gT2JzaWRpYW4gdG8gZ2V0IHVzZXIgaW5wdXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJvbXB0IG1vZGFsLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB1c2VyIGlucHV0IG9yIGBudWxsYCBpZiB0aGUgcHJvbXB0IHdhcyBjYW5jZWxsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9tcHQocGFyYW1zOiBQcm9tcHRQYXJhbXMpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHNob3dNb2RhbDxudWxsIHwgc3RyaW5nPigocHJvbWlzZVJlc29sdmUpID0+XG4gICAgbmV3IFByb21wdE1vZGFsKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHByb21pc2VSZXNvbHZlXG4gICAgfSlcbiAgKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUEsc0JBR087QUFRUCxtQkFHTztBQUNQLHNCQUFxQjtBQUNyQix1QkFBeUI7QUFDekIsa0JBQWtCO0FBQ2xCLCtCQUFvQztBQUNwQyxtQkFHTztBQWdEUCxNQUFNLG9CQUFvQix1QkFBeUI7QUFBQSxFQUNoQztBQUFBLEVBQ1QsY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ0g7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ1Q7QUFBQSxFQUNTO0FBQUEsRUFFVixZQUFZLFFBQXNDO0FBQ3ZELFVBQU0sTUFBTTtBQUNaLFNBQUssY0FBYywwQkFBUyxXQUFXO0FBQ3ZDLFNBQUssbUJBQW1CLE9BQU8sd0JBQW9CLGVBQUUsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLFFBQVEsTUFBTTtBQUM3RixTQUFLLGVBQWUsT0FBTyxvQkFBZ0IsZUFBRSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsUUFBUSxFQUFFO0FBQ2pGLFNBQUssY0FBYyxPQUFPLGVBQWU7QUFDekMsU0FBSyxRQUFRLE9BQU8sU0FBUztBQUM3QixTQUFLLGlCQUFpQixPQUFPLGtCQUFrQjtBQUMvQyxTQUFLLFFBQVEsT0FBTyxnQkFBZ0I7QUFBQSxFQUN0QztBQUFBLEVBRWdCLFVBQWdCO0FBQzlCLFNBQUssZUFBZSxLQUFLLGNBQWMsS0FBSyxRQUFRLElBQUk7QUFBQSxFQUMxRDtBQUFBLEVBRWdCLFNBQWU7QUFDN0IsU0FBSyxRQUFRLFFBQVEsS0FBSyxLQUFLO0FBQy9CLFVB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
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9wcm9tcHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBkaXNwbGF5aW5nIGEgcHJvbXB0IG1vZGFsIGluIE9ic2lkaWFuLlxuICpcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBmdW5jdGlvbiB0byBkaXNwbGF5IGEgbW9kYWwgdGhhdCBwcm9tcHRzIHRoZSB1c2VyIGZvciBpbnB1dC4gVGhlIG1vZGFsIGluY2x1ZGVzIFwiT0tcIiBhbmQgXCJDYW5jZWxcIiBidXR0b25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgVGV4dENvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi8uLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgTW9kYWxDb21tYW5kQnVpbGRlcixcbiAgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucyxcbiAgTW9kYWxDb21tYW5kc1JlbmRlck1vZGVcbn0gZnJvbSAnLi9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMnO1xuaW1wb3J0IHR5cGUge1xuICBNb2RhbEJhc2VDb25zdHJ1Y3RvclBhcmFtcyxcbiAgTW9kYWxQYXJhbXNCYXNlXG59IGZyb20gJy4vbW9kYWwudHMnO1xuXG5pbXBvcnQge1xuICBjb252ZXJ0QXN5bmNUb1N5bmMsXG4gIGludm9rZUFzeW5jU2FmZWx5XG59IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8uLi9mdW5jdGlvbi50cyc7XG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICcuLi8uLi9vYmplY3QtdXRpbHMudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBpc1NwZWxsY2hlY2tFbmFibGVkIH0gZnJvbSAnLi4vb2JzaWRpYW4tc2V0dGluZ3MudHMnO1xuaW1wb3J0IHtcbiAgTW9kYWxCYXNlLFxuICBzaG93TW9kYWxcbn0gZnJvbSAnLi9tb2RhbC50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHByb21wdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbXB0UGFyYW1zIGV4dGVuZHMgTW9kYWxQYXJhbXNCYXNlIHtcbiAgLyoqXG4gICAqIEEgdGV4dCBmb3IgdGhlIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0cmEgY29udHJvbHMgXHUyMDE0IGNoZWNrYm94ZXMsIGRyb3Bkb3ducyBhbmQga2V5Ym9hcmQgc2hvcnRjdXRzIFx1MjAxNCByZW5kZXJlZCBhcyBhIHN0cmlwIGFsb25nIHRoZSBib3R0b21cbiAgICogb2YgdGhlIG1vZGFsLCBzbyBhIGNhbGxlciBnZXRzIGEgdGV4dCBpbnB1dCBwbHVzIG9wdGlvbnMgd2l0aCBubyBiZXNwb2tlIG1vZGFsIG9mIGl0cyBvd24uXG4gICAqXG4gICAqIEhhbmQgaXQgYSBjb25maWd1cmVkIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyfTsgdGhlIG1vZGFsIGJ1aWxkcyBpdC4gVGhlIHN0cmlwIGlzIHJlbmRlcmVkIGFmdGVyXG4gICAqIHRoZSBidXR0b25zLCBzbyBpdCBzaXRzIGFsb25nIHRoZSBib3R0b20gZWRnZSB3aGVyZSBhIGBTdWdnZXN0TW9kYWxgJ3MgaW5zdHJ1Y3Rpb24gYmFyIHNpdHMuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kQnVpbGRlcj86IE1vZGFsQ29tbWFuZEJ1aWxkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB3YXkge0BsaW5rIFByb21wdFBhcmFtcy5jb21tYW5kQnVpbGRlcn0ncyBjb250cm9scyBhcmUgcmVuZGVyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnNgXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kc1JlbmRlck1vZGU/OiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZTtcblxuICAvKipcbiAgICogQSBkZWZhdWx0IHZhbHVlIHRvIHByZS1maWxsIHRoZSBpbnB1dCBmaWVsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHRleHQgZm9yIHRoZSBcIk9LXCIgYnV0dG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb2tCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dCBmaWVsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgdGl0bGUgb2YgdGhlIG1vZGFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGlucHV0IHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5wdXQgdmFsdWUgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQsIG9yIGBudWxsYCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAqL1xuICB2YWx1ZVZhbGlkYXRvcj8odGhpczogdm9pZCwgdmFsdWU6IHN0cmluZyk6IFByb21pc2FibGU8TWF5YmVSZXR1cm48c3RyaW5nPj47XG59XG5cbnR5cGUgUHJvbXB0TW9kYWxDb25zdHJ1Y3RvclBhcmFtcyA9IE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zPG51bGwgfCBzdHJpbmc+ICYgUHJvbXB0UGFyYW1zO1xuXG5jbGFzcyBQcm9tcHRNb2RhbCBleHRlbmRzIE1vZGFsQmFzZTxudWxsIHwgc3RyaW5nPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FuY2VsQnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbW1hbmRCdWlsZGVyOiBNb2RhbENvbW1hbmRCdWlsZGVyIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kc1JlbmRlck1vZGU6IE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzT2tDbGlja2VkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNUb3VjaGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgb2tCdXR0b25UZXh0OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbiAgcHJpdmF0ZSB2YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlVmFsaWRhdG9yOiAodmFsdWU6IHN0cmluZykgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxzdHJpbmc+PjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQcm9tcHRNb2RhbENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLmFkZENzc0NsYXNzZXMoQ3NzQ2xhc3MuUHJvbXB0TW9kYWwpO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uVGV4dCA9IHBhcmFtcy5jYW5jZWxCdXR0b25UZXh0ID8/IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5idXR0b25zLmNhbmNlbCk7XG4gICAgdGhpcy5jb21tYW5kQnVpbGRlciA9IHBhcmFtcy5jb21tYW5kQnVpbGRlciA/PyBudWxsO1xuICAgIHRoaXMuY29tbWFuZHNSZW5kZXJNb2RlID0gcGFyYW1zLmNvbW1hbmRzUmVuZGVyTW9kZTtcbiAgICB0aGlzLm9rQnV0dG9uVGV4dCA9IHBhcmFtcy5va0J1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmJ1dHRvbnMub2spO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwYXJhbXMucGxhY2Vob2xkZXIgPz8gJyc7XG4gICAgdGhpcy50aXRsZSA9IHBhcmFtcy50aXRsZSA/PyAnJztcbiAgICB0aGlzLnZhbHVlVmFsaWRhdG9yID0gcGFyYW1zLnZhbHVlVmFsaWRhdG9yID8/IG5vb3A7XG4gICAgdGhpcy52YWx1ZSA9IHBhcmFtcy5kZWZhdWx0VmFsdWUgPz8gJyc7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnByb21pc2VSZXNvbHZlKHRoaXMuaXNPa0NsaWNrZWQgPyB0aGlzLnZhbHVlIDogbnVsbCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMudGl0bGVFbC5zZXRUZXh0KHRoaXMudGl0bGUpO1xuICAgIGNvbnN0IHRleHRDb21wb25lbnQgPSBuZXcgVGV4dENvbXBvbmVudCh0aGlzLmNvbnRlbnRFbCk7XG4gICAgY29uc3QgaW5wdXRFbCA9IHRleHRDb21wb25lbnQuaW5wdXRFbDtcbiAgICAvLyBgQWJzdHJhY3RUZXh0Q29tcG9uZW50YCBmb3JjZXMgYHNwZWxsY2hlY2s9XCJmYWxzZVwiYCBvbiBldmVyeSB0ZXh0IGNvbXBvbmVudCwgc28gdGhlIHZhdWx0IHNldHRpbmcgaGFzIHRvIGJlIHJlLWFwcGxpZWQgaGVyZS5cbiAgICAvLyBPYnNpZGlhbidzIG93biBmaWxlIGV4cGxvcmVyIHJlYWRzIHRoZSBzYW1lIGNvbmZpZyB3aGVuIGl0IHN0YXJ0cyBhbiBpbmxpbmUgcmVuYW1lLlxuICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKCdzcGVsbGNoZWNrJywgU3RyaW5nKGlzU3BlbGxjaGVja0VuYWJsZWQodGhpcy5hcHApKSk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZSA9IGFzeW5jIChzaG91bGRSZXBvcnQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGF3YWl0IHRoaXMudmFsdWVWYWxpZGF0b3IoaW5wdXRFbC52YWx1ZSkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaW5wdXRFbC5zZXRDdXN0b21WYWxpZGl0eShlcnJvck1lc3NhZ2UgPz8gJycpO1xuICAgICAgaWYgKHNob3VsZFJlcG9ydCkge1xuICAgICAgICBpbnB1dEVsLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUlucHV0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgdGhpcy5tYXJrVG91Y2hlZChpbnB1dEVsKTtcbiAgICAgIGF3YWl0IHZhbGlkYXRlKHRydWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVGb2N1cyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGF3YWl0IHZhbGlkYXRlKHRoaXMuaXNUb3VjaGVkKTtcbiAgICB9O1xuXG4gICAgdGV4dENvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB0ZXh0Q29tcG9uZW50LmlucHV0RWwuc2VsZWN0KCk7XG4gICAgdGV4dENvbXBvbmVudC5zZXRQbGFjZWhvbGRlcih0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICBpbnB1dEVsLmFkZENsYXNzKENzc0NsYXNzLlRleHRCb3gpO1xuICAgIC8vIFRoZSBtb2RhbCBvcGVucyBpbnZhbGlkIGJ5IGRlc2lnbiAoc2VlIGJlbG93KSwgc28gdGhlIGludmFsaWQgc3R5bGluZyBpcyBkZWZlcnJlZCB1bnRpbCB0b3VjaGVkLlxuICAgIGlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuVW50b3VjaGVkKTtcbiAgICB0ZXh0Q29tcG9uZW50Lm9uQ2hhbmdlKChuZXdWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0pO1xuICAgIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICB0aGlzLmhhbmRsZU9rKGV2ZW50LCB0ZXh0Q29tcG9uZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGNvbnZlcnRBc3luY1RvU3luYyhoYW5kbGVJbnB1dCkpO1xuICAgIGlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBjb252ZXJ0QXN5bmNUb1N5bmMoaGFuZGxlRm9jdXMpKTtcbiAgICAvLyBUaGUgbW9kYWwgbXVzdCBzdGFydCBvdXQgaW52YWxpZCBzbyBPSyByZWZ1c2VzLCBidXQgdGhlIHZhbGlkaXR5IGlzIG5vdCByZXBvcnRlZCB1bnRpbCB0aGUgdXNlciB0eXBlcyBvciBzdWJtaXRzLlxuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHZhbGlkYXRlKGZhbHNlKSk7XG4gICAgY29uc3Qgb2tCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRoaXMuY29udGVudEVsKTtcbiAgICBva0J1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMub2tCdXR0b25UZXh0KTtcbiAgICBva0J1dHRvbi5zZXRDdGEoKTtcbiAgICBva0J1dHRvbi5vbkNsaWNrKChldmVudCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVPayhldmVudCwgdGV4dENvbXBvbmVudCk7XG4gICAgfSk7XG4gICAgb2tCdXR0b24uc2V0Q2xhc3MoQ3NzQ2xhc3MuT2tCdXR0b24pO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250ZW50RWwpO1xuICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KHRoaXMuY2FuY2VsQnV0dG9uVGV4dCk7XG4gICAgY2FuY2VsQnV0dG9uLm9uQ2xpY2sodGhpcy5jbG9zZS5iaW5kKHRoaXMpKTtcbiAgICBjYW5jZWxCdXR0b24uc2V0Q2xhc3MoQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uKTtcblxuICAgIC8vIEJ1aWx0IGxhc3Qgc28gdGhlIHN0cmlwIGxhbmRzIGFsb25nIHRoZSBtb2RhbCdzIGJvdHRvbSBlZGdlLCB3aGVyZSBhIGBTdWdnZXN0TW9kYWxgJ3MgaW5zdHJ1Y3Rpb25cbiAgICAvLyBCYXIgc2l0cy5cbiAgICB0aGlzLmNvbW1hbmRCdWlsZGVyPy5idWlsZCh0aGlzLCBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8TW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucz4oeyByZW5kZXJNb2RlOiB0aGlzLmNvbW1hbmRzUmVuZGVyTW9kZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU9rKGV2ZW50OiBFdmVudCwgdGV4dENvbXBvbmVudDogVGV4dENvbXBvbmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0ZXh0Q29tcG9uZW50LmlucHV0RWwuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKHRleHRDb21wb25lbnQuaW5wdXRFbCk7XG4gICAgICB0ZXh0Q29tcG9uZW50LmlucHV0RWwucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzT2tDbGlja2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtUb3VjaGVkKGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgaW5wdXRFbC5yZW1vdmVDbGFzcyhDc3NDbGFzcy5VbnRvdWNoZWQpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheXMgYSBwcm9tcHQgbW9kYWwgaW4gT2JzaWRpYW4gdG8gZ2V0IHVzZXIgaW5wdXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJvbXB0IG1vZGFsLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB1c2VyIGlucHV0IG9yIGBudWxsYCBpZiB0aGUgcHJvbXB0IHdhcyBjYW5jZWxsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9tcHQocGFyYW1zOiBQcm9tcHRQYXJhbXMpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHNob3dNb2RhbDxudWxsIHwgc3RyaW5nPigocHJvbWlzZVJlc29sdmUpID0+XG4gICAgbmV3IFByb21wdE1vZGFsKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHByb21pc2VSZXNvbHZlXG4gICAgfSlcbiAgKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUEsc0JBR087QUFhUCxtQkFHTztBQUNQLHNCQUFxQjtBQUNyQiwwQkFBNEM7QUFDNUMsdUJBQXlCO0FBQ3pCLGtCQUFrQjtBQUNsQiwrQkFBb0M7QUFDcEMsbUJBR087QUFnRVAsTUFB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
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { Promisable } from 'type-fest' with { 'resolution-mode': 'import' };
|
|
10
10
|
import type { MaybeReturn } from '../../type.cjs';
|
|
11
|
+
import type { ModalCommandBuilder, ModalCommandsRenderMode } from './modal-command-builder.cjs';
|
|
11
12
|
import type { ModalParamsBase } from './modal.cjs';
|
|
12
13
|
/**
|
|
13
14
|
* Options for {@link prompt}.
|
|
@@ -17,6 +18,20 @@ export interface PromptParams extends ModalParamsBase {
|
|
|
17
18
|
* A text for the "Cancel" button.
|
|
18
19
|
*/
|
|
19
20
|
readonly cancelButtonText?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Extra controls — checkboxes, dropdowns and keyboard shortcuts — rendered as a strip along the bottom
|
|
23
|
+
* of the modal, so a caller gets a text input plus options with no bespoke modal of its own.
|
|
24
|
+
*
|
|
25
|
+
* Hand it a configured {@link ModalCommandBuilder}; the modal builds it. The strip is rendered after
|
|
26
|
+
* the buttons, so it sits along the bottom edge where a `SuggestModal`'s instruction bar sits.
|
|
27
|
+
*/
|
|
28
|
+
readonly commandBuilder?: ModalCommandBuilder;
|
|
29
|
+
/**
|
|
30
|
+
* The way {@link PromptParams.commandBuilder}'s controls are rendered.
|
|
31
|
+
*
|
|
32
|
+
* @default `ModalCommandsRenderMode.Instructions`
|
|
33
|
+
*/
|
|
34
|
+
readonly commandsRenderMode?: ModalCommandsRenderMode;
|
|
20
35
|
/**
|
|
21
36
|
* A default value to pre-fill the input field.
|
|
22
37
|
*
|
|
@@ -145,144 +145,10 @@ __export(suggest_modal_command_builder_exports, {
|
|
|
145
145
|
SuggestModalCommandBuilder: () => SuggestModalCommandBuilder
|
|
146
146
|
});
|
|
147
147
|
module.exports = __toCommonJS(suggest_modal_command_builder_exports);
|
|
148
|
-
var
|
|
149
|
-
const
|
|
150
|
-
["Enter", "\u21B5"],
|
|
151
|
-
["UpDown", "\u2191\u2193"]
|
|
152
|
-
]);
|
|
153
|
-
class SuggestModalCommandBuilder {
|
|
154
|
-
instructions = [];
|
|
155
|
-
/**
|
|
156
|
-
* Adds an interactive checkbox to the instruction bar, bound to a modifier+key shortcut that toggles
|
|
157
|
-
* it.
|
|
158
|
-
*
|
|
159
|
-
* @param command - The checkbox command to add.
|
|
160
|
-
* @returns The builder instance for chaining.
|
|
161
|
-
*/
|
|
162
|
-
addCheckbox(command) {
|
|
163
|
-
this.instructions.push({
|
|
164
|
-
command: this.buildCommand(command),
|
|
165
|
-
init: (purposeEl, scope) => {
|
|
166
|
-
const checkboxEl = purposeEl.createEl("input", { type: "checkbox" });
|
|
167
|
-
command.onInit(checkboxEl);
|
|
168
|
-
checkboxEl.addEventListener("change", () => {
|
|
169
|
-
command.onChange(checkboxEl.checked);
|
|
170
|
-
});
|
|
171
|
-
scope.register(command.modifiers ?? [], command.key, () => {
|
|
172
|
-
if (checkboxEl.disabled) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
checkboxEl.checked = !checkboxEl.checked;
|
|
176
|
-
checkboxEl.trigger("change");
|
|
177
|
-
});
|
|
178
|
-
},
|
|
179
|
-
purpose: command.purpose
|
|
180
|
-
});
|
|
181
|
-
return this;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Adds a dropdown to the instruction bar, bound to a modifier+key shortcut that cycles through its
|
|
185
|
-
* options.
|
|
186
|
-
*
|
|
187
|
-
* @param command - The dropdown command to add.
|
|
188
|
-
* @returns The builder instance for chaining.
|
|
189
|
-
*/
|
|
190
|
-
addDropDown(command) {
|
|
191
|
-
this.instructions.push({
|
|
192
|
-
command: this.buildCommand(command),
|
|
193
|
-
init: (purposeEl, scope) => {
|
|
194
|
-
purposeEl.appendText(" ");
|
|
195
|
-
const dropdownComponent = new import_obsidian.DropdownComponent(purposeEl);
|
|
196
|
-
command.onInit(dropdownComponent);
|
|
197
|
-
dropdownComponent.onChange((value) => {
|
|
198
|
-
command.onChange(value);
|
|
199
|
-
});
|
|
200
|
-
scope.register(command.modifiers ?? [], command.key, () => {
|
|
201
|
-
if (dropdownComponent.disabled) {
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
const selectEl = dropdownComponent.selectEl;
|
|
205
|
-
selectEl.selectedIndex = (selectEl.selectedIndex + 1) % selectEl.options.length;
|
|
206
|
-
selectEl.trigger("change");
|
|
207
|
-
});
|
|
208
|
-
},
|
|
209
|
-
purpose: command.purpose
|
|
210
|
-
});
|
|
211
|
-
return this;
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Adds a keyboard command to the instruction bar. When {@link KeyboardCommand.onKey} is provided, its
|
|
215
|
-
* handler is registered with the modal scope; otherwise the command is a hint only.
|
|
216
|
-
*
|
|
217
|
-
* @param command - The keyboard command to add.
|
|
218
|
-
* @returns The builder instance for chaining.
|
|
219
|
-
*/
|
|
220
|
-
addKeyboardCommand(command) {
|
|
221
|
-
this.instructions.push({
|
|
222
|
-
command: this.buildCommand(command),
|
|
223
|
-
purpose: command.purpose,
|
|
224
|
-
registerScope: (scope) => {
|
|
225
|
-
if (command.onKey) {
|
|
226
|
-
scope.register(command.modifiers ?? [], command.key, command.onKey.bind(command));
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
return this;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Applies the accumulated commands to a modal. Always registers the essential navigation/action key
|
|
234
|
-
* handlers; only renders the instruction UI and registers the option-toggle shortcuts when
|
|
235
|
-
* {@link SuggestModalCommandBuilderBuildOptions.shouldShowInstructions} is `true`.
|
|
236
|
-
*
|
|
237
|
-
* @param modal - The modal to apply the commands to.
|
|
238
|
-
* @param options - The build options.
|
|
239
|
-
*/
|
|
240
|
-
build(modal, options = {}) {
|
|
241
|
-
const { shouldShowInstructions = true } = options;
|
|
242
|
-
for (const instruction of this.instructions) {
|
|
243
|
-
instruction.registerScope?.(modal.scope);
|
|
244
|
-
}
|
|
245
|
-
if (!shouldShowInstructions) {
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
modal.setInstructions(this.instructions);
|
|
249
|
-
const purposeEls = [...modal.instructionsEl.findAll(".prompt-instruction > span:nth-child(2)")];
|
|
250
|
-
for (const [index, purposeEl] of purposeEls.entries()) {
|
|
251
|
-
this.instructions[index]?.init?.(purposeEl, modal.scope);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
buildCommand(entry) {
|
|
255
|
-
let command = KEYS_MAP.get(entry.key) ?? entry.key;
|
|
256
|
-
for (const modifier of entry.modifiers ?? []) {
|
|
257
|
-
command = `${this.getModifierString(modifier)} ${command}`;
|
|
258
|
-
}
|
|
259
|
-
return command;
|
|
260
|
-
}
|
|
261
|
-
getModifierString(modifier) {
|
|
262
|
-
switch (modifier) {
|
|
263
|
-
case "Alt": {
|
|
264
|
-
return "alt";
|
|
265
|
-
}
|
|
266
|
-
case "Ctrl": {
|
|
267
|
-
return "ctrl";
|
|
268
|
-
}
|
|
269
|
-
case "Meta": {
|
|
270
|
-
return import_obsidian.Platform.isMacOS ? "cmd" : "win";
|
|
271
|
-
}
|
|
272
|
-
case "Mod": {
|
|
273
|
-
return import_obsidian.Platform.isMacOS ? "cmd" : "ctrl";
|
|
274
|
-
}
|
|
275
|
-
case "Shift": {
|
|
276
|
-
return "shift";
|
|
277
|
-
}
|
|
278
|
-
default: {
|
|
279
|
-
return modifier;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
148
|
+
var import_modal_command_builder = require('./modal-command-builder.cjs');
|
|
149
|
+
const SuggestModalCommandBuilder = import_modal_command_builder.ModalCommandBuilder;
|
|
284
150
|
// Annotate the CommonJS export names for ESM import in node:
|
|
285
151
|
0 && (module.exports = {
|
|
286
152
|
SuggestModalCommandBuilder
|
|
287
153
|
});
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9zdWdnZXN0LW1vZGFsLWNvbW1hbmQtYnVpbGRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgYnVpbGRlciBmb3IgYSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSdzIGluc3RydWN0aW9uIGJhci5cbiAqXG4gKiB7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXJ9IGFzc2VtYmxlcyB0aGUgaW5zdHJ1Y3Rpb24gYmFyIHNob3duIGF0IHRoZSBib3R0b20gb2YgYVxuICoge0BsaW5rIFN1Z2dlc3RNb2RhbH06IGtleWJvYXJkLWNvbW1hbmQgaGludHMgKHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5hZGRLZXlib2FyZENvbW1hbmR9KSxcbiAqIGludGVyYWN0aXZlIGNoZWNrYm94ZXMgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXRcbiAqICh7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIuYWRkQ2hlY2tib3h9KSwgYW5kIGRyb3Bkb3ducyBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dFxuICogKHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5hZGREcm9wRG93bn0pLiBDaGFpbiB0aGUgYGFkZCpgIGNhbGxzLCB0aGVuIGFwcGx5IGV2ZXJ5dGhpbmcgdG8gYVxuICogbW9kYWwgd2l0aCB7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIuYnVpbGR9OlxuICpcbiAqIGBgYHRzXG4gKiBuZXcgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIoKVxuICogICAuYWRkS2V5Ym9hcmRDb21tYW5kKHsga2V5OiAnRW50ZXInLCBtb2RpZmllcnM6IFsnTW9kJ10sIG9uS2V5LCBwdXJwb3NlOiAndG8gY3JlYXRlJyB9KVxuICogICAuYWRkQ2hlY2tib3goeyBrZXk6ICcxJywgbW9kaWZpZXJzOiBbJ0FsdCddLCBvbkNoYW5nZSwgb25Jbml0LCBwdXJwb3NlOiAnRml4IGZvb3Rub3RlcycgfSlcbiAqICAgLmJ1aWxkKG1vZGFsKTtcbiAqIGBgYFxuICpcbiAqIHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0gYWx3YXlzIHJlZ2lzdGVycyB0aGUgZXNzZW50aWFsIG5hdmlnYXRpb24vYWN0aW9uIGtleVxuICogaGFuZGxlcnMsIGJ1dCBvbmx5IHJlbmRlcnMgdGhlIGluc3RydWN0aW9uIFVJIGFuZCByZWdpc3RlcnMgdGhlIG9wdGlvbi10b2dnbGUgc2hvcnRjdXRzIHdoZW5cbiAqIHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEluc3RydWN0aW9uLFxuICBLZXltYXBDb250ZXh0LFxuICBNb2RpZmllcixcbiAgU2NvcGUsXG4gIFN1Z2dlc3RNb2RhbFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIERyb3Bkb3duQ29tcG9uZW50LFxuICBQbGF0Zm9ybVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmNvbnN0IEtFWVNfTUFQID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbJ0VudGVyJywgJ1x1MjFCNSddLFxuICBbJ1VwRG93bicsICdcdTIxOTFcdTIxOTMnXVxuXSk7XG5cbi8qKlxuICogQSBjaGVja2JveCBjb21tYW5kIHNob3duIGluIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0ncyBpbnN0cnVjdGlvbiBiYXIgYW5kIGJvdW5kIHRvIGEgbW9kaWZpZXIra2V5XG4gKiBzaG9ydGN1dCB0aGF0IHRvZ2dsZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tib3hDb21tYW5kIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdGhhdCB0b2dnbGVzIHRoZSBjaGVja2JveC5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXJzIGNvbWJpbmVkIHdpdGgge0BsaW5rIENoZWNrYm94Q29tbWFuZC5rZXl9IHRvIHRvZ2dsZSB0aGUgY2hlY2tib3guIFdoZW4gb21pdHRlZCwgbm9cbiAgICogbW9kaWZpZXJzIGFyZSByZXF1aXJlZC5cbiAgICovXG4gIG1vZGlmaWVycz86IE1vZGlmaWVyW107XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjaGVja2JveCB2YWx1ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaXNDaGVja2VkIC0gVGhlIG5ldyBjaGVja2VkIHN0YXRlLlxuICAgKi9cbiAgb25DaGFuZ2UoaXNDaGVja2VkOiBib29sZWFuKTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIG9uY2Ugd2l0aCB0aGUgY3JlYXRlZCBjaGVja2JveCBlbGVtZW50LCB0byBpbml0aWFsaXplIGl0cyBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGNoZWNrYm94RWwgLSBUaGUgY3JlYXRlZCBjaGVja2JveCBlbGVtZW50LlxuICAgKi9cbiAgb25Jbml0KGNoZWNrYm94RWw6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc2hvd24gbmV4dCB0byB0aGUgY2hlY2tib3ggaW4gdGhlIGluc3RydWN0aW9uIGJhci5cbiAgICovXG4gIHB1cnBvc2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGRyb3Bkb3duIGNvbW1hbmQgc2hvd24gaW4gYSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSdzIGluc3RydWN0aW9uIGJhciBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXlcbiAqIHNob3J0Y3V0IHRoYXQgY3ljbGVzIHRocm91Z2ggaXRzIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcERvd25Db21tYW5kIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdGhhdCBjeWNsZXMgdGhlIGRyb3Bkb3duIHRvIGl0cyBuZXh0IG9wdGlvbi5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXJzIGNvbWJpbmVkIHdpdGgge0BsaW5rIERyb3BEb3duQ29tbWFuZC5rZXl9IHRvIGN5Y2xlIHRoZSBkcm9wZG93bi4gV2hlbiBvbWl0dGVkLCBub1xuICAgKiBtb2RpZmllcnMgYXJlIHJlcXVpcmVkLlxuICAgKi9cbiAgbW9kaWZpZXJzPzogTW9kaWZpZXJbXTtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGRyb3Bkb3duIHZhbHVlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXdseSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIG9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSB3aXRoIHRoZSBjcmVhdGVkIGRyb3Bkb3duIGNvbXBvbmVudCwgdG8gaW5pdGlhbGl6ZSBpdHMgb3B0aW9ucyBhbmQgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBkcm9wZG93bkNvbXBvbmVudCAtIFRoZSBjcmVhdGVkIGRyb3Bkb3duIGNvbXBvbmVudC5cbiAgICovXG4gIG9uSW5pdChkcm9wZG93bkNvbXBvbmVudDogRHJvcGRvd25Db21wb25lbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc2hvd24gbmV4dCB0byB0aGUgZHJvcGRvd24gaW4gdGhlIGluc3RydWN0aW9uIGJhci5cbiAgICovXG4gIHB1cnBvc2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGtleWJvYXJkIGNvbW1hbmQgc2hvd24gaW4gYSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSdzIGluc3RydWN0aW9uIGJhciBhbmQgb3B0aW9uYWxseSBib3VuZCB0byBhXG4gKiBtb2RpZmllcitrZXkgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlib2FyZENvbW1hbmQge1xuICAvKipcbiAgICogVGhlIGtleSBzaG93biBpbiB0aGUgaW5zdHJ1Y3Rpb24gYmFyIChhbmQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBtb2RhbCBzY29wZSB3aGVuXG4gICAqIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkKS5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXJzIGNvbWJpbmVkIHdpdGgge0BsaW5rIEtleWJvYXJkQ29tbWFuZC5rZXl9LiBXaGVuIG9taXR0ZWQsIG5vIG1vZGlmaWVycyBhcmUgcmVxdWlyZWQuXG4gICAqL1xuICBtb2RpZmllcnM/OiBNb2RpZmllcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgaGFuZGxlciBpbnZva2VkIHdoZW4gdGhlIHNob3J0Y3V0IGlzIHByZXNzZWQuIFdoZW4gb21pdHRlZCwgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkgYW5kIG5vXG4gICAqIHNjb3BlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtICRldmVudCAtIFRoZSBrZXlib2FyZCBldmVudC5cbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUga2V5bWFwIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIGBmYWxzZWAgdG8gcHJldmVudCBPYnNpZGlhbidzIGRlZmF1bHQgaGFuZGxpbmcsIG9yIGB2b2lkYC9gdHJ1ZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgb25LZXk/KCRldmVudDogS2V5Ym9hcmRFdmVudCwgY29udGV4dDogS2V5bWFwQ29udGV4dCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzaG93biBuZXh0IHRvIHRoZSBrZXkgaW4gdGhlIGluc3RydWN0aW9uIGJhci5cbiAgICovXG4gIHB1cnBvc2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIuYnVpbGR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Z2dlc3RNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSBpbnN0cnVjdGlvbiBiYXIgKGNoZWNrYm94ZXMsIGRyb3Bkb3ducywga2V5Ym9hcmQgaGludHMpIGFuZCByZWdpc3RlciB0aGVcbiAgICogb3B0aW9uLXRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dHMuIFdoZW4gYGZhbHNlYCwgbm8gaW5zdHJ1Y3Rpb24gVUkgaXMgc2hvd24gYW5kIHRoZSBvcHRpb24tdG9nZ2xlXG4gICAqIHNob3J0Y3V0cyBhcmUgbm90IHJlZ2lzdGVyZWQ7IG9ubHkgdGhlIGVzc2VudGlhbCBuYXZpZ2F0aW9uIGtleSBoYW5kbGVycyByZW1haW4gYWN0aXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dJbnN0cnVjdGlvbnM/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSW5zdHJ1Y3Rpb25FeCBleHRlbmRzIEluc3RydWN0aW9uIHtcbiAgaW5pdD8ocHVycG9zZUVsOiBIVE1MU3BhbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IHZvaWQ7XG4gIHJlZ2lzdGVyU2NvcGU/KHNjb3BlOiBTY29wZSk6IHZvaWQ7XG59XG5cbi8qKlxuICogQnVpbGRzIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0ncyBpbnN0cnVjdGlvbiBiYXIgZnJvbSBrZXlib2FyZCBjb21tYW5kcywgaW50ZXJhY3RpdmUgY2hlY2tib3hlcywgYW5kXG4gKiBkcm9wZG93bnMsIHRoZW4gYXBwbGllcyB0aGVtIHRvIGEgbW9kYWwgdmlhIHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10gPSBbXTtcblxuICAvKipcbiAgICogQWRkcyBhbiBpbnRlcmFjdGl2ZSBjaGVja2JveCB0byB0aGUgaW5zdHJ1Y3Rpb24gYmFyLCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IHRvZ2dsZXNcbiAgICogaXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNoZWNrYm94IGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hlY2tib3goY29tbWFuZDogQ2hlY2tib3hDb21tYW5kKTogdGhpcyB7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICBjb21tYW5kOiB0aGlzLmJ1aWxkQ29tbWFuZChjb21tYW5kKSxcbiAgICAgIGluaXQ6IChwdXJwb3NlRWwsIHNjb3BlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWwgPSBwdXJwb3NlRWwuY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pO1xuICAgICAgICBjb21tYW5kLm9uSW5pdChjaGVja2JveEVsKTtcbiAgICAgICAgY2hlY2tib3hFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgY29tbWFuZC5vbkNoYW5nZShjaGVja2JveEVsLmNoZWNrZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksICgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tib3hFbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaGVja2JveEVsLmNoZWNrZWQgPSAhY2hlY2tib3hFbC5jaGVja2VkO1xuICAgICAgICAgIGNoZWNrYm94RWwudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkcm9wZG93biB0byB0aGUgaW5zdHJ1Y3Rpb24gYmFyLCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IGN5Y2xlcyB0aHJvdWdoIGl0c1xuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBkcm9wZG93biBjb21tYW5kIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgcHVibGljIGFkZERyb3BEb3duKGNvbW1hbmQ6IERyb3BEb3duQ29tbWFuZCk6IHRoaXMge1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgY29tbWFuZDogdGhpcy5idWlsZENvbW1hbmQoY29tbWFuZCksXG4gICAgICBpbml0OiAocHVycG9zZUVsLCBzY29wZSkgPT4ge1xuICAgICAgICBwdXJwb3NlRWwuYXBwZW5kVGV4dCgnICcpO1xuICAgICAgICBjb25zdCBkcm9wZG93bkNvbXBvbmVudCA9IG5ldyBEcm9wZG93bkNvbXBvbmVudChwdXJwb3NlRWwpO1xuICAgICAgICBjb21tYW5kLm9uSW5pdChkcm9wZG93bkNvbXBvbmVudCk7XG4gICAgICAgIGRyb3Bkb3duQ29tcG9uZW50Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbW1hbmQub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gZGVmZW5zaXZlID8/IG9uIG9wdGlvbmFsIG1vZGlmaWVycy4gKi9cbiAgICAgICAgc2NvcGUucmVnaXN0ZXIoY29tbWFuZC5tb2RpZmllcnMgPz8gW10sIGNvbW1hbmQua2V5LCAoKSA9PiB7XG4gICAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICBpZiAoZHJvcGRvd25Db21wb25lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2VsZWN0RWwgPSBkcm9wZG93bkNvbXBvbmVudC5zZWxlY3RFbDtcbiAgICAgICAgICBzZWxlY3RFbC5zZWxlY3RlZEluZGV4ID0gKHNlbGVjdEVsLnNlbGVjdGVkSW5kZXggKyAxKSAlIHNlbGVjdEVsLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIHNlbGVjdEVsLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2VcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEga2V5Ym9hcmQgY29tbWFuZCB0byB0aGUgaW5zdHJ1Y3Rpb24gYmFyLiBXaGVuIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkLCBpdHNcbiAgICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIG1vZGFsIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGtleWJvYXJkIGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkS2V5Ym9hcmRDb21tYW5kKGNvbW1hbmQ6IEtleWJvYXJkQ29tbWFuZCk6IHRoaXMge1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgY29tbWFuZDogdGhpcy5idWlsZENvbW1hbmQoY29tbWFuZCksXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2UsXG4gICAgICByZWdpc3RlclNjb3BlOiAoc2NvcGUpID0+IHtcbiAgICAgICAgaWYgKGNvbW1hbmQub25LZXkpIHtcbiAgICAgICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gZGVmZW5zaXZlID8/IG9uIG9wdGlvbmFsIG1vZGlmaWVycy4gKi9cbiAgICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksIGNvbW1hbmQub25LZXkuYmluZChjb21tYW5kKSk7XG4gICAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIHRvIGEgbW9kYWwuIEFsd2F5cyByZWdpc3RlcnMgdGhlIGVzc2VudGlhbCBuYXZpZ2F0aW9uL2FjdGlvbiBrZXlcbiAgICogaGFuZGxlcnM7IG9ubHkgcmVuZGVycyB0aGUgaW5zdHJ1Y3Rpb24gVUkgYW5kIHJlZ2lzdGVycyB0aGUgb3B0aW9uLXRvZ2dsZSBzaG9ydGN1dHMgd2hlblxuICAgKiB7QGxpbmsgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXJCdWlsZE9wdGlvbnMuc2hvdWxkU2hvd0luc3RydWN0aW9uc30gaXMgYHRydWVgLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kYWwgLSBUaGUgbW9kYWwgdG8gYXBwbHkgdGhlIGNvbW1hbmRzIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGJ1aWxkKG1vZGFsOiBTdWdnZXN0TW9kYWw8dW5rbm93bj4sIG9wdGlvbnM6IFN1Z2dlc3RNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICBjb25zdCB7IHNob3VsZFNob3dJbnN0cnVjdGlvbnMgPSB0cnVlIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gRXNzZW50aWFsIG5hdmlnYXRpb24vYWN0aW9uIGtleSBoYW5kbGVycyBtdXN0IHN0YXkgYWN0aXZlIGV2ZW4gd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gYmFyIGlzIGhpZGRlbi5cbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpbnN0cnVjdGlvbi5yZWdpc3RlclNjb3BlPy4obW9kYWwuc2NvcGUpO1xuICAgIH1cblxuICAgIGlmICghc2hvdWxkU2hvd0luc3RydWN0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1vZGFsLnNldEluc3RydWN0aW9ucyh0aGlzLmluc3RydWN0aW9ucyk7XG4gICAgY29uc3QgcHVycG9zZUVscyA9IFsuLi5tb2RhbC5pbnN0cnVjdGlvbnNFbC5maW5kQWxsKCcucHJvbXB0LWluc3RydWN0aW9uID4gc3BhbjpudGgtY2hpbGQoMiknKV0gYXMgSFRNTFNwYW5FbGVtZW50W107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHB1cnBvc2VFbF0gb2YgcHVycG9zZUVscy5lbnRyaWVzKCkpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zW2luZGV4XT8uaW5pdD8uKHB1cnBvc2VFbCwgbW9kYWwuc2NvcGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb21tYW5kKGVudHJ5OiBLZXlib2FyZENvbW1hbmQpOiBzdHJpbmcge1xuICAgIGxldCBjb21tYW5kID0gS0VZU19NQVAuZ2V0KGVudHJ5LmtleSkgPz8gZW50cnkua2V5O1xuXG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBlbnRyeS5tb2RpZmllcnMgPz8gW10pIHtcbiAgICAgIGNvbW1hbmQgPSBgJHt0aGlzLmdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyKX0gJHtjb21tYW5kfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW1hbmQ7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyOiBNb2RpZmllcik6IHN0cmluZyB7XG4gICAgc3dpdGNoIChtb2RpZmllcikge1xuICAgICAgY2FzZSAnQWx0Jzoge1xuICAgICAgICByZXR1cm4gJ2FsdCc7XG4gICAgICB9XG4gICAgICBjYXNlICdDdHJsJzoge1xuICAgICAgICByZXR1cm4gJ2N0cmwnO1xuICAgICAgfVxuICAgICAgY2FzZSAnTWV0YSc6IHtcbiAgICAgICAgcmV0dXJuIFBsYXRmb3JtLmlzTWFjT1MgPyAnY21kJyA6ICd3aW4nO1xuICAgICAgfVxuICAgICAgY2FzZSAnTW9kJzoge1xuICAgICAgICByZXR1cm4gUGxhdGZvcm0uaXNNYWNPUyA/ICdjbWQnIDogJ2N0cmwnO1xuICAgICAgfVxuICAgICAgY2FzZSAnU2hpZnQnOiB7XG4gICAgICAgIHJldHVybiAnc2hpZnQnO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gbW9kaWZpZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdDQSxzQkFHTztBQUVQLE1BQU0sV0FBVyxvQkFBSSxJQUFvQjtBQUFBLEVBQ3ZDLENBQUMsU0FBUyxRQUFHO0FBQUEsRUFDYixDQUFDLFVBQVUsY0FBSTtBQUNqQixDQUFDO0FBaUlNLE1BQU0sMkJBQTJCO0FBQUEsRUFDckIsZUFBZ0MsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTM0MsWUFBWSxTQUFnQztBQUNqRCxTQUFLLGFBQWEsS0FBSztBQUFBLE1BQ3JCLFNBQVMsS0FBSyxhQUFhLE9BQU87QUFBQSxNQUNsQyxNQUFNLENBQUMs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
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9zdWdnZXN0LW1vZGFsLWNvbW1hbmQtYnVpbGRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBmb3JtZXIgaG9tZSBvZiB0aGUgYFN1Z2dlc3RNb2RhbGAgaW5zdHJ1Y3Rpb24tYmFyIGJ1aWxkZXIuXG4gKlxuICogVGhlIGJ1aWxkZXIgaXMgbm8gbG9uZ2VyIHRpZWQgdG8gYFN1Z2dlc3RNb2RhbGAgXHUyMDE0IGl0IHJlbmRlcnMgaW50byBhIHBsYWluIGBNb2RhbGAgYW5kIGludG8gYSBiYXJlXG4gKiBlbGVtZW50ICsgYFNjb3BlYCB0b28gXHUyMDE0IHNvIGl0IG1vdmVkIHRvIGBtb2RhbC1jb21tYW5kLWJ1aWxkZXIudHNgIHVuZGVyIHRoZSBob25lc3QgbmFtZVxuICoge0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXJ9LiBUaGlzIG1vZHVsZSBzdGF5cyBhcyBhIGRlcHJlY2F0ZWQgYWxpYXMgc28gZXhpc3RpbmcgaW1wb3J0ZXJzIGtlZXAgd29ya2luZ1xuICogdW5jaGFuZ2VkOyBpdCByZS1leHBvcnRzIHRoZSB2ZXJ5IHNhbWUgY2xhc3MsIG5vdCBhIGNvcHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zIH0gZnJvbSAnLi9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMnO1xuXG5pbXBvcnQgeyBNb2RhbENvbW1hbmRCdWlsZGVyIH0gZnJvbSAnLi9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIENoZWNrYm94Q29tbWFuZCxcbiAgRHJvcERvd25Db21tYW5kLFxuICBLZXlib2FyZENvbW1hbmRcbn0gZnJvbSAnLi9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBTdWdnZXN0TW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zfSBmcm9tXG4gKiBgb2JzaWRpYW4tZGV2LXV0aWxzL29ic2lkaWFuL21vZGFscy9tb2RhbC1jb21tYW5kLWJ1aWxkZXJgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCB0eXBlIFN1Z2dlc3RNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zID0gTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucztcblxuLyoqXG4gKiBCdWlsZHMgYSBgU3VnZ2VzdE1vZGFsYCdzIGluc3RydWN0aW9uIGJhci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXJ9IGZyb21cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbW9kYWxzL21vZGFsLWNvbW1hbmQtYnVpbGRlcmAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1Z2dlc3RNb2RhbENvbW1hbmRCdWlsZGVyID0gTW9kYWxDb21tYW5kQnVpbGRlcjtcblxuLyoqXG4gKiBCdWlsZHMgYSBgU3VnZ2VzdE1vZGFsYCdzIGluc3RydWN0aW9uIGJhci5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXJ9IGZyb21cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbW9kYWxzL21vZGFsLWNvbW1hbmQtYnVpbGRlcmAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IHR5cGUgU3VnZ2VzdE1vZGFsQ29tbWFuZEJ1aWxkZXIgPSBNb2RhbENvbW1hbmRCdWlsZGVyO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhQSxtQ0FBb0M7QUFzQjdCLE1BQU0sNkJBQTZCOyIsCiAgIm5hbWVzIjogW10KfQo=
|