@real1ty-obsidian-plugins/utils 2.29.0 → 2.30.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/package.json +1 -1
- package/dist/async/async.d.ts +0 -69
- package/dist/async/async.d.ts.map +0 -1
- package/dist/async/async.js +0 -108
- package/dist/async/async.js.map +0 -1
- package/dist/async/batch-operations.d.ts +0 -21
- package/dist/async/batch-operations.d.ts.map +0 -1
- package/dist/async/batch-operations.js +0 -60
- package/dist/async/batch-operations.js.map +0 -1
- package/dist/async/change-notifier.d.ts +0 -13
- package/dist/async/change-notifier.d.ts.map +0 -1
- package/dist/async/change-notifier.js +0 -26
- package/dist/async/change-notifier.js.map +0 -1
- package/dist/async/debounced-notifier.d.ts +0 -26
- package/dist/async/debounced-notifier.d.ts.map +0 -1
- package/dist/async/debounced-notifier.js +0 -50
- package/dist/async/debounced-notifier.js.map +0 -1
- package/dist/async/index.d.ts +0 -5
- package/dist/async/index.d.ts.map +0 -1
- package/dist/async/index.js +0 -5
- package/dist/async/index.js.map +0 -1
- package/dist/components/frontmatter-propagation-modal.d.ts +0 -17
- package/dist/components/frontmatter-propagation-modal.d.ts.map +0 -1
- package/dist/components/frontmatter-propagation-modal.js +0 -85
- package/dist/components/frontmatter-propagation-modal.js.map +0 -1
- package/dist/components/index.d.ts +0 -5
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -5
- package/dist/components/index.js.map +0 -1
- package/dist/components/input-managers/base.d.ts +0 -30
- package/dist/components/input-managers/base.d.ts.map +0 -1
- package/dist/components/input-managers/base.js +0 -115
- package/dist/components/input-managers/base.js.map +0 -1
- package/dist/components/input-managers/expression.d.ts +0 -12
- package/dist/components/input-managers/expression.d.ts.map +0 -1
- package/dist/components/input-managers/expression.js +0 -56
- package/dist/components/input-managers/expression.js.map +0 -1
- package/dist/components/input-managers/index.d.ts +0 -4
- package/dist/components/input-managers/index.d.ts.map +0 -1
- package/dist/components/input-managers/index.js +0 -4
- package/dist/components/input-managers/index.js.map +0 -1
- package/dist/components/input-managers/search.d.ts +0 -6
- package/dist/components/input-managers/search.d.ts.map +0 -1
- package/dist/components/input-managers/search.js +0 -16
- package/dist/components/input-managers/search.js.map +0 -1
- package/dist/components/registered-events-component.d.ts +0 -30
- package/dist/components/registered-events-component.d.ts.map +0 -1
- package/dist/components/registered-events-component.js +0 -43
- package/dist/components/registered-events-component.js.map +0 -1
- package/dist/components/whats-new-modal.d.ts +0 -64
- package/dist/components/whats-new-modal.d.ts.map +0 -1
- package/dist/components/whats-new-modal.js +0 -139
- package/dist/components/whats-new-modal.js.map +0 -1
- package/dist/core/color-utils.d.ts +0 -17
- package/dist/core/color-utils.d.ts.map +0 -1
- package/dist/core/color-utils.js +0 -29
- package/dist/core/color-utils.js.map +0 -1
- package/dist/core/css-utils.d.ts +0 -39
- package/dist/core/css-utils.d.ts.map +0 -1
- package/dist/core/css-utils.js +0 -60
- package/dist/core/css-utils.js.map +0 -1
- package/dist/core/evaluator/base.d.ts +0 -22
- package/dist/core/evaluator/base.d.ts.map +0 -1
- package/dist/core/evaluator/base.js +0 -67
- package/dist/core/evaluator/base.js.map +0 -1
- package/dist/core/evaluator/color.d.ts +0 -19
- package/dist/core/evaluator/color.d.ts.map +0 -1
- package/dist/core/evaluator/color.js +0 -25
- package/dist/core/evaluator/color.js.map +0 -1
- package/dist/core/evaluator/excluded.d.ts +0 -32
- package/dist/core/evaluator/excluded.d.ts.map +0 -1
- package/dist/core/evaluator/excluded.js +0 -41
- package/dist/core/evaluator/excluded.js.map +0 -1
- package/dist/core/evaluator/filter.d.ts +0 -15
- package/dist/core/evaluator/filter.d.ts.map +0 -1
- package/dist/core/evaluator/filter.js +0 -27
- package/dist/core/evaluator/filter.js.map +0 -1
- package/dist/core/evaluator/included.d.ts +0 -36
- package/dist/core/evaluator/included.d.ts.map +0 -1
- package/dist/core/evaluator/included.js +0 -51
- package/dist/core/evaluator/included.js.map +0 -1
- package/dist/core/evaluator/index.d.ts +0 -6
- package/dist/core/evaluator/index.d.ts.map +0 -1
- package/dist/core/evaluator/index.js +0 -6
- package/dist/core/evaluator/index.js.map +0 -1
- package/dist/core/expression-utils.d.ts +0 -17
- package/dist/core/expression-utils.d.ts.map +0 -1
- package/dist/core/expression-utils.js +0 -40
- package/dist/core/expression-utils.js.map +0 -1
- package/dist/core/frontmatter-value.d.ts +0 -157
- package/dist/core/frontmatter-value.d.ts.map +0 -1
- package/dist/core/frontmatter-value.js +0 -417
- package/dist/core/frontmatter-value.js.map +0 -1
- package/dist/core/generate.d.ts +0 -7
- package/dist/core/generate.d.ts.map +0 -1
- package/dist/core/generate.js +0 -13
- package/dist/core/generate.js.map +0 -1
- package/dist/core/history.d.ts +0 -12
- package/dist/core/history.d.ts.map +0 -1
- package/dist/core/history.js +0 -39
- package/dist/core/history.js.map +0 -1
- package/dist/core/index.d.ts +0 -11
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -11
- package/dist/core/index.js.map +0 -1
- package/dist/core/indexer.d.ts +0 -109
- package/dist/core/indexer.d.ts.map +0 -1
- package/dist/core/indexer.js +0 -185
- package/dist/core/indexer.js.map +0 -1
- package/dist/core/property-renderer.d.ts +0 -9
- package/dist/core/property-renderer.d.ts.map +0 -1
- package/dist/core/property-renderer.js +0 -42
- package/dist/core/property-renderer.js.map +0 -1
- package/dist/core/validation.d.ts +0 -13
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/validation.js +0 -27
- package/dist/core/validation.js.map +0 -1
- package/dist/date/date-recurrence.d.ts +0 -30
- package/dist/date/date-recurrence.d.ts.map +0 -1
- package/dist/date/date-recurrence.js +0 -188
- package/dist/date/date-recurrence.js.map +0 -1
- package/dist/date/date.d.ts +0 -21
- package/dist/date/date.d.ts.map +0 -1
- package/dist/date/date.js +0 -105
- package/dist/date/date.js.map +0 -1
- package/dist/date/index.d.ts +0 -3
- package/dist/date/index.d.ts.map +0 -1
- package/dist/date/index.js +0 -3
- package/dist/date/index.js.map +0 -1
- package/dist/file/child-reference.d.ts +0 -9
- package/dist/file/child-reference.d.ts.map +0 -1
- package/dist/file/child-reference.js +0 -57
- package/dist/file/child-reference.js.map +0 -1
- package/dist/file/file-operations.d.ts +0 -31
- package/dist/file/file-operations.d.ts.map +0 -1
- package/dist/file/file-operations.js +0 -160
- package/dist/file/file-operations.js.map +0 -1
- package/dist/file/file-utils.d.ts +0 -33
- package/dist/file/file-utils.d.ts.map +0 -1
- package/dist/file/file-utils.js +0 -76
- package/dist/file/file-utils.js.map +0 -1
- package/dist/file/file.d.ts +0 -332
- package/dist/file/file.d.ts.map +0 -1
- package/dist/file/file.js +0 -559
- package/dist/file/file.js.map +0 -1
- package/dist/file/frontmatter-diff.d.ts +0 -38
- package/dist/file/frontmatter-diff.d.ts.map +0 -1
- package/dist/file/frontmatter-diff.js +0 -162
- package/dist/file/frontmatter-diff.js.map +0 -1
- package/dist/file/frontmatter-propagation.d.ts +0 -4
- package/dist/file/frontmatter-propagation.d.ts.map +0 -1
- package/dist/file/frontmatter-propagation.js +0 -28
- package/dist/file/frontmatter-propagation.js.map +0 -1
- package/dist/file/frontmatter-serialization.d.ts +0 -21
- package/dist/file/frontmatter-serialization.d.ts.map +0 -1
- package/dist/file/frontmatter-serialization.js +0 -57
- package/dist/file/frontmatter-serialization.js.map +0 -1
- package/dist/file/frontmatter.d.ts +0 -15
- package/dist/file/frontmatter.d.ts.map +0 -1
- package/dist/file/frontmatter.js +0 -68
- package/dist/file/frontmatter.js.map +0 -1
- package/dist/file/index.d.ts +0 -13
- package/dist/file/index.d.ts.map +0 -1
- package/dist/file/index.js +0 -13
- package/dist/file/index.js.map +0 -1
- package/dist/file/link-parser.d.ts +0 -63
- package/dist/file/link-parser.d.ts.map +0 -1
- package/dist/file/link-parser.js +0 -137
- package/dist/file/link-parser.js.map +0 -1
- package/dist/file/property-utils.d.ts +0 -55
- package/dist/file/property-utils.d.ts.map +0 -1
- package/dist/file/property-utils.js +0 -90
- package/dist/file/property-utils.js.map +0 -1
- package/dist/file/templater-service.d.ts +0 -16
- package/dist/file/templater-service.d.ts.map +0 -1
- package/dist/file/templater-service.js +0 -37
- package/dist/file/templater-service.js.map +0 -1
- package/dist/file/templater.d.ts +0 -28
- package/dist/file/templater.d.ts.map +0 -1
- package/dist/file/templater.js +0 -126
- package/dist/file/templater.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -17
- package/dist/index.js.map +0 -1
- package/dist/inputs/index.d.ts +0 -2
- package/dist/inputs/index.d.ts.map +0 -1
- package/dist/inputs/index.js +0 -2
- package/dist/inputs/index.js.map +0 -1
- package/dist/inputs/input-filter-manager.d.ts +0 -72
- package/dist/inputs/input-filter-manager.d.ts.map +0 -1
- package/dist/inputs/input-filter-manager.js +0 -140
- package/dist/inputs/input-filter-manager.js.map +0 -1
- package/dist/settings/index.d.ts +0 -3
- package/dist/settings/index.d.ts.map +0 -1
- package/dist/settings/index.js +0 -3
- package/dist/settings/index.js.map +0 -1
- package/dist/settings/settings-store.d.ts +0 -20
- package/dist/settings/settings-store.d.ts.map +0 -1
- package/dist/settings/settings-store.js +0 -82
- package/dist/settings/settings-store.js.map +0 -1
- package/dist/settings/settings-ui-builder.d.ts +0 -74
- package/dist/settings/settings-ui-builder.d.ts.map +0 -1
- package/dist/settings/settings-ui-builder.js +0 -436
- package/dist/settings/settings-ui-builder.js.map +0 -1
- package/dist/string/changelog-parser.d.ts +0 -17
- package/dist/string/changelog-parser.d.ts.map +0 -1
- package/dist/string/changelog-parser.js +0 -77
- package/dist/string/changelog-parser.js.map +0 -1
- package/dist/string/filename-utils.d.ts +0 -46
- package/dist/string/filename-utils.d.ts.map +0 -1
- package/dist/string/filename-utils.js +0 -65
- package/dist/string/filename-utils.js.map +0 -1
- package/dist/string/index.d.ts +0 -4
- package/dist/string/index.d.ts.map +0 -1
- package/dist/string/index.js +0 -4
- package/dist/string/index.js.map +0 -1
- package/dist/string/string.d.ts +0 -5
- package/dist/string/string.d.ts.map +0 -1
- package/dist/string/string.js +0 -25
- package/dist/string/string.js.map +0 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -6
- package/dist/testing/index.js.map +0 -1
- package/dist/testing/mocks/obsidian.d.ts +0 -150
- package/dist/testing/mocks/obsidian.d.ts.map +0 -1
- package/dist/testing/mocks/obsidian.js +0 -226
- package/dist/testing/mocks/obsidian.js.map +0 -1
- package/dist/testing/mocks/utils.d.ts +0 -14
- package/dist/testing/mocks/utils.d.ts.map +0 -1
- package/dist/testing/mocks/utils.js +0 -85
- package/dist/testing/mocks/utils.js.map +0 -1
- package/dist/testing/setup.d.ts +0 -2
- package/dist/testing/setup.d.ts.map +0 -1
- package/dist/testing/setup.js +0 -18
- package/dist/testing/setup.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/components/input-managers/base.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gCAAgC,GAAG,MAAM,IAAI,CAAC;AAI1D,8BAAsB,YAAY;IAYhC,SAAS,CAAC,QAAQ,EAAE,WAAW;IAC/B,SAAS,CAAC,WAAW,EAAE,MAAM;IAC7B,SAAS,CAAC,SAAS,EAAE,MAAM;IAC3B,SAAS,CAAC,cAAc,EAAE,gCAAgC;IAd3D,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACnC,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAClD,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,SAAS,CAAC,YAAY,SAAM;IAC5B,SAAS,CAAC,mBAAmB,UAAS;IACtC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAGhB,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,gCAAgC,EAC1D,gBAAgB,EAAE,OAAO,EACzB,MAAM,CAAC,EAAE,MAAM,IAAI,EACnB,UAAU,GAAE,MAA4B;IAmBzC,OAAO,CAAC,MAAM;IA0Bd,OAAO,CAAC,iBAAiB;IAUzB,SAAS,CAAC,sBAAsB,IAAI,IAAI;IAQxC,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMhD,eAAe,IAAI,MAAM;IAIzB,IAAI,IAAI,IAAI;IAMZ,IAAI,IAAI,IAAI;IAiBZ,KAAK,IAAI,IAAI;IAIb,SAAS,IAAI,OAAO;IAIpB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAU5C,OAAO,IAAI,IAAI;IAYf,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAC9C"}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
const DEFAULT_DEBOUNCE_MS = 150;
|
|
2
|
-
export class InputManager {
|
|
3
|
-
constructor(parentEl, placeholder, cssPrefix, onFilterChange, initiallyVisible, onHide, debounceMs = DEFAULT_DEBOUNCE_MS) {
|
|
4
|
-
this.parentEl = parentEl;
|
|
5
|
-
this.placeholder = placeholder;
|
|
6
|
-
this.cssPrefix = cssPrefix;
|
|
7
|
-
this.onFilterChange = onFilterChange;
|
|
8
|
-
this.inputEl = null;
|
|
9
|
-
this.debounceTimer = null;
|
|
10
|
-
this.currentValue = "";
|
|
11
|
-
this.persistentlyVisible = false;
|
|
12
|
-
this.hiddenClass = `${cssPrefix}-hidden`;
|
|
13
|
-
this.debounceMs = debounceMs;
|
|
14
|
-
this.cssClass = `${cssPrefix}-input`;
|
|
15
|
-
const classes = initiallyVisible
|
|
16
|
-
? `${cssPrefix}-container`
|
|
17
|
-
: `${cssPrefix}-container ${this.hiddenClass}`;
|
|
18
|
-
this.containerEl = this.parentEl.createEl("div", {
|
|
19
|
-
cls: classes,
|
|
20
|
-
});
|
|
21
|
-
this.onHide = onHide;
|
|
22
|
-
this.render();
|
|
23
|
-
}
|
|
24
|
-
render() {
|
|
25
|
-
this.inputEl = this.containerEl.createEl("input", {
|
|
26
|
-
type: "text",
|
|
27
|
-
cls: this.cssClass,
|
|
28
|
-
placeholder: this.placeholder,
|
|
29
|
-
});
|
|
30
|
-
this.inputEl.addEventListener("input", () => {
|
|
31
|
-
this.handleInputChange();
|
|
32
|
-
});
|
|
33
|
-
this.inputEl.addEventListener("keydown", (evt) => {
|
|
34
|
-
var _a;
|
|
35
|
-
if (evt.key === "Escape") {
|
|
36
|
-
// Only allow hiding if not persistently visible
|
|
37
|
-
if (!this.persistentlyVisible) {
|
|
38
|
-
this.hide();
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
// Just blur the input if persistently visible
|
|
42
|
-
(_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.blur();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else if (evt.key === "Enter") {
|
|
46
|
-
this.applyFilterImmediately();
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
handleInputChange() {
|
|
51
|
-
if (this.debounceTimer !== null) {
|
|
52
|
-
window.clearTimeout(this.debounceTimer);
|
|
53
|
-
}
|
|
54
|
-
this.debounceTimer = window.setTimeout(() => {
|
|
55
|
-
this.applyFilterImmediately();
|
|
56
|
-
}, this.debounceMs);
|
|
57
|
-
}
|
|
58
|
-
applyFilterImmediately() {
|
|
59
|
-
var _a, _b;
|
|
60
|
-
const newValue = (_b = (_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.value.trim()) !== null && _b !== void 0 ? _b : "";
|
|
61
|
-
if (newValue !== this.currentValue) {
|
|
62
|
-
this.updateFilterValue(newValue);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
updateFilterValue(value) {
|
|
66
|
-
this.currentValue = value;
|
|
67
|
-
this.onFilterChange();
|
|
68
|
-
}
|
|
69
|
-
getCurrentValue() {
|
|
70
|
-
return this.currentValue;
|
|
71
|
-
}
|
|
72
|
-
show() {
|
|
73
|
-
var _a;
|
|
74
|
-
this.containerEl.removeClass(this.hiddenClass);
|
|
75
|
-
(_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.focus();
|
|
76
|
-
}
|
|
77
|
-
hide() {
|
|
78
|
-
var _a;
|
|
79
|
-
// Don't allow hiding if persistently visible
|
|
80
|
-
if (this.persistentlyVisible) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
this.containerEl.addClass(this.hiddenClass);
|
|
84
|
-
if (this.inputEl) {
|
|
85
|
-
this.inputEl.value = "";
|
|
86
|
-
}
|
|
87
|
-
this.updateFilterValue("");
|
|
88
|
-
(_a = this.onHide) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
89
|
-
}
|
|
90
|
-
focus() {
|
|
91
|
-
var _a;
|
|
92
|
-
(_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.focus();
|
|
93
|
-
}
|
|
94
|
-
isVisible() {
|
|
95
|
-
return !this.containerEl.hasClass(this.hiddenClass);
|
|
96
|
-
}
|
|
97
|
-
setPersistentlyVisible(value) {
|
|
98
|
-
this.persistentlyVisible = value;
|
|
99
|
-
if (value) {
|
|
100
|
-
this.show();
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
this.hide();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
destroy() {
|
|
107
|
-
if (this.debounceTimer !== null) {
|
|
108
|
-
window.clearTimeout(this.debounceTimer);
|
|
109
|
-
this.debounceTimer = null;
|
|
110
|
-
}
|
|
111
|
-
this.containerEl.remove();
|
|
112
|
-
this.inputEl = null;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=base.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/components/input-managers/base.ts"],"names":[],"mappings":"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","sourcesContent":["export type InputManagerFilterChangeCallback = () => void;\n\nconst DEFAULT_DEBOUNCE_MS = 150;\n\nexport abstract class InputManager {\n\tprotected containerEl: HTMLElement;\n\tprotected inputEl: HTMLInputElement | null = null;\n\tprotected debounceTimer: number | null = null;\n\tprotected currentValue = \"\";\n\tprotected persistentlyVisible = false;\n\tprotected onHide?: () => void;\n\tprotected hiddenClass: string;\n\tprotected debounceMs: number;\n\tprotected cssClass: string;\n\n\tconstructor(\n\t\tprotected parentEl: HTMLElement,\n\t\tprotected placeholder: string,\n\t\tprotected cssPrefix: string,\n\t\tprotected onFilterChange: InputManagerFilterChangeCallback,\n\t\tinitiallyVisible: boolean,\n\t\tonHide?: () => void,\n\t\tdebounceMs: number = DEFAULT_DEBOUNCE_MS\n\t) {\n\t\tthis.hiddenClass = `${cssPrefix}-hidden`;\n\t\tthis.debounceMs = debounceMs;\n\t\tthis.cssClass = `${cssPrefix}-input`;\n\n\t\tconst classes = initiallyVisible\n\t\t\t? `${cssPrefix}-container`\n\t\t\t: `${cssPrefix}-container ${this.hiddenClass}`;\n\n\t\tthis.containerEl = this.parentEl.createEl(\"div\", {\n\t\t\tcls: classes,\n\t\t});\n\n\t\tthis.onHide = onHide;\n\n\t\tthis.render();\n\t}\n\n\tprivate render(): void {\n\t\tthis.inputEl = this.containerEl.createEl(\"input\", {\n\t\t\ttype: \"text\",\n\t\t\tcls: this.cssClass,\n\t\t\tplaceholder: this.placeholder,\n\t\t});\n\n\t\tthis.inputEl.addEventListener(\"input\", () => {\n\t\t\tthis.handleInputChange();\n\t\t});\n\n\t\tthis.inputEl.addEventListener(\"keydown\", (evt) => {\n\t\t\tif (evt.key === \"Escape\") {\n\t\t\t\t// Only allow hiding if not persistently visible\n\t\t\t\tif (!this.persistentlyVisible) {\n\t\t\t\t\tthis.hide();\n\t\t\t\t} else {\n\t\t\t\t\t// Just blur the input if persistently visible\n\t\t\t\t\tthis.inputEl?.blur();\n\t\t\t\t}\n\t\t\t} else if (evt.key === \"Enter\") {\n\t\t\t\tthis.applyFilterImmediately();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate handleInputChange(): void {\n\t\tif (this.debounceTimer !== null) {\n\t\t\twindow.clearTimeout(this.debounceTimer);\n\t\t}\n\n\t\tthis.debounceTimer = window.setTimeout(() => {\n\t\t\tthis.applyFilterImmediately();\n\t\t}, this.debounceMs);\n\t}\n\n\tprotected applyFilterImmediately(): void {\n\t\tconst newValue = this.inputEl?.value.trim() ?? \"\";\n\n\t\tif (newValue !== this.currentValue) {\n\t\t\tthis.updateFilterValue(newValue);\n\t\t}\n\t}\n\n\tprotected updateFilterValue(value: string): void {\n\t\tthis.currentValue = value;\n\n\t\tthis.onFilterChange();\n\t}\n\n\tgetCurrentValue(): string {\n\t\treturn this.currentValue;\n\t}\n\n\tshow(): void {\n\t\tthis.containerEl.removeClass(this.hiddenClass);\n\n\t\tthis.inputEl?.focus();\n\t}\n\n\thide(): void {\n\t\t// Don't allow hiding if persistently visible\n\t\tif (this.persistentlyVisible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.containerEl.addClass(this.hiddenClass);\n\n\t\tif (this.inputEl) {\n\t\t\tthis.inputEl.value = \"\";\n\t\t}\n\n\t\tthis.updateFilterValue(\"\");\n\n\t\tthis.onHide?.();\n\t}\n\n\tfocus(): void {\n\t\tthis.inputEl?.focus();\n\t}\n\n\tisVisible(): boolean {\n\t\treturn !this.containerEl.hasClass(this.hiddenClass);\n\t}\n\n\tsetPersistentlyVisible(value: boolean): void {\n\t\tthis.persistentlyVisible = value;\n\n\t\tif (value) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\tdestroy(): void {\n\t\tif (this.debounceTimer !== null) {\n\t\t\twindow.clearTimeout(this.debounceTimer);\n\n\t\t\tthis.debounceTimer = null;\n\t\t}\n\n\t\tthis.containerEl.remove();\n\n\t\tthis.inputEl = null;\n\t}\n\n\tabstract shouldInclude(data: unknown): boolean;\n}\n"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { InputManager } from "./base";
|
|
2
|
-
export declare class ExpressionFilterInputManager extends InputManager {
|
|
3
|
-
private compiledFunc;
|
|
4
|
-
private propertyMapping;
|
|
5
|
-
private lastWarnedExpression;
|
|
6
|
-
constructor(parentEl: HTMLElement, cssPrefix: string, onFilterChange: () => void, initiallyVisible?: boolean, placeholder?: string, onHide?: () => void, debounceMs?: number);
|
|
7
|
-
protected updateFilterValue(filterValue: string): void;
|
|
8
|
-
shouldInclude(event: {
|
|
9
|
-
meta?: Record<string, unknown>;
|
|
10
|
-
}): boolean;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=expression.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../src/components/input-managers/expression.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,qBAAa,4BAA6B,SAAQ,YAAY;IAC7D,OAAO,CAAC,YAAY,CAAkD;IAEtE,OAAO,CAAC,eAAe,CAA6B;IAEpD,OAAO,CAAC,oBAAoB,CAAuB;gBAGlD,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,IAAI,EAC1B,gBAAgB,GAAE,OAAe,EACjC,WAAW,GAAE,MAA4B,EACzC,MAAM,CAAC,EAAE,MAAM,IAAI,EACnB,UAAU,CAAC,EAAE,MAAM;IASpB,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAUtD,aAAa,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO;CAsDjE"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { buildPropertyMapping, sanitizeExpression } from "../../core/expression-utils";
|
|
2
|
-
import { InputManager } from "./base";
|
|
3
|
-
export class ExpressionFilterInputManager extends InputManager {
|
|
4
|
-
constructor(parentEl, cssPrefix, onFilterChange, initiallyVisible = false, placeholder = "Status === 'Done'", onHide, debounceMs) {
|
|
5
|
-
super(parentEl, placeholder, cssPrefix, onFilterChange, initiallyVisible, onHide, debounceMs);
|
|
6
|
-
this.compiledFunc = null;
|
|
7
|
-
this.propertyMapping = new Map();
|
|
8
|
-
this.lastWarnedExpression = null;
|
|
9
|
-
this.cssClass = `${cssPrefix}-expression-input`;
|
|
10
|
-
if (this.inputEl) {
|
|
11
|
-
this.inputEl.className = this.cssClass;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
updateFilterValue(filterValue) {
|
|
15
|
-
super.updateFilterValue(filterValue);
|
|
16
|
-
this.compiledFunc = null;
|
|
17
|
-
this.propertyMapping.clear();
|
|
18
|
-
this.lastWarnedExpression = null;
|
|
19
|
-
}
|
|
20
|
-
shouldInclude(event) {
|
|
21
|
-
if (!this.currentValue)
|
|
22
|
-
return true;
|
|
23
|
-
const frontmatter = event.meta || {};
|
|
24
|
-
try {
|
|
25
|
-
const currentKeys = new Set(Object.keys(frontmatter));
|
|
26
|
-
const existingKeys = new Set(this.propertyMapping.keys());
|
|
27
|
-
const newKeys = [...currentKeys].filter((key) => !existingKeys.has(key));
|
|
28
|
-
if (newKeys.length > 0) {
|
|
29
|
-
const allKeys = new Set([...existingKeys, ...currentKeys]);
|
|
30
|
-
this.propertyMapping = buildPropertyMapping(Array.from(allKeys));
|
|
31
|
-
this.compiledFunc = null;
|
|
32
|
-
}
|
|
33
|
-
if (!this.compiledFunc) {
|
|
34
|
-
const sanitized = sanitizeExpression(this.currentValue, this.propertyMapping);
|
|
35
|
-
const params = Array.from(this.propertyMapping.values());
|
|
36
|
-
// eslint-disable-next-line @typescript-eslint/no-implied-eval -- Dynamic function creation for expression evaluation with sanitized input
|
|
37
|
-
this.compiledFunc = new Function(...params, `"use strict"; return ${sanitized};`);
|
|
38
|
-
}
|
|
39
|
-
const values = Array.from(this.propertyMapping.keys()).map((key) => { var _a; return (_a = frontmatter[key]) !== null && _a !== void 0 ? _a : undefined; });
|
|
40
|
-
const result = this.compiledFunc(...values);
|
|
41
|
-
return result;
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
if (error instanceof ReferenceError) {
|
|
45
|
-
const hasInequality = this.currentValue.includes("!==") || this.currentValue.includes("!=");
|
|
46
|
-
return hasInequality;
|
|
47
|
-
}
|
|
48
|
-
if (this.lastWarnedExpression !== this.currentValue) {
|
|
49
|
-
console.warn("Invalid filter expression:", this.currentValue, error);
|
|
50
|
-
this.lastWarnedExpression = this.currentValue;
|
|
51
|
-
}
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=expression.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/components/input-managers/expression.ts"],"names":[],"mappings":"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","sourcesContent":["import { buildPropertyMapping, sanitizeExpression } from \"../../core/expression-utils\";\n\nimport { InputManager } from \"./base\";\n\nexport class ExpressionFilterInputManager extends InputManager {\n\tprivate compiledFunc: ((...args: unknown[]) => boolean) | null = null;\n\n\tprivate propertyMapping = new Map<string, string>();\n\n\tprivate lastWarnedExpression: string | null = null;\n\n\tconstructor(\n\t\tparentEl: HTMLElement,\n\t\tcssPrefix: string,\n\t\tonFilterChange: () => void,\n\t\tinitiallyVisible: boolean = false,\n\t\tplaceholder: string = \"Status === 'Done'\",\n\t\tonHide?: () => void,\n\t\tdebounceMs?: number\n\t) {\n\t\tsuper(parentEl, placeholder, cssPrefix, onFilterChange, initiallyVisible, onHide, debounceMs);\n\t\tthis.cssClass = `${cssPrefix}-expression-input`;\n\t\tif (this.inputEl) {\n\t\t\tthis.inputEl.className = this.cssClass;\n\t\t}\n\t}\n\n\tprotected updateFilterValue(filterValue: string): void {\n\t\tsuper.updateFilterValue(filterValue);\n\n\t\tthis.compiledFunc = null;\n\n\t\tthis.propertyMapping.clear();\n\n\t\tthis.lastWarnedExpression = null;\n\t}\n\n\tshouldInclude(event: { meta?: Record<string, unknown> }): boolean {\n\t\tif (!this.currentValue) return true;\n\n\t\tconst frontmatter = event.meta || {};\n\n\t\ttry {\n\t\t\tconst currentKeys = new Set(Object.keys(frontmatter));\n\n\t\t\tconst existingKeys = new Set(this.propertyMapping.keys());\n\n\t\t\tconst newKeys = [...currentKeys].filter((key) => !existingKeys.has(key));\n\n\t\t\tif (newKeys.length > 0) {\n\t\t\t\tconst allKeys = new Set([...existingKeys, ...currentKeys]);\n\n\t\t\t\tthis.propertyMapping = buildPropertyMapping(Array.from(allKeys));\n\n\t\t\t\tthis.compiledFunc = null;\n\t\t\t}\n\n\t\t\tif (!this.compiledFunc) {\n\t\t\t\tconst sanitized = sanitizeExpression(this.currentValue, this.propertyMapping);\n\n\t\t\t\tconst params = Array.from(this.propertyMapping.values());\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-implied-eval -- Dynamic function creation for expression evaluation with sanitized input\n\t\t\t\tthis.compiledFunc = new Function(...params, `\"use strict\"; return ${sanitized};`) as (\n\t\t\t\t\t...args: unknown[]\n\t\t\t\t) => boolean;\n\t\t\t}\n\n\t\t\tconst values = Array.from(this.propertyMapping.keys()).map(\n\t\t\t\t(key) => frontmatter[key] ?? undefined\n\t\t\t);\n\n\t\t\tconst result = this.compiledFunc(...values);\n\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (error instanceof ReferenceError) {\n\t\t\t\tconst hasInequality = this.currentValue.includes(\"!==\") || this.currentValue.includes(\"!=\");\n\n\t\t\t\treturn hasInequality;\n\t\t\t}\n\n\t\t\tif (this.lastWarnedExpression !== this.currentValue) {\n\t\t\t\tconsole.warn(\"Invalid filter expression:\", this.currentValue, error);\n\n\t\t\t\tthis.lastWarnedExpression = this.currentValue;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/input-managers/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/input-managers/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC","sourcesContent":["export * from \"./base\";\nexport * from \"./expression\";\nexport * from \"./search\";\n"]}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { InputManager } from "./base";
|
|
2
|
-
export declare class SearchFilterInputManager extends InputManager {
|
|
3
|
-
constructor(parentEl: HTMLElement, cssPrefix: string, onFilterChange: () => void, initiallyVisible?: boolean, placeholder?: string, onHide?: () => void, debounceMs?: number);
|
|
4
|
-
shouldInclude(value: string): boolean;
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/components/input-managers/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,qBAAa,wBAAyB,SAAQ,YAAY;gBAExD,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,IAAI,EAC1B,gBAAgB,GAAE,OAAe,EACjC,WAAW,GAAE,MAAqB,EAClC,MAAM,CAAC,EAAE,MAAM,IAAI,EACnB,UAAU,CAAC,EAAE,MAAM;IASpB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAKrC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { InputManager } from "./base";
|
|
2
|
-
export class SearchFilterInputManager extends InputManager {
|
|
3
|
-
constructor(parentEl, cssPrefix, onFilterChange, initiallyVisible = false, placeholder = "Search ...", onHide, debounceMs) {
|
|
4
|
-
super(parentEl, placeholder, cssPrefix, onFilterChange, initiallyVisible, onHide, debounceMs);
|
|
5
|
-
this.cssClass = `${cssPrefix}-search-input`;
|
|
6
|
-
if (this.inputEl) {
|
|
7
|
-
this.inputEl.className = this.cssClass;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
shouldInclude(value) {
|
|
11
|
-
if (!this.currentValue)
|
|
12
|
-
return true;
|
|
13
|
-
return value.toLowerCase().includes(this.currentValue.toLowerCase());
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/components/input-managers/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,OAAO,wBAAyB,SAAQ,YAAY;IACzD,YACC,QAAqB,EACrB,SAAiB,EACjB,cAA0B,EAC1B,mBAA4B,KAAK,EACjC,cAAsB,YAAY,EAClC,MAAmB,EACnB,UAAmB;QAEnB,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9F,IAAI,CAAC,QAAQ,GAAG,GAAG,SAAS,eAAe,CAAC;QAC5C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxC,CAAC;IACF,CAAC;IAED,aAAa,CAAC,KAAa;QAC1B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAEpC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IACtE,CAAC;CACD","sourcesContent":["import { InputManager } from \"./base\";\n\nexport class SearchFilterInputManager extends InputManager {\n\tconstructor(\n\t\tparentEl: HTMLElement,\n\t\tcssPrefix: string,\n\t\tonFilterChange: () => void,\n\t\tinitiallyVisible: boolean = false,\n\t\tplaceholder: string = \"Search ...\",\n\t\tonHide?: () => void,\n\t\tdebounceMs?: number\n\t) {\n\t\tsuper(parentEl, placeholder, cssPrefix, onFilterChange, initiallyVisible, onHide, debounceMs);\n\t\tthis.cssClass = `${cssPrefix}-search-input`;\n\t\tif (this.inputEl) {\n\t\t\tthis.inputEl.className = this.cssClass;\n\t\t}\n\t}\n\n\tshouldInclude(value: string): boolean {\n\t\tif (!this.currentValue) return true;\n\n\t\treturn value.toLowerCase().includes(this.currentValue.toLowerCase());\n\t}\n}\n"]}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { EventRef } from "obsidian";
|
|
2
|
-
/**
|
|
3
|
-
* Base class that provides event registration and automatic cleanup.
|
|
4
|
-
* Similar to ItemView's registerEvent/registerDomEvent pattern.
|
|
5
|
-
*
|
|
6
|
-
* Subclasses should call cleanupEvents() in their destroy/cleanup method.
|
|
7
|
-
*/
|
|
8
|
-
export declare abstract class RegisteredEventsComponent {
|
|
9
|
-
protected eventRefs: EventRef[];
|
|
10
|
-
protected eventCleanupFunctions: Array<() => void>;
|
|
11
|
-
/**
|
|
12
|
-
* Register an Obsidian event (workspace, vault, metadataCache, etc.)
|
|
13
|
-
* Event will be automatically cleaned up when destroy() is called
|
|
14
|
-
*/
|
|
15
|
-
protected registerEvent<T extends keyof any>(emitter: {
|
|
16
|
-
on(event: T, callback: (...args: any[]) => void): void;
|
|
17
|
-
off(event: T, callback: (...args: any[]) => void): void;
|
|
18
|
-
}, event: T, callback: (...args: any[]) => void): void;
|
|
19
|
-
/**
|
|
20
|
-
* Register a DOM event (window, document, or element)
|
|
21
|
-
* Event will be automatically cleaned up when destroy() is called
|
|
22
|
-
*/
|
|
23
|
-
protected registerDomEvent<K extends keyof WindowEventMap>(target: Window | Document | HTMLElement, event: K, callback: (evt: WindowEventMap[K]) => void): void;
|
|
24
|
-
/**
|
|
25
|
-
* Clean up all registered events.
|
|
26
|
-
* Should be called by subclass destroy() method.
|
|
27
|
-
*/
|
|
28
|
-
protected cleanupEvents(): void;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=registered-events-component.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registered-events-component.d.ts","sourceRoot":"","sources":["../../src/components/registered-events-component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;GAKG;AACH,8BAAsB,yBAAyB;IAC9C,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAM;IACrC,SAAS,CAAC,qBAAqB,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAM;IAExD;;;OAGG;IACH,SAAS,CAAC,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,EAC1C,OAAO,EAAE;QACR,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;QACvD,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;KACxD,EACD,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAChC,IAAI;IAOP;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,CAAC,SAAS,MAAM,cAAc,EACxD,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,EACvC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GACxC,IAAI;IAOP;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;CAM/B"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base class that provides event registration and automatic cleanup.
|
|
3
|
-
* Similar to ItemView's registerEvent/registerDomEvent pattern.
|
|
4
|
-
*
|
|
5
|
-
* Subclasses should call cleanupEvents() in their destroy/cleanup method.
|
|
6
|
-
*/
|
|
7
|
-
export class RegisteredEventsComponent {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.eventRefs = [];
|
|
10
|
-
this.eventCleanupFunctions = [];
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Register an Obsidian event (workspace, vault, metadataCache, etc.)
|
|
14
|
-
* Event will be automatically cleaned up when destroy() is called
|
|
15
|
-
*/
|
|
16
|
-
registerEvent(emitter, event, callback) {
|
|
17
|
-
emitter.on(event, callback);
|
|
18
|
-
this.eventCleanupFunctions.push(() => {
|
|
19
|
-
emitter.off(event, callback);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Register a DOM event (window, document, or element)
|
|
24
|
-
* Event will be automatically cleaned up when destroy() is called
|
|
25
|
-
*/
|
|
26
|
-
registerDomEvent(target, event, callback) {
|
|
27
|
-
target.addEventListener(event, callback);
|
|
28
|
-
this.eventCleanupFunctions.push(() => {
|
|
29
|
-
target.removeEventListener(event, callback);
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Clean up all registered events.
|
|
34
|
-
* Should be called by subclass destroy() method.
|
|
35
|
-
*/
|
|
36
|
-
cleanupEvents() {
|
|
37
|
-
for (const cleanup of this.eventCleanupFunctions) {
|
|
38
|
-
cleanup();
|
|
39
|
-
}
|
|
40
|
-
this.eventCleanupFunctions = [];
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=registered-events-component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registered-events-component.js","sourceRoot":"","sources":["../../src/components/registered-events-component.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAgB,yBAAyB;IAA/C;QACW,cAAS,GAAe,EAAE,CAAC;QAC3B,0BAAqB,GAAsB,EAAE,CAAC;IA6CzD,CAAC;IA3CA;;;OAGG;IACO,aAAa,CACtB,OAGC,EACD,KAAQ,EACR,QAAkC;QAElC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACO,gBAAgB,CACzB,MAAuC,EACvC,KAAQ,EACR,QAA0C;QAE1C,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAyB,CAAC,CAAC;QAC1D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE;YACpC,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAyB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACO,aAAa;QACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;QACX,CAAC;QACD,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;IACjC,CAAC;CACD","sourcesContent":["import type { EventRef } from \"obsidian\";\n\n/**\n * Base class that provides event registration and automatic cleanup.\n * Similar to ItemView's registerEvent/registerDomEvent pattern.\n *\n * Subclasses should call cleanupEvents() in their destroy/cleanup method.\n */\nexport abstract class RegisteredEventsComponent {\n\tprotected eventRefs: EventRef[] = [];\n\tprotected eventCleanupFunctions: Array<() => void> = [];\n\n\t/**\n\t * Register an Obsidian event (workspace, vault, metadataCache, etc.)\n\t * Event will be automatically cleaned up when destroy() is called\n\t */\n\tprotected registerEvent<T extends keyof any>(\n\t\temitter: {\n\t\t\ton(event: T, callback: (...args: any[]) => void): void;\n\t\t\toff(event: T, callback: (...args: any[]) => void): void;\n\t\t},\n\t\tevent: T,\n\t\tcallback: (...args: any[]) => void\n\t): void {\n\t\temitter.on(event, callback);\n\t\tthis.eventCleanupFunctions.push(() => {\n\t\t\temitter.off(event, callback);\n\t\t});\n\t}\n\n\t/**\n\t * Register a DOM event (window, document, or element)\n\t * Event will be automatically cleaned up when destroy() is called\n\t */\n\tprotected registerDomEvent<K extends keyof WindowEventMap>(\n\t\ttarget: Window | Document | HTMLElement,\n\t\tevent: K,\n\t\tcallback: (evt: WindowEventMap[K]) => void\n\t): void {\n\t\ttarget.addEventListener(event, callback as EventListener);\n\t\tthis.eventCleanupFunctions.push(() => {\n\t\t\ttarget.removeEventListener(event, callback as EventListener);\n\t\t});\n\t}\n\n\t/**\n\t * Clean up all registered events.\n\t * Should be called by subclass destroy() method.\n\t */\n\tprotected cleanupEvents(): void {\n\t\tfor (const cleanup of this.eventCleanupFunctions) {\n\t\t\tcleanup();\n\t\t}\n\t\tthis.eventCleanupFunctions = [];\n\t}\n}\n"]}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import type { App, Plugin } from "obsidian";
|
|
2
|
-
import { Modal } from "obsidian";
|
|
3
|
-
export interface WhatsNewModalConfig {
|
|
4
|
-
/**
|
|
5
|
-
* The CSS class prefix/suffix to use for styling.
|
|
6
|
-
* Example: "custom-calendar" will generate classes like "custom-calendar-whats-new-modal"
|
|
7
|
-
*/
|
|
8
|
-
cssPrefix: string;
|
|
9
|
-
/**
|
|
10
|
-
* Display name of the plugin.
|
|
11
|
-
* Example: "Custom Calendar"
|
|
12
|
-
*/
|
|
13
|
-
pluginName: string;
|
|
14
|
-
/**
|
|
15
|
-
* Raw changelog markdown content to parse.
|
|
16
|
-
*/
|
|
17
|
-
changelogContent: string;
|
|
18
|
-
/**
|
|
19
|
-
* Links to external resources.
|
|
20
|
-
*/
|
|
21
|
-
links: {
|
|
22
|
-
/**
|
|
23
|
-
* URL to support/donate page.
|
|
24
|
-
*/
|
|
25
|
-
support: string;
|
|
26
|
-
/**
|
|
27
|
-
* URL to full changelog page.
|
|
28
|
-
*/
|
|
29
|
-
changelog: string;
|
|
30
|
-
/**
|
|
31
|
-
* Base URL for documentation (used to resolve relative links in changelog).
|
|
32
|
-
* Example: "https://docs.example.com" or "https://docs.example.com/"
|
|
33
|
-
*/
|
|
34
|
-
documentation: string;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Generic "What's New" modal that displays changelog entries between versions.
|
|
39
|
-
* Supports custom CSS prefixes, plugin names, and configurable links.
|
|
40
|
-
*/
|
|
41
|
-
export declare class WhatsNewModal extends Modal {
|
|
42
|
-
private plugin;
|
|
43
|
-
private config;
|
|
44
|
-
private fromVersion;
|
|
45
|
-
private toVersion;
|
|
46
|
-
constructor(app: App, plugin: Plugin, config: WhatsNewModalConfig, fromVersion: string, toVersion: string);
|
|
47
|
-
/**
|
|
48
|
-
* Helper to create CSS class names with the configured prefix.
|
|
49
|
-
*/
|
|
50
|
-
private cls;
|
|
51
|
-
/**
|
|
52
|
-
* Helper to add CSS class to an element.
|
|
53
|
-
*/
|
|
54
|
-
private addCls;
|
|
55
|
-
/**
|
|
56
|
-
* Makes external links in rendered markdown clickable by adding click handlers.
|
|
57
|
-
* Handles both absolute URLs (http/https) and relative URLs (starting with /).
|
|
58
|
-
* Relative URLs are resolved against the documentation base URL.
|
|
59
|
-
*/
|
|
60
|
-
private makeExternalLinksClickable;
|
|
61
|
-
onOpen(): Promise<void>;
|
|
62
|
-
onClose(): void;
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=whats-new-modal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whats-new-modal.d.ts","sourceRoot":"","sources":["../../src/components/whats-new-modal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAoB,KAAK,EAAE,MAAM,UAAU,CAAC;AAGnD,MAAM,WAAW,mBAAmB;IACnC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,KAAK,EAAE;QACN;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QAEhB;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;QAElB;;;WAGG;QACH,aAAa,EAAE,MAAM,CAAC;KACtB,CAAC;CACF;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAGtC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;gBAJjB,GAAG,EAAE,GAAG,EACA,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM;IAK1B;;OAEG;IACH,OAAO,CAAC,GAAG;IAIX;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IAmC5B,MAAM;IAgGZ,OAAO;CAGP"}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { MarkdownRenderer, Modal } from "obsidian";
|
|
3
|
-
import { formatChangelogSections, getChangelogSince } from "../string/changelog-parser";
|
|
4
|
-
/**
|
|
5
|
-
* Generic "What's New" modal that displays changelog entries between versions.
|
|
6
|
-
* Supports custom CSS prefixes, plugin names, and configurable links.
|
|
7
|
-
*/
|
|
8
|
-
export class WhatsNewModal extends Modal {
|
|
9
|
-
constructor(app, plugin, config, fromVersion, toVersion) {
|
|
10
|
-
super(app);
|
|
11
|
-
this.plugin = plugin;
|
|
12
|
-
this.config = config;
|
|
13
|
-
this.fromVersion = fromVersion;
|
|
14
|
-
this.toVersion = toVersion;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Helper to create CSS class names with the configured prefix.
|
|
18
|
-
*/
|
|
19
|
-
cls(suffix) {
|
|
20
|
-
return `${this.config.cssPrefix}-${suffix}`;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Helper to add CSS class to an element.
|
|
24
|
-
*/
|
|
25
|
-
addCls(el, suffix) {
|
|
26
|
-
el.classList.add(this.cls(suffix));
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Makes external links in rendered markdown clickable by adding click handlers.
|
|
30
|
-
* Handles both absolute URLs (http/https) and relative URLs (starting with /).
|
|
31
|
-
* Relative URLs are resolved against the documentation base URL.
|
|
32
|
-
*/
|
|
33
|
-
makeExternalLinksClickable(container) {
|
|
34
|
-
const links = container.querySelectorAll("a[href]");
|
|
35
|
-
// Convert NodeList to Array for iteration
|
|
36
|
-
Array.from(links).forEach((link) => {
|
|
37
|
-
const href = link.getAttribute("href");
|
|
38
|
-
if (!href)
|
|
39
|
-
return;
|
|
40
|
-
let finalUrl = null;
|
|
41
|
-
// Handle absolute HTTP(S) links
|
|
42
|
-
if (href.startsWith("http://") || href.startsWith("https://")) {
|
|
43
|
-
finalUrl = href;
|
|
44
|
-
}
|
|
45
|
-
// Handle relative links (starting with /)
|
|
46
|
-
else if (href.startsWith("/")) {
|
|
47
|
-
// Get base documentation URL and ensure proper slash handling
|
|
48
|
-
const baseUrl = this.config.links.documentation;
|
|
49
|
-
const normalizedBase = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
|
|
50
|
-
finalUrl = `${normalizedBase}${href}`;
|
|
51
|
-
}
|
|
52
|
-
// Add click handler for external links
|
|
53
|
-
if (finalUrl) {
|
|
54
|
-
link.addEventListener("click", (event) => {
|
|
55
|
-
event.preventDefault();
|
|
56
|
-
window.open(finalUrl, "_blank");
|
|
57
|
-
});
|
|
58
|
-
// Add visual indicator that it's an external link
|
|
59
|
-
link.classList.add("external-link");
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
onOpen() {
|
|
64
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
-
const { contentEl } = this;
|
|
66
|
-
contentEl.empty();
|
|
67
|
-
this.addCls(contentEl, "whats-new-modal");
|
|
68
|
-
// Header section
|
|
69
|
-
const header = contentEl.createDiv({ cls: this.cls("whats-new-header") });
|
|
70
|
-
header.createEl("h2", {
|
|
71
|
-
text: `${this.config.pluginName} updated to v${this.toVersion}`,
|
|
72
|
-
});
|
|
73
|
-
header.createEl("p", {
|
|
74
|
-
text: `Changes since v${this.fromVersion}`,
|
|
75
|
-
cls: this.cls("whats-new-subtitle"),
|
|
76
|
-
});
|
|
77
|
-
// Support section
|
|
78
|
-
const supportSection = contentEl.createDiv({
|
|
79
|
-
cls: this.cls("whats-new-support"),
|
|
80
|
-
});
|
|
81
|
-
supportSection.createEl("h3", { text: "Support My Work" });
|
|
82
|
-
const supportText = supportSection.createEl("p");
|
|
83
|
-
supportText.createSpan({ text: "If you enjoy using this plugin, please consider " });
|
|
84
|
-
supportText.createEl("a", {
|
|
85
|
-
text: "supporting my work",
|
|
86
|
-
href: this.config.links.support,
|
|
87
|
-
});
|
|
88
|
-
supportText.createSpan({
|
|
89
|
-
text: ". Your support helps keep this plugin maintained and improved!",
|
|
90
|
-
});
|
|
91
|
-
contentEl.createEl("hr");
|
|
92
|
-
// Changelog content
|
|
93
|
-
const changelogSections = getChangelogSince(this.config.changelogContent, this.fromVersion, this.toVersion);
|
|
94
|
-
if (changelogSections.length === 0) {
|
|
95
|
-
contentEl.createEl("p", {
|
|
96
|
-
text: "No significant changes found in this update.",
|
|
97
|
-
cls: this.cls("whats-new-empty"),
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const changelogContainer = contentEl.createDiv({
|
|
102
|
-
cls: this.cls("whats-new-content"),
|
|
103
|
-
});
|
|
104
|
-
const markdownContent = formatChangelogSections(changelogSections);
|
|
105
|
-
yield MarkdownRenderer.render(this.app, markdownContent, changelogContainer, "/", this.plugin);
|
|
106
|
-
// Make external links clickable
|
|
107
|
-
this.makeExternalLinksClickable(changelogContainer);
|
|
108
|
-
}
|
|
109
|
-
// Action buttons
|
|
110
|
-
const buttonContainer = contentEl.createDiv({
|
|
111
|
-
cls: this.cls("whats-new-buttons"),
|
|
112
|
-
});
|
|
113
|
-
// Full changelog button
|
|
114
|
-
const changelogBtn = buttonContainer.createEl("button", {
|
|
115
|
-
text: "Full Changelog",
|
|
116
|
-
});
|
|
117
|
-
changelogBtn.addEventListener("click", () => {
|
|
118
|
-
window.open(this.config.links.changelog, "_blank");
|
|
119
|
-
});
|
|
120
|
-
// Documentation button
|
|
121
|
-
const docsBtn = buttonContainer.createEl("button", {
|
|
122
|
-
text: "Documentation",
|
|
123
|
-
});
|
|
124
|
-
docsBtn.addEventListener("click", () => {
|
|
125
|
-
window.open(this.config.links.documentation, "_blank");
|
|
126
|
-
});
|
|
127
|
-
// Close button (always present)
|
|
128
|
-
const closeBtn = buttonContainer.createEl("button", {
|
|
129
|
-
text: "Close",
|
|
130
|
-
cls: this.cls("mod-cta"),
|
|
131
|
-
});
|
|
132
|
-
closeBtn.addEventListener("click", () => this.close());
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
onClose() {
|
|
136
|
-
this.contentEl.empty();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=whats-new-modal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whats-new-modal.js","sourceRoot":"","sources":["../../src/components/whats-new-modal.ts"],"names":[],"mappings":"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","sourcesContent":["import type { App, Plugin } from \"obsidian\";\nimport { MarkdownRenderer, Modal } from \"obsidian\";\nimport { formatChangelogSections, getChangelogSince } from \"../string/changelog-parser\";\n\nexport interface WhatsNewModalConfig {\n\t/**\n\t * The CSS class prefix/suffix to use for styling.\n\t * Example: \"custom-calendar\" will generate classes like \"custom-calendar-whats-new-modal\"\n\t */\n\tcssPrefix: string;\n\n\t/**\n\t * Display name of the plugin.\n\t * Example: \"Custom Calendar\"\n\t */\n\tpluginName: string;\n\n\t/**\n\t * Raw changelog markdown content to parse.\n\t */\n\tchangelogContent: string;\n\n\t/**\n\t * Links to external resources.\n\t */\n\tlinks: {\n\t\t/**\n\t\t * URL to support/donate page.\n\t\t */\n\t\tsupport: string;\n\n\t\t/**\n\t\t * URL to full changelog page.\n\t\t */\n\t\tchangelog: string;\n\n\t\t/**\n\t\t * Base URL for documentation (used to resolve relative links in changelog).\n\t\t * Example: \"https://docs.example.com\" or \"https://docs.example.com/\"\n\t\t */\n\t\tdocumentation: string;\n\t};\n}\n\n/**\n * Generic \"What's New\" modal that displays changelog entries between versions.\n * Supports custom CSS prefixes, plugin names, and configurable links.\n */\nexport class WhatsNewModal extends Modal {\n\tconstructor(\n\t\tapp: App,\n\t\tprivate plugin: Plugin,\n\t\tprivate config: WhatsNewModalConfig,\n\t\tprivate fromVersion: string,\n\t\tprivate toVersion: string\n\t) {\n\t\tsuper(app);\n\t}\n\n\t/**\n\t * Helper to create CSS class names with the configured prefix.\n\t */\n\tprivate cls(suffix: string): string {\n\t\treturn `${this.config.cssPrefix}-${suffix}`;\n\t}\n\n\t/**\n\t * Helper to add CSS class to an element.\n\t */\n\tprivate addCls(el: HTMLElement, suffix: string): void {\n\t\tel.classList.add(this.cls(suffix));\n\t}\n\n\t/**\n\t * Makes external links in rendered markdown clickable by adding click handlers.\n\t * Handles both absolute URLs (http/https) and relative URLs (starting with /).\n\t * Relative URLs are resolved against the documentation base URL.\n\t */\n\tprivate makeExternalLinksClickable(container: HTMLElement): void {\n\t\tconst links = container.querySelectorAll<HTMLAnchorElement>(\"a[href]\");\n\n\t\t// Convert NodeList to Array for iteration\n\t\tArray.from(links).forEach((link) => {\n\t\t\tconst href = link.getAttribute(\"href\");\n\t\t\tif (!href) return;\n\n\t\t\tlet finalUrl: string | null = null;\n\n\t\t\t// Handle absolute HTTP(S) links\n\t\t\tif (href.startsWith(\"http://\") || href.startsWith(\"https://\")) {\n\t\t\t\tfinalUrl = href;\n\t\t\t}\n\t\t\t// Handle relative links (starting with /)\n\t\t\telse if (href.startsWith(\"/\")) {\n\t\t\t\t// Get base documentation URL and ensure proper slash handling\n\t\t\t\tconst baseUrl = this.config.links.documentation;\n\t\t\t\tconst normalizedBase = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n\t\t\t\tfinalUrl = `${normalizedBase}${href}`;\n\t\t\t}\n\n\t\t\t// Add click handler for external links\n\t\t\tif (finalUrl) {\n\t\t\t\tlink.addEventListener(\"click\", (event: MouseEvent) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\twindow.open(finalUrl, \"_blank\");\n\t\t\t\t});\n\n\t\t\t\t// Add visual indicator that it's an external link\n\t\t\t\tlink.classList.add(\"external-link\");\n\t\t\t}\n\t\t});\n\t}\n\n\tasync onOpen() {\n\t\tconst { contentEl } = this;\n\t\tcontentEl.empty();\n\n\t\tthis.addCls(contentEl, \"whats-new-modal\");\n\n\t\t// Header section\n\t\tconst header = contentEl.createDiv({ cls: this.cls(\"whats-new-header\") });\n\t\theader.createEl(\"h2\", {\n\t\t\ttext: `${this.config.pluginName} updated to v${this.toVersion}`,\n\t\t});\n\n\t\theader.createEl(\"p\", {\n\t\t\ttext: `Changes since v${this.fromVersion}`,\n\t\t\tcls: this.cls(\"whats-new-subtitle\"),\n\t\t});\n\n\t\t// Support section\n\t\tconst supportSection = contentEl.createDiv({\n\t\t\tcls: this.cls(\"whats-new-support\"),\n\t\t});\n\n\t\tsupportSection.createEl(\"h3\", { text: \"Support My Work\" });\n\n\t\tconst supportText = supportSection.createEl(\"p\");\n\t\tsupportText.createSpan({ text: \"If you enjoy using this plugin, please consider \" });\n\t\tsupportText.createEl(\"a\", {\n\t\t\ttext: \"supporting my work\",\n\t\t\thref: this.config.links.support,\n\t\t});\n\t\tsupportText.createSpan({\n\t\t\ttext: \". Your support helps keep this plugin maintained and improved!\",\n\t\t});\n\n\t\tcontentEl.createEl(\"hr\");\n\n\t\t// Changelog content\n\t\tconst changelogSections = getChangelogSince(\n\t\t\tthis.config.changelogContent,\n\t\t\tthis.fromVersion,\n\t\t\tthis.toVersion\n\t\t);\n\n\t\tif (changelogSections.length === 0) {\n\t\t\tcontentEl.createEl(\"p\", {\n\t\t\t\ttext: \"No significant changes found in this update.\",\n\t\t\t\tcls: this.cls(\"whats-new-empty\"),\n\t\t\t});\n\t\t} else {\n\t\t\tconst changelogContainer = contentEl.createDiv({\n\t\t\t\tcls: this.cls(\"whats-new-content\"),\n\t\t\t});\n\n\t\t\tconst markdownContent = formatChangelogSections(changelogSections);\n\n\t\t\tawait MarkdownRenderer.render(\n\t\t\t\tthis.app,\n\t\t\t\tmarkdownContent,\n\t\t\t\tchangelogContainer,\n\t\t\t\t\"/\",\n\t\t\t\tthis.plugin\n\t\t\t);\n\n\t\t\t// Make external links clickable\n\t\t\tthis.makeExternalLinksClickable(changelogContainer);\n\t\t}\n\n\t\t// Action buttons\n\t\tconst buttonContainer = contentEl.createDiv({\n\t\t\tcls: this.cls(\"whats-new-buttons\"),\n\t\t});\n\n\t\t// Full changelog button\n\t\tconst changelogBtn = buttonContainer.createEl(\"button\", {\n\t\t\ttext: \"Full Changelog\",\n\t\t});\n\t\tchangelogBtn.addEventListener(\"click\", () => {\n\t\t\twindow.open(this.config.links.changelog, \"_blank\");\n\t\t});\n\n\t\t// Documentation button\n\t\tconst docsBtn = buttonContainer.createEl(\"button\", {\n\t\t\ttext: \"Documentation\",\n\t\t});\n\t\tdocsBtn.addEventListener(\"click\", () => {\n\t\t\twindow.open(this.config.links.documentation, \"_blank\");\n\t\t});\n\n\t\t// Close button (always present)\n\t\tconst closeBtn = buttonContainer.createEl(\"button\", {\n\t\t\ttext: \"Close\",\n\t\t\tcls: this.cls(\"mod-cta\"),\n\t\t});\n\t\tcloseBtn.addEventListener(\"click\", () => this.close());\n\t}\n\n\tonClose() {\n\t\tthis.contentEl.empty();\n\t}\n}\n"]}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare function parseColor(color: string): {
|
|
2
|
-
h: number;
|
|
3
|
-
s: number;
|
|
4
|
-
l: number;
|
|
5
|
-
} | null;
|
|
6
|
-
/**
|
|
7
|
-
* Generates an array of evenly distributed HSL colors for visualization.
|
|
8
|
-
* Uses the HSL color space to create visually distinct colors by distributing
|
|
9
|
-
* them evenly around the color wheel.
|
|
10
|
-
*
|
|
11
|
-
* @param count - Number of colors to generate
|
|
12
|
-
* @param saturation - Saturation percentage (0-100), defaults to 70
|
|
13
|
-
* @param lightness - Lightness percentage (0-100), defaults to 60
|
|
14
|
-
* @returns Array of HSL color strings
|
|
15
|
-
*/
|
|
16
|
-
export declare function generateColors(count: number, saturation?: number, lightness?: number): string[];
|
|
17
|
-
//# sourceMappingURL=color-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"color-utils.d.ts","sourceRoot":"","sources":["../../src/core/color-utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,SAAK,EAAE,SAAS,SAAK,GAAG,MAAM,EAAE,CAQvF"}
|