obsidian-dev-utils 88.3.0 → 88.4.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/lib/cjs/__merged.cjs +25 -1
- package/dist/lib/cjs/__merged.d.cts +7 -3
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/html-element.cjs +7 -1
- package/dist/lib/cjs/html-element.d.cts +12 -0
- package/dist/lib/cjs/obsidian/attachment-path.cjs +10 -5
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +11 -1
- package/dist/lib/cjs/obsidian/components/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/components/pointer-position-component.cjs +159 -0
- package/dist/lib/cjs/obsidian/components/pointer-position-component.d.cts +29 -0
- package/dist/lib/cjs/obsidian/css-class.cjs +2 -1
- package/dist/lib/cjs/obsidian/css-class.d.cts +4 -0
- package/dist/lib/cjs/obsidian/file-system.cjs +20 -1
- package/dist/lib/cjs/obsidian/file-system.d.cts +25 -0
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +4 -1
- package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +3 -0
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +3 -0
- package/dist/lib/cjs/obsidian/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/path-settings.cjs +19 -5
- package/dist/lib/cjs/obsidian/path-settings.d.cts +13 -1
- package/dist/lib/cjs/obsidian/popovers/field-popover.cjs +175 -0
- package/dist/lib/cjs/obsidian/popovers/field-popover.d.cts +75 -0
- package/dist/lib/cjs/obsidian/popovers/index.cjs +152 -0
- package/dist/lib/cjs/obsidian/popovers/index.d.cts +4 -0
- package/dist/lib/cjs/obsidian/popovers/popover-anchor.cjs +178 -0
- package/dist/lib/cjs/obsidian/popovers/popover-anchor.d.cts +67 -0
- package/dist/lib/cjs/obsidian/popovers/popover.cjs +221 -0
- package/dist/lib/cjs/obsidian/popovers/popover.d.cts +78 -0
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +2 -1
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +2 -0
- package/dist/lib/esm/__merged.d.mts +7 -3
- package/dist/lib/esm/__merged.mjs +26 -2
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/html-element.d.mts +12 -0
- package/dist/lib/esm/html-element.mjs +6 -1
- package/dist/lib/esm/obsidian/attachment-path.d.mts +11 -1
- package/dist/lib/esm/obsidian/attachment-path.mjs +11 -5
- package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/components/index.mjs +3 -1
- package/dist/lib/esm/obsidian/components/pointer-position-component.d.mts +29 -0
- package/dist/lib/esm/obsidian/components/pointer-position-component.mjs +51 -0
- package/dist/lib/esm/obsidian/css-class.d.mts +4 -0
- package/dist/lib/esm/obsidian/css-class.mjs +2 -1
- package/dist/lib/esm/obsidian/file-system.d.mts +25 -0
- package/dist/lib/esm/obsidian/file-system.mjs +20 -1
- package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +3 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.mjs +4 -1
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +3 -0
- package/dist/lib/esm/obsidian/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/index.mjs +3 -1
- package/dist/lib/esm/obsidian/path-settings.d.mts +13 -1
- package/dist/lib/esm/obsidian/path-settings.mjs +18 -4
- package/dist/lib/esm/obsidian/popovers/field-popover.d.mts +75 -0
- package/dist/lib/esm/obsidian/popovers/field-popover.mjs +70 -0
- package/dist/lib/esm/obsidian/popovers/index.d.mts +4 -0
- package/dist/lib/esm/obsidian/popovers/index.mjs +32 -0
- package/dist/lib/esm/obsidian/popovers/popover-anchor.d.mts +67 -0
- package/dist/lib/esm/obsidian/popovers/popover-anchor.mjs +67 -0
- package/dist/lib/esm/obsidian/popovers/popover.d.mts +78 -0
- package/dist/lib/esm/obsidian/popovers/popover.mjs +113 -0
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +2 -0
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +2 -1
- package/dist/styles.css +25 -1
- package/obsidian/components/pointer-position-component/package.json +6 -0
- package/obsidian/popovers/field-popover/package.json +6 -0
- package/obsidian/popovers/index/package.json +6 -0
- package/obsidian/popovers/package.json +6 -0
- package/obsidian/popovers/popover/package.json +6 -0
- package/obsidian/popovers/popover-anchor/package.json +6 -0
- package/package.json +42 -16
- package/patches/brace-expansion-callable/package.json +8 -0
- package/dist/dev/main.js +0 -37772
- package/dist/dev/manifest.json +0 -9
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function initCjs() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
const globalThisRecord = globalThis;
|
|
9
|
+
globalThisRecord['__name'] ??= name;
|
|
10
|
+
const originalRequire = require;
|
|
11
|
+
if (originalRequire && !originalRequire.__isPatched) {
|
|
12
|
+
// eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
|
|
13
|
+
require = Object.assign(
|
|
14
|
+
(id) => requirePatched(id),
|
|
15
|
+
originalRequire,
|
|
16
|
+
{
|
|
17
|
+
__isPatched: true
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const newFuncs = {
|
|
23
|
+
__extractDefault() {
|
|
24
|
+
return extractDefault;
|
|
25
|
+
},
|
|
26
|
+
process() {
|
|
27
|
+
const browserProcess = {
|
|
28
|
+
browser: true,
|
|
29
|
+
cwd() {
|
|
30
|
+
return '/';
|
|
31
|
+
},
|
|
32
|
+
env: {},
|
|
33
|
+
platform: 'android'
|
|
34
|
+
};
|
|
35
|
+
return browserProcess;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
for (const key of Object.keys(newFuncs)) {
|
|
40
|
+
globalThisRecord[key] ??= newFuncs[key]?.();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function name(obj) {
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function extractDefault(module) {
|
|
48
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
52
|
+
'obsidian',
|
|
53
|
+
'@codemirror/autocomplete',
|
|
54
|
+
'@codemirror/collab',
|
|
55
|
+
'@codemirror/commands',
|
|
56
|
+
'@codemirror/language',
|
|
57
|
+
'@codemirror/lint',
|
|
58
|
+
'@codemirror/search',
|
|
59
|
+
'@codemirror/state',
|
|
60
|
+
'@codemirror/text',
|
|
61
|
+
'@codemirror/view',
|
|
62
|
+
'@lezer/common',
|
|
63
|
+
'@lezer/lr',
|
|
64
|
+
'@lezer/highlight'];
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
68
|
+
'@codemirror/closebrackets',
|
|
69
|
+
'@codemirror/comment',
|
|
70
|
+
'@codemirror/fold',
|
|
71
|
+
'@codemirror/gutter',
|
|
72
|
+
'@codemirror/highlight',
|
|
73
|
+
'@codemirror/history',
|
|
74
|
+
'@codemirror/matchbrackets',
|
|
75
|
+
'@codemirror/panel',
|
|
76
|
+
'@codemirror/rangeset',
|
|
77
|
+
'@codemirror/rectangular-selection',
|
|
78
|
+
'@codemirror/stream-parser',
|
|
79
|
+
'@codemirror/tooltip'];
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
function requirePatched(id) {
|
|
83
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
|
|
84
|
+
return originalRequire?.(id);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
88
|
+
if (globalThis.app.isMobile) {
|
|
89
|
+
if (id === 'process' || id === 'node:process') {
|
|
90
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
91
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
92
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
93
|
+
return globalThis.process;
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
const module = originalRequire?.(id);
|
|
97
|
+
if (module) {
|
|
98
|
+
return extractDefault(module);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
103
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
104
|
+
return {};
|
|
105
|
+
}
|
|
106
|
+
})();
|
|
107
|
+
|
|
108
|
+
"use strict";
|
|
109
|
+
var __defProp = Object.defineProperty;
|
|
110
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
111
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
112
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
113
|
+
var __export = (target, all) => {
|
|
114
|
+
for (var name in all)
|
|
115
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
116
|
+
};
|
|
117
|
+
var __copyProps = (to, from, except, desc) => {
|
|
118
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
119
|
+
for (let key of __getOwnPropNames(from))
|
|
120
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
121
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
122
|
+
}
|
|
123
|
+
return to;
|
|
124
|
+
};
|
|
125
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
126
|
+
var field_popover_exports = {};
|
|
127
|
+
__export(field_popover_exports, {
|
|
128
|
+
editFieldsInPopover: () => editFieldsInPopover
|
|
129
|
+
});
|
|
130
|
+
module.exports = __toCommonJS(field_popover_exports);
|
|
131
|
+
var import_obsidian = require('obsidian');
|
|
132
|
+
var import_object_utils = require('../../object-utils.cjs');
|
|
133
|
+
var import_css_class = require('../css-class.cjs');
|
|
134
|
+
var import_popover = require('./popover.cjs');
|
|
135
|
+
async function editFieldsInPopover(params) {
|
|
136
|
+
const {
|
|
137
|
+
anchor,
|
|
138
|
+
cancelButtonText,
|
|
139
|
+
cssClasses,
|
|
140
|
+
fields,
|
|
141
|
+
okButtonText
|
|
142
|
+
} = params;
|
|
143
|
+
return await (0, import_popover.showPopover)((0, import_object_utils.normalizeOptionalProperties)({
|
|
144
|
+
anchor,
|
|
145
|
+
build({ contentEl }) {
|
|
146
|
+
const editors = fields.map((field) => ({
|
|
147
|
+
key: field.key,
|
|
148
|
+
textComponent: addField(contentEl, field)
|
|
149
|
+
}));
|
|
150
|
+
return () => {
|
|
151
|
+
const values = {};
|
|
152
|
+
for (const editor of editors) {
|
|
153
|
+
values[editor.key] = editor.textComponent.getValue();
|
|
154
|
+
}
|
|
155
|
+
return values;
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
cancelButtonText,
|
|
159
|
+
cssClasses,
|
|
160
|
+
okButtonText
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
function addField(containerEl, field) {
|
|
164
|
+
const setting = new import_obsidian.Setting(containerEl).setName(field.name);
|
|
165
|
+
const textComponent = new import_obsidian.TextComponent(setting.controlEl);
|
|
166
|
+
textComponent.setValue(field.defaultValue ?? "");
|
|
167
|
+
textComponent.setPlaceholder(field.placeholder ?? "");
|
|
168
|
+
textComponent.inputEl.addClass(import_css_class.CssClass.TextBox);
|
|
169
|
+
return textComponent;
|
|
170
|
+
}
|
|
171
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
172
|
+
0 && (module.exports = {
|
|
173
|
+
editFieldsInPopover
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BvcG92ZXJzL2ZpZWxkLXBvcG92ZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBlZGl0aW5nIGEgaGFuZGZ1bCBvZiBuYW1lZCB0ZXh0IGZpZWxkcyBpbiBhIHBvcG92ZXIgYW5jaG9yZWQgYXQgYSBwb2ludC5cbiAqXG4gKiBUaGlzIGlzIHRvIHtAbGluayBzaG93UG9wb3Zlcn0gd2hhdCBgbW9kYWxzL3Byb21wdC50c2AgaXMgdG8gYG1vZGFscy9tb2RhbC50c2A6IHRoZSBjb21tb24gY2FzZVxuICogc3BlbGxlZCBkZWNsYXJhdGl2ZWx5LCBzbyBhIGNhbGxlciB0aGF0IG9ubHkgbmVlZHMgYSBmZXcgdGV4dCBmaWVsZHMgbmV2ZXIgd3JpdGVzIGFueSBET00gd2lyaW5nLlxuICogQW55dGhpbmcgcmljaGVyIFx1MjAxNCBhIGRyb3Bkb3duLCBhIHRvZ2dsZSwgcmVuZGVyZWQgbWFya2Rvd24gXHUyMDE0IGdvZXMgdGhyb3VnaCB7QGxpbmsgc2hvd1BvcG92ZXJ9XG4gKiBkaXJlY3RseS5cbiAqL1xuXG5pbXBvcnQge1xuICBTZXR0aW5nLFxuICBUZXh0Q29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQb3BvdmVyQW5jaG9yIH0gZnJvbSAnLi9wb3BvdmVyLWFuY2hvci50cyc7XG5pbXBvcnQgdHlwZSB7IFNob3dQb3BvdmVyUGFyYW1zIH0gZnJvbSAnLi9wb3BvdmVyLnRzJztcblxuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IHNob3dQb3BvdmVyIH0gZnJvbSAnLi9wb3BvdmVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZWRpdEZpZWxkc0luUG9wb3Zlcn0uXG4gKlxuICogQHR5cGVQYXJhbSBLZXkgLSBUaGUgdW5pb24gb2YgdGhlIGZpZWxkIGtleXMsIGluZmVycmVkIGZyb20ge0BsaW5rIEVkaXRGaWVsZHNJblBvcG92ZXJQYXJhbXMuZmllbGRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0RmllbGRzSW5Qb3BvdmVyUGFyYW1zPEtleSBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogV2hlcmUgdG8gcGxhY2UgdGhlIHBvcG92ZXIuXG4gICAqL1xuICByZWFkb25seSBhbmNob3I6IFBvcG92ZXJBbmNob3I7XG5cbiAgLyoqXG4gICAqIEEgdGV4dCBmb3IgdGhlIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FuY2VsQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyB0byBhcHBseSB0byB0aGUgcG9wb3Zlci5cbiAgICovXG4gIHJlYWRvbmx5IGNzc0NsYXNzZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGZpZWxkcyB0byBlZGl0LCByZW5kZXJlZCB0b3AgdG8gYm90dG9tIGluIHRoZSBnaXZlbiBvcmRlci5cbiAgICovXG4gIHJlYWRvbmx5IGZpZWxkczogcmVhZG9ubHkgUG9wb3ZlckZpZWxkPEtleT5bXTtcblxuICAvKipcbiAgICogQSB0ZXh0IGZvciB0aGUgXCJPS1wiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9rQnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSB0ZXh0IGZpZWxkIG9mIGEge0BsaW5rIGVkaXRGaWVsZHNJblBvcG92ZXJ9IHBvcG92ZXIuXG4gKlxuICogQHR5cGVQYXJhbSBLZXkgLSBUaGUga2V5IHRoZSBmaWVsZCdzIHZhbHVlIGlzIHJldHVybmVkIHVuZGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvcG92ZXJGaWVsZDxLZXkgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIEEgdmFsdWUgdG8gcHJlLWZpbGwgdGhlIGZpZWxkIHdpdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtleSB0aGUgZmllbGQncyB2YWx1ZSBpcyByZXR1cm5lZCB1bmRlci5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgc2hvd24gbmV4dCB0byB0aGUgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGZpZWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBwbGFjZWhvbGRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhIHBvcG92ZXIgd2l0aCBhIHRleHQgZmllbGQgcGVyIGVudHJ5IGluIGBmaWVsZHNgIGFuZCByZXNvbHZlcyB3aXRoIHRoZWlyIHZhbHVlcyBrZXllZCBieVxuICoge0BsaW5rIFBvcG92ZXJGaWVsZC5rZXl9LCBvciBgbnVsbGAgaWYgaXQgd2FzIGRpc21pc3NlZCB3aXRob3V0IGNvbmZpcm1pbmcuXG4gKlxuICogQHR5cGVQYXJhbSBLZXkgLSBUaGUgdW5pb24gb2YgdGhlIGZpZWxkIGtleXMsIGluZmVycmVkIGZyb20gdGhlIGBmaWVsZHNgIGFycmF5LlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcG9wb3Zlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZWRpdGVkIHZhbHVlcywgb3IgYG51bGxgIGlmIGRpc21pc3NlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRGaWVsZHNJblBvcG92ZXI8S2V5IGV4dGVuZHMgc3RyaW5nPihwYXJhbXM6IEVkaXRGaWVsZHNJblBvcG92ZXJQYXJhbXM8S2V5Pik6IFByb21pc2U8bnVsbCB8IFJlY29yZDxLZXksIHN0cmluZz4+IHtcbiAgY29uc3Qge1xuICAgIGFuY2hvcixcbiAgICBjYW5jZWxCdXR0b25UZXh0LFxuICAgIGNzc0NsYXNzZXMsXG4gICAgZmllbGRzLFxuICAgIG9rQnV0dG9uVGV4dFxuICB9ID0gcGFyYW1zO1xuXG4gIHJldHVybiBhd2FpdCBzaG93UG9wb3ZlcjxSZWNvcmQ8S2V5LCBzdHJpbmc+Pihub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8U2hvd1BvcG92ZXJQYXJhbXM8UmVjb3JkPEtleSwgc3RyaW5nPj4+KHtcbiAgICBhbmNob3IsXG4gICAgYnVpbGQoeyBjb250ZW50RWwgfSkge1xuICAgICAgY29uc3QgZWRpdG9ycyA9IGZpZWxkcy5tYXAoKGZpZWxkKSA9PiAoe1xuICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgdGV4dENvbXBvbmVudDogYWRkRmllbGQoY29udGVudEVsLCBmaWVsZClcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgLy8gVGhlIHJlY29yZCBpcyBhY2N1bXVsYXRlZCBrZXkgYnkga2V5LCBzbyBpdCBpcyBvbmx5IGNvbXBsZXRlIFx1MjAxNCBhbmQgb25seSB0eXBlZCBhcyBzdWNoIFx1MjAxNCBvbmNlIGV2ZXJ5IGZpZWxkIGhhcyBiZWVuIHJlYWQuXG4gICAgICAgIGNvbnN0IHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGVkaXRvciBvZiBlZGl0b3JzKSB7XG4gICAgICAgICAgdmFsdWVzW2VkaXRvci5rZXldID0gZWRpdG9yLnRleHRDb21wb25lbnQuZ2V0VmFsdWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICB9O1xuICAgIH0sXG4gICAgY2FuY2VsQnV0dG9uVGV4dCxcbiAgICBjc3NDbGFzc2VzLFxuICAgIG9rQnV0dG9uVGV4dFxuICB9KSk7XG59XG5cbi8qKlxuICogQWRkcyBhIHNpbmdsZSBsYWJlbGxlZCB0ZXh0IGZpZWxkIHRvIHRoZSBwb3BvdmVyLlxuICpcbiAqIEB0eXBlUGFyYW0gS2V5IC0gVGhlIGtleSB0aGUgZmllbGQncyB2YWx1ZSBpcyByZXR1cm5lZCB1bmRlci5cbiAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIGFkZCB0aGUgZmllbGQgdG8uXG4gKiBAcGFyYW0gZmllbGQgLSBUaGUgZmllbGQgdG8gYWRkLlxuICogQHJldHVybnMgVGhlIGZpZWxkJ3MgdGV4dCBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIGFkZEZpZWxkPEtleSBleHRlbmRzIHN0cmluZz4oY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBmaWVsZDogUG9wb3ZlckZpZWxkPEtleT4pOiBUZXh0Q29tcG9uZW50IHtcbiAgY29uc3Qgc2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXROYW1lKGZpZWxkLm5hbWUpO1xuICBjb25zdCB0ZXh0Q29tcG9uZW50ID0gbmV3IFRleHRDb21wb25lbnQoc2V0dGluZy5jb250cm9sRWwpO1xuICB0ZXh0Q29tcG9uZW50LnNldFZhbHVlKGZpZWxkLmRlZmF1bHRWYWx1ZSA/PyAnJyk7XG4gIHRleHRDb21wb25lbnQuc2V0UGxhY2Vob2xkZXIoZmllbGQucGxhY2Vob2xkZXIgPz8gJycpO1xuICB0ZXh0Q29tcG9uZW50LmlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuVGV4dEJveCk7XG4gIHJldHVybiB0ZXh0Q29tcG9uZW50O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0Esc0JBR087QUFLUCwwQkFBNEM7QUFDNUMsdUJBQXlCO0FBQ3pCLHFCQUE0QjtBQXlFNUIsZUFBc0Isb0JBQXdDLFFBQTZFO0FBQ3pJLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFNBQU8sVUFBTSxnQ0FBaUMsaURBQW9FO0FBQUEsSUFDaEg7QUFBQSxJQUNBLE1BQU0sRUFBRSxVQUFVLEdBQUc7QUFDbkIsWUFBTSxVQUFVLE9BQU8sSUFBSSxDQUFDLFdBQVc7QUFBQSxRQUNyQyxLQUFLLE1BQU07QUFBQSxRQUNYLGVBQWUsU0FBUyxXQUFXLEtBQUs7QUFBQSxNQUMxQyxFQUFFO0FBRUYsYUFBTyxNQUFNO0FBRVgsY0FBTSxTQUFpQyxDQUFDO0FBQ3hDLG1CQUFXLFVBQVUsU0FBUztBQUM1QixpQkFBTyxPQUFPLEdBQUcsSUFBSSxPQUFPLGNBQWMsU0FBUztBQUFBLFFBQ3JEO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDLENBQUM7QUFDSjtBQVVBLFNBQVMsU0FBNkIsYUFBMEIsT0FBeUM7QUFDdkcsUUFBTSxVQUFVLElBQUksd0JBQVEsV0FBVyxFQUFFLFFBQVEsTUFBTSxJQUFJO0FBQzNELFFBQU0sZ0JBQWdCLElBQUksOEJBQWMsUUFBUSxTQUFTO0FBQ3pELGdCQUFjLFNBQVMsTUFBTSxnQkFBZ0IsRUFBRTtBQUMvQyxnQkFBYyxlQUFlLE1BQU0sZUFBZSxFQUFFO0FBQ3BELGdCQUFjLFFBQVEsU0FBUywwQkFBUyxPQUFPO0FBQy9DLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/// <reference path="../../library.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Utility for editing a handful of named text fields in a popover anchored at a point.
|
|
6
|
+
*
|
|
7
|
+
* This is to {@link showPopover} what `modals/prompt.ts` is to `modals/modal.ts`: the common case
|
|
8
|
+
* spelled declaratively, so a caller that only needs a few text fields never writes any DOM wiring.
|
|
9
|
+
* Anything richer — a dropdown, a toggle, rendered markdown — goes through {@link showPopover}
|
|
10
|
+
* directly.
|
|
11
|
+
*/
|
|
12
|
+
import type { PopoverAnchor } from './popover-anchor.cjs';
|
|
13
|
+
/**
|
|
14
|
+
* Parameters for {@link editFieldsInPopover}.
|
|
15
|
+
*
|
|
16
|
+
* @typeParam Key - The union of the field keys, inferred from {@link EditFieldsInPopoverParams.fields}.
|
|
17
|
+
*/
|
|
18
|
+
export interface EditFieldsInPopoverParams<Key extends string> {
|
|
19
|
+
/**
|
|
20
|
+
* Where to place the popover.
|
|
21
|
+
*/
|
|
22
|
+
readonly anchor: PopoverAnchor;
|
|
23
|
+
/**
|
|
24
|
+
* A text for the "Cancel" button.
|
|
25
|
+
*/
|
|
26
|
+
readonly cancelButtonText?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Additional CSS classes to apply to the popover.
|
|
29
|
+
*/
|
|
30
|
+
readonly cssClasses?: string[];
|
|
31
|
+
/**
|
|
32
|
+
* The fields to edit, rendered top to bottom in the given order.
|
|
33
|
+
*/
|
|
34
|
+
readonly fields: readonly PopoverField<Key>[];
|
|
35
|
+
/**
|
|
36
|
+
* A text for the "OK" button.
|
|
37
|
+
*/
|
|
38
|
+
readonly okButtonText?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A single text field of a {@link editFieldsInPopover} popover.
|
|
42
|
+
*
|
|
43
|
+
* @typeParam Key - The key the field's value is returned under.
|
|
44
|
+
*/
|
|
45
|
+
export interface PopoverField<Key extends string> {
|
|
46
|
+
/**
|
|
47
|
+
* A value to pre-fill the field with.
|
|
48
|
+
*
|
|
49
|
+
* @default `''`
|
|
50
|
+
*/
|
|
51
|
+
readonly defaultValue?: string;
|
|
52
|
+
/**
|
|
53
|
+
* The key the field's value is returned under.
|
|
54
|
+
*/
|
|
55
|
+
readonly key: Key;
|
|
56
|
+
/**
|
|
57
|
+
* The label shown next to the field.
|
|
58
|
+
*/
|
|
59
|
+
readonly name: string;
|
|
60
|
+
/**
|
|
61
|
+
* A placeholder text for the field.
|
|
62
|
+
*
|
|
63
|
+
* @default `''`
|
|
64
|
+
*/
|
|
65
|
+
readonly placeholder?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Displays a popover with a text field per entry in `fields` and resolves with their values keyed by
|
|
69
|
+
* {@link PopoverField.key}, or `null` if it was dismissed without confirming.
|
|
70
|
+
*
|
|
71
|
+
* @typeParam Key - The union of the field keys, inferred from the `fields` array.
|
|
72
|
+
* @param params - The parameters for the popover.
|
|
73
|
+
* @returns A {@link Promise} that resolves with the edited values, or `null` if dismissed.
|
|
74
|
+
*/
|
|
75
|
+
export declare function editFieldsInPopover<Key extends string>(params: EditFieldsInPopoverParams<Key>): Promise<null | Record<Key, string>>;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function initCjs() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
const globalThisRecord = globalThis;
|
|
9
|
+
globalThisRecord['__name'] ??= name;
|
|
10
|
+
const originalRequire = require;
|
|
11
|
+
if (originalRequire && !originalRequire.__isPatched) {
|
|
12
|
+
// eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
|
|
13
|
+
require = Object.assign(
|
|
14
|
+
(id) => requirePatched(id),
|
|
15
|
+
originalRequire,
|
|
16
|
+
{
|
|
17
|
+
__isPatched: true
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const newFuncs = {
|
|
23
|
+
__extractDefault() {
|
|
24
|
+
return extractDefault;
|
|
25
|
+
},
|
|
26
|
+
process() {
|
|
27
|
+
const browserProcess = {
|
|
28
|
+
browser: true,
|
|
29
|
+
cwd() {
|
|
30
|
+
return '/';
|
|
31
|
+
},
|
|
32
|
+
env: {},
|
|
33
|
+
platform: 'android'
|
|
34
|
+
};
|
|
35
|
+
return browserProcess;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
for (const key of Object.keys(newFuncs)) {
|
|
40
|
+
globalThisRecord[key] ??= newFuncs[key]?.();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function name(obj) {
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function extractDefault(module) {
|
|
48
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
52
|
+
'obsidian',
|
|
53
|
+
'@codemirror/autocomplete',
|
|
54
|
+
'@codemirror/collab',
|
|
55
|
+
'@codemirror/commands',
|
|
56
|
+
'@codemirror/language',
|
|
57
|
+
'@codemirror/lint',
|
|
58
|
+
'@codemirror/search',
|
|
59
|
+
'@codemirror/state',
|
|
60
|
+
'@codemirror/text',
|
|
61
|
+
'@codemirror/view',
|
|
62
|
+
'@lezer/common',
|
|
63
|
+
'@lezer/lr',
|
|
64
|
+
'@lezer/highlight'];
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
68
|
+
'@codemirror/closebrackets',
|
|
69
|
+
'@codemirror/comment',
|
|
70
|
+
'@codemirror/fold',
|
|
71
|
+
'@codemirror/gutter',
|
|
72
|
+
'@codemirror/highlight',
|
|
73
|
+
'@codemirror/history',
|
|
74
|
+
'@codemirror/matchbrackets',
|
|
75
|
+
'@codemirror/panel',
|
|
76
|
+
'@codemirror/rangeset',
|
|
77
|
+
'@codemirror/rectangular-selection',
|
|
78
|
+
'@codemirror/stream-parser',
|
|
79
|
+
'@codemirror/tooltip'];
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
function requirePatched(id) {
|
|
83
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
|
|
84
|
+
return originalRequire?.(id);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
88
|
+
if (globalThis.app.isMobile) {
|
|
89
|
+
if (id === 'process' || id === 'node:process') {
|
|
90
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
91
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
92
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
93
|
+
return globalThis.process;
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
const module = originalRequire?.(id);
|
|
97
|
+
if (module) {
|
|
98
|
+
return extractDefault(module);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
103
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
104
|
+
return {};
|
|
105
|
+
}
|
|
106
|
+
})();
|
|
107
|
+
|
|
108
|
+
"use strict";
|
|
109
|
+
var __create = Object.create;
|
|
110
|
+
var __defProp = Object.defineProperty;
|
|
111
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
112
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
113
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
114
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
115
|
+
var __export = (target, all) => {
|
|
116
|
+
for (var name in all)
|
|
117
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
118
|
+
};
|
|
119
|
+
var __copyProps = (to, from, except, desc) => {
|
|
120
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
121
|
+
for (let key of __getOwnPropNames(from))
|
|
122
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
123
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
124
|
+
}
|
|
125
|
+
return to;
|
|
126
|
+
};
|
|
127
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
128
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
129
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
130
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
131
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
132
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
133
|
+
mod
|
|
134
|
+
));
|
|
135
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
136
|
+
var popovers_exports = {};
|
|
137
|
+
__export(popovers_exports, {
|
|
138
|
+
"field-popover": () => field_popover,
|
|
139
|
+
popover: () => popover,
|
|
140
|
+
"popover-anchor": () => popover_anchor
|
|
141
|
+
});
|
|
142
|
+
module.exports = __toCommonJS(popovers_exports);
|
|
143
|
+
var field_popover = __toESM(__extractDefault(require('./field-popover.cjs')), 1);
|
|
144
|
+
var popover_anchor = __toESM(__extractDefault(require('./popover-anchor.cjs')), 1);
|
|
145
|
+
var popover = __toESM(__extractDefault(require('./popover.cjs')), 1);
|
|
146
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
147
|
+
0 && (module.exports = {
|
|
148
|
+
"field-popover": null,
|
|
149
|
+
popover,
|
|
150
|
+
"popover-anchor": null
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BvcG92ZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2ZpZWxkLXBvcG92ZXInIGZyb20gJy4vZmllbGQtcG9wb3Zlci50cyc7XG5leHBvcnQgKiBhcyAncG9wb3Zlci1hbmNob3InIGZyb20gJy4vcG9wb3Zlci1hbmNob3IudHMnO1xuZXhwb3J0ICogYXMgJ3BvcG92ZXInIGZyb20gJy4vcG9wb3Zlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUEseUJBQUFBO0FBQUEsRUFBQTtBQUFBLDBCQUFBQztBQUFBO0FBQUE7QUFFQSxJQUFBRCxnQkFBaUM7QUFDakMsSUFBQUMsaUJBQWtDO0FBQ2xDLGNBQTJCOyIsCiAgIm5hbWVzIjogWyJmaWVsZC1wb3BvdmVyIiwgInBvcG92ZXItYW5jaG9yIl0KfQo=
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function initCjs() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
const globalThisRecord = globalThis;
|
|
9
|
+
globalThisRecord['__name'] ??= name;
|
|
10
|
+
const originalRequire = require;
|
|
11
|
+
if (originalRequire && !originalRequire.__isPatched) {
|
|
12
|
+
// eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
|
|
13
|
+
require = Object.assign(
|
|
14
|
+
(id) => requirePatched(id),
|
|
15
|
+
originalRequire,
|
|
16
|
+
{
|
|
17
|
+
__isPatched: true
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const newFuncs = {
|
|
23
|
+
__extractDefault() {
|
|
24
|
+
return extractDefault;
|
|
25
|
+
},
|
|
26
|
+
process() {
|
|
27
|
+
const browserProcess = {
|
|
28
|
+
browser: true,
|
|
29
|
+
cwd() {
|
|
30
|
+
return '/';
|
|
31
|
+
},
|
|
32
|
+
env: {},
|
|
33
|
+
platform: 'android'
|
|
34
|
+
};
|
|
35
|
+
return browserProcess;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
for (const key of Object.keys(newFuncs)) {
|
|
40
|
+
globalThisRecord[key] ??= newFuncs[key]?.();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function name(obj) {
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function extractDefault(module) {
|
|
48
|
+
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
52
|
+
'obsidian',
|
|
53
|
+
'@codemirror/autocomplete',
|
|
54
|
+
'@codemirror/collab',
|
|
55
|
+
'@codemirror/commands',
|
|
56
|
+
'@codemirror/language',
|
|
57
|
+
'@codemirror/lint',
|
|
58
|
+
'@codemirror/search',
|
|
59
|
+
'@codemirror/state',
|
|
60
|
+
'@codemirror/text',
|
|
61
|
+
'@codemirror/view',
|
|
62
|
+
'@lezer/common',
|
|
63
|
+
'@lezer/lr',
|
|
64
|
+
'@lezer/highlight'];
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
68
|
+
'@codemirror/closebrackets',
|
|
69
|
+
'@codemirror/comment',
|
|
70
|
+
'@codemirror/fold',
|
|
71
|
+
'@codemirror/gutter',
|
|
72
|
+
'@codemirror/highlight',
|
|
73
|
+
'@codemirror/history',
|
|
74
|
+
'@codemirror/matchbrackets',
|
|
75
|
+
'@codemirror/panel',
|
|
76
|
+
'@codemirror/rangeset',
|
|
77
|
+
'@codemirror/rectangular-selection',
|
|
78
|
+
'@codemirror/stream-parser',
|
|
79
|
+
'@codemirror/tooltip'];
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
function requirePatched(id) {
|
|
83
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
|
|
84
|
+
return originalRequire?.(id);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
|
|
88
|
+
if (globalThis.app.isMobile) {
|
|
89
|
+
if (id === 'process' || id === 'node:process') {
|
|
90
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
91
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
92
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
93
|
+
return globalThis.process;
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
const module = originalRequire?.(id);
|
|
97
|
+
if (module) {
|
|
98
|
+
return extractDefault(module);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// eslint-disable-next-line no-console -- Valid usage.
|
|
103
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
104
|
+
return {};
|
|
105
|
+
}
|
|
106
|
+
})();
|
|
107
|
+
|
|
108
|
+
"use strict";
|
|
109
|
+
var __defProp = Object.defineProperty;
|
|
110
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
111
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
112
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
113
|
+
var __export = (target, all) => {
|
|
114
|
+
for (var name in all)
|
|
115
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
116
|
+
};
|
|
117
|
+
var __copyProps = (to, from, except, desc) => {
|
|
118
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
119
|
+
for (let key of __getOwnPropNames(from))
|
|
120
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
121
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
122
|
+
}
|
|
123
|
+
return to;
|
|
124
|
+
};
|
|
125
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
126
|
+
var popover_anchor_exports = {};
|
|
127
|
+
__export(popover_anchor_exports, {
|
|
128
|
+
createAnchorFromDocumentCenter: () => createAnchorFromDocumentCenter,
|
|
129
|
+
createAnchorFromElement: () => createAnchorFromElement,
|
|
130
|
+
createAnchorFromPoint: () => createAnchorFromPoint,
|
|
131
|
+
createAnchorFromSelection: () => createAnchorFromSelection
|
|
132
|
+
});
|
|
133
|
+
module.exports = __toCommonJS(popover_anchor_exports);
|
|
134
|
+
var import_html_element = require('../../html-element.cjs');
|
|
135
|
+
const CENTER_FRACTION = 0.5;
|
|
136
|
+
function createAnchorFromDocumentCenter(doc) {
|
|
137
|
+
const win = (0, import_html_element.getDocumentWindow)(doc);
|
|
138
|
+
return {
|
|
139
|
+
bottom: win.innerHeight * CENTER_FRACTION,
|
|
140
|
+
doc,
|
|
141
|
+
left: win.innerWidth * CENTER_FRACTION
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function createAnchorFromElement(el) {
|
|
145
|
+
const rect = el.getBoundingClientRect();
|
|
146
|
+
return {
|
|
147
|
+
bottom: rect.bottom,
|
|
148
|
+
doc: el.ownerDocument,
|
|
149
|
+
left: rect.left
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function createAnchorFromPoint(x, y, doc) {
|
|
153
|
+
return {
|
|
154
|
+
bottom: y,
|
|
155
|
+
doc,
|
|
156
|
+
left: x
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function createAnchorFromSelection(doc) {
|
|
160
|
+
const selection = doc.getSelection();
|
|
161
|
+
const rect = selection?.rangeCount ? selection.getRangeAt(0).getBoundingClientRect() : null;
|
|
162
|
+
if (!rect || rect.bottom === 0 && rect.left === 0) {
|
|
163
|
+
return createAnchorFromDocumentCenter(doc);
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
bottom: rect.bottom,
|
|
167
|
+
doc,
|
|
168
|
+
left: rect.left
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
172
|
+
0 && (module.exports = {
|
|
173
|
+
createAnchorFromDocumentCenter,
|
|
174
|
+
createAnchorFromElement,
|
|
175
|
+
createAnchorFromPoint,
|
|
176
|
+
createAnchorFromSelection
|
|
177
|
+
});
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BvcG92ZXJzL3BvcG92ZXItYW5jaG9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHJlc29sdmVkIHBvc2l0aW9uIGEgcG9wb3ZlciBpcyBwbGFjZWQgYXQuXG4gKlxuICogQSBwb3BvdmVyIHRha2VzIGEgcmVzb2x2ZWQgYW5jaG9yIHJhdGhlciB0aGFuIGFuIGVsZW1lbnQgYmVjYXVzZSBjYWxsZXJzIGtub3cgdGhlIHBvc2l0aW9uIGluXG4gKiBkaWZmZXJlbnQgd2F5czogYSBjbGlja2VkIGVsZW1lbnQgaGFzIGEgcmVjdCwgYSBjb250ZXh0IG1lbnUgaGFzIHRoZSBwb2ludGVyIHRoYXQgb3BlbmVkIGl0LCBhbmQgYVxuICoga2V5Ym9hcmQtaW52b2tlZCBjb21tYW5kIGhhcyB0aGUgY2FyZXQuIEVhY2ggd2F5IGdldHMgaXRzIG93biBidWlsZGVyIGhlcmUsIHNvIHRoZSBwb3BvdmVyIGl0c2VsZlxuICogc3RheXMgdW5hd2FyZSBvZiBob3cgdGhlIHBvc2l0aW9uIHdhcyBmb3VuZC5cbiAqXG4gKiBUaGlzIGxpdmVzIGFwYXJ0IGZyb20gdGhlIHBvcG92ZXIgc2hlbGwgc28gdGhhdCBhbnl0aGluZyBwcm9kdWNpbmcgYW4gYW5jaG9yIFx1MjAxNCBtb3N0IG5vdGFibHlcbiAqIGBQb2ludGVyUG9zaXRpb25Db21wb25lbnRgIFx1MjAxNCBkZXBlbmRzIG9ubHkgb24gdGhlIHBvc2l0aW9uLCBub3Qgb24gdGhlIHBhbmVsIHRoYXQgY29uc3VtZXMgaXQuXG4gKi9cblxuaW1wb3J0IHsgZ2V0RG9jdW1lbnRXaW5kb3cgfSBmcm9tICcuLi8uLi9odG1sLWVsZW1lbnQudHMnO1xuXG4vKipcbiAqIFRoZSBmcmFjdGlvbiBvZiB0aGUgd2luZG93IHVzZWQgdG8gcGxhY2UgYSBjZW50ZXJlZCBhbmNob3IuXG4gKi9cbmNvbnN0IENFTlRFUl9GUkFDVElPTiA9IDAuNTtcblxuLyoqXG4gKiBXaGVyZSBhIHBvcG92ZXIgaXMgcGxhY2VkOiB2aWV3cG9ydCBjb29yZGluYXRlcyBwbHVzIHRoZSBkb2N1bWVudCB0aGV5IGJlbG9uZyB0by5cbiAqXG4gKiBDYXJyeWluZyB0aGUgZG9jdW1lbnQgZXhwbGljaXRseSBpcyB3aGF0IG1ha2VzIGFuIGFuY2hvciBpbnNpZGUgYSBwb3Atb3V0IHdpbmRvdyB3b3JrIFx1MjAxNCB0aGUgcG9wb3ZlclxuICogaXMgYXBwZW5kZWQgdG8sIGFuZCBjbGFtcGVkIGFnYWluc3QsIHRoYXQgd2luZG93IHJhdGhlciB0aGFuIHRoZSBtYWluIG9uZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3BvdmVyQW5jaG9yIHtcbiAgLyoqXG4gICAqIFRoZSB2aWV3cG9ydCBgeWAgY29vcmRpbmF0ZSB0aGUgcG9wb3ZlciBpcyBwbGFjZWQgYmVsb3cuXG4gICAqL1xuICByZWFkb25seSBib3R0b206IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRvY3VtZW50IHRoZSBjb29yZGluYXRlcyBiZWxvbmcgdG8uXG4gICAqL1xuICByZWFkb25seSBkb2M6IERvY3VtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgYHhgIGNvb3JkaW5hdGUgdGhlIHBvcG92ZXIgaXMgYWxpZ25lZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IGxlZnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBbmNob3JzIGEgcG9wb3ZlciBpbiB0aGUgbWlkZGxlIG9mIHRoZSBkb2N1bWVudCwgZm9yIHRoZSBjYXNlcyB3aGVyZSBub3RoaW5nIGJldHRlciBpcyBrbm93bi5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRvIGFuY2hvciBpbi5cbiAqIEByZXR1cm5zIFRoZSBhbmNob3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbmNob3JGcm9tRG9jdW1lbnRDZW50ZXIoZG9jOiBEb2N1bWVudCk6IFBvcG92ZXJBbmNob3Ige1xuICBjb25zdCB3aW4gPSBnZXREb2N1bWVudFdpbmRvdyhkb2MpO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogd2luLmlubmVySGVpZ2h0ICogQ0VOVEVSX0ZSQUNUSU9OLFxuICAgIGRvYyxcbiAgICBsZWZ0OiB3aW4uaW5uZXJXaWR0aCAqIENFTlRFUl9GUkFDVElPTlxuICB9O1xufVxuXG4vKipcbiAqIEFuY2hvcnMgYSBwb3BvdmVyIGp1c3QgYmVsb3cgYW4gZWxlbWVudCBcdTIwMTQgdXNlZCBmb3IgYSBjbGlja2VkIGVsZW1lbnQsIHdob3NlIHJlY3QgaXMgZXhhY3RseSB3aGVyZVxuICogdGhlIHVzZXIgaXMgbG9va2luZy5cbiAqXG4gKiBAcGFyYW0gZWwgLSBUaGUgZWxlbWVudCB0byBhbmNob3IgYXQuXG4gKiBAcmV0dXJucyBUaGUgYW5jaG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5jaG9yRnJvbUVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KTogUG9wb3ZlckFuY2hvciB7XG4gIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgIGRvYzogZWwub3duZXJEb2N1bWVudCxcbiAgICBsZWZ0OiByZWN0LmxlZnRcbiAgfTtcbn1cblxuLyoqXG4gKiBBbmNob3JzIGEgcG9wb3ZlciBhdCBhIHBvaW50ZXIgcG9zaXRpb24gXHUyMDE0IHVzZWQgZm9yIGEgY29udGV4dCBtZW51LCB3aGljaCBpcyByYWlzZWQgYnkgYSByaWdodC1jbGlja1xuICogb3IgYSBsb25nLXByZXNzIHdob3NlIGNvb3JkaW5hdGVzIGFyZSB3aGVyZSB0aGUgdXNlciBpcyBsb29raW5nLlxuICpcbiAqIEBwYXJhbSB4IC0gVGhlIHZpZXdwb3J0IGB4YCBjb29yZGluYXRlLlxuICogQHBhcmFtIHkgLSBUaGUgdmlld3BvcnQgYHlgIGNvb3JkaW5hdGUuXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRoZSBjb29yZGluYXRlcyBiZWxvbmcgdG8uXG4gKiBAcmV0dXJucyBUaGUgYW5jaG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5jaG9yRnJvbVBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyLCBkb2M6IERvY3VtZW50KTogUG9wb3ZlckFuY2hvciB7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiB5LFxuICAgIGRvYyxcbiAgICBsZWZ0OiB4XG4gIH07XG59XG5cbi8qKlxuICogQW5jaG9ycyBhIHBvcG92ZXIgYXQgdGhlIGNhcmV0IFx1MjAxNCB1c2VkIGJ5IGEgY29tbWFuZCBpbnZva2VkIGZyb20gdGhlIGtleWJvYXJkLCB3aXRoIHRoZSBjdXJzb3JcbiAqIGFscmVhZHkgYXQgdGhlIHBsYWNlIGJlaW5nIGVkaXRlZC5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IGhvbGRpbmcgdGhlIHNlbGVjdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBhbmNob3IsIG9yIGEgY2VudGVyZWQgb25lIHdoZW4gdGhlcmUgaXMgbm8gY2FyZXQgdG8gcmVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFuY2hvckZyb21TZWxlY3Rpb24oZG9jOiBEb2N1bWVudCk6IFBvcG92ZXJBbmNob3Ige1xuICBjb25zdCBzZWxlY3Rpb24gPSBkb2MuZ2V0U2VsZWN0aW9uKCk7XG4gIGNvbnN0IHJlY3QgPSBzZWxlY3Rpb24/LnJhbmdlQ291bnQgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IG51bGw7XG4gIGlmICghcmVjdCB8fCAocmVjdC5ib3R0b20gPT09IDAgJiYgcmVjdC5sZWZ0ID09PSAwKSkge1xuICAgIHJldHVybiBjcmVhdGVBbmNob3JGcm9tRG9jdW1lbnRDZW50ZXIoZG9jKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBkb2MsXG4gICAgbGVmdDogcmVjdC5sZWZ0XG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSwwQkFBa0M7QUFLbEMsTUFBTSxrQkFBa0I7QUErQmpCLFNBQVMsK0JBQStCLEtBQThCO0FBQzNFLFFBQU0sVUFBTSx1Q0FBa0IsR0FBRztBQUNqQyxTQUFPO0FBQUEsSUFDTCxRQUFRLElBQUksY0FBYztBQUFBLElBQzFCO0FBQUEsSUFDQSxNQUFNLElBQUksYUFBYTtBQUFBLEVBQ3pCO0FBQ0Y7QUFTTyxTQUFTLHdCQUF3QixJQUFnQztBQUN0RSxRQUFNLE9BQU8sR0FBRyxzQkFBc0I7QUFDdEMsU0FBTztBQUFBLElBQ0wsUUFBUSxLQUFLO0FBQUEsSUFDYixLQUFLLEdBQUc7QUFBQSxJQUNSLE1BQU0sS0FBSztBQUFBLEVBQ2I7QUFDRjtBQVdPLFNBQVMsc0JBQXNCLEdBQVcsR0FBVyxLQUE4QjtBQUN4RixTQUFPO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUjtBQUFBLElBQ0EsTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQVNPLFNBQVMsMEJBQTBCLEtBQThCO0FBQ3RFLFFBQU0sWUFBWSxJQUFJLGFBQWE7QUFDbkMsUUFBTSxPQUFPLFdBQVcsYUFBYSxVQUFVLFdBQVcsQ0FBQyxFQUFFLHNCQUFzQixJQUFJO0FBQ3ZGLE1BQUksQ0FBQyxRQUFTLEtBQUssV0FBVyxLQUFLLEtBQUssU0FBUyxHQUFJO0FBQ25ELFdBQU8sK0JBQStCLEdBQUc7QUFBQSxFQUMzQztBQUVBLFNBQU87QUFBQSxJQUNMLFFBQVEsS0FBSztBQUFBLElBQ2I7QUFBQSxJQUNBLE1BQU0sS0FBSztBQUFBLEVBQ2I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/// <reference path="../../library.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The resolved position a popover is placed at.
|
|
6
|
+
*
|
|
7
|
+
* A popover takes a resolved anchor rather than an element because callers know the position in
|
|
8
|
+
* different ways: a clicked element has a rect, a context menu has the pointer that opened it, and a
|
|
9
|
+
* keyboard-invoked command has the caret. Each way gets its own builder here, so the popover itself
|
|
10
|
+
* stays unaware of how the position was found.
|
|
11
|
+
*
|
|
12
|
+
* This lives apart from the popover shell so that anything producing an anchor — most notably
|
|
13
|
+
* `PointerPositionComponent` — depends only on the position, not on the panel that consumes it.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Where a popover is placed: viewport coordinates plus the document they belong to.
|
|
17
|
+
*
|
|
18
|
+
* Carrying the document explicitly is what makes an anchor inside a pop-out window work — the popover
|
|
19
|
+
* is appended to, and clamped against, that window rather than the main one.
|
|
20
|
+
*/
|
|
21
|
+
export interface PopoverAnchor {
|
|
22
|
+
/**
|
|
23
|
+
* The viewport `y` coordinate the popover is placed below.
|
|
24
|
+
*/
|
|
25
|
+
readonly bottom: number;
|
|
26
|
+
/**
|
|
27
|
+
* The document the coordinates belong to.
|
|
28
|
+
*/
|
|
29
|
+
readonly doc: Document;
|
|
30
|
+
/**
|
|
31
|
+
* The viewport `x` coordinate the popover is aligned to.
|
|
32
|
+
*/
|
|
33
|
+
readonly left: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Anchors a popover in the middle of the document, for the cases where nothing better is known.
|
|
37
|
+
*
|
|
38
|
+
* @param doc - The document to anchor in.
|
|
39
|
+
* @returns The anchor.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createAnchorFromDocumentCenter(doc: Document): PopoverAnchor;
|
|
42
|
+
/**
|
|
43
|
+
* Anchors a popover just below an element — used for a clicked element, whose rect is exactly where
|
|
44
|
+
* the user is looking.
|
|
45
|
+
*
|
|
46
|
+
* @param el - The element to anchor at.
|
|
47
|
+
* @returns The anchor.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createAnchorFromElement(el: HTMLElement): PopoverAnchor;
|
|
50
|
+
/**
|
|
51
|
+
* Anchors a popover at a pointer position — used for a context menu, which is raised by a right-click
|
|
52
|
+
* or a long-press whose coordinates are where the user is looking.
|
|
53
|
+
*
|
|
54
|
+
* @param x - The viewport `x` coordinate.
|
|
55
|
+
* @param y - The viewport `y` coordinate.
|
|
56
|
+
* @param doc - The document the coordinates belong to.
|
|
57
|
+
* @returns The anchor.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createAnchorFromPoint(x: number, y: number, doc: Document): PopoverAnchor;
|
|
60
|
+
/**
|
|
61
|
+
* Anchors a popover at the caret — used by a command invoked from the keyboard, with the cursor
|
|
62
|
+
* already at the place being edited.
|
|
63
|
+
*
|
|
64
|
+
* @param doc - The document holding the selection.
|
|
65
|
+
* @returns The anchor, or a centered one when there is no caret to read.
|
|
66
|
+
*/
|
|
67
|
+
export declare function createAnchorFromSelection(doc: Document): PopoverAnchor;
|