@mnaoumov/obsidian-lib 10.5.1 → 10.7.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/codemirror/inline-token-widgets/package.json +6 -0
- package/codemirror/settings-facet/package.json +6 -0
- package/command-handlers/open-discussion-command-handler/package.json +6 -0
- package/command-handlers/open-feature-request-command-handler/package.json +6 -0
- package/command-handlers/open-git-hub-command-handler/package.json +6 -0
- package/components/settings-facet-component/package.json +6 -0
- package/components/style-sheet-component/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +137 -1
- package/dist/lib/cjs/__merged.d.cts +26 -0
- package/dist/lib/cjs/anchored-suggest.cjs +232 -0
- package/dist/lib/cjs/anchored-suggest.d.cts +116 -0
- package/dist/lib/cjs/broken-link-candidates.cjs +366 -0
- package/dist/lib/cjs/broken-link-candidates.d.cts +181 -0
- package/dist/lib/cjs/bug-report.cjs +4 -2
- package/dist/lib/cjs/bug-report.d.cts +1 -1
- package/dist/lib/cjs/code-block-render-handoff.cjs +272 -0
- package/dist/lib/cjs/code-block-render-handoff.d.cts +131 -0
- package/dist/lib/cjs/codemirror/index.cjs +7 -1
- package/dist/lib/cjs/codemirror/index.d.cts +2 -0
- package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +250 -0
- package/dist/lib/cjs/codemirror/inline-token-widgets.d.cts +109 -0
- package/dist/lib/cjs/codemirror/settings-facet.cjs +132 -0
- package/dist/lib/cjs/codemirror/settings-facet.d.cts +19 -0
- package/dist/lib/cjs/command-handlers/index.cjs +10 -1
- package/dist/lib/cjs/command-handlers/index.d.cts +3 -0
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +9 -12
- package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +6 -8
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +127 -0
- package/dist/lib/cjs/command-handlers/open-discussion-command-handler.d.cts +45 -0
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +119 -0
- package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.d.cts +33 -0
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +121 -0
- package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.d.cts +43 -0
- package/dist/lib/cjs/components/index.cjs +7 -1
- package/dist/lib/cjs/components/index.d.cts +2 -0
- package/dist/lib/cjs/components/settings-facet-component.cjs +136 -0
- package/dist/lib/cjs/components/settings-facet-component.d.cts +68 -0
- package/dist/lib/cjs/components/style-sheet-component.cjs +198 -0
- package/dist/lib/cjs/components/style-sheet-component.d.cts +79 -0
- package/dist/lib/cjs/css-class.cjs +8 -1
- package/dist/lib/cjs/css-class.d.cts +28 -0
- package/dist/lib/cjs/data-stores/data-store-transport.cjs +7 -4
- package/dist/lib/cjs/data-stores/data-store-transport.d.cts +1 -1
- package/dist/lib/cjs/data-stores/shared-data-store.cjs +1 -1
- package/dist/lib/cjs/data-stores/shared-data-store.d.cts +1 -1
- package/dist/lib/cjs/desktop-git-runner.cjs +117 -0
- package/dist/lib/cjs/desktop-git-runner.d.cts +17 -0
- package/dist/lib/cjs/desktop-request-url-stream.cjs +258 -0
- package/dist/lib/cjs/desktop-request-url-stream.d.cts +22 -0
- package/dist/lib/cjs/editor-suggest-registrar.cjs +8 -2
- package/dist/lib/cjs/editor-suggest-registrar.d.cts +14 -2
- package/dist/lib/cjs/editor-suggest.cjs +197 -0
- package/dist/lib/cjs/editor-suggest.d.cts +103 -0
- package/dist/lib/cjs/feature-request.cjs +115 -0
- package/dist/lib/cjs/feature-request.d.cts +54 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/git-hub-discussion.cjs +101 -0
- package/dist/lib/cjs/git-hub-discussion.d.cts +28 -0
- package/dist/lib/cjs/git-rename-history.cjs +148 -0
- package/dist/lib/cjs/git-rename-history.d.cts +43 -0
- package/dist/lib/cjs/hotkey.cjs +185 -0
- package/dist/lib/cjs/hotkey.d.cts +59 -0
- package/dist/lib/cjs/i18n/locales/en.cjs +13 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +12 -0
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +12 -0
- package/dist/lib/cjs/index.cjs +46 -1
- package/dist/lib/cjs/index.d.cts +15 -0
- package/dist/lib/cjs/inline-token-renderer.cjs +145 -0
- package/dist/lib/cjs/inline-token-renderer.d.cts +88 -0
- package/dist/lib/cjs/link-and-tag-input-suggest.cjs +325 -0
- package/dist/lib/cjs/link-and-tag-input-suggest.d.cts +229 -0
- package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -1
- package/dist/lib/cjs/markdown-code-block-processor.d.cts +18 -0
- package/dist/lib/cjs/markdown.cjs +6 -1
- package/dist/lib/cjs/markdown.d.cts +10 -1
- package/dist/lib/cjs/rendered-markdown.cjs +306 -0
- package/dist/lib/cjs/rendered-markdown.d.cts +77 -0
- package/dist/lib/cjs/request-url.cjs +523 -0
- package/dist/lib/cjs/request-url.d.cts +233 -0
- package/dist/lib/cjs/setting-components/folder-list-component.cjs +216 -0
- package/dist/lib/cjs/setting-components/folder-list-component.d.cts +73 -0
- package/dist/lib/cjs/setting-components/hotkey-component.cjs +260 -0
- package/dist/lib/cjs/setting-components/hotkey-component.d.cts +85 -0
- package/dist/lib/cjs/setting-components/index.cjs +13 -1
- package/dist/lib/cjs/setting-components/index.d.cts +4 -0
- package/dist/lib/cjs/setting-components/list-component.cjs +291 -0
- package/dist/lib/cjs/setting-components/list-component.d.cts +106 -0
- package/dist/lib/cjs/setting-components/tag-list-component.cjs +220 -0
- package/dist/lib/cjs/setting-components/tag-list-component.d.cts +82 -0
- package/dist/lib/cjs/setting-ex.cjs +51 -1
- package/dist/lib/cjs/setting-ex.d.cts +35 -1
- package/dist/lib/cjs/settings-tabs.cjs +258 -0
- package/dist/lib/cjs/settings-tabs.d.cts +101 -0
- package/dist/lib/cjs/vault.cjs +2 -2
- package/dist/lib/cjs/vault.d.cts +3 -1
- package/dist/lib/esm/__merged.d.mts +26 -0
- package/dist/lib/esm/__merged.mjs +139 -1
- package/dist/lib/esm/anchored-suggest.d.mts +116 -0
- package/dist/lib/esm/anchored-suggest.mjs +144 -0
- package/dist/lib/esm/broken-link-candidates.d.mts +181 -0
- package/dist/lib/esm/broken-link-candidates.mjs +275 -0
- package/dist/lib/esm/bug-report.d.mts +1 -1
- package/dist/lib/esm/bug-report.mjs +4 -2
- package/dist/lib/esm/code-block-render-handoff.d.mts +131 -0
- package/dist/lib/esm/code-block-render-handoff.mjs +183 -0
- package/dist/lib/esm/codemirror/index.d.mts +2 -0
- package/dist/lib/esm/codemirror/index.mjs +5 -1
- package/dist/lib/esm/codemirror/inline-token-widgets.d.mts +109 -0
- package/dist/lib/esm/codemirror/inline-token-widgets.mjs +167 -0
- package/dist/lib/esm/codemirror/settings-facet.d.mts +19 -0
- package/dist/lib/esm/codemirror/settings-facet.mjs +44 -0
- package/dist/lib/esm/command-handlers/index.d.mts +3 -0
- package/dist/lib/esm/command-handlers/index.mjs +7 -1
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +6 -8
- package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +9 -12
- package/dist/lib/esm/command-handlers/open-discussion-command-handler.d.mts +45 -0
- package/dist/lib/esm/command-handlers/open-discussion-command-handler.mjs +39 -0
- package/dist/lib/esm/command-handlers/open-feature-request-command-handler.d.mts +33 -0
- package/dist/lib/esm/command-handlers/open-feature-request-command-handler.mjs +31 -0
- package/dist/lib/esm/command-handlers/open-git-hub-command-handler.d.mts +43 -0
- package/dist/lib/esm/command-handlers/open-git-hub-command-handler.mjs +33 -0
- package/dist/lib/esm/components/index.d.mts +2 -0
- package/dist/lib/esm/components/index.mjs +5 -1
- package/dist/lib/esm/components/settings-facet-component.d.mts +68 -0
- package/dist/lib/esm/components/settings-facet-component.mjs +48 -0
- package/dist/lib/esm/components/style-sheet-component.d.mts +79 -0
- package/dist/lib/esm/components/style-sheet-component.mjs +109 -0
- package/dist/lib/esm/css-class.d.mts +28 -0
- package/dist/lib/esm/css-class.mjs +8 -1
- package/dist/lib/esm/data-stores/data-store-transport.d.mts +1 -1
- package/dist/lib/esm/data-stores/data-store-transport.mjs +7 -4
- package/dist/lib/esm/data-stores/shared-data-store.d.mts +1 -1
- package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
- package/dist/lib/esm/desktop-git-runner.d.mts +17 -0
- package/dist/lib/esm/desktop-git-runner.mjs +19 -0
- package/dist/lib/esm/desktop-request-url-stream.d.mts +22 -0
- package/dist/lib/esm/desktop-request-url-stream.mjs +170 -0
- package/dist/lib/esm/editor-suggest-registrar.d.mts +14 -2
- package/dist/lib/esm/editor-suggest-registrar.mjs +8 -2
- package/dist/lib/esm/editor-suggest.d.mts +103 -0
- package/dist/lib/esm/editor-suggest.mjs +108 -0
- package/dist/lib/esm/feature-request.d.mts +54 -0
- package/dist/lib/esm/feature-request.mjs +25 -0
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/git-hub-discussion.d.mts +28 -0
- package/dist/lib/esm/git-hub-discussion.mjs +13 -0
- package/dist/lib/esm/git-rename-history.d.mts +43 -0
- package/dist/lib/esm/git-rename-history.mjs +59 -0
- package/dist/lib/esm/hotkey.d.mts +59 -0
- package/dist/lib/esm/hotkey.mjs +95 -0
- package/dist/lib/esm/i18n/locales/en.d.mts +12 -0
- package/dist/lib/esm/i18n/locales/en.mjs +13 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +12 -0
- package/dist/lib/esm/index.d.mts +15 -0
- package/dist/lib/esm/index.mjs +31 -1
- package/dist/lib/esm/inline-token-renderer.d.mts +88 -0
- package/dist/lib/esm/inline-token-renderer.mjs +59 -0
- package/dist/lib/esm/link-and-tag-input-suggest.d.mts +229 -0
- package/dist/lib/esm/link-and-tag-input-suggest.mjs +239 -0
- package/dist/lib/esm/markdown-code-block-processor.d.mts +18 -0
- package/dist/lib/esm/markdown-code-block-processor.mjs +16 -1
- package/dist/lib/esm/markdown.d.mts +10 -1
- package/dist/lib/esm/markdown.mjs +9 -1
- package/dist/lib/esm/rendered-markdown.d.mts +77 -0
- package/dist/lib/esm/rendered-markdown.mjs +219 -0
- package/dist/lib/esm/request-url.d.mts +233 -0
- package/dist/lib/esm/request-url.mjs +428 -0
- package/dist/lib/esm/setting-components/folder-list-component.d.mts +73 -0
- package/dist/lib/esm/setting-components/folder-list-component.mjs +131 -0
- package/dist/lib/esm/setting-components/hotkey-component.d.mts +85 -0
- package/dist/lib/esm/setting-components/hotkey-component.mjs +178 -0
- package/dist/lib/esm/setting-components/index.d.mts +4 -0
- package/dist/lib/esm/setting-components/index.mjs +9 -1
- package/dist/lib/esm/setting-components/list-component.d.mts +106 -0
- package/dist/lib/esm/setting-components/list-component.mjs +206 -0
- package/dist/lib/esm/setting-components/tag-list-component.d.mts +82 -0
- package/dist/lib/esm/setting-components/tag-list-component.mjs +131 -0
- package/dist/lib/esm/setting-ex.d.mts +35 -1
- package/dist/lib/esm/setting-ex.mjs +51 -1
- package/dist/lib/esm/settings-tabs.d.mts +101 -0
- package/dist/lib/esm/settings-tabs.mjs +170 -0
- package/dist/lib/esm/vault.d.mts +3 -1
- package/dist/lib/esm/vault.mjs +2 -2
- package/dist/styles.css +83 -1
- package/package.json +2 -2
- package/setting-components/folder-list-component/package.json +6 -0
- package/setting-components/hotkey-component/package.json +6 -0
- package/setting-components/list-component/package.json +6 -0
- package/setting-components/tag-list-component/package.json +6 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
|
|
34
|
+
import {
|
|
35
|
+
ExtraButtonComponent,
|
|
36
|
+
ValueComponent
|
|
37
|
+
} from "obsidian";
|
|
38
|
+
import { CssClass } from "../css-class.mjs";
|
|
39
|
+
import { t } from "../i18n/i18n.mjs";
|
|
40
|
+
import { addPluginCssClasses } from "../plugin/plugin-context.mjs";
|
|
41
|
+
class ListComponent extends ValueComponent {
|
|
42
|
+
/**
|
|
43
|
+
* The element holding one row per item.
|
|
44
|
+
*/
|
|
45
|
+
listEl;
|
|
46
|
+
/**
|
|
47
|
+
* The button that adds the typed item.
|
|
48
|
+
*/
|
|
49
|
+
newItemButton;
|
|
50
|
+
/**
|
|
51
|
+
* The input the next item is typed into.
|
|
52
|
+
*/
|
|
53
|
+
newItemInputEl;
|
|
54
|
+
changeCallback;
|
|
55
|
+
value = [];
|
|
56
|
+
/**
|
|
57
|
+
* Creates a new list component.
|
|
58
|
+
*
|
|
59
|
+
* @param containerEl - The container element.
|
|
60
|
+
* @param cssClass - An extra CSS class for the container, for a subclass.
|
|
61
|
+
*/
|
|
62
|
+
constructor(containerEl, cssClass) {
|
|
63
|
+
super();
|
|
64
|
+
addPluginCssClasses(containerEl, cssClass ? [CssClass.ListComponent, cssClass] : CssClass.ListComponent);
|
|
65
|
+
this.listEl = containerEl.createDiv({ cls: "list-component-items" });
|
|
66
|
+
const newItemRowEl = containerEl.createDiv({ cls: "list-component-new-item" });
|
|
67
|
+
this.newItemInputEl = newItemRowEl.createEl("input", { type: "text" });
|
|
68
|
+
this.newItemInputEl.addEventListener("keydown", (event_) => {
|
|
69
|
+
if (event_.key !== "Enter" || event_.isComposing) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
event_.preventDefault();
|
|
73
|
+
this.addTypedItem();
|
|
74
|
+
});
|
|
75
|
+
this.newItemButton = new ExtraButtonComponent(newItemRowEl).setIcon("plus").setTooltip(t(($) => $.obsidianLib.list.add)).onClick(() => {
|
|
76
|
+
this.addTypedItem();
|
|
77
|
+
});
|
|
78
|
+
this.render();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Adds the text typed into {@link ListComponent.newItemInputEl}, when it normalizes to an item not yet in the list, and
|
|
82
|
+
* clears the input.
|
|
83
|
+
*
|
|
84
|
+
* @returns Whether an item was added.
|
|
85
|
+
*/
|
|
86
|
+
addTypedItem() {
|
|
87
|
+
if (this.disabled) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const item = this.normalizeItem(this.newItemInputEl.value);
|
|
91
|
+
if (item === null || this.value.includes(item)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
this.newItemInputEl.value = "";
|
|
95
|
+
this.setValueAndNotify([...this.value, item]);
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Gets the items.
|
|
100
|
+
*
|
|
101
|
+
* @returns The items, in order.
|
|
102
|
+
*/
|
|
103
|
+
getValue() {
|
|
104
|
+
return this.value;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Sets the callback to be called when the user adds, moves or removes an item.
|
|
108
|
+
*
|
|
109
|
+
* @param callback - The callback.
|
|
110
|
+
* @returns The component.
|
|
111
|
+
*/
|
|
112
|
+
onChange(callback) {
|
|
113
|
+
this.changeCallback = callback;
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Sets the disabled state of the component.
|
|
118
|
+
*
|
|
119
|
+
* @param isDisabled - The disabled state.
|
|
120
|
+
* @returns The component.
|
|
121
|
+
*/
|
|
122
|
+
setDisabled(isDisabled) {
|
|
123
|
+
super.setDisabled(isDisabled);
|
|
124
|
+
this.newItemInputEl.disabled = isDisabled;
|
|
125
|
+
this.newItemButton.setDisabled(isDisabled);
|
|
126
|
+
this.render();
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Sets the placeholder of {@link ListComponent.newItemInputEl}.
|
|
131
|
+
*
|
|
132
|
+
* @param placeholder - The placeholder.
|
|
133
|
+
* @returns The component.
|
|
134
|
+
*/
|
|
135
|
+
setPlaceholder(placeholder) {
|
|
136
|
+
this.newItemInputEl.placeholder = placeholder;
|
|
137
|
+
return this;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Sets the items.
|
|
141
|
+
*
|
|
142
|
+
* @param value - The items, in order.
|
|
143
|
+
* @returns The component.
|
|
144
|
+
*/
|
|
145
|
+
setValue(value) {
|
|
146
|
+
this.value = [...value];
|
|
147
|
+
this.render();
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Formats an item for display.
|
|
152
|
+
*
|
|
153
|
+
* @param item - The item.
|
|
154
|
+
* @returns The text shown for it.
|
|
155
|
+
*/
|
|
156
|
+
formatItem(item) {
|
|
157
|
+
return item;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Turns the typed text into an item. By default, trims it and refuses an empty one.
|
|
161
|
+
*
|
|
162
|
+
* @param text - The typed text.
|
|
163
|
+
* @returns The item, or `null` to add nothing.
|
|
164
|
+
*/
|
|
165
|
+
normalizeItem(text) {
|
|
166
|
+
const item = text.trim();
|
|
167
|
+
return item || null;
|
|
168
|
+
}
|
|
169
|
+
moveItem(index, offset) {
|
|
170
|
+
const items = [...this.value];
|
|
171
|
+
const item = ensureNonNullable(items.splice(index, 1)[0]);
|
|
172
|
+
items.splice(index + offset, 0, item);
|
|
173
|
+
this.setValueAndNotify(items);
|
|
174
|
+
}
|
|
175
|
+
removeItem(index) {
|
|
176
|
+
this.setValueAndNotify(this.value.filter((_, itemIndex) => itemIndex !== index));
|
|
177
|
+
}
|
|
178
|
+
render() {
|
|
179
|
+
this.listEl.empty();
|
|
180
|
+
if (this.value.length === 0) {
|
|
181
|
+
this.listEl.createDiv({ cls: "list-component-empty", text: t(($) => $.obsidianLib.list.empty) });
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
for (const [index, item] of this.value.entries()) {
|
|
185
|
+
const rowEl = this.listEl.createDiv({ cls: "list-component-item" });
|
|
186
|
+
rowEl.createSpan({ cls: "list-component-item-text", text: this.formatItem(item) });
|
|
187
|
+
new ExtraButtonComponent(rowEl).setIcon("arrow-up").setTooltip(t(($) => $.obsidianLib.list.moveUp)).setDisabled(this.disabled || index === 0).onClick(() => {
|
|
188
|
+
this.moveItem(index, -1);
|
|
189
|
+
});
|
|
190
|
+
new ExtraButtonComponent(rowEl).setIcon("arrow-down").setTooltip(t(($) => $.obsidianLib.list.moveDown)).setDisabled(this.disabled || index === this.value.length - 1).onClick(() => {
|
|
191
|
+
this.moveItem(index, 1);
|
|
192
|
+
});
|
|
193
|
+
new ExtraButtonComponent(rowEl).setIcon("x").setTooltip(t(($) => $.obsidianLib.list.remove)).setDisabled(this.disabled).onClick(() => {
|
|
194
|
+
this.removeItem(index);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
setValueAndNotify(value) {
|
|
199
|
+
this.setValue(value);
|
|
200
|
+
this.changeCallback?.(this.value);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
export {
|
|
204
|
+
ListComponent
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXR0aW5nLWNvbXBvbmVudHMvbGlzdC1jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIGEgY29tcG9uZW50IHRoYXQgZWRpdHMgYSByZW9yZGVyYWJsZSBsaXN0IG9mIHN0cmluZ3MuXG4gKi9cblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHtcbiAgRXh0cmFCdXR0b25Db21wb25lbnQsXG4gIFZhbHVlQ29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAtLSBXZSBuZWVkIHRvIGltcG9ydCBgaW5pdFBsdWdpbkNvbnRleHRgIHRvIHVzZSBpdCBpbiB0aGUgdHNkb2NzLlxuaW1wb3J0IHR5cGUgeyBpbml0UGx1Z2luQ29udGV4dCB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFdlIG5lZWQgdG8gaW1wb3J0IGBTZXR0aW5nRXhgIHRvIHVzZSBpdCBpbiB0aGUgdHNkb2NzLlxuaW1wb3J0IHR5cGUgeyBTZXR0aW5nRXggfSBmcm9tICcuLi9zZXR0aW5nLWV4LnRzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgLS0gV2UgbmVlZCB0byBpbXBvcnQgRm9sZGVyTGlzdENvbXBvbmVudCB0byB1c2UgaXQgaW4gdGhlIHRzZG9jcy5cbmltcG9ydCB0eXBlIHsgRm9sZGVyTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZm9sZGVyLWxpc3QtY29tcG9uZW50LnRzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgLS0gV2UgbmVlZCB0byBpbXBvcnQgVGFnTGlzdENvbXBvbmVudCB0byB1c2UgaXQgaW4gdGhlIHRzZG9jcy5cbmltcG9ydCB0eXBlIHsgVGFnTGlzdENvbXBvbmVudCB9IGZyb20gJy4vdGFnLWxpc3QtY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmcgfSBmcm9tICcuL3ZhbHVlLWNvbXBvbmVudC13aXRoLWNoYW5nZS10cmFja2luZy50cyc7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyc7XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBlZGl0cyBhIHJlb3JkZXJhYmxlIGxpc3Qgb2Ygc3RyaW5nczogZWFjaCBpdGVtIGhhcyBtb3ZlLXVwLCBtb3ZlLWRvd24gYW5kIHJlbW92ZSBidXR0b25zLCBhbmQgYSByb3dcbiAqIGJlbG93IHRoZSBsaXN0IGFkZHMgYW4gaXRlbSwgb24gaXRzIGJ1dHRvbiBvciBvbiBFbnRlci5cbiAqXG4gKiB7QGxpbmsgTGlzdENvbXBvbmVudC5uZXdJdGVtSW5wdXRFbH0gaXMgYSBwbGFpbiBgPGlucHV0PmAsIHNvIGEgc3VnZ2VzdCBjYW4gYmUgYXR0YWNoZWQgdG8gaXQ7IHtAbGluayBGb2xkZXJMaXN0Q29tcG9uZW50fVxuICogYW5kIHtAbGluayBUYWdMaXN0Q29tcG9uZW50fSBkbyBleGFjdGx5IHRoYXQuIEEgc3ViY2xhc3Mgc2hhcGVzIHdoYXQgaXMgYWRkZWQgYnkgb3ZlcnJpZGluZ1xuICoge0BsaW5rIExpc3RDb21wb25lbnQubm9ybWFsaXplSXRlbX0gYW5kIGhvdyBhbiBpdGVtIHJlYWRzIGJ5IG92ZXJyaWRpbmcge0BsaW5rIExpc3RDb21wb25lbnQuZm9ybWF0SXRlbX0uIEFuIGl0ZW1cbiAqIGFscmVhZHkgaW4gdGhlIGxpc3QgaXMgbm90IGFkZGVkIHR3aWNlLlxuICpcbiAqIFlvdSBjYW4gYWRkIHRoaXMgY29tcG9uZW50IHVzaW5nIHtAbGluayBTZXR0aW5nRXguYWRkTGlzdH0uXG4gKlxuICogSW4gb3JkZXIgdG8gYWRkIHRoZSBzdHlsZXMgZm9yIHRoZSBjb21wb25lbnQsIHVzZSB7QGxpbmsgaW5pdFBsdWdpbkNvbnRleHR9IGluIHlvdXIgcGx1Z2luJ3MgYG9ubG9hZCgpYCBmdW5jdGlvbi5cbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNvcHkgc3R5bGVzIGZyb20ge0BsaW5rIGh0dHBzOi8vdW5wa2cuY29tL0BtbmFvdW1vdi9vYnNpZGlhbi1saWIvZGlzdC9zdHlsZXMuY3NzfS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudDxyZWFkb25seSBzdHJpbmdbXT4gaW1wbGVtZW50cyBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxyZWFkb25seSBzdHJpbmdbXT4ge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgaG9sZGluZyBvbmUgcm93IHBlciBpdGVtLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxpc3RFbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBidXR0b24gdGhhdCBhZGRzIHRoZSB0eXBlZCBpdGVtLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5ld0l0ZW1CdXR0b246IEV4dHJhQnV0dG9uQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdGhlIG5leHQgaXRlbSBpcyB0eXBlZCBpbnRvLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5ld0l0ZW1JbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50O1xuXG4gIHByaXZhdGUgY2hhbmdlQ2FsbGJhY2s/OiAobmV3VmFsdWU6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwcml2YXRlIHZhbHVlOiByZWFkb25seSBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGxpc3QgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBjc3NDbGFzcyAtIEFuIGV4dHJhIENTUyBjbGFzcyBmb3IgdGhlIGNvbnRhaW5lciwgZm9yIGEgc3ViY2xhc3MuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBjc3NDbGFzcz86IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhjb250YWluZXJFbCwgY3NzQ2xhc3MgPyBbQ3NzQ2xhc3MuTGlzdENvbXBvbmVudCwgY3NzQ2xhc3NdIDogQ3NzQ2xhc3MuTGlzdENvbXBvbmVudCk7XG4gICAgdGhpcy5saXN0RWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoeyBjbHM6ICdsaXN0LWNvbXBvbmVudC1pdGVtcycgfSk7XG4gICAgY29uc3QgbmV3SXRlbVJvd0VsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHsgY2xzOiAnbGlzdC1jb21wb25lbnQtbmV3LWl0ZW0nIH0pO1xuICAgIHRoaXMubmV3SXRlbUlucHV0RWwgPSBuZXdJdGVtUm93RWwuY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAndGV4dCcgfSk7XG4gICAgdGhpcy5uZXdJdGVtSW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50XykgPT4ge1xuICAgICAgaWYgKGV2ZW50Xy5rZXkgIT09ICdFbnRlcicgfHwgZXZlbnRfLmlzQ29tcG9zaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXZlbnRfLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmFkZFR5cGVkSXRlbSgpO1xuICAgIH0pO1xuICAgIHRoaXMubmV3SXRlbUJ1dHRvbiA9IG5ldyBFeHRyYUJ1dHRvbkNvbXBvbmVudChuZXdJdGVtUm93RWwpXG4gICAgICAuc2V0SWNvbigncGx1cycpXG4gICAgICAuc2V0VG9vbHRpcCh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmxpc3QuYWRkKSlcbiAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5hZGRUeXBlZEl0ZW0oKTtcbiAgICAgIH0pO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgdGV4dCB0eXBlZCBpbnRvIHtAbGluayBMaXN0Q29tcG9uZW50Lm5ld0l0ZW1JbnB1dEVsfSwgd2hlbiBpdCBub3JtYWxpemVzIHRvIGFuIGl0ZW0gbm90IHlldCBpbiB0aGUgbGlzdCwgYW5kXG4gICAqIGNsZWFycyB0aGUgaW5wdXQuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYW4gaXRlbSB3YXMgYWRkZWQuXG4gICAqL1xuICBwdWJsaWMgYWRkVHlwZWRJdGVtKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm5vcm1hbGl6ZUl0ZW0odGhpcy5uZXdJdGVtSW5wdXRFbC52YWx1ZSk7XG4gICAgaWYgKGl0ZW0gPT09IG51bGwgfHwgdGhpcy52YWx1ZS5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLm5ld0l0ZW1JbnB1dEVsLnZhbHVlID0gJyc7XG4gICAgdGhpcy5zZXRWYWx1ZUFuZE5vdGlmeShbLi4udGhpcy52YWx1ZSwgaXRlbV0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbXMsIGluIG9yZGVyLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGdldFZhbHVlKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdXNlciBhZGRzLCBtb3ZlcyBvciByZW1vdmVzIGFuIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjay5cbiAgICogQHJldHVybnMgVGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvbkNoYW5nZShjYWxsYmFjazogKG5ld1ZhbHVlOiByZWFkb25seSBzdHJpbmdbXSkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHRoaXMuY2hhbmdlQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gaXNEaXNhYmxlZCAtIFRoZSBkaXNhYmxlZCBzdGF0ZS5cbiAgICogQHJldHVybnMgVGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzZXREaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuKTogdGhpcyB7XG4gICAgc3VwZXIuc2V0RGlzYWJsZWQoaXNEaXNhYmxlZCk7XG4gICAgdGhpcy5uZXdJdGVtSW5wdXRFbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5uZXdJdGVtQnV0dG9uLnNldERpc2FibGVkKGlzRGlzYWJsZWQpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGxhY2Vob2xkZXIgb2Yge0BsaW5rIExpc3RDb21wb25lbnQubmV3SXRlbUlucHV0RWx9LlxuICAgKlxuICAgKiBAcGFyYW0gcGxhY2Vob2xkZXIgLSBUaGUgcGxhY2Vob2xkZXIuXG4gICAqIEByZXR1cm5zIFRoZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgc2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMubmV3SXRlbUlucHV0RWwucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGl0ZW1zLCBpbiBvcmRlci5cbiAgICogQHJldHVybnMgVGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBzZXRWYWx1ZSh2YWx1ZTogcmVhZG9ubHkgc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbHVlID0gWy4uLnZhbHVlXTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYW4gaXRlbSBmb3IgZGlzcGxheS5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBUaGUgaXRlbS5cbiAgICogQHJldHVybnMgVGhlIHRleHQgc2hvd24gZm9yIGl0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdEl0ZW0oaXRlbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJucyB0aGUgdHlwZWQgdGV4dCBpbnRvIGFuIGl0ZW0uIEJ5IGRlZmF1bHQsIHRyaW1zIGl0IGFuZCByZWZ1c2VzIGFuIGVtcHR5IG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgLSBUaGUgdHlwZWQgdGV4dC5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0sIG9yIGBudWxsYCB0byBhZGQgbm90aGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBub3JtYWxpemVJdGVtKHRleHQ6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICAgIGNvbnN0IGl0ZW0gPSB0ZXh0LnRyaW0oKTtcbiAgICByZXR1cm4gaXRlbSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlSXRlbShpbmRleDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMudmFsdWVdO1xuICAgIC8vIFRoZSBidXR0b25zIHRoYXQgd291bGQgbW92ZSBhbiBpdGVtIG9mZiBlaXRoZXIgZW5kIGFyZSBkaXNhYmxlZC5cbiAgICBjb25zdCBpdGVtID0gZW5zdXJlTm9uTnVsbGFibGUoaXRlbXMuc3BsaWNlKGluZGV4LCAxKVswXSk7XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4ICsgb2Zmc2V0LCAwLCBpdGVtKTtcbiAgICB0aGlzLnNldFZhbHVlQW5kTm90aWZ5KGl0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlSXRlbShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWYWx1ZUFuZE5vdGlmeSh0aGlzLnZhbHVlLmZpbHRlcigoXywgaXRlbUluZGV4KSA9PiBpdGVtSW5kZXggIT09IGluZGV4KSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RFbC5lbXB0eSgpO1xuICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5saXN0RWwuY3JlYXRlRGl2KHsgY2xzOiAnbGlzdC1jb21wb25lbnQtZW1wdHknLCB0ZXh0OiB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmxpc3QuZW1wdHkpIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBpdGVtXSBvZiB0aGlzLnZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgcm93RWwgPSB0aGlzLmxpc3RFbC5jcmVhdGVEaXYoeyBjbHM6ICdsaXN0LWNvbXBvbmVudC1pdGVtJyB9KTtcbiAgICAgIHJvd0VsLmNyZWF0ZVNwYW4oeyBjbHM6ICdsaXN0LWNvbXBvbmVudC1pdGVtLXRleHQnLCB0ZXh0OiB0aGlzLmZvcm1hdEl0ZW0oaXRlbSkgfSk7XG4gICAgICBuZXcgRXh0cmFCdXR0b25Db21wb25lbnQocm93RWwpXG4gICAgICAgIC5zZXRJY29uKCdhcnJvdy11cCcpXG4gICAgICAgIC5zZXRUb29sdGlwKHQoKCQpID0+ICQub2JzaWRpYW5MaWIubGlzdC5tb3ZlVXApKVxuICAgICAgICAuc2V0RGlzYWJsZWQodGhpcy5kaXNhYmxlZCB8fCBpbmRleCA9PT0gMClcbiAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMubW92ZUl0ZW0oaW5kZXgsIC0xKTtcbiAgICAgICAgfSk7XG4gICAgICBuZXcgRXh0cmFCdXR0b25Db21wb25lbnQocm93RWwpXG4gICAgICAgIC5zZXRJY29uKCdhcnJvdy1kb3duJylcbiAgICAgICAgLnNldFRvb2x0aXAodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5saXN0Lm1vdmVEb3duKSlcbiAgICAgICAgLnNldERpc2FibGVkKHRoaXMuZGlzYWJsZWQgfHwgaW5kZXggPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSlcbiAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMubW92ZUl0ZW0oaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIG5ldyBFeHRyYUJ1dHRvbkNvbXBvbmVudChyb3dFbClcbiAgICAgICAgLnNldEljb24oJ3gnKVxuICAgICAgICAuc2V0VG9vbHRpcCh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmxpc3QucmVtb3ZlKSlcbiAgICAgICAgLnNldERpc2FibGVkKHRoaXMuZGlzYWJsZWQpXG4gICAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZhbHVlQW5kTm90aWZ5KHZhbHVlOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlQ2FsbGJhY2s/Lih0aGlzLnZhbHVlKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBWVAsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsMkJBQTJCO0FBaUI3QixNQUFNLHNCQUFzQixlQUFpRztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWxIO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQSxFQUVSO0FBQUEsRUFDQSxRQUEyQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRN0IsWUFBWSxhQUEwQixVQUFtQjtBQUM5RCxVQUFNO0FBQ04sd0JBQW9CLGFBQWEsV0FBVyxDQUFDLFNBQVMsZUFBZSxRQUFRLElBQUksU0FBUyxhQUFhO0FBQ3ZHLFNBQUssU0FBUyxZQUFZLFVBQVUsRUFBRSxLQUFLLHVCQUF1QixDQUFDO0FBQ25FLFVBQU0sZUFBZSxZQUFZLFVBQVUsRUFBRSxLQUFLLDBCQUEwQixDQUFDO0FBQzdFLFNBQUssaUJBQWlCLGFBQWEsU0FBUyxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDckUsU0FBSyxlQUFlLGlCQUFpQixXQUFXLENBQUMsV0FBVztBQUMxRCxVQUFJLE9BQU8sUUFBUSxXQUFXLE9BQU8sYUFBYTtBQUNoRDtBQUFBLE1BQ0Y7QUFFQSxhQUFPLGVBQWU7QUFDdEIsV0FBSyxhQUFhO0FBQUEsSUFDcEIsQ0FBQztBQUNELFNBQUssZ0JBQWdCLElBQUkscUJBQXFCLFlBQVksRUFDdkQsUUFBUSxNQUFNLEVBQ2QsV0FBVyxFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksS0FBSyxHQUFHLENBQUMsRUFDM0MsUUFBUSxNQUFNO0FBQ2IsV0FB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
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/// <reference lib="dom" />
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
*
|
|
6
|
+
* Contains a component that edits a reorderable list of tags, with a tag suggest.
|
|
7
|
+
*/
|
|
8
|
+
import type { App } from 'obsidian';
|
|
9
|
+
import { AbstractInputSuggest } from 'obsidian';
|
|
10
|
+
import type { TagSuggestion } from '../link-and-tag-input-suggest.mjs';
|
|
11
|
+
import { ListComponent } from './list-component.mjs';
|
|
12
|
+
/**
|
|
13
|
+
* Suggests the vault's tags in an `<input>`, whether or not the typed text starts with `#`. A picked tag is put into the
|
|
14
|
+
* input without the `#`.
|
|
15
|
+
*/
|
|
16
|
+
export declare class TagInputSuggest extends AbstractInputSuggest<TagSuggestion> {
|
|
17
|
+
/**
|
|
18
|
+
* The input the suggest completes.
|
|
19
|
+
*/
|
|
20
|
+
protected readonly inputEl: HTMLInputElement;
|
|
21
|
+
/**
|
|
22
|
+
* Creates a new tag suggest.
|
|
23
|
+
*
|
|
24
|
+
* @param app - The Obsidian app.
|
|
25
|
+
* @param inputEl - The input.
|
|
26
|
+
*/
|
|
27
|
+
constructor(app: App, inputEl: HTMLInputElement);
|
|
28
|
+
/**
|
|
29
|
+
* Renders a tag with its note count.
|
|
30
|
+
*
|
|
31
|
+
* @param suggestion - The tag.
|
|
32
|
+
* @param el - The element to render into.
|
|
33
|
+
*/
|
|
34
|
+
renderSuggestion(suggestion: TagSuggestion, el: HTMLElement): void;
|
|
35
|
+
/**
|
|
36
|
+
* Puts the tag into the input, dispatches an `input` event, then calls the `onSelect` callback.
|
|
37
|
+
*
|
|
38
|
+
* @param suggestion - The tag.
|
|
39
|
+
* @param $event - The event that picked it.
|
|
40
|
+
*/
|
|
41
|
+
selectSuggestion(suggestion: TagSuggestion, $event: KeyboardEvent | MouseEvent): void;
|
|
42
|
+
/**
|
|
43
|
+
* Gets the tags matching the typed text.
|
|
44
|
+
*
|
|
45
|
+
* @param query - The typed text.
|
|
46
|
+
* @returns The tags, best match first, then the most used.
|
|
47
|
+
*/
|
|
48
|
+
protected getSuggestions(query: string): TagSuggestion[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A {@link ListComponent} of tags, stored without the `#` and shown with it. The add row suggests the vault's tags, and
|
|
52
|
+
* a typed tag is refused unless it is a valid Obsidian tag: letters, digits, `_`, `-` and `/`, not digits only.
|
|
53
|
+
*
|
|
54
|
+
* You can add this component using {@link SettingEx.addTagList}.
|
|
55
|
+
*/
|
|
56
|
+
export declare class TagListComponent extends ListComponent {
|
|
57
|
+
/**
|
|
58
|
+
* The tag suggest attached to {@link ListComponent.newItemInputEl}.
|
|
59
|
+
*/
|
|
60
|
+
readonly suggest: TagInputSuggest;
|
|
61
|
+
/**
|
|
62
|
+
* Creates a new tag list component.
|
|
63
|
+
*
|
|
64
|
+
* @param containerEl - The container element.
|
|
65
|
+
* @param app - The Obsidian app.
|
|
66
|
+
*/
|
|
67
|
+
constructor(containerEl: HTMLElement, app: App);
|
|
68
|
+
/**
|
|
69
|
+
* Shows a tag with its `#`.
|
|
70
|
+
*
|
|
71
|
+
* @param item - The tag.
|
|
72
|
+
* @returns The tag with its `#`.
|
|
73
|
+
*/
|
|
74
|
+
protected formatItem(item: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Strips the `#` from a typed tag and validates it.
|
|
77
|
+
*
|
|
78
|
+
* @param text - The typed text.
|
|
79
|
+
* @returns The tag, or `null` when it is not a valid tag.
|
|
80
|
+
*/
|
|
81
|
+
protected normalizeItem(text: string): null | string;
|
|
82
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
|
|
33
|
+
import { AbstractInputSuggest } from "obsidian";
|
|
34
|
+
import { CssClass } from "../css-class.mjs";
|
|
35
|
+
import { getVaultTagSuggestions } from "../link-and-tag-input-suggest.mjs";
|
|
36
|
+
import { ListComponent } from "./list-component.mjs";
|
|
37
|
+
const TAG_PREFIX = "#";
|
|
38
|
+
const LEADING_TAG_PREFIXES_REG_EXP = /^#+/u;
|
|
39
|
+
const TAG_REG_EXP = /^[\p{L}\p{N}_/-]+$/u;
|
|
40
|
+
const DIGITS_ONLY_REG_EXP = /^\d+$/u;
|
|
41
|
+
class TagInputSuggest extends AbstractInputSuggest {
|
|
42
|
+
/**
|
|
43
|
+
* The input the suggest completes.
|
|
44
|
+
*/
|
|
45
|
+
inputEl;
|
|
46
|
+
/**
|
|
47
|
+
* Creates a new tag suggest.
|
|
48
|
+
*
|
|
49
|
+
* @param app - The Obsidian app.
|
|
50
|
+
* @param inputEl - The input.
|
|
51
|
+
*/
|
|
52
|
+
constructor(app, inputEl) {
|
|
53
|
+
super(app, inputEl);
|
|
54
|
+
this.inputEl = inputEl;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Renders a tag with its note count.
|
|
58
|
+
*
|
|
59
|
+
* @param suggestion - The tag.
|
|
60
|
+
* @param el - The element to render into.
|
|
61
|
+
*/
|
|
62
|
+
renderSuggestion(suggestion, el) {
|
|
63
|
+
el.addClass("mod-complex");
|
|
64
|
+
el.createDiv({ cls: "suggestion-content", text: `${TAG_PREFIX}${suggestion.tag}` });
|
|
65
|
+
el.createDiv({ cls: "suggestion-aux", text: String(suggestion.count) });
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Puts the tag into the input, dispatches an `input` event, then calls the `onSelect` callback.
|
|
69
|
+
*
|
|
70
|
+
* @param suggestion - The tag.
|
|
71
|
+
* @param $event - The event that picked it.
|
|
72
|
+
*/
|
|
73
|
+
selectSuggestion(suggestion, $event) {
|
|
74
|
+
this.setValue(suggestion.tag);
|
|
75
|
+
this.inputEl.dispatchEvent(new Event("input", { bubbles: true }));
|
|
76
|
+
super.selectSuggestion(suggestion, $event);
|
|
77
|
+
this.close();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Gets the tags matching the typed text.
|
|
81
|
+
*
|
|
82
|
+
* @param query - The typed text.
|
|
83
|
+
* @returns The tags, best match first, then the most used.
|
|
84
|
+
*/
|
|
85
|
+
getSuggestions(query) {
|
|
86
|
+
return getVaultTagSuggestions({ app: this.app, query: query.trim().replace(LEADING_TAG_PREFIXES_REG_EXP, "") });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
class TagListComponent extends ListComponent {
|
|
90
|
+
/**
|
|
91
|
+
* The tag suggest attached to {@link ListComponent.newItemInputEl}.
|
|
92
|
+
*/
|
|
93
|
+
suggest;
|
|
94
|
+
/**
|
|
95
|
+
* Creates a new tag list component.
|
|
96
|
+
*
|
|
97
|
+
* @param containerEl - The container element.
|
|
98
|
+
* @param app - The Obsidian app.
|
|
99
|
+
*/
|
|
100
|
+
constructor(containerEl, app) {
|
|
101
|
+
super(containerEl, CssClass.TagListComponent);
|
|
102
|
+
this.suggest = new TagInputSuggest(app, this.newItemInputEl);
|
|
103
|
+
this.suggest.onSelect(() => {
|
|
104
|
+
this.addTypedItem();
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Shows a tag with its `#`.
|
|
109
|
+
*
|
|
110
|
+
* @param item - The tag.
|
|
111
|
+
* @returns The tag with its `#`.
|
|
112
|
+
*/
|
|
113
|
+
formatItem(item) {
|
|
114
|
+
return `${TAG_PREFIX}${item}`;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Strips the `#` from a typed tag and validates it.
|
|
118
|
+
*
|
|
119
|
+
* @param text - The typed text.
|
|
120
|
+
* @returns The tag, or `null` when it is not a valid tag.
|
|
121
|
+
*/
|
|
122
|
+
normalizeItem(text) {
|
|
123
|
+
const tag = text.trim().replace(LEADING_TAG_PREFIXES_REG_EXP, "");
|
|
124
|
+
return TAG_REG_EXP.test(tag) && !DIGITS_ONLY_REG_EXP.test(tag) ? tag : null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export {
|
|
128
|
+
TagInputSuggest,
|
|
129
|
+
TagListComponent
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXR0aW5nLWNvbXBvbmVudHMvdGFnLWxpc3QtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyBhIGNvbXBvbmVudCB0aGF0IGVkaXRzIGEgcmVvcmRlcmFibGUgbGlzdCBvZiB0YWdzLCB3aXRoIGEgdGFnIHN1Z2dlc3QuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IEFic3RyYWN0SW5wdXRTdWdnZXN0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFRhZ1N1Z2dlc3Rpb24gfSBmcm9tICcuLi9saW5rLWFuZC10YWctaW5wdXQtc3VnZ2VzdC50cyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIC0tIFdlIG5lZWQgdG8gaW1wb3J0IGBTZXR0aW5nRXhgIHRvIHVzZSBpdCBpbiB0aGUgdHNkb2NzLlxuaW1wb3J0IHR5cGUgeyBTZXR0aW5nRXggfSBmcm9tICcuLi9zZXR0aW5nLWV4LnRzJztcblxuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHsgZ2V0VmF1bHRUYWdTdWdnZXN0aW9ucyB9IGZyb20gJy4uL2xpbmstYW5kLXRhZy1pbnB1dC1zdWdnZXN0LnRzJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICcuL2xpc3QtY29tcG9uZW50LnRzJztcblxuY29uc3QgVEFHX1BSRUZJWCA9ICcjJztcbmNvbnN0IExFQURJTkdfVEFHX1BSRUZJWEVTX1JFR19FWFAgPSAvXiMrL3U7XG5jb25zdCBUQUdfUkVHX0VYUCA9IC9eW1xccHtMfVxccHtOfV8vLV0rJC91O1xuY29uc3QgRElHSVRTX09OTFlfUkVHX0VYUCA9IC9eXFxkKyQvdTtcblxuLyoqXG4gKiBTdWdnZXN0cyB0aGUgdmF1bHQncyB0YWdzIGluIGFuIGA8aW5wdXQ+YCwgd2hldGhlciBvciBub3QgdGhlIHR5cGVkIHRleHQgc3RhcnRzIHdpdGggYCNgLiBBIHBpY2tlZCB0YWcgaXMgcHV0IGludG8gdGhlXG4gKiBpbnB1dCB3aXRob3V0IHRoZSBgI2AuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWdJbnB1dFN1Z2dlc3QgZXh0ZW5kcyBBYnN0cmFjdElucHV0U3VnZ2VzdDxUYWdTdWdnZXN0aW9uPiB7XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdGhlIHN1Z2dlc3QgY29tcGxldGVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGFnIHN1Z2dlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwLlxuICAgKiBAcGFyYW0gaW5wdXRFbCAtIFRoZSBpbnB1dC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgaW5wdXRFbDogSFRNTElucHV0RWxlbWVudCkge1xuICAgIHN1cGVyKGFwcCwgaW5wdXRFbCk7XG4gICAgdGhpcy5pbnB1dEVsID0gaW5wdXRFbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgdGFnIHdpdGggaXRzIG5vdGUgY291bnQuXG4gICAqXG4gICAqIEBwYXJhbSBzdWdnZXN0aW9uIC0gVGhlIHRhZy5cbiAgICogQHBhcmFtIGVsIC0gVGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyU3VnZ2VzdGlvbihzdWdnZXN0aW9uOiBUYWdTdWdnZXN0aW9uLCBlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBlbC5hZGRDbGFzcygnbW9kLWNvbXBsZXgnKTtcbiAgICBlbC5jcmVhdGVEaXYoeyBjbHM6ICdzdWdnZXN0aW9uLWNvbnRlbnQnLCB0ZXh0OiBgJHtUQUdfUFJFRklYfSR7c3VnZ2VzdGlvbi50YWd9YCB9KTtcbiAgICBlbC5jcmVhdGVEaXYoeyBjbHM6ICdzdWdnZXN0aW9uLWF1eCcsIHRleHQ6IFN0cmluZyhzdWdnZXN0aW9uLmNvdW50KSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdXRzIHRoZSB0YWcgaW50byB0aGUgaW5wdXQsIGRpc3BhdGNoZXMgYW4gYGlucHV0YCBldmVudCwgdGhlbiBjYWxscyB0aGUgYG9uU2VsZWN0YCBjYWxsYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHN1Z2dlc3Rpb24gLSBUaGUgdGFnLlxuICAgKiBAcGFyYW0gJGV2ZW50IC0gVGhlIGV2ZW50IHRoYXQgcGlja2VkIGl0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHNlbGVjdFN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogVGFnU3VnZ2VzdGlvbiwgJGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmFsdWUoc3VnZ2VzdGlvbi50YWcpO1xuICAgIHRoaXMuaW5wdXRFbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIHN1cGVyLnNlbGVjdFN1Z2dlc3Rpb24oc3VnZ2VzdGlvbiwgJGV2ZW50KTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGFncyBtYXRjaGluZyB0aGUgdHlwZWQgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHR5cGVkIHRleHQuXG4gICAqIEByZXR1cm5zIFRoZSB0YWdzLCBiZXN0IG1hdGNoIGZpcnN0LCB0aGVuIHRoZSBtb3N0IHVzZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0U3VnZ2VzdGlvbnMocXVlcnk6IHN0cmluZyk6IFRhZ1N1Z2dlc3Rpb25bXSB7XG4gICAgcmV0dXJuIGdldFZhdWx0VGFnU3VnZ2VzdGlvbnMoeyBhcHA6IHRoaXMuYXBwLCBxdWVyeTogcXVlcnkudHJpbSgpLnJlcGxhY2UoTEVBRElOR19UQUdfUFJFRklYRVNfUkVHX0VYUCwgJycpIH0pO1xuICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgTGlzdENvbXBvbmVudH0gb2YgdGFncywgc3RvcmVkIHdpdGhvdXQgdGhlIGAjYCBhbmQgc2hvd24gd2l0aCBpdC4gVGhlIGFkZCByb3cgc3VnZ2VzdHMgdGhlIHZhdWx0J3MgdGFncywgYW5kXG4gKiBhIHR5cGVkIHRhZyBpcyByZWZ1c2VkIHVubGVzcyBpdCBpcyBhIHZhbGlkIE9ic2lkaWFuIHRhZzogbGV0dGVycywgZGlnaXRzLCBgX2AsIGAtYCBhbmQgYC9gLCBub3QgZGlnaXRzIG9ubHkuXG4gKlxuICogWW91IGNhbiBhZGQgdGhpcyBjb21wb25lbnQgdXNpbmcge0BsaW5rIFNldHRpbmdFeC5hZGRUYWdMaXN0fS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhZ0xpc3RDb21wb25lbnQgZXh0ZW5kcyBMaXN0Q29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSB0YWcgc3VnZ2VzdCBhdHRhY2hlZCB0byB7QGxpbmsgTGlzdENvbXBvbmVudC5uZXdJdGVtSW5wdXRFbH0uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VnZ2VzdDogVGFnSW5wdXRTdWdnZXN0O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHRhZyBsaXN0IGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcC5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIGFwcDogQXBwKSB7XG4gICAgc3VwZXIoY29udGFpbmVyRWwsIENzc0NsYXNzLlRhZ0xpc3RDb21wb25lbnQpO1xuICAgIHRoaXMuc3VnZ2VzdCA9IG5ldyBUYWdJbnB1dFN1Z2dlc3QoYXBwLCB0aGlzLm5ld0l0ZW1JbnB1dEVsKTtcbiAgICB0aGlzLnN1Z2dlc3Qub25TZWxlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5hZGRUeXBlZEl0ZW0oKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhIHRhZyB3aXRoIGl0cyBgI2AuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gVGhlIHRhZy5cbiAgICogQHJldHVybnMgVGhlIHRhZyB3aXRoIGl0cyBgI2AuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZm9ybWF0SXRlbShpdGVtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtUQUdfUFJFRklYfSR7aXRlbX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmlwcyB0aGUgYCNgIGZyb20gYSB0eXBlZCB0YWcgYW5kIHZhbGlkYXRlcyBpdC5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgLSBUaGUgdHlwZWQgdGV4dC5cbiAgICogQHJldHVybnMgVGhlIHRhZywgb3IgYG51bGxgIHdoZW4gaXQgaXMgbm90IGEgdmFsaWQgdGFnLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5vcm1hbGl6ZUl0ZW0odGV4dDogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gICAgY29uc3QgdGFnID0gdGV4dC50cmltKCkucmVwbGFjZShMRUFESU5HX1RBR19QUkVGSVhFU19SRUdfRVhQLCAnJyk7XG4gICAgcmV0dXJuIFRBR19SRUdfRVhQLnRlc3QodGFnKSAmJiAhRElHSVRTX09OTFlfUkVHX0VYUC50ZXN0KHRhZykgPyB0YWcgOiBudWxsO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyw0QkFBNEI7QUFNckMsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyxxQkFBcUI7QUFFOUIsTUFBTSxhQUFhO0FBQ25CLE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sY0FBYztBQUNwQixNQUFNLHNCQUFzQjtBQU1yQixNQUFNLHdCQUF3QixxQkFBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlwRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUVosWUFBWSxLQUFVLFNBQTJCO0FBQ3RELFVBQU0sS0FBSyxPQUFPO0FBQ2xCLFNBQUssVUFBVTtBQUFBLEVBQ2pCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxpQkFBaUIsWUFBMkIsSUFBdUI7QUFDeEUsT0FBRyxTQUFTLGFBQWE7QUFDekIsT0FBRyxVQUFVLEVBQUUsS0FBSyxzQkFBc0IsTUFBTSxHQUFHLFVBQVUsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ2xGLE9BQUcsVUFBVSxFQUFFLEtBQUssa0JBQWtCLE1BQU0sT0FBTyxXQUFXLEtBQUssRUFBRSxDQUFDO0FBQUEsRUFDeEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFnQixpQkFBaUIsWUFBMkIsUUFBMEM7QUFDcEcsU0FBSyxTQUFTLFdBQVcsR0FBRztBQUM1QixTQUFLLFFBQVEsY0FBYyxJQUFJLE1BQU0sU0FBUyxFQUFFLFNBQVMsS0FBSyxDQUFDLENBQUM7QUFDaEUsVUFBTSxpQkFBaUIsWUFBWSxNQUFNO0FBQ3pDLFNBQUssTUFBTTtBQUFBLEVBQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFtQixlQUFlLE9BQWdDO0FBQ2hFLFdBQU8sdUJBQXVCLEVBQUUsS0FBSyxLQUFLLEtBQUssT0FBTyxNQUFNLEtBQUssRUFBRSxRQUFRLDhCQUE4QixFQUFFLEVBQUUsQ0FBQztBQUFBLEVBQ2hIO0FBQ0Y7QUFRTyxNQUFNLHlCQUF5QixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFULFlBQVksYUFBMEIsS0FBVTtBQUNyRCxVQUFNLGFBQWEsU0FBUyxnQkFBZ0I7QUFDNUMsU0FBSyxVQUFVLElBQUksZ0JBQWdCLEtBQUssS0FBSyxjQUFjO0FBQzNELFNBQUssUUFBUSxTQUFTLE1BQU07QUFDMUIsV0FBSyxhQUFhO0FBQUEsSUFDcEIsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFtQixXQUFXLE1BQXNCO0FBQ2xELFdBQU8sR0FBRyxVQUFVLEdBQUcsSUFBSTtBQUFBLEVBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRbUIsY0FBYyxNQUE2QjtBQUM1RCxVQUFNLE1BQU0sS0FBSyxLQUFLLEVBQUUsUUFBUSw4QkFBOEIsRUFBRTtBQUNoRSxXQUFPLFlBQVksS0FBSyxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxHQUFHLElBQUksTUFBTTtBQUFBLEVBQ3pFO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Extends the Setting class with additional methods for adding components.
|
|
7
7
|
*/
|
|
8
|
-
import type { BaseComponent } from 'obsidian';
|
|
8
|
+
import type { App, BaseComponent } from 'obsidian';
|
|
9
9
|
import { Setting } from 'obsidian';
|
|
10
10
|
import { CheckboxComponent } from './setting-components/checkbox-component.mjs';
|
|
11
11
|
import { CodeHighlighterComponent } from './setting-components/code-highlighter-component.mjs';
|
|
@@ -13,6 +13,9 @@ import { DateComponent } from './setting-components/date-component.mjs';
|
|
|
13
13
|
import { DateTimeComponent } from './setting-components/date-time-component.mjs';
|
|
14
14
|
import { EmailComponent } from './setting-components/email-component.mjs';
|
|
15
15
|
import { FileComponent } from './setting-components/file-component.mjs';
|
|
16
|
+
import { FolderListComponent } from './setting-components/folder-list-component.mjs';
|
|
17
|
+
import { HotkeyComponent } from './setting-components/hotkey-component.mjs';
|
|
18
|
+
import { ListComponent } from './setting-components/list-component.mjs';
|
|
16
19
|
import { MonthComponent } from './setting-components/month-component.mjs';
|
|
17
20
|
import { MultipleDropdownComponent } from './setting-components/multiple-dropdown-component.mjs';
|
|
18
21
|
import { MultipleEmailComponent } from './setting-components/multiple-email-component.mjs';
|
|
@@ -20,6 +23,7 @@ import { MultipleFileComponent } from './setting-components/multiple-file-compon
|
|
|
20
23
|
import { MultipleTextComponent } from './setting-components/multiple-text-component.mjs';
|
|
21
24
|
import { NumberComponent } from './setting-components/number-component.mjs';
|
|
22
25
|
import { PasswordComponent } from './setting-components/password-component.mjs';
|
|
26
|
+
import { TagListComponent } from './setting-components/tag-list-component.mjs';
|
|
23
27
|
import { TelephoneComponent } from './setting-components/telephone-component.mjs';
|
|
24
28
|
import { TimeComponent } from './setting-components/time-component.mjs';
|
|
25
29
|
import { TriStateCheckboxComponent } from './setting-components/tri-state-checkbox-component.mjs';
|
|
@@ -82,6 +86,28 @@ export declare class SettingEx extends Setting {
|
|
|
82
86
|
* @returns The setting instance.
|
|
83
87
|
*/
|
|
84
88
|
addFile(callback: (file: FileComponent) => void): this;
|
|
89
|
+
/**
|
|
90
|
+
* Adds a {@link FolderListComponent} to the setting.
|
|
91
|
+
*
|
|
92
|
+
* @param app - The Obsidian app, for the folder suggest.
|
|
93
|
+
* @param callback - The callback to call with the component.
|
|
94
|
+
* @returns The setting instance.
|
|
95
|
+
*/
|
|
96
|
+
addFolderList(app: App, callback: (folderList: FolderListComponent) => void): this;
|
|
97
|
+
/**
|
|
98
|
+
* Adds a {@link HotkeyComponent} to the setting.
|
|
99
|
+
*
|
|
100
|
+
* @param callback - The callback to call with the component.
|
|
101
|
+
* @returns The setting instance.
|
|
102
|
+
*/
|
|
103
|
+
addHotkey(callback: (hotkey: HotkeyComponent) => void): this;
|
|
104
|
+
/**
|
|
105
|
+
* Adds a {@link ListComponent} to the setting.
|
|
106
|
+
*
|
|
107
|
+
* @param callback - The callback to call with the component.
|
|
108
|
+
* @returns The setting instance.
|
|
109
|
+
*/
|
|
110
|
+
addList(callback: (list: ListComponent) => void): this;
|
|
85
111
|
/**
|
|
86
112
|
* Adds a {@link MonthComponent} to the setting.
|
|
87
113
|
*
|
|
@@ -131,6 +157,14 @@ export declare class SettingEx extends Setting {
|
|
|
131
157
|
* @returns The setting instance.
|
|
132
158
|
*/
|
|
133
159
|
addPassword(callback: (password: PasswordComponent) => void): this;
|
|
160
|
+
/**
|
|
161
|
+
* Adds a {@link TagListComponent} to the setting.
|
|
162
|
+
*
|
|
163
|
+
* @param app - The Obsidian app, for the tag suggest.
|
|
164
|
+
* @param callback - The callback to call with the component.
|
|
165
|
+
* @returns The setting instance.
|
|
166
|
+
*/
|
|
167
|
+
addTagList(app: App, callback: (tagList: TagListComponent) => void): this;
|
|
134
168
|
/**
|
|
135
169
|
* Adds a {@link TelephoneComponent} to the setting.
|
|
136
170
|
*
|