relly-ui 1.0.1 → 1.1.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/README.md +15 -5
- package/dist/index.d.ts +139 -2
- package/dist/relly-ui.css +1 -1
- package/dist/relly-ui.es.js +976 -603
- package/dist/relly-ui.es.js.map +1 -1
- package/dist/relly-ui.iife.js +11 -11
- package/dist/relly-ui.iife.js.map +1 -1
- package/dist/relly-ui.umd.js +11 -11
- package/dist/relly-ui.umd.js.map +1 -1
- package/package.json +1 -1
package/dist/relly-ui.es.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
class
|
|
1
|
+
var ge = Object.defineProperty;
|
|
2
|
+
var be = (f, i, e) => i in f ? ge(f, i, { enumerable: !0, configurable: !0, writable: !0, value: e }) : f[i] = e;
|
|
3
|
+
var l = (f, i, e) => be(f, typeof i != "symbol" ? i + "" : i, e);
|
|
4
|
+
class E {
|
|
5
5
|
constructor(i, e, t, n, s) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
6
|
+
l(this, "element");
|
|
7
|
+
l(this, "labelEl");
|
|
8
|
+
l(this, "controlEl");
|
|
9
|
+
l(this, "label");
|
|
10
|
+
l(this, "tooltipText");
|
|
11
|
+
l(this, "tooltipEl");
|
|
12
|
+
l(this, "conditionPredicate");
|
|
13
|
+
l(this, "targetObject");
|
|
14
|
+
l(this, "property");
|
|
15
|
+
l(this, "initialValue");
|
|
16
|
+
l(this, "prevValue");
|
|
17
|
+
l(this, "onChangeCallback");
|
|
18
|
+
l(this, "isListening", !1);
|
|
19
|
+
l(this, "contextMenuItems");
|
|
20
|
+
l(this, "disabled", !1);
|
|
21
21
|
if (this.bindingEngine = n, this.presetManager = s, this.label = i, this.targetObject = e, this.property = t, this.targetObject && this.property) {
|
|
22
22
|
this.prevValue = this.targetObject[this.property];
|
|
23
23
|
try {
|
|
@@ -101,24 +101,24 @@ class C {
|
|
|
101
101
|
this.isListening && this.bindingEngine && (this.bindingEngine.unregister(this), this.isListening = !1), this.presetManager && this.presetManager.unregister(this), this.element.remove();
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
class
|
|
105
|
-
constructor(e, t, n, s, r,
|
|
104
|
+
class I extends E {
|
|
105
|
+
constructor(e, t, n, s, r, o) {
|
|
106
106
|
super(e, t, n, s, r);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
this.soundEngine =
|
|
107
|
+
l(this, "wrapperEl");
|
|
108
|
+
l(this, "boxEl");
|
|
109
|
+
l(this, "soundEngine");
|
|
110
|
+
this.soundEngine = o, this.wrapperEl = document.createElement("div"), this.wrapperEl.className = "relly-checkbox-wrapper", this.wrapperEl.setAttribute("role", "checkbox"), this.wrapperEl.setAttribute("tabindex", "0"), this.boxEl = document.createElement("div"), this.boxEl.className = "relly-checkbox-box", this.boxEl.innerHTML = `
|
|
111
111
|
<svg class="relly-checkbox-icon" viewBox="0 0 12 10">
|
|
112
112
|
<polyline points="1.5 5 4.5 8.5 10.5 1.5"></polyline>
|
|
113
113
|
</svg>
|
|
114
114
|
`, this.wrapperEl.appendChild(this.boxEl), this.controlEl.appendChild(this.wrapperEl), this.wrapperEl.addEventListener("click", () => {
|
|
115
115
|
var h;
|
|
116
|
-
const
|
|
117
|
-
(h = this.soundEngine) == null || h.playToggle(
|
|
118
|
-
}), this.wrapperEl.addEventListener("keydown", (
|
|
116
|
+
const a = !this.getValue();
|
|
117
|
+
(h = this.soundEngine) == null || h.playToggle(a), this.setValue(a);
|
|
118
|
+
}), this.wrapperEl.addEventListener("keydown", (a) => {
|
|
119
119
|
var h;
|
|
120
|
-
if (
|
|
121
|
-
|
|
120
|
+
if (a.key === " " || a.key === "Enter") {
|
|
121
|
+
a.preventDefault();
|
|
122
122
|
const c = !this.getValue();
|
|
123
123
|
(h = this.soundEngine) == null || h.playToggle(c), this.setValue(c);
|
|
124
124
|
}
|
|
@@ -133,41 +133,41 @@ class L extends C {
|
|
|
133
133
|
return this.wrapperEl.setAttribute("aria-checked", e ? "true" : "false"), e ? this.wrapperEl.classList.add("relly-checked") : this.wrapperEl.classList.remove("relly-checked"), this;
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
-
class V extends
|
|
137
|
-
constructor(e, t, n, s, r,
|
|
136
|
+
class V extends E {
|
|
137
|
+
constructor(e, t, n, s, r, o) {
|
|
138
138
|
super(e, t, n, s, r);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
this.soundEngine =
|
|
148
|
-
const
|
|
149
|
-
this.triggerSound(), this.setValue(
|
|
139
|
+
l(this, "containerEl");
|
|
140
|
+
l(this, "rangeInput");
|
|
141
|
+
l(this, "numberInput");
|
|
142
|
+
l(this, "soundEngine");
|
|
143
|
+
l(this, "lastSoundTime", 0);
|
|
144
|
+
l(this, "min", 0);
|
|
145
|
+
l(this, "max", 100);
|
|
146
|
+
l(this, "step", 1);
|
|
147
|
+
this.soundEngine = o, this.containerEl = document.createElement("div"), this.containerEl.className = "relly-slider-container", this.rangeInput = document.createElement("input"), this.rangeInput.type = "range", this.rangeInput.className = "relly-slider-range", this.numberInput = document.createElement("input"), this.numberInput.type = "number", this.numberInput.className = "relly-slider-number", this.numberInput.title = "Drag horizontally to scrub value, or type directly", this.containerEl.appendChild(this.rangeInput), this.containerEl.appendChild(this.numberInput), this.controlEl.appendChild(this.containerEl), this.applyConstraints(), this.rangeInput.addEventListener("input", () => {
|
|
148
|
+
const a = parseFloat(this.rangeInput.value);
|
|
149
|
+
this.triggerSound(), this.setValue(a);
|
|
150
150
|
}), this.numberInput.addEventListener("change", () => {
|
|
151
|
-
let
|
|
152
|
-
isNaN(
|
|
151
|
+
let a = parseFloat(this.numberInput.value);
|
|
152
|
+
isNaN(a) && (a = this.min), a = Math.max(this.min, Math.min(this.max, a)), this.triggerSound(), this.setValue(a);
|
|
153
153
|
}), this.setupJogScrubbing(), this.update();
|
|
154
154
|
}
|
|
155
155
|
setupJogScrubbing() {
|
|
156
156
|
let e = !1, t = 0, n = 0;
|
|
157
|
-
const s = (
|
|
158
|
-
const
|
|
159
|
-
if (!e && Math.abs(
|
|
160
|
-
const h =
|
|
161
|
-
let p = n +
|
|
157
|
+
const s = (o) => {
|
|
158
|
+
const a = o.clientX - t;
|
|
159
|
+
if (!e && Math.abs(a) > 3 && (e = !0, typeof document < "u" && document.body.classList.add("relly-jog-scrubbing")), e) {
|
|
160
|
+
const h = o.shiftKey ? 10 : o.altKey ? 0.1 : 1, c = this.step * h, m = a * c;
|
|
161
|
+
let p = n + m;
|
|
162
162
|
p = Math.max(this.min, Math.min(this.max, p));
|
|
163
|
-
const d = (
|
|
164
|
-
p = parseFloat(p.toFixed(Math.
|
|
163
|
+
const d = (c.toString().split(".")[1] || "").length, y = 1 / c;
|
|
164
|
+
p = Math.round(p * y) / y, p = parseFloat(p.toFixed(Math.min(d, 4))), this.triggerSound(), this.setValue(p), o.preventDefault();
|
|
165
165
|
}
|
|
166
166
|
}, r = () => {
|
|
167
167
|
e && typeof document < "u" && document.body.classList.remove("relly-jog-scrubbing"), typeof window < "u" && (window.removeEventListener("mousemove", s), window.removeEventListener("mouseup", r));
|
|
168
168
|
};
|
|
169
|
-
this.numberInput.addEventListener("mousedown", (
|
|
170
|
-
t =
|
|
169
|
+
this.numberInput.addEventListener("mousedown", (o) => {
|
|
170
|
+
t = o.clientX, n = parseFloat(this.numberInput.value) || 0, e = !1, typeof window < "u" && (window.addEventListener("mousemove", s), window.addEventListener("mouseup", r));
|
|
171
171
|
});
|
|
172
172
|
}
|
|
173
173
|
triggerSound() {
|
|
@@ -196,12 +196,12 @@ class V extends C {
|
|
|
196
196
|
return this.rangeInput.value = e.toString(), this.numberInput.value = e.toString(), this;
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
|
-
class A extends
|
|
199
|
+
class A extends E {
|
|
200
200
|
constructor(e, t, n) {
|
|
201
201
|
super(e);
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
202
|
+
l(this, "buttonEl");
|
|
203
|
+
l(this, "clickHandler");
|
|
204
|
+
l(this, "soundEngine");
|
|
205
205
|
this.soundEngine = n, this.labelEl.style.display = "none", this.controlEl.style.flex = "1", this.buttonEl = document.createElement("button"), this.buttonEl.className = "relly-btn", this.buttonEl.textContent = e, this.controlEl.appendChild(this.buttonEl), t && this.onClick(t), this.buttonEl.addEventListener("click", (s) => {
|
|
206
206
|
var r;
|
|
207
207
|
(r = this.soundEngine) == null || r.playClick(), this.clickHandler && this.clickHandler(s);
|
|
@@ -220,13 +220,13 @@ class A extends C {
|
|
|
220
220
|
return this;
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
|
-
class z extends
|
|
224
|
-
constructor(e, t, n, s, r,
|
|
225
|
-
super(e, t, n, r,
|
|
226
|
-
|
|
227
|
-
|
|
223
|
+
class z extends E {
|
|
224
|
+
constructor(e, t, n, s, r, o) {
|
|
225
|
+
super(e, t, n, r, o);
|
|
226
|
+
l(this, "selectEl");
|
|
227
|
+
l(this, "optionsMap", /* @__PURE__ */ new Map());
|
|
228
228
|
this.selectEl = document.createElement("select"), this.selectEl.className = "relly-select-input", this.controlEl.appendChild(this.selectEl), s && this.setOptions(s), this.selectEl.addEventListener("change", () => {
|
|
229
|
-
const
|
|
229
|
+
const a = this.selectEl.value, h = this.optionsMap.has(a) ? this.optionsMap.get(a) : a;
|
|
230
230
|
this.setValue(h);
|
|
231
231
|
}), this.update();
|
|
232
232
|
}
|
|
@@ -255,11 +255,11 @@ class z extends C {
|
|
|
255
255
|
return this.selectEl.value = String(e), this;
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
|
-
class B extends
|
|
258
|
+
class B extends E {
|
|
259
259
|
constructor(e, t, n, s) {
|
|
260
260
|
super(e, t, n, s);
|
|
261
|
-
|
|
262
|
-
|
|
261
|
+
l(this, "valueBadge");
|
|
262
|
+
l(this, "formatter", (e) => String(e ?? ""));
|
|
263
263
|
this.valueBadge = document.createElement("span"), this.valueBadge.className = "relly-dynamic-value", this.controlEl.appendChild(this.valueBadge), this.update();
|
|
264
264
|
}
|
|
265
265
|
setFormat(e) {
|
|
@@ -270,52 +270,52 @@ class B extends C {
|
|
|
270
270
|
return this.valueBadge.textContent = this.formatter(e), this;
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
|
-
class N extends
|
|
273
|
+
class N extends E {
|
|
274
274
|
constructor(e, t, n, s, r) {
|
|
275
275
|
super(e, t, n, s);
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
276
|
+
l(this, "canvasContainer");
|
|
277
|
+
l(this, "canvas");
|
|
278
|
+
l(this, "ctx", null);
|
|
279
|
+
l(this, "statsEl");
|
|
280
|
+
l(this, "graphTooltipEl");
|
|
281
|
+
l(this, "legendEl");
|
|
282
|
+
l(this, "primarySeries");
|
|
283
|
+
l(this, "seriesList", []);
|
|
284
|
+
l(this, "seriesMap", /* @__PURE__ */ new Map());
|
|
285
|
+
l(this, "bufferSize", 60);
|
|
286
|
+
l(this, "min", 0);
|
|
287
|
+
l(this, "max", 100);
|
|
288
|
+
l(this, "autoRange", !0);
|
|
289
|
+
l(this, "smoothCurves", !0);
|
|
290
|
+
l(this, "isPaused", !1);
|
|
291
|
+
l(this, "formatter", (e) => typeof e == "number" && !isNaN(e) ? e.toFixed(1) : "0");
|
|
292
|
+
l(this, "cssWidth", 280);
|
|
293
|
+
l(this, "cssHeight", 90);
|
|
294
|
+
l(this, "sampleInterval", 50);
|
|
295
|
+
l(this, "lastSampleTime", 0);
|
|
296
|
+
l(this, "hoverIndex", null);
|
|
297
|
+
l(this, "resizeObserver", null);
|
|
298
|
+
l(this, "mediaQueryList", null);
|
|
299
|
+
l(this, "soundEngine");
|
|
300
|
+
l(this, "onResolutionChange", () => {
|
|
301
301
|
this.updateDPRListener(), this.resizeCanvas(), this.draw();
|
|
302
302
|
});
|
|
303
|
-
|
|
303
|
+
l(this, "onMouseMove", (e) => {
|
|
304
304
|
const t = this.canvas.getBoundingClientRect(), n = e.clientX - t.left, s = this.cssWidth;
|
|
305
305
|
if (s <= 0) return;
|
|
306
|
-
const r = s / Math.max(1, this.bufferSize - 1),
|
|
307
|
-
|
|
306
|
+
const r = s / Math.max(1, this.bufferSize - 1), o = Math.round(n / r), a = Math.max(0, Math.min(this.bufferSize - 1, o));
|
|
307
|
+
a !== this.hoverIndex && (this.hoverIndex = a, this.updateTooltip(n), this.draw());
|
|
308
308
|
});
|
|
309
|
-
|
|
309
|
+
l(this, "onMouseLeave", () => {
|
|
310
310
|
this.hoverIndex = null, this.graphTooltipEl.classList.remove("relly-tooltip-show"), this.draw();
|
|
311
311
|
});
|
|
312
|
-
|
|
312
|
+
l(this, "onCanvasClick", () => {
|
|
313
313
|
var e;
|
|
314
314
|
(e = this.soundEngine) == null || e.playClick(), this.isPaused = !this.isPaused, this.isPaused ? this.canvasContainer.classList.add("relly-graph-paused") : this.canvasContainer.classList.remove("relly-graph-paused"), this.updateStats(), this.draw();
|
|
315
315
|
});
|
|
316
316
|
this.soundEngine = r, this.element.className = "relly-graph-row", this.element.innerHTML = "";
|
|
317
|
-
const
|
|
318
|
-
|
|
317
|
+
const o = document.createElement("div");
|
|
318
|
+
o.className = "relly-graph-header", this.labelEl = document.createElement("span"), this.labelEl.className = "relly-graph-label", this.labelEl.textContent = e, this.statsEl = document.createElement("div"), this.statsEl.className = "relly-graph-stats", this.statsEl.innerHTML = '<span class="relly-graph-val">0</span>', o.appendChild(this.labelEl), o.appendChild(this.statsEl), this.element.appendChild(o), this.legendEl = document.createElement("div"), this.legendEl.className = "relly-graph-legend", this.element.appendChild(this.legendEl), this.canvasContainer = document.createElement("div"), this.canvasContainer.className = "relly-graph-canvas-container", this.canvasContainer.title = "Click to pause/freeze data stream for inspection", this.canvas = document.createElement("canvas"), this.canvas.className = "relly-graph-canvas", this.canvasContainer.appendChild(this.canvas), this.graphTooltipEl = document.createElement("div"), this.graphTooltipEl.className = "relly-graph-tooltip", this.canvasContainer.appendChild(this.graphTooltipEl), this.element.appendChild(this.canvasContainer), this.ctx = this.canvas.getContext("2d"), this.primarySeries = {
|
|
319
319
|
id: "default",
|
|
320
320
|
label: e,
|
|
321
321
|
color: "#38bdf8",
|
|
@@ -346,9 +346,9 @@ class N extends C {
|
|
|
346
346
|
if (this.hoverIndex === null) return;
|
|
347
347
|
let t = "";
|
|
348
348
|
for (const r of this.seriesList) {
|
|
349
|
-
const
|
|
350
|
-
if (
|
|
351
|
-
const h = r.buffer[
|
|
349
|
+
const o = this.bufferSize - r.buffer.length, a = this.hoverIndex - o;
|
|
350
|
+
if (a >= 0 && a < r.buffer.length) {
|
|
351
|
+
const h = r.buffer[a];
|
|
352
352
|
t += `<div><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:${r.color};margin-right:4px;"></span>${r.label}: <b>${this.formatter(h)}</b></div>`;
|
|
353
353
|
}
|
|
354
354
|
}
|
|
@@ -382,7 +382,7 @@ class N extends C {
|
|
|
382
382
|
checkDirty() {
|
|
383
383
|
if (this.checkVisibility(), !this.targetObject || !this.property || this.isPaused) return;
|
|
384
384
|
const e = this.targetObject[this.property], t = typeof performance < "u" ? performance.now() : Date.now();
|
|
385
|
-
|
|
385
|
+
t - this.lastSampleTime >= this.sampleInterval && (this.lastSampleTime = t, this.prevValue = e, this.update(), this.triggerChange(e, this.prevValue));
|
|
386
386
|
}
|
|
387
387
|
setSmooth(e) {
|
|
388
388
|
return this.smoothCurves = e, this.draw(), this;
|
|
@@ -447,13 +447,19 @@ class N extends C {
|
|
|
447
447
|
if (this.isPaused) return this;
|
|
448
448
|
if (typeof t != "number" || isNaN(t) || !isFinite(t)) return this;
|
|
449
449
|
const n = this.seriesMap.get(e);
|
|
450
|
-
return n ? (n.buffer.push(t), n.buffer.length > this.bufferSize && n.buffer.shift(), this) : (this.addSeries(e, { color: "#ec4899", label: e }), this.pushSeries(e, t));
|
|
450
|
+
return n ? (n.buffer.push(t), n.buffer.length > this.bufferSize && n.buffer.shift(), this.updateStats(), this.draw(), this) : (this.addSeries(e, { color: "#ec4899", label: e }), this.pushSeries(e, t));
|
|
451
|
+
}
|
|
452
|
+
getLatestValue() {
|
|
453
|
+
if (this.primarySeries.buffer.length > 0)
|
|
454
|
+
return this.primarySeries.buffer[this.primarySeries.buffer.length - 1];
|
|
455
|
+
const e = this.getValue();
|
|
456
|
+
return typeof e == "number" && !isNaN(e) ? e : 0;
|
|
451
457
|
}
|
|
452
458
|
updateStats() {
|
|
453
459
|
const e = this.primarySeries.buffer.length > 0 ? this.primarySeries.buffer[this.primarySeries.buffer.length - 1] : 0;
|
|
454
460
|
let t = this.min, n = this.max, s = [];
|
|
455
|
-
for (const
|
|
456
|
-
s = s.concat(
|
|
461
|
+
for (const o of this.seriesList)
|
|
462
|
+
s = s.concat(o.buffer);
|
|
457
463
|
s.length > 0 && (t = Math.min(...s), n = Math.max(...s));
|
|
458
464
|
const r = this.isPaused ? '<span class="relly-graph-badge relly-graph-badge--paused">PAUSED</span>' : "";
|
|
459
465
|
this.statsEl.innerHTML = `
|
|
@@ -475,57 +481,57 @@ class N extends C {
|
|
|
475
481
|
const e = this.ctx, t = this.cssWidth, n = this.cssHeight;
|
|
476
482
|
e.clearRect(0, 0, t, n), e.save(), e.setLineDash([2, 4]), e.strokeStyle = "rgba(255, 255, 255, 0.08)", e.lineWidth = 1;
|
|
477
483
|
for (let d of [0.25, 0.5, 0.75]) {
|
|
478
|
-
const
|
|
479
|
-
e.beginPath(), e.moveTo(0,
|
|
484
|
+
const y = Math.round(n * d);
|
|
485
|
+
e.beginPath(), e.moveTo(0, y), e.lineTo(t, y), e.stroke();
|
|
480
486
|
}
|
|
481
487
|
e.restore();
|
|
482
488
|
let s = [];
|
|
483
489
|
for (const d of this.seriesList)
|
|
484
490
|
s = s.concat(d.buffer);
|
|
485
491
|
if (s.length === 0) return;
|
|
486
|
-
const r = Math.min(...s),
|
|
487
|
-
let
|
|
488
|
-
|
|
489
|
-
const c = (h -
|
|
490
|
-
|
|
491
|
-
const
|
|
492
|
+
const r = Math.min(...s), o = Math.max(...s);
|
|
493
|
+
let a = this.autoRange ? r : this.min, h = this.autoRange ? o : this.max;
|
|
494
|
+
o > h && (h = o), r < a && (a = r), a === h && (a -= 1, h += 1);
|
|
495
|
+
const c = (h - a) * 0.16 || 1;
|
|
496
|
+
a -= c, h += c;
|
|
497
|
+
const m = h - a || 1, p = t / Math.max(1, this.bufferSize - 1);
|
|
492
498
|
for (const d of this.seriesList) {
|
|
493
499
|
if (d.buffer.length === 0) continue;
|
|
494
|
-
const
|
|
495
|
-
for (let g = 0; g <
|
|
496
|
-
const
|
|
497
|
-
|
|
500
|
+
const y = d.buffer.length === 1 ? [d.buffer[0], d.buffer[0]] : d.buffer, x = this.bufferSize - y.length, u = [];
|
|
501
|
+
for (let g = 0; g < y.length; g++) {
|
|
502
|
+
const b = (x + g) * p, C = Math.max(0, Math.min(1, (y[g] - a) / m)), M = Math.max(4, Math.min(n - 4, n - 6 - C * (n - 12)));
|
|
503
|
+
u.push({ x: b, y: M });
|
|
498
504
|
}
|
|
499
|
-
if (e.beginPath(), e.moveTo(
|
|
500
|
-
for (let g = 0; g <
|
|
501
|
-
const
|
|
502
|
-
e.bezierCurveTo(M,
|
|
505
|
+
if (e.beginPath(), e.moveTo(u[0].x, n), e.lineTo(u[0].x, u[0].y), this.smoothCurves && u.length > 2)
|
|
506
|
+
for (let g = 0; g < u.length - 1; g++) {
|
|
507
|
+
const b = u[g], C = u[g + 1], M = (b.x + C.x) / 2;
|
|
508
|
+
e.bezierCurveTo(M, b.y, M, C.y, C.x, C.y);
|
|
503
509
|
}
|
|
504
510
|
else
|
|
505
|
-
for (let g = 1; g <
|
|
506
|
-
e.lineTo(
|
|
507
|
-
e.lineTo(
|
|
511
|
+
for (let g = 1; g < u.length; g++)
|
|
512
|
+
e.lineTo(u[g].x, u[g].y);
|
|
513
|
+
e.lineTo(u[u.length - 1].x, n), e.closePath();
|
|
508
514
|
const v = e.createLinearGradient(0, 0, 0, n);
|
|
509
|
-
if (v.addColorStop(0, d.fillColor || `${d.color}40`), v.addColorStop(1, "rgba(0, 0, 0, 0)"), e.fillStyle = v, e.fill(), e.beginPath(), e.moveTo(
|
|
510
|
-
for (let g = 0; g <
|
|
511
|
-
const
|
|
512
|
-
e.bezierCurveTo(M,
|
|
515
|
+
if (v.addColorStop(0, d.fillColor || `${d.color}40`), v.addColorStop(1, "rgba(0, 0, 0, 0)"), e.fillStyle = v, e.fill(), e.beginPath(), e.moveTo(u[0].x, u[0].y), this.smoothCurves && u.length > 2)
|
|
516
|
+
for (let g = 0; g < u.length - 1; g++) {
|
|
517
|
+
const b = u[g], C = u[g + 1], M = (b.x + C.x) / 2;
|
|
518
|
+
e.bezierCurveTo(M, b.y, M, C.y, C.x, C.y);
|
|
513
519
|
}
|
|
514
520
|
else
|
|
515
|
-
for (let g = 1; g <
|
|
516
|
-
e.lineTo(
|
|
521
|
+
for (let g = 1; g < u.length; g++)
|
|
522
|
+
e.lineTo(u[g].x, u[g].y);
|
|
517
523
|
e.save(), e.strokeStyle = d.color, e.lineWidth = 2, e.shadowColor = d.color, e.shadowBlur = 5, e.stroke(), e.restore();
|
|
518
|
-
const
|
|
519
|
-
|
|
524
|
+
const w = u[u.length - 1];
|
|
525
|
+
w && (e.beginPath(), e.arc(w.x, w.y, 4, 0, Math.PI * 2), e.fillStyle = d.color, e.globalAlpha = 0.35, e.fill(), e.globalAlpha = 1, e.beginPath(), e.arc(w.x, w.y, 2, 0, Math.PI * 2), e.fillStyle = "#ffffff", e.fill());
|
|
520
526
|
}
|
|
521
527
|
if (this.hoverIndex !== null) {
|
|
522
528
|
const d = Math.round(this.hoverIndex * p);
|
|
523
529
|
e.save(), e.setLineDash([3, 3]), e.strokeStyle = "rgba(255, 255, 255, 0.45)", e.lineWidth = 1, e.beginPath(), e.moveTo(d, 0), e.lineTo(d, n), e.stroke(), e.restore();
|
|
524
|
-
for (const
|
|
525
|
-
const
|
|
526
|
-
if (
|
|
527
|
-
const v =
|
|
528
|
-
e.beginPath(), e.arc(d, g, 4.5, 0, Math.PI * 2), e.fillStyle =
|
|
530
|
+
for (const y of this.seriesList) {
|
|
531
|
+
const x = this.bufferSize - y.buffer.length, u = this.hoverIndex - x;
|
|
532
|
+
if (u >= 0 && u < y.buffer.length) {
|
|
533
|
+
const v = y.buffer[u], w = Math.max(0, Math.min(1, (v - a) / m)), g = Math.max(4, Math.min(n - 4, n - 6 - w * (n - 12)));
|
|
534
|
+
e.beginPath(), e.arc(d, g, 4.5, 0, Math.PI * 2), e.fillStyle = y.color, e.fill(), e.beginPath(), e.arc(d, g, 2, 0, Math.PI * 2), e.fillStyle = "#ffffff", e.fill();
|
|
529
535
|
}
|
|
530
536
|
}
|
|
531
537
|
}
|
|
@@ -534,19 +540,19 @@ class N extends C {
|
|
|
534
540
|
this.resizeObserver && (this.resizeObserver.disconnect(), this.resizeObserver = null), this.mediaQueryList && (this.mediaQueryList.removeEventListener("change", this.onResolutionChange), this.mediaQueryList = null), this.canvas.removeEventListener("mousemove", this.onMouseMove), this.canvas.removeEventListener("mouseleave", this.onMouseLeave), this.canvas.removeEventListener("click", this.onCanvasClick), super.destroy();
|
|
535
541
|
}
|
|
536
542
|
}
|
|
537
|
-
class R extends
|
|
538
|
-
constructor(e, t, n, s, r,
|
|
543
|
+
class R extends E {
|
|
544
|
+
constructor(e, t, n, s, r, o) {
|
|
539
545
|
super(e, t, n, s, r);
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
this.soundEngine =
|
|
546
|
+
l(this, "wrapperEl");
|
|
547
|
+
l(this, "previewEl");
|
|
548
|
+
l(this, "hexInputEl");
|
|
549
|
+
l(this, "nativeColorInput");
|
|
550
|
+
l(this, "eyeDropperBtn");
|
|
551
|
+
l(this, "swatchesContainer");
|
|
552
|
+
l(this, "swatches", []);
|
|
553
|
+
l(this, "swatchButtons", /* @__PURE__ */ new Map());
|
|
554
|
+
l(this, "soundEngine");
|
|
555
|
+
this.soundEngine = o, this.wrapperEl = document.createElement("div"), this.wrapperEl.className = "relly-color-wrapper", this.previewEl = document.createElement("div"), this.previewEl.className = "relly-color-preview", this.previewEl.title = "Click to open color palette", this.hexInputEl = document.createElement("input"), this.hexInputEl.type = "text", this.hexInputEl.className = "relly-color-text relly-color-input", this.hexInputEl.spellcheck = !1, this.hexInputEl.maxLength = 9, this.nativeColorInput = document.createElement("input"), this.nativeColorInput.type = "color", this.nativeColorInput.className = "relly-color-native", this.wrapperEl.appendChild(this.previewEl), this.wrapperEl.appendChild(this.hexInputEl), this.wrapperEl.appendChild(this.nativeColorInput), typeof window < "u" && "EyeDropper" in window && (this.eyeDropperBtn = document.createElement("button"), this.eyeDropperBtn.type = "button", this.eyeDropperBtn.className = "relly-eyedropper-btn", this.eyeDropperBtn.title = "Pick color from screen", this.eyeDropperBtn.innerHTML = `
|
|
550
556
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
551
557
|
<path d="m14 7 3 3m-1-5a2.83 2.83 0 0 1 4 4L7 22H3v-4L16 5Z"></path>
|
|
552
558
|
</svg>
|
|
@@ -558,9 +564,16 @@ class R extends C {
|
|
|
558
564
|
}
|
|
559
565
|
}), this.wrapperEl.appendChild(this.eyeDropperBtn)), this.controlEl.appendChild(this.wrapperEl), this.previewEl.addEventListener("click", () => {
|
|
560
566
|
this.nativeColorInput.click();
|
|
567
|
+
}), this.hexInputEl.addEventListener("input", () => {
|
|
568
|
+
let a = this.hexInputEl.value.trim();
|
|
569
|
+
!a.startsWith("#") && /^[0-9a-fA-F]{3,8}$/.test(a) && (a = "#" + a), /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(a) && this.setValue(a);
|
|
570
|
+
}), this.hexInputEl.addEventListener("change", () => {
|
|
571
|
+
var h;
|
|
572
|
+
let a = this.hexInputEl.value.trim();
|
|
573
|
+
!a.startsWith("#") && /^[0-9a-fA-F]{3,8}$/.test(a) && (a = "#" + a), /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(a) ? ((h = this.soundEngine) == null || h.playClick(), this.setValue(a)) : this.update();
|
|
561
574
|
}), this.nativeColorInput.addEventListener("input", () => {
|
|
562
|
-
const
|
|
563
|
-
this.setValue(
|
|
575
|
+
const a = this.nativeColorInput.value;
|
|
576
|
+
this.setValue(a);
|
|
564
577
|
}), this.update();
|
|
565
578
|
}
|
|
566
579
|
setSoundEngine(e) {
|
|
@@ -581,57 +594,57 @@ class R extends C {
|
|
|
581
594
|
return [...this.swatches];
|
|
582
595
|
}
|
|
583
596
|
update() {
|
|
584
|
-
if (!this.previewEl || !this.
|
|
597
|
+
if (!this.previewEl || !this.hexInputEl) return this;
|
|
585
598
|
const e = String(this.getValue() || "#000000");
|
|
586
|
-
this.previewEl.style.backgroundColor = e, this.
|
|
599
|
+
this.previewEl.style.backgroundColor = e, document.activeElement !== this.hexInputEl && (this.hexInputEl.value = e.toUpperCase()), e.startsWith("#") && (e.length === 7 || e.length === 4) && (this.nativeColorInput.value = e.length === 4 ? `#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}` : e);
|
|
587
600
|
const t = e.toLowerCase();
|
|
588
601
|
for (const [n, s] of this.swatchButtons.entries())
|
|
589
602
|
n === t ? s.classList.add("relly-swatch-active") : s.classList.remove("relly-swatch-active");
|
|
590
603
|
return this;
|
|
591
604
|
}
|
|
592
605
|
}
|
|
593
|
-
class P extends
|
|
606
|
+
class P extends E {
|
|
594
607
|
constructor(e, t, n, s, r) {
|
|
595
608
|
super(e, t, n, s, r);
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
609
|
+
l(this, "containerEl");
|
|
610
|
+
l(this, "xInput");
|
|
611
|
+
l(this, "yInput");
|
|
612
|
+
l(this, "min");
|
|
613
|
+
l(this, "max");
|
|
614
|
+
l(this, "step", 0.1);
|
|
602
615
|
this.containerEl = document.createElement("div"), this.containerEl.className = "relly-point2d-container";
|
|
603
|
-
const
|
|
604
|
-
|
|
605
|
-
const
|
|
606
|
-
|
|
616
|
+
const o = document.createElement("div");
|
|
617
|
+
o.className = "relly-point2d-item";
|
|
618
|
+
const a = document.createElement("span");
|
|
619
|
+
a.className = "relly-point2d-tag", a.textContent = "X", this.xInput = document.createElement("input"), this.xInput.type = "number", this.xInput.className = "relly-point2d-input", this.xInput.step = String(this.step), o.appendChild(a), o.appendChild(this.xInput);
|
|
607
620
|
const h = document.createElement("div");
|
|
608
621
|
h.className = "relly-point2d-item";
|
|
609
622
|
const c = document.createElement("span");
|
|
610
|
-
c.className = "relly-point2d-tag", c.textContent = "Y", this.yInput = document.createElement("input"), this.yInput.type = "number", this.yInput.className = "relly-point2d-input", this.yInput.step = String(this.step), h.appendChild(c), h.appendChild(this.yInput), this.containerEl.appendChild(
|
|
623
|
+
c.className = "relly-point2d-tag", c.textContent = "Y", this.yInput = document.createElement("input"), this.yInput.type = "number", this.yInput.className = "relly-point2d-input", this.yInput.step = String(this.step), h.appendChild(c), h.appendChild(this.yInput), this.containerEl.appendChild(o), this.containerEl.appendChild(h), this.controlEl.appendChild(this.containerEl), this.xInput.addEventListener("change", () => this.handleInputChange()), this.yInput.addEventListener("change", () => this.handleInputChange()), this.setupInputScrubbing(this.xInput, "x"), this.setupInputScrubbing(this.yInput, "y"), this.update();
|
|
611
624
|
}
|
|
612
625
|
setupInputScrubbing(e, t) {
|
|
613
626
|
let n = !1, s = 0, r = 0;
|
|
614
|
-
const
|
|
627
|
+
const o = (h) => {
|
|
615
628
|
const c = h.clientX - s;
|
|
616
629
|
if (!n && Math.abs(c) > 3 && (n = !0, typeof document < "u" && document.body.classList.add("relly-jog-scrubbing")), n) {
|
|
617
|
-
const
|
|
630
|
+
const m = h.shiftKey ? 10 : h.altKey ? 0.1 : 1, p = this.step * m;
|
|
618
631
|
let d = r + c * p;
|
|
619
632
|
this.min !== void 0 && (d = Math.max(this.min, d)), this.max !== void 0 && (d = Math.min(this.max, d));
|
|
620
|
-
const
|
|
621
|
-
d = parseFloat(d.toFixed(Math.
|
|
622
|
-
const
|
|
623
|
-
if (Array.isArray(
|
|
624
|
-
const
|
|
625
|
-
|
|
633
|
+
const y = (p.toString().split(".")[1] || "").length, x = 1 / p;
|
|
634
|
+
d = Math.round(d * x) / x, d = parseFloat(d.toFixed(Math.min(y, 4)));
|
|
635
|
+
const u = this.getValue();
|
|
636
|
+
if (Array.isArray(u)) {
|
|
637
|
+
const v = [u[0], u[1]];
|
|
638
|
+
v[t === "x" ? 0 : 1] = d, this.setValue(v);
|
|
626
639
|
} else
|
|
627
|
-
this.setValue({ ...
|
|
640
|
+
this.setValue({ ...u, [t]: d });
|
|
628
641
|
h.preventDefault();
|
|
629
642
|
}
|
|
630
|
-
},
|
|
631
|
-
n && typeof document < "u" && document.body.classList.remove("relly-jog-scrubbing"), typeof window < "u" && (window.removeEventListener("mousemove",
|
|
643
|
+
}, a = () => {
|
|
644
|
+
n && typeof document < "u" && document.body.classList.remove("relly-jog-scrubbing"), typeof window < "u" && (window.removeEventListener("mousemove", o), window.removeEventListener("mouseup", a));
|
|
632
645
|
};
|
|
633
646
|
e.addEventListener("mousedown", (h) => {
|
|
634
|
-
s = h.clientX, r = parseFloat(e.value) || 0, n = !1, typeof window < "u" && (window.addEventListener("mousemove",
|
|
647
|
+
s = h.clientX, r = parseFloat(e.value) || 0, n = !1, typeof window < "u" && (window.addEventListener("mousemove", o), window.addEventListener("mouseup", a));
|
|
635
648
|
});
|
|
636
649
|
}
|
|
637
650
|
setMin(e) {
|
|
@@ -663,57 +676,57 @@ class P extends C {
|
|
|
663
676
|
return Array.isArray(e) ? (t = e[0] || 0, n = e[1] || 0) : typeof e == "object" && e !== null && (t = e.x || 0, n = e.y || 0), this.xInput.value = String(t), this.yInput.value = String(n), this;
|
|
664
677
|
}
|
|
665
678
|
}
|
|
666
|
-
class D extends
|
|
679
|
+
class D extends E {
|
|
667
680
|
constructor(e, t, n, s, r) {
|
|
668
681
|
super(e, t, n, s, r);
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
682
|
+
l(this, "containerEl");
|
|
683
|
+
l(this, "xInput");
|
|
684
|
+
l(this, "yInput");
|
|
685
|
+
l(this, "zInput");
|
|
686
|
+
l(this, "min");
|
|
687
|
+
l(this, "max");
|
|
688
|
+
l(this, "step", 0.1);
|
|
676
689
|
this.containerEl = document.createElement("div"), this.containerEl.className = "relly-point3d-container";
|
|
677
|
-
const
|
|
678
|
-
|
|
679
|
-
const
|
|
680
|
-
|
|
690
|
+
const o = document.createElement("div");
|
|
691
|
+
o.className = "relly-point3d-item";
|
|
692
|
+
const a = document.createElement("span");
|
|
693
|
+
a.className = "relly-point3d-tag relly-point3d-tag--x", a.textContent = "X", this.xInput = document.createElement("input"), this.xInput.type = "number", this.xInput.className = "relly-point3d-input", this.xInput.step = String(this.step), o.appendChild(a), o.appendChild(this.xInput);
|
|
681
694
|
const h = document.createElement("div");
|
|
682
695
|
h.className = "relly-point3d-item";
|
|
683
696
|
const c = document.createElement("span");
|
|
684
697
|
c.className = "relly-point3d-tag relly-point3d-tag--y", c.textContent = "Y", this.yInput = document.createElement("input"), this.yInput.type = "number", this.yInput.className = "relly-point3d-input", this.yInput.step = String(this.step), h.appendChild(c), h.appendChild(this.yInput);
|
|
685
|
-
const
|
|
686
|
-
|
|
698
|
+
const m = document.createElement("div");
|
|
699
|
+
m.className = "relly-point3d-item";
|
|
687
700
|
const p = document.createElement("span");
|
|
688
|
-
p.className = "relly-point3d-tag relly-point3d-tag--z", p.textContent = "Z", this.zInput = document.createElement("input"), this.zInput.type = "number", this.zInput.className = "relly-point3d-input", this.zInput.step = String(this.step),
|
|
701
|
+
p.className = "relly-point3d-tag relly-point3d-tag--z", p.textContent = "Z", this.zInput = document.createElement("input"), this.zInput.type = "number", this.zInput.className = "relly-point3d-input", this.zInput.step = String(this.step), m.appendChild(p), m.appendChild(this.zInput), this.containerEl.appendChild(o), this.containerEl.appendChild(h), this.containerEl.appendChild(m), this.controlEl.appendChild(this.containerEl), this.xInput.addEventListener("change", () => this.handleInputChange()), this.yInput.addEventListener("change", () => this.handleInputChange()), this.zInput.addEventListener("change", () => this.handleInputChange()), this.setupInputScrubbing(this.xInput, "x"), this.setupInputScrubbing(this.yInput, "y"), this.setupInputScrubbing(this.zInput, "z"), this.update();
|
|
689
702
|
}
|
|
690
703
|
setupInputScrubbing(e, t) {
|
|
691
704
|
let n = !1, s = 0, r = 0;
|
|
692
|
-
const
|
|
705
|
+
const o = (h) => {
|
|
693
706
|
const c = h.clientX - s;
|
|
694
707
|
if (!n && Math.abs(c) > 3 && (n = !0, typeof document < "u" && document.body.classList.add("relly-jog-scrubbing")), n) {
|
|
695
|
-
const
|
|
708
|
+
const m = h.shiftKey ? 10 : h.altKey ? 0.1 : 1, p = this.step * m;
|
|
696
709
|
let d = r + c * p;
|
|
697
710
|
this.min !== void 0 && (d = Math.max(this.min, d)), this.max !== void 0 && (d = Math.min(this.max, d));
|
|
698
|
-
const
|
|
699
|
-
d = parseFloat(d.toFixed(Math.
|
|
700
|
-
const
|
|
701
|
-
if (Array.isArray(
|
|
702
|
-
const
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
],
|
|
707
|
-
|
|
711
|
+
const y = (p.toString().split(".")[1] || "").length, x = 1 / p;
|
|
712
|
+
d = Math.round(d * x) / x, d = parseFloat(d.toFixed(Math.min(y, 4)));
|
|
713
|
+
const u = this.getValue();
|
|
714
|
+
if (Array.isArray(u)) {
|
|
715
|
+
const v = [
|
|
716
|
+
u[0] ?? 0,
|
|
717
|
+
u[1] ?? 0,
|
|
718
|
+
u[2] ?? 0
|
|
719
|
+
], w = t === "x" ? 0 : t === "y" ? 1 : 2;
|
|
720
|
+
v[w] = d, this.setValue(v);
|
|
708
721
|
} else
|
|
709
|
-
this.setValue({ ...
|
|
722
|
+
this.setValue({ ...u, [t]: d });
|
|
710
723
|
h.preventDefault();
|
|
711
724
|
}
|
|
712
|
-
},
|
|
713
|
-
window.removeEventListener("mousemove",
|
|
725
|
+
}, a = () => {
|
|
726
|
+
window.removeEventListener("mousemove", o), window.removeEventListener("mouseup", a), n && (n = !1, typeof document < "u" && document.body.classList.remove("relly-jog-scrubbing"));
|
|
714
727
|
};
|
|
715
728
|
e.addEventListener("mousedown", (h) => {
|
|
716
|
-
h.button === 0 && (s = h.clientX, r = parseFloat(e.value) || 0, window.addEventListener("mousemove",
|
|
729
|
+
h.button === 0 && (s = h.clientX, r = parseFloat(e.value) || 0, window.addEventListener("mousemove", o), window.addEventListener("mouseup", a));
|
|
717
730
|
});
|
|
718
731
|
}
|
|
719
732
|
handleInputChange() {
|
|
@@ -741,22 +754,22 @@ class D extends C {
|
|
|
741
754
|
return Array.isArray(e) ? (t = e[0] || 0, n = e[1] || 0, s = e[2] || 0) : typeof e == "object" && e !== null && (t = e.x || 0, n = e.y || 0, s = e.z || 0), this.xInput.value = String(t), this.yInput.value = String(n), this.zInput.value = String(s), this;
|
|
742
755
|
}
|
|
743
756
|
}
|
|
744
|
-
class
|
|
745
|
-
constructor(e, t, n, s, r,
|
|
757
|
+
class j extends E {
|
|
758
|
+
constructor(e, t, n, s, r, o) {
|
|
746
759
|
super(e, t, n, s, r);
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
this.soundEngine =
|
|
760
|
+
l(this, "wrapperEl");
|
|
761
|
+
l(this, "trackEl");
|
|
762
|
+
l(this, "barEl");
|
|
763
|
+
l(this, "thumbMin");
|
|
764
|
+
l(this, "thumbMax");
|
|
765
|
+
l(this, "inputMin");
|
|
766
|
+
l(this, "inputMax");
|
|
767
|
+
l(this, "min", 0);
|
|
768
|
+
l(this, "max", 100);
|
|
769
|
+
l(this, "step", 1);
|
|
770
|
+
l(this, "soundEngine");
|
|
771
|
+
l(this, "formatter", (e, t) => `[${e.toFixed(1)}, ${t.toFixed(1)}]`);
|
|
772
|
+
this.soundEngine = o, this.wrapperEl = document.createElement("div"), this.wrapperEl.className = "relly-range-wrapper", this.inputMin = document.createElement("input"), this.inputMin.type = "number", this.inputMin.className = "relly-range-input relly-range-input--min", this.trackEl = document.createElement("div"), this.trackEl.className = "relly-range-track", this.barEl = document.createElement("div"), this.barEl.className = "relly-range-bar", this.thumbMin = document.createElement("div"), this.thumbMin.className = "relly-range-thumb relly-range-thumb--min", this.thumbMin.title = "Drag min", this.thumbMax = document.createElement("div"), this.thumbMax.className = "relly-range-thumb relly-range-thumb--max", this.thumbMax.title = "Drag max", this.trackEl.appendChild(this.barEl), this.trackEl.appendChild(this.thumbMin), this.trackEl.appendChild(this.thumbMax), this.inputMax = document.createElement("input"), this.inputMax.type = "number", this.inputMax.className = "relly-range-input relly-range-input--max", this.wrapperEl.appendChild(this.inputMin), this.wrapperEl.appendChild(this.trackEl), this.wrapperEl.appendChild(this.inputMax), this.controlEl.appendChild(this.wrapperEl), this.setupListeners(), this.update();
|
|
760
773
|
}
|
|
761
774
|
setupListeners() {
|
|
762
775
|
this.inputMin.addEventListener("change", () => {
|
|
@@ -769,42 +782,42 @@ class H extends C {
|
|
|
769
782
|
}
|
|
770
783
|
setupThumbDrag(e, t) {
|
|
771
784
|
let n = !1;
|
|
772
|
-
const s = (
|
|
773
|
-
var
|
|
785
|
+
const s = (o) => {
|
|
786
|
+
var y, x;
|
|
774
787
|
if (!n) return;
|
|
775
|
-
const
|
|
788
|
+
const a = this.trackEl.getBoundingClientRect(), h = Math.max(0, Math.min(1, (o.clientX - a.left) / a.width)), c = this.min + h * (this.max - this.min), m = this.applyStep(c), [p, d] = this.getCurrentRange();
|
|
776
789
|
if (t === "min") {
|
|
777
|
-
const
|
|
778
|
-
|
|
790
|
+
const u = Math.min(m, d);
|
|
791
|
+
u !== p && ((y = this.soundEngine) == null || y.playTick(), this.setRangeValue(u, d));
|
|
779
792
|
} else {
|
|
780
|
-
const
|
|
781
|
-
|
|
793
|
+
const u = Math.max(m, p);
|
|
794
|
+
u !== d && ((x = this.soundEngine) == null || x.playTick(), this.setRangeValue(p, u));
|
|
782
795
|
}
|
|
783
796
|
}, r = () => {
|
|
784
797
|
n && (n = !1, window.removeEventListener("mousemove", s), window.removeEventListener("mouseup", r));
|
|
785
798
|
};
|
|
786
|
-
e.addEventListener("mousedown", (
|
|
787
|
-
|
|
799
|
+
e.addEventListener("mousedown", (o) => {
|
|
800
|
+
o.button === 0 && (o.preventDefault(), o.stopPropagation(), n = !0, window.addEventListener("mousemove", s), window.addEventListener("mouseup", r));
|
|
788
801
|
});
|
|
789
802
|
}
|
|
790
803
|
setupBarDrag() {
|
|
791
804
|
let e = !1, t = 0, n = 0, s = 0;
|
|
792
|
-
const r = (
|
|
805
|
+
const r = (a) => {
|
|
793
806
|
var v;
|
|
794
807
|
if (!e) return;
|
|
795
|
-
const h = this.trackEl.getBoundingClientRect(),
|
|
796
|
-
let d = Math.max(this.min, Math.min(this.max - p, n +
|
|
808
|
+
const h = this.trackEl.getBoundingClientRect(), m = (a.clientX - t) / h.width * (this.max - this.min), p = s - n;
|
|
809
|
+
let d = Math.max(this.min, Math.min(this.max - p, n + m));
|
|
797
810
|
d = this.applyStep(d);
|
|
798
|
-
const
|
|
799
|
-
(d !==
|
|
800
|
-
},
|
|
801
|
-
e && (e = !1, window.removeEventListener("mousemove", r), window.removeEventListener("mouseup",
|
|
811
|
+
const y = this.applyStep(d + p), [x, u] = this.getCurrentRange();
|
|
812
|
+
(d !== x || y !== u) && ((v = this.soundEngine) == null || v.playTick(), this.setRangeValue(d, y));
|
|
813
|
+
}, o = () => {
|
|
814
|
+
e && (e = !1, window.removeEventListener("mousemove", r), window.removeEventListener("mouseup", o));
|
|
802
815
|
};
|
|
803
|
-
this.barEl.addEventListener("mousedown", (
|
|
804
|
-
if (
|
|
805
|
-
|
|
816
|
+
this.barEl.addEventListener("mousedown", (a) => {
|
|
817
|
+
if (a.button !== 0) return;
|
|
818
|
+
a.preventDefault(), a.stopPropagation(), e = !0, t = a.clientX;
|
|
806
819
|
const [h, c] = this.getCurrentRange();
|
|
807
|
-
n = h, s = c, window.addEventListener("mousemove", r), window.addEventListener("mouseup",
|
|
820
|
+
n = h, s = c, window.addEventListener("mousemove", r), window.addEventListener("mouseup", o);
|
|
808
821
|
});
|
|
809
822
|
}
|
|
810
823
|
applyStep(e) {
|
|
@@ -844,15 +857,15 @@ class H extends C {
|
|
|
844
857
|
return this.thumbMin.style.left = `${s}%`, this.thumbMax.style.left = `${r}%`, this.barEl.style.left = `${s}%`, this.barEl.style.width = `${Math.max(0, r - s)}%`, this.barEl.title = this.formatter(e, t), this.inputMin.value = String(e), this.inputMax.value = String(t), this;
|
|
845
858
|
}
|
|
846
859
|
}
|
|
847
|
-
class
|
|
848
|
-
constructor(e, t, n, s = [], r,
|
|
849
|
-
super(e, t, n, r,
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
this.soundEngine =
|
|
860
|
+
class H extends E {
|
|
861
|
+
constructor(e, t, n, s = [], r, o, a) {
|
|
862
|
+
super(e, t, n, r, o);
|
|
863
|
+
l(this, "containerEl");
|
|
864
|
+
l(this, "gliderEl");
|
|
865
|
+
l(this, "buttons", /* @__PURE__ */ new Map());
|
|
866
|
+
l(this, "optionsMap", /* @__PURE__ */ new Map());
|
|
867
|
+
l(this, "soundEngine");
|
|
868
|
+
this.soundEngine = a, this.containerEl = document.createElement("div"), this.containerEl.className = "relly-segmented-container", this.gliderEl = document.createElement("div"), this.gliderEl.className = "relly-segmented-glider", this.containerEl.appendChild(this.gliderEl), this.controlEl.appendChild(this.containerEl), this.setOptions(s);
|
|
856
869
|
}
|
|
857
870
|
setOptions(e) {
|
|
858
871
|
if (this.optionsMap.clear(), this.buttons.clear(), this.containerEl.innerHTML = "", this.containerEl.appendChild(this.gliderEl), Array.isArray(e))
|
|
@@ -891,16 +904,16 @@ class j extends C {
|
|
|
891
904
|
return this;
|
|
892
905
|
}
|
|
893
906
|
}
|
|
894
|
-
class F extends
|
|
907
|
+
class F extends E {
|
|
895
908
|
constructor(e, t, n, s) {
|
|
896
909
|
super(e, t, n, s);
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
910
|
+
l(this, "wrapperEl");
|
|
911
|
+
l(this, "ledEl");
|
|
912
|
+
l(this, "badgeEl");
|
|
913
|
+
l(this, "detailEl");
|
|
914
|
+
l(this, "currentStatus", "online");
|
|
915
|
+
l(this, "customBadge");
|
|
916
|
+
l(this, "customDetail");
|
|
904
917
|
this.wrapperEl = document.createElement("div"), this.wrapperEl.className = "relly-status-wrapper", this.ledEl = document.createElement("div"), this.ledEl.className = "relly-status-led relly-status-led--online", this.ledEl.innerHTML = `
|
|
905
918
|
<span class="relly-status-pulse-ring"></span>
|
|
906
919
|
<span class="relly-status-led-core"></span>
|
|
@@ -926,10 +939,176 @@ class F extends C {
|
|
|
926
939
|
return this.ledEl.className = `relly-status-led relly-status-led--${t}`, this.badgeEl.className = `relly-status-badge relly-status-badge--${t}`, this.badgeEl.textContent = this.customBadge || t.toUpperCase(), this.customDetail ? (this.detailEl.textContent = this.customDetail, this.detailEl.style.display = "inline-block") : this.detailEl.style.display = "none", this;
|
|
927
940
|
}
|
|
928
941
|
}
|
|
942
|
+
class q extends E {
|
|
943
|
+
constructor(e, t, n, s = {}, r, o, a) {
|
|
944
|
+
super(e, t, n, r, o);
|
|
945
|
+
l(this, "wrapperEl");
|
|
946
|
+
l(this, "inputEl");
|
|
947
|
+
l(this, "trackEl");
|
|
948
|
+
l(this, "thumbEl");
|
|
949
|
+
l(this, "statusTextEl");
|
|
950
|
+
l(this, "onLabel");
|
|
951
|
+
l(this, "offLabel");
|
|
952
|
+
l(this, "soundEngine");
|
|
953
|
+
this.soundEngine = a, this.onLabel = s.onLabel, this.offLabel = s.offLabel, this.wrapperEl = document.createElement("label"), this.wrapperEl.className = "relly-switch-wrap", this.inputEl = document.createElement("input"), this.inputEl.type = "checkbox", this.inputEl.className = "relly-switch-native", this.trackEl = document.createElement("span"), this.trackEl.className = "relly-switch-track", this.thumbEl = document.createElement("span"), this.thumbEl.className = "relly-switch-thumb", this.trackEl.appendChild(this.thumbEl), this.statusTextEl = document.createElement("span"), this.statusTextEl.className = "relly-switch-text", this.wrapperEl.appendChild(this.inputEl), this.wrapperEl.appendChild(this.trackEl), this.wrapperEl.appendChild(this.statusTextEl), this.controlEl.appendChild(this.wrapperEl), this.inputEl.addEventListener("change", () => {
|
|
954
|
+
var c;
|
|
955
|
+
const h = this.inputEl.checked;
|
|
956
|
+
(c = this.soundEngine) == null || c.playToggle(h), this.setValue(h);
|
|
957
|
+
}), s.disabled && this.setDisabled(!0), s.tooltip && this.setTooltip(s.tooltip), this.update();
|
|
958
|
+
}
|
|
959
|
+
setSoundEngine(e) {
|
|
960
|
+
return this.soundEngine = e, this;
|
|
961
|
+
}
|
|
962
|
+
setOnLabel(e) {
|
|
963
|
+
return this.onLabel = e, this.update(), this;
|
|
964
|
+
}
|
|
965
|
+
setOffLabel(e) {
|
|
966
|
+
return this.offLabel = e, this.update(), this;
|
|
967
|
+
}
|
|
968
|
+
onToggle(e) {
|
|
969
|
+
return this.onChange(e);
|
|
970
|
+
}
|
|
971
|
+
setDisabled(e) {
|
|
972
|
+
return super.setDisabled(e), this.inputEl && (this.inputEl.disabled = e), this;
|
|
973
|
+
}
|
|
974
|
+
update() {
|
|
975
|
+
if (!this.inputEl || !this.trackEl) return this;
|
|
976
|
+
const e = !!this.getValue();
|
|
977
|
+
return this.inputEl.checked = e, e ? this.trackEl.classList.add("relly-switch-track--checked") : this.trackEl.classList.remove("relly-switch-track--checked"), this.onLabel || this.offLabel ? (this.statusTextEl.textContent = e ? this.onLabel || "ON" : this.offLabel || "OFF", this.statusTextEl.style.display = "inline-block") : this.statusTextEl.style.display = "none", this;
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
class J extends E {
|
|
981
|
+
constructor(e = [], t) {
|
|
982
|
+
super("");
|
|
983
|
+
l(this, "groupContainerEl");
|
|
984
|
+
l(this, "buttonElements", []);
|
|
985
|
+
l(this, "soundEngine");
|
|
986
|
+
this.soundEngine = t, this.element.className = "relly-row relly-button-group-row", this.element.innerHTML = "", this.groupContainerEl = document.createElement("div"), this.groupContainerEl.className = "relly-button-group", this.element.appendChild(this.groupContainerEl);
|
|
987
|
+
for (const n of e)
|
|
988
|
+
this.addButton(n);
|
|
989
|
+
}
|
|
990
|
+
addButton(e) {
|
|
991
|
+
const t = document.createElement("button");
|
|
992
|
+
return t.type = "button", t.className = "relly-btn relly-btn--group", t.textContent = e.label, e.danger && t.classList.add("relly-btn--danger"), e.primary && t.classList.add("relly-btn--primary"), e.disabled && (t.disabled = !0), e.tooltip && (t.title = e.tooltip), t.addEventListener("click", (n) => {
|
|
993
|
+
var s;
|
|
994
|
+
n.stopPropagation(), (s = this.soundEngine) == null || s.playClick(), e.onClick(t);
|
|
995
|
+
}), this.buttonElements.push(t), this.groupContainerEl.appendChild(t), this;
|
|
996
|
+
}
|
|
997
|
+
setSoundEngine(e) {
|
|
998
|
+
return this.soundEngine = e, this;
|
|
999
|
+
}
|
|
1000
|
+
setDisabled(e) {
|
|
1001
|
+
super.setDisabled(e);
|
|
1002
|
+
for (const t of this.buttonElements)
|
|
1003
|
+
t.disabled = e;
|
|
1004
|
+
return this;
|
|
1005
|
+
}
|
|
1006
|
+
update() {
|
|
1007
|
+
return this;
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
class $ extends E {
|
|
1011
|
+
constructor(e, t, n, s = {}, r, o, a) {
|
|
1012
|
+
super(e, t, n, r, o);
|
|
1013
|
+
l(this, "wrapperEl");
|
|
1014
|
+
l(this, "inputEl");
|
|
1015
|
+
l(this, "clearBtn");
|
|
1016
|
+
l(this, "soundEngine");
|
|
1017
|
+
this.soundEngine = a, this.wrapperEl = document.createElement("div"), this.wrapperEl.className = "relly-text-wrap", this.inputEl = document.createElement("input"), this.inputEl.type = "text", this.inputEl.className = "relly-text-input", this.inputEl.spellcheck = !1, s.placeholder && (this.inputEl.placeholder = s.placeholder), s.maxLength && (this.inputEl.maxLength = s.maxLength), s.readOnly && (this.inputEl.readOnly = !0), this.wrapperEl.appendChild(this.inputEl), s.clearable && (this.clearBtn = document.createElement("button"), this.clearBtn.type = "button", this.clearBtn.className = "relly-text-clear", this.clearBtn.innerHTML = "✕", this.clearBtn.title = "Clear text", this.clearBtn.style.display = "none", this.clearBtn.addEventListener("click", (h) => {
|
|
1018
|
+
h.stopPropagation(), this.setValue(""), this.inputEl.focus();
|
|
1019
|
+
}), this.wrapperEl.appendChild(this.clearBtn)), this.controlEl.appendChild(this.wrapperEl), this.inputEl.addEventListener("input", () => {
|
|
1020
|
+
const h = this.inputEl.value;
|
|
1021
|
+
this.setValue(h), this.updateClearBtn(h);
|
|
1022
|
+
}), this.inputEl.addEventListener("change", () => {
|
|
1023
|
+
var h;
|
|
1024
|
+
(h = this.soundEngine) == null || h.playClick(), this.setValue(this.inputEl.value);
|
|
1025
|
+
}), s.disabled && this.setDisabled(!0), s.tooltip && this.setTooltip(s.tooltip), this.update();
|
|
1026
|
+
}
|
|
1027
|
+
setSoundEngine(e) {
|
|
1028
|
+
return this.soundEngine = e, this;
|
|
1029
|
+
}
|
|
1030
|
+
setPlaceholder(e) {
|
|
1031
|
+
return this.inputEl.placeholder = e, this;
|
|
1032
|
+
}
|
|
1033
|
+
setMaxLength(e) {
|
|
1034
|
+
return this.inputEl.maxLength = e, this;
|
|
1035
|
+
}
|
|
1036
|
+
setReadOnly(e) {
|
|
1037
|
+
return this.inputEl.readOnly = e, this;
|
|
1038
|
+
}
|
|
1039
|
+
setDisabled(e) {
|
|
1040
|
+
return super.setDisabled(e), this.inputEl && (this.inputEl.disabled = e), this;
|
|
1041
|
+
}
|
|
1042
|
+
updateClearBtn(e) {
|
|
1043
|
+
this.clearBtn && (this.clearBtn.style.display = e.length > 0 ? "flex" : "none");
|
|
1044
|
+
}
|
|
1045
|
+
update() {
|
|
1046
|
+
if (!this.inputEl) return this;
|
|
1047
|
+
const e = String(this.getValue() ?? "");
|
|
1048
|
+
return document.activeElement !== this.inputEl && (this.inputEl.value = e), this.updateClearBtn(e), this;
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
class U extends E {
|
|
1052
|
+
constructor(e, t, n, s = {}, r) {
|
|
1053
|
+
super(e, t, n, r);
|
|
1054
|
+
l(this, "trackEl");
|
|
1055
|
+
l(this, "barEl");
|
|
1056
|
+
l(this, "valueEl");
|
|
1057
|
+
l(this, "min", 0);
|
|
1058
|
+
l(this, "max", 100);
|
|
1059
|
+
l(this, "showValue", !0);
|
|
1060
|
+
l(this, "formatter");
|
|
1061
|
+
this.min = s.min ?? 0, this.max = s.max ?? 100, this.showValue = s.showValue !== !1, this.formatter = s.format || ((a, h) => `${Math.round(h)}%`);
|
|
1062
|
+
const o = document.createElement("div");
|
|
1063
|
+
o.className = "relly-progress-wrap", this.trackEl = document.createElement("div"), this.trackEl.className = "relly-progress-track", this.barEl = document.createElement("div"), this.barEl.className = "relly-progress-bar", s.color && (this.barEl.style.backgroundColor = s.color, this.barEl.style.boxShadow = `0 0 10px ${s.color}88`), this.trackEl.appendChild(this.barEl), this.valueEl = document.createElement("span"), this.valueEl.className = "relly-progress-text", this.valueEl.style.display = this.showValue ? "inline-block" : "none", o.appendChild(this.trackEl), o.appendChild(this.valueEl), this.controlEl.appendChild(o), s.tooltip && this.setTooltip(s.tooltip), this.update();
|
|
1064
|
+
}
|
|
1065
|
+
setMin(e) {
|
|
1066
|
+
return this.min = e, this.update(), this;
|
|
1067
|
+
}
|
|
1068
|
+
setMax(e) {
|
|
1069
|
+
return this.max = e, this.update(), this;
|
|
1070
|
+
}
|
|
1071
|
+
setColor(e) {
|
|
1072
|
+
return this.barEl.style.backgroundColor = e, this.barEl.style.boxShadow = `0 0 10px ${e}88`, this;
|
|
1073
|
+
}
|
|
1074
|
+
setShowValue(e) {
|
|
1075
|
+
return this.showValue = e, this.valueEl.style.display = e ? "inline-block" : "none", this;
|
|
1076
|
+
}
|
|
1077
|
+
setFormat(e) {
|
|
1078
|
+
return this.formatter = e, this.update(), this;
|
|
1079
|
+
}
|
|
1080
|
+
update() {
|
|
1081
|
+
if (!this.barEl || !this.valueEl) return this;
|
|
1082
|
+
const e = Number(this.getValue()) || 0, t = Math.max(this.min, Math.min(this.max, e)), n = this.max - this.min || 1, s = Math.max(0, Math.min(100, (t - this.min) / n * 100));
|
|
1083
|
+
return this.barEl.style.width = `${s}%`, this.valueEl.textContent = this.formatter(e, s), this;
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
class Y extends E {
|
|
1087
|
+
constructor(e, t = !1) {
|
|
1088
|
+
super("");
|
|
1089
|
+
l(this, "titleEl");
|
|
1090
|
+
l(this, "lineLeftEl");
|
|
1091
|
+
l(this, "lineRightEl");
|
|
1092
|
+
this.element.className = "relly-separator-row", this.element.innerHTML = "";
|
|
1093
|
+
const n = document.createElement("div");
|
|
1094
|
+
n.className = "relly-separator", t && n.classList.add("relly-separator--dashed"), this.lineLeftEl = document.createElement("span"), this.lineLeftEl.className = "relly-separator-line", n.appendChild(this.lineLeftEl), e && (n.classList.add("relly-separator--has-title"), this.titleEl = document.createElement("span"), this.titleEl.className = "relly-separator-title", this.titleEl.textContent = e, n.appendChild(this.titleEl), this.lineRightEl = document.createElement("span"), this.lineRightEl.className = "relly-separator-line", n.appendChild(this.lineRightEl)), this.element.appendChild(n);
|
|
1095
|
+
}
|
|
1096
|
+
setTitle(e) {
|
|
1097
|
+
if (!this.titleEl) {
|
|
1098
|
+
this.titleEl = document.createElement("span"), this.titleEl.className = "relly-separator-title";
|
|
1099
|
+
const t = this.element.querySelector(".relly-separator");
|
|
1100
|
+
t.classList.add("relly-separator--has-title"), t.appendChild(this.titleEl), this.lineRightEl = document.createElement("span"), this.lineRightEl.className = "relly-separator-line", t.appendChild(this.lineRightEl);
|
|
1101
|
+
}
|
|
1102
|
+
return this.titleEl.textContent = e, this;
|
|
1103
|
+
}
|
|
1104
|
+
update() {
|
|
1105
|
+
return this;
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
929
1108
|
class T {
|
|
930
1109
|
constructor(i, e, t, n) {
|
|
931
|
-
|
|
932
|
-
|
|
1110
|
+
l(this, "children", []);
|
|
1111
|
+
l(this, "accordion", !1);
|
|
933
1112
|
this.contentEl = i, this.bindingEngine = e, this.presetManager = t, this.soundEngine = n;
|
|
934
1113
|
}
|
|
935
1114
|
setAccordion(i) {
|
|
@@ -941,11 +1120,11 @@ class T {
|
|
|
941
1120
|
onSectionExpanded(i) {
|
|
942
1121
|
if (this.accordion)
|
|
943
1122
|
for (const e of this.children)
|
|
944
|
-
e instanceof
|
|
1123
|
+
e instanceof G && e !== i && e.setCollapsed(!0);
|
|
945
1124
|
}
|
|
946
1125
|
addCheckbox(i, e) {
|
|
947
1126
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
948
|
-
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1),
|
|
1127
|
+
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1), o = new I(
|
|
949
1128
|
r,
|
|
950
1129
|
s.object,
|
|
951
1130
|
s.property,
|
|
@@ -953,9 +1132,9 @@ class T {
|
|
|
953
1132
|
this.presetManager,
|
|
954
1133
|
this.soundEngine
|
|
955
1134
|
);
|
|
956
|
-
return s.tooltip &&
|
|
1135
|
+
return s.tooltip && o.setTooltip(s.tooltip), (s.onChange || s.onToggle) && o.onChange(s.onChange || s.onToggle), s.listen && o.listen(), s.showIf && o.showIf(s.showIf), this.contentEl.appendChild(o.element), this.children.push(o), o;
|
|
957
1136
|
}
|
|
958
|
-
const t = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", n = new
|
|
1137
|
+
const t = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", n = new I(
|
|
959
1138
|
t,
|
|
960
1139
|
i,
|
|
961
1140
|
e,
|
|
@@ -970,7 +1149,7 @@ class T {
|
|
|
970
1149
|
}
|
|
971
1150
|
addSlider(i, e) {
|
|
972
1151
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
973
|
-
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1),
|
|
1152
|
+
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1), o = new V(
|
|
974
1153
|
r,
|
|
975
1154
|
s.object,
|
|
976
1155
|
s.property,
|
|
@@ -978,7 +1157,7 @@ class T {
|
|
|
978
1157
|
this.presetManager,
|
|
979
1158
|
this.soundEngine
|
|
980
1159
|
);
|
|
981
|
-
return s.min !== void 0 &&
|
|
1160
|
+
return s.min !== void 0 && o.setMin(s.min), s.max !== void 0 && o.setMax(s.max), s.step !== void 0 && o.setStep(s.step), s.tooltip && o.setTooltip(s.tooltip), s.onChange && o.onChange(s.onChange), s.listen && o.listen(), s.showIf && o.showIf(s.showIf), this.contentEl.appendChild(o.element), this.children.push(o), o;
|
|
982
1161
|
}
|
|
983
1162
|
const t = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", n = new V(
|
|
984
1163
|
t,
|
|
@@ -1006,8 +1185,8 @@ class T {
|
|
|
1006
1185
|
}
|
|
1007
1186
|
addSelect(i, e, t) {
|
|
1008
1187
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1009
|
-
const r = i,
|
|
1010
|
-
return r.tooltip &&
|
|
1188
|
+
const r = i, o = r.label || r.property.charAt(0).toUpperCase() + r.property.slice(1), a = new z(o, r.object, r.property, r.options, this.bindingEngine, this.presetManager);
|
|
1189
|
+
return r.tooltip && a.setTooltip(r.tooltip), r.onChange && a.onChange(r.onChange), r.listen && a.listen(), r.showIf && a.showIf(r.showIf), this.contentEl.appendChild(a.element), this.children.push(a), a;
|
|
1011
1190
|
}
|
|
1012
1191
|
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new z(
|
|
1013
1192
|
n,
|
|
@@ -1024,8 +1203,8 @@ class T {
|
|
|
1024
1203
|
}
|
|
1025
1204
|
addDynamicLabel(i, e) {
|
|
1026
1205
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1027
|
-
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1),
|
|
1028
|
-
return s.format &&
|
|
1206
|
+
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1), o = new B(r, s.object, s.property, this.bindingEngine);
|
|
1207
|
+
return s.format && o.setFormat(s.format), s.tooltip && o.setTooltip(s.tooltip), s.showIf && o.showIf(s.showIf), this.contentEl.appendChild(o.element), this.children.push(o), o;
|
|
1029
1208
|
}
|
|
1030
1209
|
const t = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", n = new B(t, i, e, this.bindingEngine);
|
|
1031
1210
|
return this.contentEl.appendChild(n.element), this.children.push(n), n;
|
|
@@ -1035,8 +1214,8 @@ class T {
|
|
|
1035
1214
|
}
|
|
1036
1215
|
addGraph(i, e) {
|
|
1037
1216
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1038
|
-
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1),
|
|
1039
|
-
return s.range &&
|
|
1217
|
+
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1), o = new N(r, s.object, s.property, this.bindingEngine, this.soundEngine);
|
|
1218
|
+
return s.range && o.setRange(s.range[0], s.range[1]), s.color && o.setColor(s.color, s.fillColor), s.bufferSize && o.setBufferSize(s.bufferSize), s.smooth !== void 0 && o.setSmooth(s.smooth), s.height && o.setHeight(s.height), s.format && o.setFormat(s.format), s.tooltip && o.setTooltip(s.tooltip), s.showIf && o.showIf(s.showIf), this.contentEl.appendChild(o.element), this.children.push(o), o;
|
|
1040
1219
|
}
|
|
1041
1220
|
const t = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", n = new N(t, i, e, this.bindingEngine, this.soundEngine);
|
|
1042
1221
|
return this.contentEl.appendChild(n.element), this.children.push(n), n;
|
|
@@ -1051,10 +1230,10 @@ class T {
|
|
|
1051
1230
|
t++, h >= n + 1e3 && (e.fps = Math.round(t * 1e3 / (h - n)), t = 0, n = h), s = requestAnimationFrame(r);
|
|
1052
1231
|
};
|
|
1053
1232
|
typeof requestAnimationFrame < "u" && (s = requestAnimationFrame(r));
|
|
1054
|
-
const
|
|
1055
|
-
return
|
|
1056
|
-
typeof cancelAnimationFrame < "u" && s && cancelAnimationFrame(s),
|
|
1057
|
-
},
|
|
1233
|
+
const o = this.addGraph(e, "fps").setLabel(i).setRange(0, 120).setColor("#22c55e", "rgba(34, 197, 94, 0.25)").setFormat((h) => `${Math.round(h)} FPS`), a = o.destroy.bind(o);
|
|
1234
|
+
return o.destroy = () => {
|
|
1235
|
+
typeof cancelAnimationFrame < "u" && s && cancelAnimationFrame(s), a();
|
|
1236
|
+
}, o;
|
|
1058
1237
|
}
|
|
1059
1238
|
createFPSGraph(i = "FPS") {
|
|
1060
1239
|
return this.addFPSGraph(i);
|
|
@@ -1064,13 +1243,13 @@ class T {
|
|
|
1064
1243
|
let t;
|
|
1065
1244
|
const n = () => {
|
|
1066
1245
|
if (typeof performance < "u" && performance.memory) {
|
|
1067
|
-
const
|
|
1068
|
-
e.mem = Number(
|
|
1246
|
+
const o = performance.memory.usedJSHeapSize / 1048576;
|
|
1247
|
+
e.mem = Number(o.toFixed(1));
|
|
1069
1248
|
} else
|
|
1070
1249
|
e.mem = Number((Math.sin(Date.now() / 2500) * 8 + 48).toFixed(1));
|
|
1071
1250
|
};
|
|
1072
1251
|
n(), typeof setInterval < "u" && (t = setInterval(n, 1e3));
|
|
1073
|
-
const s = this.addGraph(e, "mem").setLabel(i).setAutoRange(!0).setColor("#a855f7", "rgba(168, 85, 247, 0.25)").setFormat((
|
|
1252
|
+
const s = this.addGraph(e, "mem").setLabel(i).setAutoRange(!0).setColor("#a855f7", "rgba(168, 85, 247, 0.25)").setFormat((o) => `${o.toFixed(1)} MB`), r = s.destroy.bind(s);
|
|
1074
1253
|
return s.destroy = () => {
|
|
1075
1254
|
t && clearInterval(t), r();
|
|
1076
1255
|
}, s;
|
|
@@ -1080,7 +1259,7 @@ class T {
|
|
|
1080
1259
|
}
|
|
1081
1260
|
addColor(i, e) {
|
|
1082
1261
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1083
|
-
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1),
|
|
1262
|
+
const s = i, r = s.label || s.property.charAt(0).toUpperCase() + s.property.slice(1), o = new R(
|
|
1084
1263
|
r,
|
|
1085
1264
|
s.object,
|
|
1086
1265
|
s.property,
|
|
@@ -1088,7 +1267,7 @@ class T {
|
|
|
1088
1267
|
this.presetManager,
|
|
1089
1268
|
this.soundEngine
|
|
1090
1269
|
);
|
|
1091
|
-
return s.tooltip &&
|
|
1270
|
+
return s.tooltip && o.setTooltip(s.tooltip), s.swatches && o.setSwatches(s.swatches), s.onChange && o.onChange(s.onChange), s.listen && o.listen(), s.showIf && o.showIf(s.showIf), this.contentEl.appendChild(o.element), this.children.push(o), o;
|
|
1092
1271
|
}
|
|
1093
1272
|
const t = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", n = new R(
|
|
1094
1273
|
t,
|
|
@@ -1105,8 +1284,8 @@ class T {
|
|
|
1105
1284
|
}
|
|
1106
1285
|
addPoint2D(i, e, t) {
|
|
1107
1286
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1108
|
-
const r = i,
|
|
1109
|
-
return r.min !== void 0 &&
|
|
1287
|
+
const r = i, o = r.label || r.property.charAt(0).toUpperCase() + r.property.slice(1), a = new P(o, r.object, r.property, this.bindingEngine, this.presetManager);
|
|
1288
|
+
return r.min !== void 0 && a.setMin(r.min), r.max !== void 0 && a.setMax(r.max), r.step !== void 0 && a.setStep(r.step), r.tooltip && a.setTooltip(r.tooltip), r.onChange && a.onChange(r.onChange), r.listen && a.listen(), r.showIf && a.showIf(r.showIf), this.contentEl.appendChild(a.element), this.children.push(a), a;
|
|
1110
1289
|
}
|
|
1111
1290
|
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new P(n, i, e, this.bindingEngine, this.presetManager);
|
|
1112
1291
|
return (t == null ? void 0 : t.min) !== void 0 && s.setMin(t.min), (t == null ? void 0 : t.max) !== void 0 && s.setMax(t.max), (t == null ? void 0 : t.step) !== void 0 && s.setStep(t.step), this.contentEl.appendChild(s.element), this.children.push(s), s;
|
|
@@ -1116,8 +1295,8 @@ class T {
|
|
|
1116
1295
|
}
|
|
1117
1296
|
addPoint3D(i, e, t) {
|
|
1118
1297
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1119
|
-
const r = i,
|
|
1120
|
-
return r.min !== void 0 &&
|
|
1298
|
+
const r = i, o = r.label || r.property.charAt(0).toUpperCase() + r.property.slice(1), a = new D(o, r.object, r.property, this.bindingEngine, this.presetManager);
|
|
1299
|
+
return r.min !== void 0 && a.setMin(r.min), r.max !== void 0 && a.setMax(r.max), r.step !== void 0 && a.setStep(r.step), r.tooltip && a.setTooltip(r.tooltip), r.contextMenu && a.setContextMenu(r.contextMenu), r.onChange && a.onChange(r.onChange), r.listen && a.listen(), r.showIf && a.showIf(r.showIf), this.contentEl.appendChild(a.element), this.children.push(a), a;
|
|
1121
1300
|
}
|
|
1122
1301
|
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new D(n, i, e, this.bindingEngine, this.presetManager);
|
|
1123
1302
|
return (t == null ? void 0 : t.min) !== void 0 && s.setMin(t.min), (t == null ? void 0 : t.max) !== void 0 && s.setMax(t.max), (t == null ? void 0 : t.step) !== void 0 && s.setStep(t.step), this.contentEl.appendChild(s.element), this.children.push(s), s;
|
|
@@ -1133,17 +1312,17 @@ class T {
|
|
|
1133
1312
|
}
|
|
1134
1313
|
addRange(i, e, t) {
|
|
1135
1314
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1136
|
-
const r = i,
|
|
1137
|
-
|
|
1315
|
+
const r = i, o = r.label || r.property.charAt(0).toUpperCase() + r.property.slice(1), a = new j(
|
|
1316
|
+
o,
|
|
1138
1317
|
r.object,
|
|
1139
1318
|
r.property,
|
|
1140
1319
|
this.bindingEngine,
|
|
1141
1320
|
this.presetManager,
|
|
1142
1321
|
this.soundEngine
|
|
1143
1322
|
);
|
|
1144
|
-
return r.min !== void 0 &&
|
|
1323
|
+
return r.min !== void 0 && a.setMin(r.min), r.max !== void 0 && a.setMax(r.max), r.step !== void 0 && a.setStep(r.step), r.tooltip && a.setTooltip(r.tooltip), r.contextMenu && a.setContextMenu(r.contextMenu), r.onChange && a.onChange(r.onChange), r.listen && a.listen(), r.showIf && a.showIf(r.showIf), this.contentEl.appendChild(a.element), this.children.push(a), a;
|
|
1145
1324
|
}
|
|
1146
|
-
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new
|
|
1325
|
+
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new j(
|
|
1147
1326
|
n,
|
|
1148
1327
|
i,
|
|
1149
1328
|
e,
|
|
@@ -1158,8 +1337,8 @@ class T {
|
|
|
1158
1337
|
}
|
|
1159
1338
|
addSegmented(i, e, t) {
|
|
1160
1339
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1161
|
-
const r = i,
|
|
1162
|
-
|
|
1340
|
+
const r = i, o = r.label || r.property.charAt(0).toUpperCase() + r.property.slice(1), a = new H(
|
|
1341
|
+
o,
|
|
1163
1342
|
r.object,
|
|
1164
1343
|
r.property,
|
|
1165
1344
|
r.options || [],
|
|
@@ -1167,9 +1346,9 @@ class T {
|
|
|
1167
1346
|
this.presetManager,
|
|
1168
1347
|
this.soundEngine
|
|
1169
1348
|
);
|
|
1170
|
-
return r.tooltip &&
|
|
1349
|
+
return r.tooltip && a.setTooltip(r.tooltip), r.contextMenu && a.setContextMenu(r.contextMenu), r.onChange && a.onChange(r.onChange), r.listen && a.listen(), r.showIf && a.showIf(r.showIf), this.contentEl.appendChild(a.element), this.children.push(a), a;
|
|
1171
1350
|
}
|
|
1172
|
-
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new
|
|
1351
|
+
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new H(
|
|
1173
1352
|
n,
|
|
1174
1353
|
i,
|
|
1175
1354
|
e,
|
|
@@ -1185,18 +1364,18 @@ class T {
|
|
|
1185
1364
|
}
|
|
1186
1365
|
addStatus(i, e, t = "online", n, s) {
|
|
1187
1366
|
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1188
|
-
const c = i,
|
|
1189
|
-
|
|
1367
|
+
const c = i, m = c.label || c.property.charAt(0).toUpperCase() + c.property.slice(1), p = new F(
|
|
1368
|
+
m,
|
|
1190
1369
|
c.object,
|
|
1191
1370
|
c.property,
|
|
1192
1371
|
this.bindingEngine
|
|
1193
1372
|
);
|
|
1194
1373
|
return c.status && p.setStatus(c.status, c.badge, c.detail), c.badge && p.setBadge(c.badge), c.detail && p.setDetail(c.detail), c.tooltip && p.setTooltip(c.tooltip), c.contextMenu && p.setContextMenu(c.contextMenu), c.listen && p.listen(), c.showIf && p.showIf(c.showIf), this.contentEl.appendChild(p.element), this.children.push(p), p;
|
|
1195
1374
|
}
|
|
1196
|
-
const r = e ? e.charAt(0).toUpperCase() + e.slice(1) : typeof i == "string" ? i : "Status",
|
|
1375
|
+
const r = e ? e.charAt(0).toUpperCase() + e.slice(1) : typeof i == "string" ? i : "Status", o = typeof i == "string" ? void 0 : i, a = typeof i == "string" ? void 0 : e, h = new F(
|
|
1197
1376
|
r,
|
|
1198
|
-
l,
|
|
1199
1377
|
o,
|
|
1378
|
+
a,
|
|
1200
1379
|
this.bindingEngine
|
|
1201
1380
|
);
|
|
1202
1381
|
return h.setStatus(t, n, s), this.contentEl.appendChild(h.element), this.children.push(h), h;
|
|
@@ -1204,8 +1383,107 @@ class T {
|
|
|
1204
1383
|
createStatus(i, e, t = "online", n, s) {
|
|
1205
1384
|
return this.addStatus(i, e, t, n, s);
|
|
1206
1385
|
}
|
|
1386
|
+
addSwitch(i, e, t) {
|
|
1387
|
+
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1388
|
+
const r = i, o = r.label || r.property.charAt(0).toUpperCase() + r.property.slice(1), a = new q(
|
|
1389
|
+
o,
|
|
1390
|
+
r.object,
|
|
1391
|
+
r.property,
|
|
1392
|
+
r,
|
|
1393
|
+
this.bindingEngine,
|
|
1394
|
+
this.presetManager,
|
|
1395
|
+
this.soundEngine
|
|
1396
|
+
);
|
|
1397
|
+
return r.tooltip && a.setTooltip(r.tooltip), r.contextMenu && a.setContextMenu(r.contextMenu), r.onToggle && a.onToggle(r.onToggle), r.onChange && a.onChange(r.onChange), r.listen && a.listen(), r.showIf && a.showIf(r.showIf), this.contentEl.appendChild(a.element), this.children.push(a), a;
|
|
1398
|
+
}
|
|
1399
|
+
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new q(
|
|
1400
|
+
n,
|
|
1401
|
+
i,
|
|
1402
|
+
e,
|
|
1403
|
+
t || {},
|
|
1404
|
+
this.bindingEngine,
|
|
1405
|
+
this.presetManager,
|
|
1406
|
+
this.soundEngine
|
|
1407
|
+
);
|
|
1408
|
+
return this.contentEl.appendChild(s.element), this.children.push(s), s;
|
|
1409
|
+
}
|
|
1410
|
+
createSwitch(i, e, t) {
|
|
1411
|
+
return this.addSwitch(i, e, t);
|
|
1412
|
+
}
|
|
1413
|
+
addButtonGroup(i) {
|
|
1414
|
+
const e = new J(i, this.soundEngine);
|
|
1415
|
+
return this.contentEl.appendChild(e.element), this.children.push(e), e;
|
|
1416
|
+
}
|
|
1417
|
+
createButtonGroup(i) {
|
|
1418
|
+
return this.addButtonGroup(i);
|
|
1419
|
+
}
|
|
1420
|
+
addText(i, e, t) {
|
|
1421
|
+
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1422
|
+
const r = i, o = r.label || r.property.charAt(0).toUpperCase() + r.property.slice(1), a = new $(
|
|
1423
|
+
o,
|
|
1424
|
+
r.object,
|
|
1425
|
+
r.property,
|
|
1426
|
+
r,
|
|
1427
|
+
this.bindingEngine,
|
|
1428
|
+
this.presetManager,
|
|
1429
|
+
this.soundEngine
|
|
1430
|
+
);
|
|
1431
|
+
return r.tooltip && a.setTooltip(r.tooltip), r.contextMenu && a.setContextMenu(r.contextMenu), r.onChange && a.onChange(r.onChange), r.listen && a.listen(), r.showIf && a.showIf(r.showIf), this.contentEl.appendChild(a.element), this.children.push(a), a;
|
|
1432
|
+
}
|
|
1433
|
+
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new $(
|
|
1434
|
+
n,
|
|
1435
|
+
i,
|
|
1436
|
+
e,
|
|
1437
|
+
t || {},
|
|
1438
|
+
this.bindingEngine,
|
|
1439
|
+
this.presetManager,
|
|
1440
|
+
this.soundEngine
|
|
1441
|
+
);
|
|
1442
|
+
return this.contentEl.appendChild(s.element), this.children.push(s), s;
|
|
1443
|
+
}
|
|
1444
|
+
createText(i, e, t) {
|
|
1445
|
+
return this.addText(i, e, t);
|
|
1446
|
+
}
|
|
1447
|
+
addInput(i, e, t) {
|
|
1448
|
+
return this.addText(i, e, t);
|
|
1449
|
+
}
|
|
1450
|
+
createInput(i, e, t) {
|
|
1451
|
+
return this.addText(i, e, t);
|
|
1452
|
+
}
|
|
1453
|
+
addProgress(i, e, t) {
|
|
1454
|
+
if (typeof i == "object" && i !== null && e === void 0 && "object" in i && "property" in i) {
|
|
1455
|
+
const r = i, o = r.label || r.property.charAt(0).toUpperCase() + r.property.slice(1), a = new U(
|
|
1456
|
+
o,
|
|
1457
|
+
r.object,
|
|
1458
|
+
r.property,
|
|
1459
|
+
r,
|
|
1460
|
+
this.bindingEngine
|
|
1461
|
+
);
|
|
1462
|
+
return r.tooltip && a.setTooltip(r.tooltip), r.listen && a.listen(), r.showIf && a.showIf(r.showIf), this.contentEl.appendChild(a.element), this.children.push(a), a;
|
|
1463
|
+
}
|
|
1464
|
+
const n = e ? e.charAt(0).toUpperCase() + e.slice(1) : "", s = new U(
|
|
1465
|
+
n,
|
|
1466
|
+
i,
|
|
1467
|
+
e,
|
|
1468
|
+
t || {},
|
|
1469
|
+
this.bindingEngine
|
|
1470
|
+
);
|
|
1471
|
+
return this.contentEl.appendChild(s.element), this.children.push(s), s;
|
|
1472
|
+
}
|
|
1473
|
+
createProgress(i, e, t) {
|
|
1474
|
+
return this.addProgress(i, e, t);
|
|
1475
|
+
}
|
|
1476
|
+
addSeparator(i, e = !1) {
|
|
1477
|
+
let t, n = e;
|
|
1478
|
+
typeof i == "object" && i !== null ? (t = i.title, i.dashed !== void 0 && (n = i.dashed)) : t = i;
|
|
1479
|
+
const s = new Y(t, n);
|
|
1480
|
+
return this.contentEl.appendChild(s.element), this.children.push(s), s;
|
|
1481
|
+
}
|
|
1482
|
+
createSeparator(i, e = !1) {
|
|
1483
|
+
return this.addSeparator(i, e);
|
|
1484
|
+
}
|
|
1207
1485
|
addRow() {
|
|
1208
|
-
const i = new
|
|
1486
|
+
const i = new _(this.bindingEngine, this.presetManager, this.soundEngine);
|
|
1209
1487
|
return this.contentEl.appendChild(i.element), this.children.push(i), i;
|
|
1210
1488
|
}
|
|
1211
1489
|
createRow() {
|
|
@@ -1214,7 +1492,7 @@ class T {
|
|
|
1214
1492
|
addSection(i = "Section", e = !1) {
|
|
1215
1493
|
let t = "", n = e;
|
|
1216
1494
|
typeof i == "object" && i !== null ? (t = i.label || i.title || "Section", i.collapsed !== void 0 && (n = i.collapsed)) : t = i || "Section";
|
|
1217
|
-
const s = new
|
|
1495
|
+
const s = new G(t, this.bindingEngine, this.presetManager, n, this.soundEngine);
|
|
1218
1496
|
return s.setParentContainer(this), this.contentEl.appendChild(s.element), this.children.push(s), s;
|
|
1219
1497
|
}
|
|
1220
1498
|
addFolder(i = "Folder", e = !1) {
|
|
@@ -1283,6 +1561,44 @@ class T {
|
|
|
1283
1561
|
e = this.addStatus(i.object, i.property, i.status, i.badge, i.detail);
|
|
1284
1562
|
break;
|
|
1285
1563
|
}
|
|
1564
|
+
case "switch": {
|
|
1565
|
+
e = this.addSwitch(i.object, i.property, {
|
|
1566
|
+
onLabel: i.onLabel,
|
|
1567
|
+
offLabel: i.offLabel,
|
|
1568
|
+
disabled: i.disabled,
|
|
1569
|
+
tooltip: i.tooltip
|
|
1570
|
+
});
|
|
1571
|
+
break;
|
|
1572
|
+
}
|
|
1573
|
+
case "buttonGroup": {
|
|
1574
|
+
e = this.addButtonGroup(i.buttons || []);
|
|
1575
|
+
break;
|
|
1576
|
+
}
|
|
1577
|
+
case "text": {
|
|
1578
|
+
e = this.addText(i.object, i.property, {
|
|
1579
|
+
placeholder: i.placeholder,
|
|
1580
|
+
maxLength: i.maxLength,
|
|
1581
|
+
readOnly: i.readOnly,
|
|
1582
|
+
clearable: i.clearable,
|
|
1583
|
+
disabled: i.disabled,
|
|
1584
|
+
tooltip: i.tooltip
|
|
1585
|
+
});
|
|
1586
|
+
break;
|
|
1587
|
+
}
|
|
1588
|
+
case "progress": {
|
|
1589
|
+
e = this.addProgress(i.object, i.property, {
|
|
1590
|
+
min: i.min,
|
|
1591
|
+
max: i.max,
|
|
1592
|
+
color: i.color,
|
|
1593
|
+
showValue: i.showValue,
|
|
1594
|
+
tooltip: i.tooltip
|
|
1595
|
+
});
|
|
1596
|
+
break;
|
|
1597
|
+
}
|
|
1598
|
+
case "separator": {
|
|
1599
|
+
e = this.addSeparator(i.title || i.label);
|
|
1600
|
+
break;
|
|
1601
|
+
}
|
|
1286
1602
|
case "section":
|
|
1287
1603
|
case "folder": {
|
|
1288
1604
|
e = this.addSection(t, i.collapsed || !1);
|
|
@@ -1299,13 +1615,13 @@ class T {
|
|
|
1299
1615
|
this.children = [];
|
|
1300
1616
|
}
|
|
1301
1617
|
}
|
|
1302
|
-
class
|
|
1618
|
+
class _ extends T {
|
|
1303
1619
|
constructor(e, t, n) {
|
|
1304
1620
|
const s = document.createElement("div");
|
|
1305
1621
|
s.className = "relly-multi-row";
|
|
1306
1622
|
super(s, e, t, n);
|
|
1307
|
-
|
|
1308
|
-
|
|
1623
|
+
l(this, "element");
|
|
1624
|
+
l(this, "disabled", !1);
|
|
1309
1625
|
this.element = s;
|
|
1310
1626
|
}
|
|
1311
1627
|
setDisabled(e) {
|
|
@@ -1318,26 +1634,26 @@ class K extends T {
|
|
|
1318
1634
|
this.destroyChildren(), this.element.remove();
|
|
1319
1635
|
}
|
|
1320
1636
|
}
|
|
1321
|
-
class
|
|
1637
|
+
class G extends T {
|
|
1322
1638
|
constructor(e, t, n, s = !1, r) {
|
|
1323
|
-
const l = document.createElement("div");
|
|
1324
|
-
l.className = "relly-section-content";
|
|
1325
|
-
super(l, t, n, r);
|
|
1326
|
-
a(this, "element");
|
|
1327
|
-
a(this, "headerEl");
|
|
1328
|
-
a(this, "titleEl");
|
|
1329
|
-
a(this, "arrowEl");
|
|
1330
|
-
a(this, "isCollapsed", !1);
|
|
1331
|
-
a(this, "conditionPredicate");
|
|
1332
|
-
a(this, "parentContainer");
|
|
1333
|
-
a(this, "disabled", !1);
|
|
1334
|
-
this.label = e, this.element = document.createElement("div"), this.element.className = "relly-section", this.headerEl = document.createElement("div"), this.headerEl.className = "relly-section-header";
|
|
1335
1639
|
const o = document.createElement("div");
|
|
1336
|
-
o.className = "relly-section-
|
|
1640
|
+
o.className = "relly-section-content";
|
|
1641
|
+
super(o, t, n, r);
|
|
1642
|
+
l(this, "element");
|
|
1643
|
+
l(this, "headerEl");
|
|
1644
|
+
l(this, "titleEl");
|
|
1645
|
+
l(this, "arrowEl");
|
|
1646
|
+
l(this, "isCollapsed", !1);
|
|
1647
|
+
l(this, "conditionPredicate");
|
|
1648
|
+
l(this, "parentContainer");
|
|
1649
|
+
l(this, "disabled", !1);
|
|
1650
|
+
this.label = e, this.element = document.createElement("div"), this.element.className = "relly-section", this.headerEl = document.createElement("div"), this.headerEl.className = "relly-section-header";
|
|
1651
|
+
const a = document.createElement("div");
|
|
1652
|
+
a.className = "relly-section-title-wrap", this.arrowEl = document.createElement("span"), this.arrowEl.innerHTML = `
|
|
1337
1653
|
<svg class="relly-section-arrow" viewBox="0 0 10 10">
|
|
1338
1654
|
<polygon points="2,1 8,5 2,9"></polygon>
|
|
1339
1655
|
</svg>
|
|
1340
|
-
`, this.titleEl = document.createElement("span"), this.titleEl.textContent = e,
|
|
1656
|
+
`, this.titleEl = document.createElement("span"), this.titleEl.textContent = e, a.appendChild(this.arrowEl), a.appendChild(this.titleEl), this.headerEl.appendChild(a), this.element.appendChild(this.headerEl), this.element.appendChild(this.contentEl), this.headerEl.addEventListener("click", () => {
|
|
1341
1657
|
var h;
|
|
1342
1658
|
this.disabled || ((h = this.soundEngine) == null || h.playClick(), this.toggle());
|
|
1343
1659
|
}), s && this.setCollapsed(!0);
|
|
@@ -1378,12 +1694,12 @@ class q extends T {
|
|
|
1378
1694
|
this.conditionPredicate && this.bindingEngine.unregister(this), this.destroyChildren(), this.element.remove();
|
|
1379
1695
|
}
|
|
1380
1696
|
}
|
|
1381
|
-
class
|
|
1697
|
+
class Q {
|
|
1382
1698
|
constructor() {
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1699
|
+
l(this, "listeners", /* @__PURE__ */ new Set());
|
|
1700
|
+
l(this, "rafId", null);
|
|
1701
|
+
l(this, "isRunning", !1);
|
|
1702
|
+
l(this, "isPaused", !1);
|
|
1387
1703
|
}
|
|
1388
1704
|
register(i) {
|
|
1389
1705
|
this.listeners.add(i), !this.isRunning && !this.isPaused && this.start();
|
|
@@ -1416,11 +1732,11 @@ class G {
|
|
|
1416
1732
|
this.stop(), this.listeners.clear();
|
|
1417
1733
|
}
|
|
1418
1734
|
}
|
|
1419
|
-
class
|
|
1735
|
+
class Z {
|
|
1420
1736
|
constructor() {
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1737
|
+
l(this, "components", /* @__PURE__ */ new Set());
|
|
1738
|
+
l(this, "pendingValues", {});
|
|
1739
|
+
l(this, "changeCallback");
|
|
1424
1740
|
}
|
|
1425
1741
|
setOnChange(i) {
|
|
1426
1742
|
this.changeCallback = i;
|
|
@@ -1483,7 +1799,7 @@ class W {
|
|
|
1483
1799
|
this.components.clear(), this.pendingValues = {};
|
|
1484
1800
|
}
|
|
1485
1801
|
}
|
|
1486
|
-
const
|
|
1802
|
+
const K = {
|
|
1487
1803
|
bg: "#1c1d22",
|
|
1488
1804
|
fg: "#d1d5db",
|
|
1489
1805
|
headerBg: "#141518",
|
|
@@ -1497,7 +1813,7 @@ const U = {
|
|
|
1497
1813
|
font: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
|
|
1498
1814
|
fontSize: "11px",
|
|
1499
1815
|
rowHeight: "26px"
|
|
1500
|
-
},
|
|
1816
|
+
}, O = {
|
|
1501
1817
|
bg: "#ffffff",
|
|
1502
1818
|
fg: "#374151",
|
|
1503
1819
|
headerBg: "#f3f4f6",
|
|
@@ -1511,7 +1827,7 @@ const U = {
|
|
|
1511
1827
|
font: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
|
|
1512
1828
|
fontSize: "11px",
|
|
1513
1829
|
rowHeight: "26px"
|
|
1514
|
-
},
|
|
1830
|
+
}, ee = {
|
|
1515
1831
|
bg: "#0f051d",
|
|
1516
1832
|
fg: "#e0f2fe",
|
|
1517
1833
|
headerBg: "#180a33",
|
|
@@ -1525,7 +1841,7 @@ const U = {
|
|
|
1525
1841
|
font: '"JetBrains Mono", Consolas, monospace',
|
|
1526
1842
|
fontSize: "11px",
|
|
1527
1843
|
rowHeight: "26px"
|
|
1528
|
-
},
|
|
1844
|
+
}, te = {
|
|
1529
1845
|
bg: "#2e3440",
|
|
1530
1846
|
fg: "#d8dee9",
|
|
1531
1847
|
headerBg: "#242933",
|
|
@@ -1539,7 +1855,7 @@ const U = {
|
|
|
1539
1855
|
font: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
|
|
1540
1856
|
fontSize: "11px",
|
|
1541
1857
|
rowHeight: "26px"
|
|
1542
|
-
},
|
|
1858
|
+
}, ie = {
|
|
1543
1859
|
bg: "#282a36",
|
|
1544
1860
|
fg: "#f8f8f2",
|
|
1545
1861
|
headerBg: "#1e1f29",
|
|
@@ -1553,7 +1869,7 @@ const U = {
|
|
|
1553
1869
|
font: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
|
|
1554
1870
|
fontSize: "11px",
|
|
1555
1871
|
rowHeight: "26px"
|
|
1556
|
-
},
|
|
1872
|
+
}, ne = {
|
|
1557
1873
|
bg: "#1a1b26",
|
|
1558
1874
|
fg: "#a9b1d6",
|
|
1559
1875
|
headerBg: "#16161e",
|
|
@@ -1567,7 +1883,7 @@ const U = {
|
|
|
1567
1883
|
font: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
|
|
1568
1884
|
fontSize: "11px",
|
|
1569
1885
|
rowHeight: "26px"
|
|
1570
|
-
},
|
|
1886
|
+
}, se = {
|
|
1571
1887
|
bg: "#0a0f0d",
|
|
1572
1888
|
fg: "#00ff66",
|
|
1573
1889
|
headerBg: "#050a08",
|
|
@@ -1581,7 +1897,7 @@ const U = {
|
|
|
1581
1897
|
font: '"JetBrains Mono", Consolas, monospace',
|
|
1582
1898
|
fontSize: "11px",
|
|
1583
1899
|
rowHeight: "26px"
|
|
1584
|
-
},
|
|
1900
|
+
}, re = {
|
|
1585
1901
|
bg: "#241b2f",
|
|
1586
1902
|
fg: "#f8f8f2",
|
|
1587
1903
|
headerBg: "#191322",
|
|
@@ -1596,14 +1912,14 @@ const U = {
|
|
|
1596
1912
|
fontSize: "11px",
|
|
1597
1913
|
rowHeight: "26px"
|
|
1598
1914
|
};
|
|
1599
|
-
class
|
|
1915
|
+
class le {
|
|
1600
1916
|
constructor(i, e) {
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
this.panelElement = i, this.currentTheme = { ...
|
|
1917
|
+
l(this, "currentTheme");
|
|
1918
|
+
l(this, "currentThemeName");
|
|
1919
|
+
this.panelElement = i, this.currentTheme = { ...K }, this.currentThemeName = "dark", e ? this.applyTheme(e) : this.applyToDOM(this.currentTheme);
|
|
1604
1920
|
}
|
|
1605
1921
|
applyTheme(i) {
|
|
1606
|
-
typeof i == "string" && (this.currentThemeName = i), i === "light" ? this.currentTheme = { ...
|
|
1922
|
+
typeof i == "string" && (this.currentThemeName = i), i === "light" ? this.currentTheme = { ...O } : i === "dark" ? this.currentTheme = { ...K } : i === "cyberpunk" ? this.currentTheme = { ...ee } : i === "nord" ? this.currentTheme = { ...te } : i === "dracula" ? this.currentTheme = { ...ie } : i === "tokyo-night" ? this.currentTheme = { ...ne } : i === "matrix" ? this.currentTheme = { ...se } : i === "synthwave" ? this.currentTheme = { ...re } : typeof i == "object" && (this.currentTheme = { ...this.currentTheme, ...i }, this.currentThemeName = "custom"), this.applyToDOM(this.currentTheme);
|
|
1607
1923
|
}
|
|
1608
1924
|
getCurrentThemeName() {
|
|
1609
1925
|
return this.currentThemeName;
|
|
@@ -1616,27 +1932,27 @@ class ee {
|
|
|
1616
1932
|
return { ...this.currentTheme };
|
|
1617
1933
|
}
|
|
1618
1934
|
}
|
|
1619
|
-
class
|
|
1935
|
+
class ae {
|
|
1620
1936
|
constructor(i, e, t) {
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1937
|
+
l(this, "isDragging", !1);
|
|
1938
|
+
l(this, "startX", 0);
|
|
1939
|
+
l(this, "startY", 0);
|
|
1940
|
+
l(this, "initialLeft", 0);
|
|
1941
|
+
l(this, "initialTop", 0);
|
|
1942
|
+
l(this, "wasSnapped", !1);
|
|
1943
|
+
l(this, "snapThreshold", 18);
|
|
1944
|
+
l(this, "magneticSnap", !0);
|
|
1945
|
+
l(this, "onMouseDownBound");
|
|
1946
|
+
l(this, "onMouseMoveBound");
|
|
1947
|
+
l(this, "onMouseUpBound");
|
|
1948
|
+
l(this, "onResizeBound");
|
|
1633
1949
|
this.handle = i, this.panel = e, this.soundEngine = t, this.onMouseDownBound = this.onMouseDown.bind(this), this.onMouseMoveBound = this.onMouseMove.bind(this), this.onMouseUpBound = this.onMouseUp.bind(this), this.onResizeBound = this.onResize.bind(this), this.handle.addEventListener("mousedown", this.onMouseDownBound), typeof window < "u" && window.addEventListener("resize", this.onResizeBound);
|
|
1634
1950
|
}
|
|
1635
1951
|
clampToViewport() {
|
|
1636
1952
|
if (typeof window > "u") return;
|
|
1637
1953
|
const i = this.panel.getBoundingClientRect(), e = i.width, t = i.height, n = Math.max(0, window.innerWidth - e), s = Math.max(0, window.innerHeight - t);
|
|
1638
|
-
let r = i.left,
|
|
1639
|
-
r > n && (r = n), r < 0 && (r = 0),
|
|
1954
|
+
let r = i.left, o = i.top;
|
|
1955
|
+
r > n && (r = n), r < 0 && (r = 0), o > s && (o = s), o < 0 && (o = 0), this.panel.style.left = `${Math.round(r)}px`, this.panel.style.top = `${Math.round(o)}px`, this.panel.style.right = "auto", this.panel.style.bottom = "auto";
|
|
1640
1956
|
}
|
|
1641
1957
|
onResize() {
|
|
1642
1958
|
this.clampToViewport();
|
|
@@ -1652,9 +1968,9 @@ class te {
|
|
|
1652
1968
|
if (!this.isDragging) return;
|
|
1653
1969
|
const e = i.clientX - this.startX, t = i.clientY - this.startY;
|
|
1654
1970
|
let n = this.initialLeft + e, s = this.initialTop + t;
|
|
1655
|
-
const r = this.panel.getBoundingClientRect(),
|
|
1656
|
-
let
|
|
1657
|
-
this.magneticSnap && (Math.abs(n) < this.snapThreshold ? (n = 0,
|
|
1971
|
+
const r = this.panel.getBoundingClientRect(), o = r.width, a = r.height, h = Math.max(0, window.innerWidth - o), c = Math.max(0, window.innerHeight - a);
|
|
1972
|
+
let m = !1;
|
|
1973
|
+
this.magneticSnap && (Math.abs(n) < this.snapThreshold ? (n = 0, m = !0) : Math.abs(n - h) < this.snapThreshold && (n = h, m = !0), Math.abs(s) < this.snapThreshold ? (s = 0, m = !0) : Math.abs(s - c) < this.snapThreshold && (s = c, m = !0), m && !this.wasSnapped && ((p = this.soundEngine) == null || p.playSnap()), this.wasSnapped = m), n = Math.max(0, Math.min(n, h)), s = Math.max(0, Math.min(s, c)), this.panel.style.left = `${n}px`, this.panel.style.top = `${s}px`;
|
|
1658
1974
|
}
|
|
1659
1975
|
onMouseUp() {
|
|
1660
1976
|
this.isDragging = !1, this.wasSnapped = !1, window.removeEventListener("mousemove", this.onMouseMoveBound), window.removeEventListener("mouseup", this.onMouseUpBound);
|
|
@@ -1663,18 +1979,18 @@ class te {
|
|
|
1663
1979
|
this.handle.removeEventListener("mousedown", this.onMouseDownBound), typeof window < "u" && (window.removeEventListener("mousemove", this.onMouseMoveBound), window.removeEventListener("mouseup", this.onMouseUpBound), window.removeEventListener("resize", this.onResizeBound));
|
|
1664
1980
|
}
|
|
1665
1981
|
}
|
|
1666
|
-
class
|
|
1982
|
+
class oe {
|
|
1667
1983
|
constructor(i, e = 240, t = 120) {
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1984
|
+
l(this, "handleEl");
|
|
1985
|
+
l(this, "isResizing", !1);
|
|
1986
|
+
l(this, "startX", 0);
|
|
1987
|
+
l(this, "startY", 0);
|
|
1988
|
+
l(this, "initialWidth", 0);
|
|
1989
|
+
l(this, "initialHeight", 0);
|
|
1990
|
+
l(this, "onMouseDownBound");
|
|
1991
|
+
l(this, "onMouseMoveBound");
|
|
1992
|
+
l(this, "onMouseUpBound");
|
|
1993
|
+
l(this, "onResizeBound");
|
|
1678
1994
|
this.panel = i, this.minWidth = e, this.minHeight = t, this.handleEl = document.createElement("div"), this.handleEl.className = "relly-resize-handle", this.handleEl.title = "Drag to resize panel", this.handleEl.innerHTML = `
|
|
1679
1995
|
<svg viewBox="0 0 10 10">
|
|
1680
1996
|
<line x1="8" y1="2" x2="2" y2="8"></line>
|
|
@@ -1700,11 +2016,11 @@ class ie {
|
|
|
1700
2016
|
}
|
|
1701
2017
|
onMouseMove(i) {
|
|
1702
2018
|
if (!this.isResizing) return;
|
|
1703
|
-
const e = i.clientX - this.startX, t = i.clientY - this.startY, n = this.panel.getBoundingClientRect(), s = Math.max(this.minWidth, window.innerWidth - n.left - 8), r = Math.max(this.minHeight, window.innerHeight - n.top - 8),
|
|
2019
|
+
const e = i.clientX - this.startX, t = i.clientY - this.startY, n = this.panel.getBoundingClientRect(), s = Math.max(this.minWidth, window.innerWidth - n.left - 8), r = Math.max(this.minHeight, window.innerHeight - n.top - 8), o = Math.max(this.minWidth, Math.min(s, this.initialWidth + e)), a = Math.max(
|
|
1704
2020
|
this.minHeight,
|
|
1705
2021
|
Math.min(r, this.initialHeight + t)
|
|
1706
2022
|
);
|
|
1707
|
-
this.panel.style.width = `${Math.round(
|
|
2023
|
+
this.panel.style.width = `${Math.round(o)}px`, this.panel.style.height = `${Math.round(a)}px`;
|
|
1708
2024
|
const h = this.panel.querySelector(".relly-body");
|
|
1709
2025
|
h && (h.style.maxHeight = "none", h.style.flex = "1");
|
|
1710
2026
|
}
|
|
@@ -1715,10 +2031,10 @@ class ie {
|
|
|
1715
2031
|
this.handleEl.removeEventListener("mousedown", this.onMouseDownBound), typeof window < "u" && (window.removeEventListener("mousemove", this.onMouseMoveBound), window.removeEventListener("mouseup", this.onMouseUpBound), window.removeEventListener("resize", this.onResizeBound)), this.handleEl.remove();
|
|
1716
2032
|
}
|
|
1717
2033
|
}
|
|
1718
|
-
class
|
|
2034
|
+
class W {
|
|
1719
2035
|
constructor(i, e) {
|
|
1720
|
-
|
|
1721
|
-
this.hotkey = i, this.onToggle = e, this.onKeyDownBound = this.onKeyDown.bind(this),
|
|
2036
|
+
l(this, "onKeyDownBound");
|
|
2037
|
+
this.hotkey = i, this.onToggle = e, this.onKeyDownBound = this.onKeyDown.bind(this), typeof window < "u" && window.addEventListener("keydown", this.onKeyDownBound);
|
|
1722
2038
|
}
|
|
1723
2039
|
onKeyDown(i) {
|
|
1724
2040
|
var n;
|
|
@@ -1742,13 +2058,13 @@ class ne {
|
|
|
1742
2058
|
typeof window < "u" && window.removeEventListener("keydown", this.onKeyDownBound);
|
|
1743
2059
|
}
|
|
1744
2060
|
}
|
|
1745
|
-
class
|
|
2061
|
+
class he {
|
|
1746
2062
|
constructor(i, e = {}) {
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
2063
|
+
l(this, "element");
|
|
2064
|
+
l(this, "inputEl");
|
|
2065
|
+
l(this, "clearBtn");
|
|
2066
|
+
l(this, "ignoreCase");
|
|
2067
|
+
l(this, "onGlobalKeyDownBound");
|
|
1752
2068
|
this.bodyEl = i, this.ignoreCase = e.ignoreCase !== !1, this.element = document.createElement("div"), this.element.className = "relly-search-bar", this.inputEl = document.createElement("input"), this.inputEl.type = "text", this.inputEl.className = "relly-search-input", this.inputEl.placeholder = e.placeholder || 'Filter settings... (Press "/" to focus)', this.clearBtn = document.createElement("button"), this.clearBtn.className = "relly-search-clear", this.clearBtn.textContent = "✕", this.clearBtn.title = "Clear search", this.clearBtn.style.display = "none", this.element.appendChild(this.inputEl), this.element.appendChild(this.clearBtn), this.inputEl.addEventListener("input", () => {
|
|
1753
2069
|
this.filter(this.inputEl.value);
|
|
1754
2070
|
}), this.inputEl.addEventListener("keydown", (t) => {
|
|
@@ -1767,8 +2083,8 @@ class se {
|
|
|
1767
2083
|
const t = typeof i.composedPath == "function" ? i.composedPath() : [];
|
|
1768
2084
|
for (const r of t)
|
|
1769
2085
|
if (r instanceof HTMLElement) {
|
|
1770
|
-
const
|
|
1771
|
-
if (
|
|
2086
|
+
const o = r.tagName;
|
|
2087
|
+
if (o === "INPUT" || o === "TEXTAREA" || o === "SELECT" || r.isContentEditable || r.classList.contains("relly-search-input"))
|
|
1772
2088
|
return;
|
|
1773
2089
|
}
|
|
1774
2090
|
let n = document.activeElement;
|
|
@@ -1784,6 +2100,7 @@ class se {
|
|
|
1784
2100
|
return this.inputEl;
|
|
1785
2101
|
}
|
|
1786
2102
|
filter(i) {
|
|
2103
|
+
var a;
|
|
1787
2104
|
const e = i.trim();
|
|
1788
2105
|
if (!e) {
|
|
1789
2106
|
this.clearBtn.style.display = "none", this.resetFilter();
|
|
@@ -1791,22 +2108,38 @@ class se {
|
|
|
1791
2108
|
}
|
|
1792
2109
|
this.clearBtn.style.display = "block";
|
|
1793
2110
|
const t = this.ignoreCase ? e.toLowerCase() : e;
|
|
1794
|
-
this.bodyEl.querySelectorAll(".relly-row, .relly-graph-row").forEach((
|
|
1795
|
-
const
|
|
1796
|
-
if ((this.ignoreCase ?
|
|
1797
|
-
|
|
1798
|
-
const
|
|
1799
|
-
|
|
2111
|
+
this.bodyEl.querySelectorAll(".relly-row, .relly-graph-row").forEach((h) => {
|
|
2112
|
+
const c = h.querySelector(".relly-row-label, .relly-graph-header span"), m = (c == null ? void 0 : c.textContent) || "";
|
|
2113
|
+
if ((this.ignoreCase ? m.toLowerCase() : m).includes(t)) {
|
|
2114
|
+
h.classList.remove("relly-search-hidden");
|
|
2115
|
+
const y = h.closest(".relly-section");
|
|
2116
|
+
y && (y.classList.remove("relly-section--collapsed"), y.classList.remove("relly-search-hidden"));
|
|
1800
2117
|
} else
|
|
1801
|
-
|
|
1802
|
-
}), this.bodyEl.querySelectorAll(".relly-section").forEach((
|
|
1803
|
-
const
|
|
1804
|
-
(this.ignoreCase ?
|
|
1805
|
-
|
|
1806
|
-
})) :
|
|
2118
|
+
h.classList.add("relly-search-hidden");
|
|
2119
|
+
}), this.bodyEl.querySelectorAll(".relly-section").forEach((h) => {
|
|
2120
|
+
const c = h.querySelector(".relly-section-title-wrap span:last-child"), m = (c == null ? void 0 : c.textContent) || "";
|
|
2121
|
+
(this.ignoreCase ? m.toLowerCase() : m).includes(t) ? (h.classList.remove("relly-search-hidden"), h.classList.remove("relly-section--collapsed"), h.querySelectorAll(".relly-row, .relly-graph-row").forEach((d) => {
|
|
2122
|
+
d.classList.remove("relly-search-hidden");
|
|
2123
|
+
})) : h.querySelectorAll(
|
|
1807
2124
|
".relly-row:not(.relly-search-hidden), .relly-graph-row:not(.relly-search-hidden)"
|
|
1808
|
-
).length === 0 &&
|
|
2125
|
+
).length === 0 && h.classList.add("relly-search-hidden");
|
|
1809
2126
|
});
|
|
2127
|
+
const r = this.bodyEl.querySelector('.relly-tab-content:not([style*="display: none"])'), o = r == null ? void 0 : r.querySelectorAll(
|
|
2128
|
+
".relly-row:not(.relly-search-hidden), .relly-graph-row:not(.relly-search-hidden)"
|
|
2129
|
+
);
|
|
2130
|
+
if (!o || o.length === 0) {
|
|
2131
|
+
const h = Array.from(this.bodyEl.querySelectorAll(".relly-tab-content"));
|
|
2132
|
+
for (let c = 0; c < h.length; c++)
|
|
2133
|
+
if (h[c].querySelectorAll(
|
|
2134
|
+
".relly-row:not(.relly-search-hidden), .relly-graph-row:not(.relly-search-hidden)"
|
|
2135
|
+
).length > 0) {
|
|
2136
|
+
const p = (a = this.bodyEl.parentElement) == null ? void 0 : a.querySelectorAll(".relly-tab-btn");
|
|
2137
|
+
if (p && p[c]) {
|
|
2138
|
+
p[c].click();
|
|
2139
|
+
break;
|
|
2140
|
+
}
|
|
2141
|
+
}
|
|
2142
|
+
}
|
|
1810
2143
|
}
|
|
1811
2144
|
clear() {
|
|
1812
2145
|
this.inputEl.value = "", this.clearBtn.style.display = "none", this.resetFilter();
|
|
@@ -1820,12 +2153,12 @@ class se {
|
|
|
1820
2153
|
typeof window < "u" && window.removeEventListener("keydown", this.onGlobalKeyDownBound), this.element.remove();
|
|
1821
2154
|
}
|
|
1822
2155
|
}
|
|
1823
|
-
class
|
|
2156
|
+
class ce {
|
|
1824
2157
|
constructor(i = !0, e = "synth") {
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
2158
|
+
l(this, "ctx", null);
|
|
2159
|
+
l(this, "enabled", !0);
|
|
2160
|
+
l(this, "volume", 1);
|
|
2161
|
+
l(this, "soundPack", "synth");
|
|
1829
2162
|
this.enabled = i, this.soundPack = e;
|
|
1830
2163
|
}
|
|
1831
2164
|
setEnabled(i) {
|
|
@@ -1871,16 +2204,16 @@ class re {
|
|
|
1871
2204
|
const t = e.currentTime, n = e.createOscillator(), s = e.createGain();
|
|
1872
2205
|
if (this.soundPack === "mechanical") {
|
|
1873
2206
|
n.type = "triangle";
|
|
1874
|
-
const r = i ? 2800 : 1800,
|
|
1875
|
-
n.frequency.setValueAtTime(r, t), n.frequency.exponentialRampToValueAtTime(
|
|
2207
|
+
const r = i ? 2800 : 1800, o = i ? 900 : 400;
|
|
2208
|
+
n.frequency.setValueAtTime(r, t), n.frequency.exponentialRampToValueAtTime(o, t + 0.018), s.gain.setValueAtTime(0.055 * this.volume, t), s.gain.exponentialRampToValueAtTime(1e-4, t + 0.018), n.connect(s), s.connect(e.destination), n.start(t), n.stop(t + 0.02);
|
|
1876
2209
|
} else if (this.soundPack === "bubble") {
|
|
1877
2210
|
n.type = "sine";
|
|
1878
|
-
const r = i ? 380 : 900,
|
|
1879
|
-
n.frequency.setValueAtTime(r, t), n.frequency.exponentialRampToValueAtTime(
|
|
2211
|
+
const r = i ? 380 : 900, o = i ? 1100 : 280;
|
|
2212
|
+
n.frequency.setValueAtTime(r, t), n.frequency.exponentialRampToValueAtTime(o, t + 0.028), s.gain.setValueAtTime(0.045 * this.volume, t), s.gain.exponentialRampToValueAtTime(1e-4, t + 0.028), n.connect(s), s.connect(e.destination), n.start(t), n.stop(t + 0.03);
|
|
1880
2213
|
} else if (this.soundPack === "arcade") {
|
|
1881
2214
|
n.type = "square";
|
|
1882
|
-
const r = i ? 523.25 : 659.25,
|
|
1883
|
-
n.frequency.setValueAtTime(r, t), n.frequency.setValueAtTime(
|
|
2215
|
+
const r = i ? 523.25 : 659.25, o = i ? 783.99 : 392;
|
|
2216
|
+
n.frequency.setValueAtTime(r, t), n.frequency.setValueAtTime(o, t + 0.015), s.gain.setValueAtTime(0.025 * this.volume, t), s.gain.exponentialRampToValueAtTime(1e-4, t + 0.03), n.connect(s), s.connect(e.destination), n.start(t), n.stop(t + 0.032);
|
|
1884
2217
|
} else {
|
|
1885
2218
|
n.type = "triangle";
|
|
1886
2219
|
const r = i ? 650 : 450;
|
|
@@ -1926,8 +2259,8 @@ class re {
|
|
|
1926
2259
|
try {
|
|
1927
2260
|
const t = e.currentTime, n = e.createOscillator(), s = e.createGain();
|
|
1928
2261
|
n.type = this.soundPack === "arcade" ? "square" : "sine";
|
|
1929
|
-
const r = i ? 380 : 640,
|
|
1930
|
-
n.frequency.setValueAtTime(r, t), n.frequency.exponentialRampToValueAtTime(
|
|
2262
|
+
const r = i ? 380 : 640, o = i ? 680 : 340;
|
|
2263
|
+
n.frequency.setValueAtTime(r, t), n.frequency.exponentialRampToValueAtTime(o, t + 0.05), s.gain.setValueAtTime(0.03 * this.volume, t), s.gain.exponentialRampToValueAtTime(1e-4, t + 0.05), n.connect(s), s.connect(e.destination), n.start(t), n.stop(t + 0.055);
|
|
1931
2264
|
} catch {
|
|
1932
2265
|
}
|
|
1933
2266
|
}
|
|
@@ -1950,13 +2283,13 @@ class re {
|
|
|
1950
2283
|
}
|
|
1951
2284
|
}
|
|
1952
2285
|
}
|
|
1953
|
-
class
|
|
2286
|
+
class de {
|
|
1954
2287
|
constructor(i, e) {
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
2288
|
+
l(this, "element");
|
|
2289
|
+
l(this, "textareaEl");
|
|
2290
|
+
l(this, "errorEl");
|
|
2291
|
+
l(this, "dropzoneEl");
|
|
2292
|
+
l(this, "fileInput");
|
|
1960
2293
|
this.parentEl = i, this.onApply = e, this.element = document.createElement("div"), this.element.className = "relly-modal-backdrop";
|
|
1961
2294
|
const t = document.createElement("div");
|
|
1962
2295
|
t.className = "relly-modal";
|
|
@@ -1979,12 +2312,12 @@ class ae {
|
|
|
1979
2312
|
}), this.dropzoneEl.addEventListener("drop", (c) => {
|
|
1980
2313
|
c.preventDefault(), this.dropzoneEl.classList.remove("relly-dropzone-drag"), c.dataTransfer && c.dataTransfer.files.length > 0 && this.readFile(c.dataTransfer.files[0]);
|
|
1981
2314
|
}), t.appendChild(this.dropzoneEl), t.appendChild(this.fileInput), this.textareaEl = document.createElement("textarea"), this.textareaEl.className = "relly-import-textarea", this.textareaEl.placeholder = "Paste JSON configuration here...", t.appendChild(this.textareaEl), this.errorEl = document.createElement("div"), this.errorEl.className = "relly-import-error", t.appendChild(this.errorEl);
|
|
1982
|
-
const
|
|
1983
|
-
|
|
1984
|
-
const
|
|
1985
|
-
|
|
2315
|
+
const o = document.createElement("div");
|
|
2316
|
+
o.className = "relly-modal-actions";
|
|
2317
|
+
const a = document.createElement("button");
|
|
2318
|
+
a.className = "relly-btn", a.textContent = "Cancel", a.style.flex = "1", a.addEventListener("click", () => this.hide());
|
|
1986
2319
|
const h = document.createElement("button");
|
|
1987
|
-
h.className = "relly-btn relly-btn-primary", h.textContent = "Apply & Load", h.style.flex = "2", h.addEventListener("click", () => this.apply()),
|
|
2320
|
+
h.className = "relly-btn relly-btn-primary", h.textContent = "Apply & Load", h.style.flex = "2", h.addEventListener("click", () => this.apply()), o.appendChild(a), o.appendChild(h), t.appendChild(o), this.element.appendChild(t), this.element.addEventListener("click", (c) => {
|
|
1988
2321
|
c.target === this.element && this.hide();
|
|
1989
2322
|
}), this.parentEl.appendChild(this.element);
|
|
1990
2323
|
}
|
|
@@ -2023,24 +2356,24 @@ class ae {
|
|
|
2023
2356
|
this.element.remove();
|
|
2024
2357
|
}
|
|
2025
2358
|
}
|
|
2026
|
-
class
|
|
2359
|
+
class pe {
|
|
2027
2360
|
static load(i, e) {
|
|
2028
2361
|
const t = e.target, n = (s, r) => {
|
|
2029
|
-
for (const
|
|
2030
|
-
const
|
|
2031
|
-
if (
|
|
2362
|
+
for (const o of r) {
|
|
2363
|
+
const a = o.children || o.controls;
|
|
2364
|
+
if (o.type === "section") {
|
|
2032
2365
|
const h = s.addSection(
|
|
2033
|
-
|
|
2034
|
-
|
|
2366
|
+
o.label || "Section",
|
|
2367
|
+
o.collapsed
|
|
2035
2368
|
);
|
|
2036
|
-
|
|
2037
|
-
} else if (
|
|
2369
|
+
o.showIf && h.showIf && h.showIf(o.showIf), a && Array.isArray(a) && n(h, a);
|
|
2370
|
+
} else if (o.type === "row") {
|
|
2038
2371
|
const h = s.addRow();
|
|
2039
|
-
|
|
2372
|
+
a && Array.isArray(a) && n(h, a);
|
|
2040
2373
|
} else {
|
|
2041
2374
|
const h = {
|
|
2042
|
-
...
|
|
2043
|
-
object:
|
|
2375
|
+
...o,
|
|
2376
|
+
object: o.object !== void 0 ? o.object : t
|
|
2044
2377
|
};
|
|
2045
2378
|
s.createComponent(h);
|
|
2046
2379
|
}
|
|
@@ -2049,9 +2382,9 @@ class le {
|
|
|
2049
2382
|
e.controls && Array.isArray(e.controls) && n(i, e.controls);
|
|
2050
2383
|
}
|
|
2051
2384
|
}
|
|
2052
|
-
class
|
|
2385
|
+
class ue {
|
|
2053
2386
|
constructor(i, e) {
|
|
2054
|
-
|
|
2387
|
+
l(this, "containerEl");
|
|
2055
2388
|
this.parentEl = i, this.soundEngine = e, this.containerEl = document.createElement("div"), this.containerEl.className = "relly-toast-container", this.parentEl.appendChild(this.containerEl);
|
|
2056
2389
|
}
|
|
2057
2390
|
notify(i, e = "info", t = 2600) {
|
|
@@ -2063,18 +2396,18 @@ class oe {
|
|
|
2063
2396
|
s.className = "relly-toast-icon", s.innerHTML = this.getIconSvg(e);
|
|
2064
2397
|
const r = document.createElement("span");
|
|
2065
2398
|
r.className = "relly-toast-msg", r.textContent = i;
|
|
2066
|
-
const
|
|
2067
|
-
|
|
2068
|
-
const
|
|
2399
|
+
const o = document.createElement("button");
|
|
2400
|
+
o.className = "relly-toast-close", o.innerHTML = "✕", o.title = "Dismiss", n.appendChild(s), n.appendChild(r), n.appendChild(o);
|
|
2401
|
+
const a = () => {
|
|
2069
2402
|
n.classList.contains("relly-toast-leave") || (n.classList.add("relly-toast-leave"), setTimeout(() => {
|
|
2070
2403
|
n.parentElement && n.parentElement.removeChild(n);
|
|
2071
2404
|
}, 200));
|
|
2072
2405
|
};
|
|
2073
|
-
return
|
|
2074
|
-
c.stopPropagation(),
|
|
2075
|
-
}), n.addEventListener("click",
|
|
2406
|
+
return o.addEventListener("click", (c) => {
|
|
2407
|
+
c.stopPropagation(), a();
|
|
2408
|
+
}), n.addEventListener("click", a), this.containerEl.appendChild(n), requestAnimationFrame(() => {
|
|
2076
2409
|
n.classList.add("relly-toast-enter");
|
|
2077
|
-
}), t > 0 && setTimeout(
|
|
2410
|
+
}), t > 0 && setTimeout(a, t), n;
|
|
2078
2411
|
}
|
|
2079
2412
|
getIconSvg(i) {
|
|
2080
2413
|
switch (i) {
|
|
@@ -2093,13 +2426,13 @@ class oe {
|
|
|
2093
2426
|
this.containerEl.parentElement && this.containerEl.parentElement.removeChild(this.containerEl);
|
|
2094
2427
|
}
|
|
2095
2428
|
}
|
|
2096
|
-
class
|
|
2429
|
+
class me {
|
|
2097
2430
|
constructor(i, e) {
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2431
|
+
l(this, "menuEl");
|
|
2432
|
+
l(this, "currentComponent");
|
|
2433
|
+
l(this, "onDocClickBound");
|
|
2434
|
+
l(this, "onKeyDownBound");
|
|
2435
|
+
l(this, "onContextMenu", (i) => {
|
|
2103
2436
|
let e = i.target, t = e == null ? void 0 : e.closest(".relly-row, .relly-graph-row");
|
|
2104
2437
|
if (!t) return;
|
|
2105
2438
|
const n = t.__rellyComponent, s = n == null ? void 0 : n.getContextMenu();
|
|
@@ -2121,10 +2454,10 @@ class he {
|
|
|
2121
2454
|
}
|
|
2122
2455
|
const c = document.createElement("button");
|
|
2123
2456
|
c.type = "button", c.className = "relly-context-item", h.danger && c.classList.add("relly-context-item--danger"), h.disabled && (c.disabled = !0);
|
|
2124
|
-
let
|
|
2125
|
-
h.icon && (
|
|
2126
|
-
var
|
|
2127
|
-
p.stopPropagation(), (
|
|
2457
|
+
let m = "";
|
|
2458
|
+
h.icon && (m = `<span class="relly-context-icon">${h.icon}</span>`), c.innerHTML = `${m}<span class="relly-context-label">${h.label}</span>`, c.addEventListener("click", (p) => {
|
|
2459
|
+
var y;
|
|
2460
|
+
p.stopPropagation(), (y = this.soundEngine) == null || y.playClick();
|
|
2128
2461
|
const d = this.currentComponent;
|
|
2129
2462
|
this.hide(), h.action(d);
|
|
2130
2463
|
}), this.menuEl.appendChild(c);
|
|
@@ -2132,8 +2465,8 @@ class he {
|
|
|
2132
2465
|
this.menuEl.style.display = "flex";
|
|
2133
2466
|
const n = this.panelEl.getBoundingClientRect();
|
|
2134
2467
|
let s = e - n.left, r = t - n.top;
|
|
2135
|
-
const
|
|
2136
|
-
s +
|
|
2468
|
+
const o = 160, a = this.menuEl.offsetHeight || 120;
|
|
2469
|
+
s + o > n.width && (s = Math.max(4, n.width - o - 4)), r + a > n.height && (r = Math.max(4, n.height - a - 4)), this.menuEl.style.left = `${s}px`, this.menuEl.style.top = `${r}px`;
|
|
2137
2470
|
}
|
|
2138
2471
|
hide() {
|
|
2139
2472
|
this.menuEl.style.display = "none", this.currentComponent = void 0;
|
|
@@ -2142,13 +2475,13 @@ class he {
|
|
|
2142
2475
|
typeof window < "u" && (window.removeEventListener("click", this.onDocClickBound), window.removeEventListener("keydown", this.onKeyDownBound)), this.panelEl.removeEventListener("contextmenu", this.onContextMenu), this.menuEl.parentElement && this.menuEl.parentElement.removeChild(this.menuEl);
|
|
2143
2476
|
}
|
|
2144
2477
|
}
|
|
2145
|
-
class
|
|
2478
|
+
class fe extends T {
|
|
2146
2479
|
constructor(e, t, n, s) {
|
|
2147
2480
|
const r = document.createElement("div");
|
|
2148
2481
|
r.className = "relly-tab-content";
|
|
2149
2482
|
super(r, t, n, s);
|
|
2150
|
-
|
|
2151
|
-
|
|
2483
|
+
l(this, "contentEl");
|
|
2484
|
+
l(this, "buttonEl");
|
|
2152
2485
|
this.label = e, this.contentEl = r, this.buttonEl = document.createElement("button"), this.buttonEl.className = "relly-tab-btn", this.buttonEl.textContent = e;
|
|
2153
2486
|
}
|
|
2154
2487
|
getLabel() {
|
|
@@ -2161,17 +2494,17 @@ class ce extends T {
|
|
|
2161
2494
|
this.destroyChildren(), this.buttonEl.remove(), this.contentEl.remove();
|
|
2162
2495
|
}
|
|
2163
2496
|
}
|
|
2164
|
-
class
|
|
2497
|
+
class ye {
|
|
2165
2498
|
constructor(i, e, t, n, s) {
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2499
|
+
l(this, "barEl");
|
|
2500
|
+
l(this, "bodyEl");
|
|
2501
|
+
l(this, "tabs", []);
|
|
2502
|
+
l(this, "activeTab", null);
|
|
2170
2503
|
this.bindingEngine = t, this.presetManager = n, this.soundEngine = s, this.barEl = document.createElement("div"), this.barEl.className = "relly-tabs-bar", this.barEl.style.display = "none", this.bodyEl = e, i.insertAdjacentElement("afterend", this.barEl);
|
|
2171
2504
|
}
|
|
2172
2505
|
addTab(i) {
|
|
2173
2506
|
this.barEl.style.display = "flex";
|
|
2174
|
-
const e = new
|
|
2507
|
+
const e = new fe(i, this.bindingEngine, this.presetManager, this.soundEngine);
|
|
2175
2508
|
return this.tabs.push(e), this.barEl.appendChild(e.buttonEl), this.bodyEl.appendChild(e.contentEl), e.buttonEl.addEventListener("click", () => {
|
|
2176
2509
|
this.switchTab(e);
|
|
2177
2510
|
}), this.tabs.length === 1 && this.switchTab(e, !1), e;
|
|
@@ -2185,27 +2518,31 @@ class de {
|
|
|
2185
2518
|
getActiveTab() {
|
|
2186
2519
|
return this.activeTab;
|
|
2187
2520
|
}
|
|
2521
|
+
getTabs() {
|
|
2522
|
+
return this.tabs;
|
|
2523
|
+
}
|
|
2188
2524
|
destroy() {
|
|
2189
2525
|
for (const i of this.tabs)
|
|
2190
2526
|
i.destroy();
|
|
2191
2527
|
this.tabs = [], this.barEl.remove();
|
|
2192
2528
|
}
|
|
2193
2529
|
}
|
|
2194
|
-
const me = ':root{--relly-bg: #1c1d22;--relly-fg: #d1d5db;--relly-header-bg: #141518;--relly-header-fg: #f3f4f6;--relly-accent: #6366f1;--relly-accent-hover: #4f46e5;--relly-border: rgba(255, 255, 255, .08);--relly-input-bg: #26272e;--relly-input-hover: #2f3039;--relly-radius: 6px;--relly-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--relly-font-size: 11px;--relly-row-height: 26px;--relly-ease: cubic-bezier(.16, 1, .3, 1);--relly-transition: all .2s var(--relly-ease)}.relly-host{position:fixed;z-index:999999;pointer-events:none}.relly-panel{position:fixed;z-index:999999;background-color:var(--relly-bg);color:var(--relly-fg);border:1px solid var(--relly-border);border-radius:var(--relly-radius);box-shadow:0 10px 25px -5px #00000080,0 8px 10px -6px #0006;font-family:var(--relly-font);font-size:var(--relly-font-size);-webkit-user-select:none;user-select:none;box-sizing:border-box;overflow:hidden!important;overflow-x:hidden!important;display:flex;flex-direction:column;pointer-events:auto;opacity:1;transform:scale(1) translateY(0);transition:opacity .22s var(--relly-ease),transform .22s var(--relly-ease);min-width:240px;min-height:120px;max-width:calc(100vw - 16px);max-height:calc(100vh - 16px);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.relly-panel.relly-mini-hud{width:auto!important;height:auto!important;min-width:0!important;min-height:0!important;border-radius:9999px!important;box-shadow:0 4px 20px #0006,0 0 0 1px var(--relly-accent)}.relly-panel.relly-mini-hud .relly-header{border-bottom:none;padding:5px 12px;border-radius:9999px;background-color:var(--relly-bg)}.relly-panel.relly-mini-hud .relly-body,.relly-panel.relly-mini-hud .relly-search-bar,.relly-panel.relly-mini-hud .relly-tabs-bar,.relly-panel.relly-mini-hud .relly-resize-handle,.relly-panel.relly-mini-hud .relly-header-btn:not(.relly-minihud-btn){display:none!important}.relly-panel.relly-mini-hud .relly-header-title:before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background-color:var(--relly-accent);box-shadow:0 0 6px var(--relly-accent);margin-right:6px;animation:relly-pulse 2s infinite ease-in-out}@keyframes relly-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.85)}}.relly-panel *{box-sizing:border-box}.relly-panel,.relly-panel *,.relly-body,.relly-tabs-bar,.relly-search-bar{scrollbar-width:none!important;-ms-overflow-style:none!important}.relly-panel *::-webkit-scrollbar,.relly-panel::-webkit-scrollbar,.relly-body::-webkit-scrollbar,.relly-tabs-bar::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}.relly-panel.relly-hidden{opacity:0!important;transform:scale(.95) translateY(-6px)!important;pointer-events:none!important}.relly-header{display:flex;align-items:center;justify-content:space-between;background-color:var(--relly-header-bg);color:var(--relly-header-fg);padding:6px 10px;font-weight:600;border-bottom:1px solid var(--relly-border);cursor:grab;transition:background-color .2s var(--relly-ease);flex-shrink:0}.relly-header:active{cursor:grabbing}.relly-header-title{display:flex;align-items:center;gap:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.relly-header-title svg{width:14px;height:14px;color:var(--relly-accent);transition:transform .2s var(--relly-ease)}.relly-header-title:hover svg{transform:rotate(15deg)}.relly-header-actions{display:flex;align-items:center;gap:4px}.relly-header-btn{background:transparent;border:none;color:var(--relly-fg);opacity:.7;padding:2px 6px;border-radius:4px;cursor:pointer;font-family:inherit;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;transition:opacity .15s,background-color .15s,transform .1s var(--relly-ease)}.relly-header-btn:hover{opacity:1;background-color:#ffffff1a;transform:scale(1.08)}.relly-header-btn:active{transform:scale(.92)}.relly-resize-handle{position:absolute;bottom:0;right:0;width:14px;height:14px;cursor:se-resize;display:flex;align-items:center;justify-content:center;opacity:.4;transition:opacity .15s var(--relly-ease);z-index:100}.relly-resize-handle svg{width:9px;height:9px;stroke:var(--relly-fg);stroke-width:1.5}.relly-resize-handle:hover{opacity:1}.relly-search-bar{display:flex;align-items:center;padding:4px 8px;background-color:#0003;border-bottom:1px solid var(--relly-border);gap:6px;flex-shrink:0}.relly-search-input{width:100%;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:3px 6px;outline:none;transition:border-color .15s var(--relly-ease),background-color .15s}.relly-search-input:focus{border-color:var(--relly-accent);background-color:var(--relly-input-hover)}.relly-search-clear{background:none;border:none;color:var(--relly-fg);cursor:pointer;opacity:.5;font-size:10px;padding:0 4px;transition:opacity .15s}.relly-search-clear:hover{opacity:1}.relly-tabs-bar{display:flex;background-color:var(--relly-header-bg);border-bottom:1px solid var(--relly-border);overflow-x:auto;overflow-y:hidden;flex-shrink:0;scrollbar-width:none!important;-ms-overflow-style:none!important}.relly-tabs-bar::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}.relly-tab-btn{flex:1;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--relly-fg);opacity:.6;padding:5px 8px;font-family:inherit;font-size:11px;cursor:pointer;white-space:nowrap;transition:all .2s var(--relly-ease)}.relly-tab-btn:hover{opacity:.9;background-color:#ffffff08}.relly-tab-btn.relly-tab-active{opacity:1;color:var(--relly-accent);border-bottom-color:var(--relly-accent)}.relly-tab-content{display:none}.relly-tab-content.relly-tab-content--active{display:flex;flex-direction:column}.relly-body{display:flex;flex-direction:column;overflow-y:auto!important;overflow-x:hidden!important;max-height:80vh;flex:1;transition:max-height .25s var(--relly-ease);scrollbar-width:none!important;-ms-overflow-style:none!important}.relly-body::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}.relly-panel.relly-collapsed .relly-body{display:none}.relly-copy-toast{position:absolute;top:36px;right:10px;background:var(--relly-accent);color:#fff;padding:3px 8px;border-radius:4px;font-size:10px;font-weight:600;box-shadow:0 4px 12px #0000004d;pointer-events:none;opacity:0;transform:translateY(-6px);transition:opacity .2s var(--relly-ease),transform .2s var(--relly-ease);z-index:9999999}.relly-copy-toast.relly-toast-show{opacity:1;transform:translateY(0)}.relly-modal-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;background:#000000b3;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:999999;display:flex;align-items:center;justify-content:center;padding:12px;opacity:0;pointer-events:none;transition:opacity .2s var(--relly-ease)}.relly-modal-backdrop.relly-modal-show{opacity:1;pointer-events:auto}.relly-modal{width:100%;max-width:320px;background:var(--relly-bg);border:1px solid var(--relly-border);border-radius:var(--relly-radius);box-shadow:0 12px 30px #0009;padding:12px;display:flex;flex-direction:column;gap:8px;transform:scale(.95);transition:transform .2s var(--relly-ease)}.relly-modal-backdrop.relly-modal-show .relly-modal{transform:scale(1)}.relly-modal-header{display:flex;justify-content:space-between;align-items:center;font-weight:600;color:var(--relly-header-fg);font-size:12px}.relly-dropzone{border:1.5px dashed var(--relly-border);border-radius:4px;padding:12px;text-align:center;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--relly-fg);opacity:.8;font-size:11px;background:#00000026;transition:all .2s var(--relly-ease)}.relly-dropzone:hover,.relly-dropzone.relly-dropzone-drag{border-color:var(--relly-accent);opacity:1;background:#6366f114}.relly-import-textarea{width:100%;height:90px;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:monospace;font-size:10px;padding:6px;outline:none;resize:vertical}.relly-import-textarea:focus{border-color:var(--relly-accent)}.relly-import-error{color:#ef4444;font-size:10px;min-height:12px}.relly-modal-actions{display:flex;gap:6px}.relly-btn-primary{background:var(--relly-accent)!important;color:#fff!important;border-color:var(--relly-accent)!important}.relly-btn-primary:hover{background:var(--relly-accent-hover)!important}.relly-toast-container{position:absolute;top:36px;right:8px;display:flex;flex-direction:column;gap:6px;z-index:9999999;pointer-events:none;max-width:240px}.relly-toast{display:flex;align-items:center;gap:6px;padding:6px 8px;background:var(--relly-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-size:11px;box-shadow:0 4px 16px #00000073;pointer-events:auto;opacity:0;transform:translateY(-8px) scale(.96);transition:opacity .2s var(--relly-ease),transform .2s var(--relly-ease);cursor:pointer}.relly-toast.relly-toast-enter{opacity:1;transform:translateY(0) scale(1)}.relly-toast.relly-toast-leave{opacity:0;transform:translateY(-6px) scale(.95)}.relly-toast-icon svg{width:14px;height:14px;display:block}.relly-toast--success{border-left:3px solid #22c55e}.relly-toast--success .relly-toast-icon{color:#22c55e}.relly-toast--warning{border-left:3px solid #f59e0b}.relly-toast--warning .relly-toast-icon{color:#f59e0b}.relly-toast--error{border-left:3px solid #ef4444}.relly-toast--error .relly-toast-icon{color:#ef4444}.relly-toast--info{border-left:3px solid var(--relly-accent)}.relly-toast--info .relly-toast-icon{color:var(--relly-accent)}.relly-toast-msg{flex:1;line-height:1.3;overflow:hidden;text-overflow:ellipsis}.relly-toast-close{background:transparent;border:none;color:var(--relly-fg);opacity:.5;cursor:pointer;padding:0 2px;font-size:11px}.relly-toast-close:hover{opacity:1}.relly-context-menu{position:absolute;background:var(--relly-bg);border:1px solid var(--relly-border);border-radius:var(--relly-radius);box-shadow:0 8px 24px #0000008c;padding:4px;display:flex;flex-direction:column;min-width:140px;z-index:99999999;animation:relly-menu-in .15s var(--relly-ease)}@keyframes relly-menu-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.relly-context-item{display:flex;align-items:center;gap:6px;background:transparent;border:none;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:5px 8px;border-radius:3px;cursor:pointer;text-align:left;transition:background-color .12s var(--relly-ease),color .12s}.relly-context-item:hover:not(:disabled){background-color:var(--relly-accent);color:#fff}.relly-context-item:disabled{opacity:.4;cursor:not-allowed}.relly-context-item--danger:hover:not(:disabled){background-color:#ef4444!important;color:#fff!important}.relly-context-separator{height:1px;background-color:var(--relly-border);margin:3px 0}.relly-row{display:flex;align-items:center;justify-content:space-between;min-height:var(--relly-row-height);padding:3px 10px;border-bottom:1px solid var(--relly-border);position:relative;transition:background-color .15s var(--relly-ease),opacity .2s var(--relly-ease)}.relly-row:hover{background-color:#ffffff08}.relly-row.relly-search-hidden{display:none!important}.relly-row-label{flex:0 0 40%;max-width:40%;color:var(--relly-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--relly-font-size);cursor:default;position:relative}.relly-row-control{flex:1;display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:0}.relly-multi-row{display:flex;align-items:stretch;width:100%;border-bottom:1px solid var(--relly-border)}.relly-multi-row .relly-row{flex:1;border-bottom:none;border-right:1px solid var(--relly-border);padding:3px 6px}.relly-multi-row .relly-row:last-child{border-right:none}.relly-multi-row .relly-row-label{flex:0 0 auto;max-width:none;margin-right:4px}.relly-tooltip{position:absolute;bottom:calc(100% + 4px);left:10px;background-color:#111216;color:#f3f4f6;padding:4px 8px;border-radius:4px;font-size:10px;line-height:1.3;white-space:nowrap;box-shadow:0 4px 12px #00000080;border:1px solid var(--relly-border);pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity .18s var(--relly-ease),transform .18s var(--relly-ease);z-index:99999999}.relly-row:hover .relly-tooltip{opacity:1;transform:translateY(0)}.relly-checkbox-wrapper{display:flex;align-items:center;cursor:pointer;gap:6px}.relly-checkbox-box{width:16px;height:16px;border-radius:4px;background-color:var(--relly-input-bg);border:1px solid var(--relly-border);display:flex;align-items:center;justify-content:center;transition:background-color .18s var(--relly-ease),border-color .18s var(--relly-ease),transform .15s var(--relly-ease)}.relly-checkbox-wrapper:hover .relly-checkbox-box{border-color:var(--relly-accent);transform:scale(1.05)}.relly-checkbox-wrapper:active .relly-checkbox-box{transform:scale(.95)}.relly-checkbox-wrapper.relly-checked .relly-checkbox-box{background-color:var(--relly-accent);border-color:var(--relly-accent);animation:relly-pop .25s var(--relly-ease)}@keyframes relly-pop{0%{transform:scale(.85)}60%{transform:scale(1.15)}to{transform:scale(1)}}.relly-checkbox-icon{display:none;width:10px;height:10px;stroke:#fff;stroke-width:2.5;fill:none}.relly-checkbox-wrapper.relly-checked .relly-checkbox-icon{display:block}.relly-slider-container{display:flex;align-items:center;gap:8px;width:100%}.relly-slider-range{flex:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:4px;border-radius:2px;background:var(--relly-input-bg);outline:none;cursor:pointer;transition:background-color .15s var(--relly-ease)}.relly-slider-range::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:12px;height:12px;border-radius:50%;background:var(--relly-accent);cursor:pointer;box-shadow:0 1px 3px #0000004d;transition:transform .15s var(--relly-ease),background-color .15s}.relly-slider-range::-webkit-slider-thumb:hover{transform:scale(1.25);background:var(--relly-accent-hover)}.relly-slider-range::-webkit-slider-thumb:active{transform:scale(1.35)}.relly-slider-number{width:50px;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:2px 4px;text-align:right;outline:none;transition:border-color .15s var(--relly-ease),background-color .15s}.relly-slider-number:focus{border-color:var(--relly-accent);background:var(--relly-input-hover)}.relly-btn{width:100%;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;font-weight:500;padding:4px 10px;cursor:pointer;transition:background-color .15s var(--relly-ease),border-color .15s,color .15s,transform .1s var(--relly-ease);text-align:center}.relly-btn:hover{background-color:var(--relly-input-hover);border-color:var(--relly-accent);color:#fff;transform:translateY(-1px)}.relly-btn:active{transform:translateY(1px) scale(.98)}.relly-select-input{width:100%;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:3px 6px;outline:none;cursor:pointer;transition:border-color .15s var(--relly-ease),background-color .15s}.relly-select-input:focus{border-color:var(--relly-accent);background:var(--relly-input-hover)}.relly-dynamic-value{color:var(--relly-accent);font-weight:500;font-family:monospace;font-size:11px;background:#6366f11a;padding:2px 6px;border-radius:4px;border:1px solid rgba(99,102,241,.2);transition:all .2s var(--relly-ease)}.relly-color-wrapper{display:flex;align-items:center;gap:6px;width:100%;justify-content:flex-end}.relly-color-preview{width:20px;height:20px;border-radius:4px;border:1px solid var(--relly-border);cursor:pointer;box-shadow:inset 0 0 2px #0006;transition:transform .15s var(--relly-ease),border-color .15s}.relly-color-preview:hover{transform:scale(1.15);border-color:#fff}.relly-eyedropper-btn{background:transparent;border:none;color:var(--relly-fg);cursor:pointer;opacity:.7;padding:2px 4px;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:opacity .15s var(--relly-ease),transform .1s var(--relly-ease)}.relly-eyedropper-btn svg{width:13px;height:13px}.relly-eyedropper-btn:hover{opacity:1;color:var(--relly-accent);transform:scale(1.15)}.relly-color-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.relly-color-text{font-family:monospace;font-size:11px;color:var(--relly-fg)}.relly-color-swatches{display:flex;align-items:center;gap:3px;flex-wrap:wrap;margin-right:4px}.relly-color-swatch{width:14px;height:14px;border-radius:3px;border:1px solid rgba(255,255,255,.2);cursor:pointer;padding:0;box-sizing:border-box;transition:transform .12s var(--relly-ease),border-color .12s;box-shadow:inset 0 0 2px #00000059}.relly-color-swatch:hover{transform:scale(1.25);border-color:#fff;z-index:2}.relly-color-swatch.relly-swatch-active{border:1.5px solid #fff;box-shadow:0 0 4px var(--relly-accent)}.relly-point2d-container{display:flex;align-items:center;gap:4px;width:100%}.relly-point2d-item{display:flex;align-items:center;gap:2px;flex:1}.relly-point2d-tag{font-size:10px;font-weight:600;color:var(--relly-accent);font-family:monospace}.relly-point2d-input{width:100%;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:2px 4px;text-align:right;outline:none;transition:border-color .15s var(--relly-ease)}.relly-point2d-input:focus{border-color:var(--relly-accent)}.relly-graph-row{display:flex;flex-direction:column;padding:6px 10px;border-bottom:1px solid var(--relly-border);gap:5px;transition:opacity .2s var(--relly-ease)}.relly-graph-row.relly-search-hidden{display:none!important}.relly-graph-header{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--relly-fg)}.relly-graph-label{font-weight:500;opacity:.85}.relly-graph-stats{display:flex;align-items:center;gap:5px;font-family:monospace;font-size:10px}.relly-graph-badge{opacity:.55;font-size:9px}.relly-graph-badge--paused{opacity:1!important;color:#f59e0b;background:#f59e0b2e;font-weight:700;border-radius:3px;padding:1px 4px;border:1px solid rgba(245,158,11,.4);letter-spacing:.5px}.relly-graph-val{color:var(--relly-accent);font-weight:600;background:#6366f11f;padding:1px 4px;border-radius:3px;border:1px solid rgba(99,102,241,.2)}.relly-graph-legend{display:none;align-items:center;gap:8px;font-size:9px;font-family:monospace;opacity:.75;margin-top:-2px}.relly-graph-legend-item{display:flex;align-items:center;gap:4px}.relly-graph-legend-dot{width:6px;height:6px;border-radius:50%;display:inline-block}.relly-graph-canvas-container{width:100%;height:90px;background:var(--relly-input-bg);border-radius:4px;border:1px solid var(--relly-border);overflow:hidden;position:relative;box-shadow:inset 0 2px 6px #00000040;cursor:crosshair;transition:border-color .2s ease,box-shadow .2s ease}.relly-graph-canvas-container.relly-graph-paused{border-color:#f59e0b;box-shadow:inset 0 2px 6px #00000040,0 0 10px #f59e0b40}.relly-graph-canvas{width:100%;height:100%;display:block}.relly-graph-tooltip{position:absolute;pointer-events:none;background:#0f172aeb;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border:1px solid var(--relly-border);border-radius:4px;padding:3px 6px;font-size:9px;font-family:monospace;color:#fff;white-space:nowrap;z-index:10;transform:translate(-50%);opacity:0;transition:opacity .12s ease;box-shadow:0 4px 12px #00000080}.relly-graph-tooltip.relly-tooltip-show{opacity:1}.relly-section{display:flex;flex-direction:column;border-bottom:1px solid var(--relly-border);transition:opacity .2s var(--relly-ease)}.relly-section.relly-search-hidden{display:none!important}.relly-section-header{display:flex;align-items:center;justify-content:space-between;padding:5px 10px;background-color:#ffffff05;cursor:pointer;font-weight:600;color:var(--relly-header-fg);transition:background-color .15s var(--relly-ease)}.relly-section-header:hover{background-color:#ffffff0d}.relly-section-title-wrap{display:flex;align-items:center;gap:6px}.relly-section-arrow{width:12px;height:12px;transition:transform .22s var(--relly-ease);fill:currentColor}.relly-section.relly-section--collapsed .relly-section-arrow{transform:rotate(-90deg)}.relly-section-content{display:flex;flex-direction:column;padding-left:6px;border-left:2px solid var(--relly-accent);transition:opacity .2s var(--relly-ease)}.relly-section.relly-section--collapsed .relly-section-content{display:none}.relly-disabled,.relly-component-row.relly-disabled,.relly-section.relly-disabled{opacity:.42!important;pointer-events:none!important;-webkit-user-select:none!important;user-select:none!important;filter:grayscale(.5)}.relly-jog-scrubbing,.relly-jog-scrubbing *{cursor:ew-resize!important;-webkit-user-select:none!important;user-select:none!important}.relly-mini-sparkline{width:48px;height:16px;display:inline-block;vertical-align:middle;margin-left:6px;border-radius:3px;background:#00000040}.relly-point3d-container{display:flex;align-items:center;gap:4px;width:100%}.relly-point3d-item{display:flex;align-items:center;gap:2px;flex:1;min-width:0}.relly-point3d-tag{font-size:9px;font-weight:700;line-height:1;padding:2px 4px;border-radius:3px;text-transform:uppercase}.relly-point3d-tag--x{background-color:#ef444433;color:#ef4444;border:1px solid rgba(239,68,68,.4)}.relly-point3d-tag--y{background-color:#22c55e33;color:#22c55e;border:1px solid rgba(34,197,94,.4)}.relly-point3d-tag--z{background-color:#3b82f633;color:#3b82f6;border:1px solid rgba(59,130,246,.4)}.relly-point3d-input{width:100%;min-width:24px;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:3px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:2px 4px;text-align:right;cursor:ew-resize}.relly-range-wrapper{display:flex;align-items:center;gap:6px;width:100%}.relly-range-track{flex:1;height:6px;background:var(--relly-input-bg);border-radius:9999px;position:relative;cursor:pointer;box-shadow:inset 0 1px 2px #0000004d}.relly-range-bar{position:absolute;top:0;bottom:0;background:var(--relly-accent);border-radius:9999px;cursor:grab;transition:background-color .15s}.relly-range-bar:active{cursor:grabbing;background:var(--relly-accent-hover)}.relly-range-thumb{position:absolute;top:50%;width:12px;height:12px;border-radius:50%;background:#fff;border:2px solid var(--relly-accent);transform:translate(-50%,-50%);cursor:grab;z-index:2;transition:transform .1s var(--relly-ease),box-shadow .15s;box-shadow:0 1px 4px #0006}.relly-range-thumb:hover{transform:translate(-50%,-50%) scale(1.2);box-shadow:0 0 6px var(--relly-accent)}.relly-range-thumb:active{cursor:grabbing;transform:translate(-50%,-50%) scale(1.25)}.relly-range-input{width:38px;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:3px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:2px 4px;text-align:right}.relly-segmented-container{display:flex;position:relative;background:var(--relly-input-bg);border-radius:4px;border:1px solid var(--relly-border);padding:2px;width:100%;overflow:hidden}.relly-segmented-glider{position:absolute;top:2px;bottom:2px;background:var(--relly-accent);border-radius:3px;box-shadow:0 1px 4px #00000059;transition:transform .2s var(--relly-ease),width .2s var(--relly-ease),opacity .15s;pointer-events:none;z-index:1}.relly-segmented-btn{flex:1;position:relative;background:transparent;border:none;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:3px 6px;cursor:pointer;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:2;transition:color .15s var(--relly-ease)}.relly-segmented-btn:hover{color:#fff}.relly-segmented-btn.relly-segmented-btn--active{color:#fff;font-weight:600}.relly-status-wrapper{display:flex;align-items:center;gap:8px;width:100%;justify-content:flex-end}.relly-status-led{position:relative;width:8px;height:8px;display:flex;align-items:center;justify-content:center}.relly-status-led-core{width:7px;height:7px;border-radius:50%;background-color:#22c55e;position:relative;z-index:2}.relly-status-pulse-ring{position:absolute;width:100%;height:100%;border-radius:50%;background-color:inherit;opacity:.75;animation:relly-status-pulse 2s cubic-bezier(.24,0,.38,1) infinite;z-index:1}@keyframes relly-status-pulse{0%{transform:scale(.95);opacity:.8}70%{transform:scale(2.4);opacity:0}to{transform:scale(2.4);opacity:0}}.relly-status-led--online .relly-status-led-core,.relly-status-led--online .relly-status-pulse-ring{background-color:#22c55e}.relly-status-led--busy .relly-status-led-core,.relly-status-led--busy .relly-status-pulse-ring{background-color:#f59e0b}.relly-status-led--offline .relly-status-led-core,.relly-status-led--offline .relly-status-pulse-ring{background-color:#ef4444}.relly-status-led--info .relly-status-led-core,.relly-status-led--info .relly-status-pulse-ring{background-color:#3b82f6}.relly-status-led--ready .relly-status-led-core,.relly-status-led--ready .relly-status-pulse-ring{background-color:#a855f7}.relly-status-badge{font-size:10px;font-weight:700;padding:1px 6px;border-radius:9999px;text-transform:uppercase;letter-spacing:.04em;background:#ffffff14}.relly-status-badge--online{color:#22c55e;background:#22c55e26}.relly-status-badge--busy{color:#f59e0b;background:#f59e0b26}.relly-status-badge--offline{color:#ef4444;background:#ef444426}.relly-status-badge--info{color:#3b82f6;background:#3b82f626}.relly-status-badge--ready{color:#a855f7;background:#a855f726}.relly-status-detail{font-size:10px;color:var(--relly-fg);opacity:.7;font-family:monospace}', I = "relly-ui-stylesheet";
|
|
2195
|
-
function
|
|
2196
|
-
const i =
|
|
2197
|
-
if (!i || "getElementById" in i && i.getElementById(
|
|
2530
|
+
const xe = ':root{--relly-bg: #1c1d22;--relly-fg: #d1d5db;--relly-header-bg: #141518;--relly-header-fg: #f3f4f6;--relly-accent: #6366f1;--relly-accent-hover: #4f46e5;--relly-border: rgba(255, 255, 255, .08);--relly-input-bg: #26272e;--relly-input-hover: #2f3039;--relly-radius: 6px;--relly-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--relly-font-size: 11px;--relly-row-height: 26px;--relly-ease: cubic-bezier(.16, 1, .3, 1);--relly-transition: all .2s var(--relly-ease)}.relly-host{position:fixed;z-index:999999;pointer-events:none}.relly-panel{position:fixed;z-index:999999;background-color:var(--relly-bg);color:var(--relly-fg);border:1px solid var(--relly-border);border-radius:var(--relly-radius);box-shadow:0 10px 25px -5px #00000080,0 8px 10px -6px #0006;font-family:var(--relly-font);font-size:var(--relly-font-size);-webkit-user-select:none;user-select:none;box-sizing:border-box;overflow:hidden!important;overflow-x:hidden!important;display:flex;flex-direction:column;pointer-events:auto;opacity:1;transform:scale(1) translateY(0);transition:opacity .22s var(--relly-ease),transform .22s var(--relly-ease);min-width:240px;min-height:120px;max-width:calc(100vw - 16px);max-height:calc(100vh - 16px);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}.relly-panel.relly-mini-hud{width:auto!important;height:auto!important;min-width:0!important;min-height:0!important;border-radius:9999px!important;box-shadow:0 4px 20px #0006,0 0 0 1px var(--relly-accent)}.relly-panel.relly-mini-hud .relly-header{border-bottom:none;padding:5px 12px;border-radius:9999px;background-color:var(--relly-bg)}.relly-panel.relly-mini-hud .relly-body,.relly-panel.relly-mini-hud .relly-search-bar,.relly-panel.relly-mini-hud .relly-tabs-bar,.relly-panel.relly-mini-hud .relly-resize-handle,.relly-panel.relly-mini-hud .relly-header-btn:not(.relly-minihud-btn){display:none!important}.relly-panel.relly-mini-hud .relly-header-title:before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background-color:var(--relly-accent);box-shadow:0 0 6px var(--relly-accent);margin-right:6px;animation:relly-pulse 2s infinite ease-in-out}@keyframes relly-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.85)}}.relly-panel *{box-sizing:border-box}.relly-panel,.relly-panel *,.relly-body,.relly-tabs-bar,.relly-search-bar{scrollbar-width:none!important;-ms-overflow-style:none!important}.relly-panel *::-webkit-scrollbar,.relly-panel::-webkit-scrollbar,.relly-body::-webkit-scrollbar,.relly-tabs-bar::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}.relly-panel.relly-hidden{opacity:0!important;transform:scale(.95) translateY(-6px)!important;pointer-events:none!important}.relly-header{display:flex;align-items:center;justify-content:space-between;background-color:var(--relly-header-bg);color:var(--relly-header-fg);padding:6px 10px;font-weight:600;border-bottom:1px solid var(--relly-border);cursor:grab;transition:background-color .2s var(--relly-ease);flex-shrink:0}.relly-header:active{cursor:grabbing}.relly-header-title{display:flex;align-items:center;gap:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.relly-header-title svg{width:14px;height:14px;color:var(--relly-accent);transition:transform .2s var(--relly-ease)}.relly-header-title:hover svg{transform:rotate(15deg)}.relly-header-actions{display:flex;align-items:center;gap:4px}.relly-header-btn{background:transparent;border:none;color:var(--relly-fg);opacity:.7;padding:2px 6px;border-radius:4px;cursor:pointer;font-family:inherit;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;transition:opacity .15s,background-color .15s,transform .1s var(--relly-ease)}.relly-header-btn:hover{opacity:1;background-color:#ffffff1a;transform:scale(1.08)}.relly-header-btn:active{transform:scale(.92)}.relly-resize-handle{position:absolute;bottom:0;right:0;width:14px;height:14px;cursor:se-resize;display:flex;align-items:center;justify-content:center;opacity:.4;transition:opacity .15s var(--relly-ease);z-index:100}.relly-resize-handle svg{width:9px;height:9px;stroke:var(--relly-fg);stroke-width:1.5}.relly-resize-handle:hover{opacity:1}.relly-search-bar{display:flex;align-items:center;padding:4px 8px;background-color:#0003;border-bottom:1px solid var(--relly-border);gap:6px;flex-shrink:0}.relly-search-input{width:100%;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:3px 6px;outline:none;transition:border-color .15s var(--relly-ease),background-color .15s}.relly-search-input:focus{border-color:var(--relly-accent);background-color:var(--relly-input-hover)}.relly-search-clear{background:none;border:none;color:var(--relly-fg);cursor:pointer;opacity:.5;font-size:10px;padding:0 4px;transition:opacity .15s}.relly-search-clear:hover{opacity:1}.relly-tabs-bar{display:flex;background-color:var(--relly-header-bg);border-bottom:1px solid var(--relly-border);overflow-x:auto;overflow-y:hidden;flex-shrink:0;scrollbar-width:none!important;-ms-overflow-style:none!important}.relly-tabs-bar::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}.relly-tab-btn{flex:1;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--relly-fg);opacity:.6;padding:5px 8px;font-family:inherit;font-size:11px;cursor:pointer;white-space:nowrap;transition:all .2s var(--relly-ease)}.relly-tab-btn:hover{opacity:.9;background-color:#ffffff08}.relly-tab-btn.relly-tab-active{opacity:1;color:var(--relly-accent);border-bottom-color:var(--relly-accent)}.relly-tab-content{display:none}.relly-tab-content.relly-tab-content--active{display:flex;flex-direction:column}.relly-body{display:flex;flex-direction:column;overflow-y:auto!important;overflow-x:hidden!important;max-height:80vh;flex:1;transition:max-height .25s var(--relly-ease);scrollbar-width:none!important;-ms-overflow-style:none!important}.relly-body::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}.relly-panel.relly-collapsed .relly-body{display:none}.relly-copy-toast{position:absolute;top:36px;right:10px;background:var(--relly-accent);color:#fff;padding:3px 8px;border-radius:4px;font-size:10px;font-weight:600;box-shadow:0 4px 12px #0000004d;pointer-events:none;opacity:0;transform:translateY(-6px);transition:opacity .2s var(--relly-ease),transform .2s var(--relly-ease);z-index:9999999}.relly-copy-toast.relly-toast-show{opacity:1;transform:translateY(0)}.relly-modal-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;background:#000000b3;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:999999;display:flex;align-items:center;justify-content:center;padding:12px;opacity:0;pointer-events:none;transition:opacity .2s var(--relly-ease)}.relly-modal-backdrop.relly-modal-show{opacity:1;pointer-events:auto}.relly-modal{width:100%;max-width:320px;background:var(--relly-bg);border:1px solid var(--relly-border);border-radius:var(--relly-radius);box-shadow:0 12px 30px #0009;padding:12px;display:flex;flex-direction:column;gap:8px;transform:scale(.95);transition:transform .2s var(--relly-ease)}.relly-modal-backdrop.relly-modal-show .relly-modal{transform:scale(1)}.relly-modal-header{display:flex;justify-content:space-between;align-items:center;font-weight:600;color:var(--relly-header-fg);font-size:12px}.relly-dropzone{border:1.5px dashed var(--relly-border);border-radius:4px;padding:12px;text-align:center;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--relly-fg);opacity:.8;font-size:11px;background:#00000026;transition:all .2s var(--relly-ease)}.relly-dropzone:hover,.relly-dropzone.relly-dropzone-drag{border-color:var(--relly-accent);opacity:1;background:#6366f114}.relly-import-textarea{width:100%;height:90px;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:monospace;font-size:10px;padding:6px;outline:none;resize:vertical}.relly-import-textarea:focus{border-color:var(--relly-accent)}.relly-import-error{color:#ef4444;font-size:10px;min-height:12px}.relly-modal-actions{display:flex;gap:6px}.relly-btn-primary{background:var(--relly-accent)!important;color:#fff!important;border-color:var(--relly-accent)!important}.relly-btn-primary:hover{background:var(--relly-accent-hover)!important}.relly-toast-container{position:absolute;top:36px;right:8px;display:flex;flex-direction:column;gap:6px;z-index:9999999;pointer-events:none;max-width:240px}.relly-toast{display:flex;align-items:center;gap:6px;padding:6px 8px;background:var(--relly-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-size:11px;box-shadow:0 4px 16px #00000073;pointer-events:auto;opacity:0;transform:translateY(-8px) scale(.96);transition:opacity .2s var(--relly-ease),transform .2s var(--relly-ease);cursor:pointer}.relly-toast.relly-toast-enter{opacity:1;transform:translateY(0) scale(1)}.relly-toast.relly-toast-leave{opacity:0;transform:translateY(-6px) scale(.95)}.relly-toast-icon svg{width:14px;height:14px;display:block}.relly-toast--success{border-left:3px solid #22c55e}.relly-toast--success .relly-toast-icon{color:#22c55e}.relly-toast--warning{border-left:3px solid #f59e0b}.relly-toast--warning .relly-toast-icon{color:#f59e0b}.relly-toast--error{border-left:3px solid #ef4444}.relly-toast--error .relly-toast-icon{color:#ef4444}.relly-toast--info{border-left:3px solid var(--relly-accent)}.relly-toast--info .relly-toast-icon{color:var(--relly-accent)}.relly-toast-msg{flex:1;line-height:1.3;overflow:hidden;text-overflow:ellipsis}.relly-toast-close{background:transparent;border:none;color:var(--relly-fg);opacity:.5;cursor:pointer;padding:0 2px;font-size:11px}.relly-toast-close:hover{opacity:1}.relly-context-menu{position:absolute;background:var(--relly-bg);border:1px solid var(--relly-border);border-radius:var(--relly-radius);box-shadow:0 8px 24px #0000008c;padding:4px;display:flex;flex-direction:column;min-width:140px;z-index:99999999;animation:relly-menu-in .15s var(--relly-ease)}@keyframes relly-menu-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.relly-context-item{display:flex;align-items:center;gap:6px;background:transparent;border:none;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:5px 8px;border-radius:3px;cursor:pointer;text-align:left;transition:background-color .12s var(--relly-ease),color .12s}.relly-context-item:hover:not(:disabled){background-color:var(--relly-accent);color:#fff}.relly-context-item:disabled{opacity:.4;cursor:not-allowed}.relly-context-item--danger:hover:not(:disabled){background-color:#ef4444!important;color:#fff!important}.relly-context-separator{height:1px;background-color:var(--relly-border);margin:3px 0}.relly-row{display:flex;align-items:center;justify-content:space-between;min-height:var(--relly-row-height);padding:3px 10px;border-bottom:1px solid var(--relly-border);position:relative;transition:background-color .15s var(--relly-ease),opacity .2s var(--relly-ease)}.relly-row:hover{background-color:#ffffff08}.relly-row.relly-search-hidden{display:none!important}.relly-row-label{flex:0 0 40%;max-width:40%;color:var(--relly-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--relly-font-size);cursor:default;position:relative}.relly-row-control{flex:1;display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:0}.relly-multi-row{display:flex;align-items:stretch;width:100%;border-bottom:1px solid var(--relly-border)}.relly-multi-row .relly-row{flex:1;border-bottom:none;border-right:1px solid var(--relly-border);padding:3px 6px}.relly-multi-row .relly-row:last-child{border-right:none}.relly-multi-row .relly-row-label{flex:0 0 auto;max-width:none;margin-right:4px}.relly-tooltip{position:absolute;bottom:calc(100% + 4px);left:10px;background-color:#111216;color:#f3f4f6;padding:4px 8px;border-radius:4px;font-size:10px;line-height:1.3;white-space:nowrap;box-shadow:0 4px 12px #00000080;border:1px solid var(--relly-border);pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity .18s var(--relly-ease),transform .18s var(--relly-ease);z-index:99999999}.relly-row:hover .relly-tooltip{opacity:1;transform:translateY(0)}.relly-checkbox-wrapper{display:flex;align-items:center;cursor:pointer;gap:6px}.relly-checkbox-box{width:16px;height:16px;border-radius:4px;background-color:var(--relly-input-bg);border:1px solid var(--relly-border);display:flex;align-items:center;justify-content:center;transition:background-color .18s var(--relly-ease),border-color .18s var(--relly-ease),transform .15s var(--relly-ease)}.relly-checkbox-wrapper:hover .relly-checkbox-box{border-color:var(--relly-accent);transform:scale(1.05)}.relly-checkbox-wrapper:active .relly-checkbox-box{transform:scale(.95)}.relly-checkbox-wrapper.relly-checked .relly-checkbox-box{background-color:var(--relly-accent);border-color:var(--relly-accent);animation:relly-pop .25s var(--relly-ease)}@keyframes relly-pop{0%{transform:scale(.85)}60%{transform:scale(1.15)}to{transform:scale(1)}}.relly-checkbox-icon{display:none;width:10px;height:10px;stroke:#fff;stroke-width:2.5;fill:none}.relly-checkbox-wrapper.relly-checked .relly-checkbox-icon{display:block}.relly-slider-container{display:flex;align-items:center;gap:8px;width:100%}.relly-slider-range{flex:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:4px;border-radius:2px;background:var(--relly-input-bg);outline:none;cursor:pointer;transition:background-color .15s var(--relly-ease)}.relly-slider-range::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:12px;height:12px;border-radius:50%;background:var(--relly-accent);cursor:pointer;box-shadow:0 1px 3px #0000004d;transition:transform .15s var(--relly-ease),background-color .15s}.relly-slider-range::-webkit-slider-thumb:hover{transform:scale(1.25);background:var(--relly-accent-hover)}.relly-slider-range::-webkit-slider-thumb:active{transform:scale(1.35)}.relly-slider-number{width:50px;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:2px 4px;text-align:right;outline:none;transition:border-color .15s var(--relly-ease),background-color .15s}.relly-slider-number:focus{border-color:var(--relly-accent);background:var(--relly-input-hover)}.relly-btn{width:100%;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;font-weight:500;padding:4px 10px;cursor:pointer;transition:background-color .15s var(--relly-ease),border-color .15s,color .15s,transform .1s var(--relly-ease);text-align:center}.relly-btn:hover{background-color:var(--relly-input-hover);border-color:var(--relly-accent);color:#fff;transform:translateY(-1px)}.relly-btn:active{transform:translateY(1px) scale(.98)}.relly-select-input{width:100%;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:3px 6px;outline:none;cursor:pointer;transition:border-color .15s var(--relly-ease),background-color .15s}.relly-select-input:focus{border-color:var(--relly-accent);background:var(--relly-input-hover)}.relly-dynamic-value{color:var(--relly-accent);font-weight:500;font-family:monospace;font-size:11px;background:#6366f11a;padding:2px 6px;border-radius:4px;border:1px solid rgba(99,102,241,.2);transition:all .2s var(--relly-ease)}.relly-color-wrapper{display:flex;align-items:center;gap:6px;width:100%;justify-content:flex-end}.relly-color-preview{width:20px;height:20px;border-radius:4px;border:1px solid var(--relly-border);cursor:pointer;box-shadow:inset 0 0 2px #0006;transition:transform .15s var(--relly-ease),border-color .15s}.relly-color-preview:hover{transform:scale(1.15);border-color:#fff}.relly-eyedropper-btn{background:transparent;border:none;color:var(--relly-fg);cursor:pointer;opacity:.7;padding:2px 4px;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:opacity .15s var(--relly-ease),transform .1s var(--relly-ease)}.relly-eyedropper-btn svg{width:13px;height:13px}.relly-eyedropper-btn:hover{opacity:1;color:var(--relly-accent);transform:scale(1.15)}.relly-color-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.relly-color-text{font-family:monospace;font-size:11px;color:var(--relly-fg);background:transparent;border:1px solid transparent;border-radius:var(--relly-radius);padding:2px 4px;width:72px;text-transform:uppercase;transition:all .15s ease}.relly-color-text:hover{border-color:#fff3;background:var(--relly-input-bg)}.relly-color-text:focus{outline:none;border-color:var(--relly-accent);background:var(--relly-input-bg);box-shadow:0 0 0 2px #38bdf833}.relly-color-swatches{display:flex;align-items:center;gap:3px;flex-wrap:wrap;margin-right:4px}.relly-color-swatch{width:14px;height:14px;border-radius:3px;border:1px solid rgba(255,255,255,.2);cursor:pointer;padding:0;box-sizing:border-box;transition:transform .12s var(--relly-ease),border-color .12s;box-shadow:inset 0 0 2px #00000059}.relly-color-swatch:hover{transform:scale(1.25);border-color:#fff;z-index:2}.relly-color-swatch.relly-swatch-active{border:1.5px solid #fff;box-shadow:0 0 4px var(--relly-accent)}.relly-point2d-container{display:flex;align-items:center;gap:4px;width:100%}.relly-point2d-item{display:flex;align-items:center;gap:2px;flex:1}.relly-point2d-tag{font-size:10px;font-weight:600;color:var(--relly-accent);font-family:monospace}.relly-point2d-input{width:100%;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:4px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:2px 4px;text-align:right;outline:none;transition:border-color .15s var(--relly-ease)}.relly-point2d-input:focus{border-color:var(--relly-accent)}.relly-graph-row{display:flex;flex-direction:column;padding:6px 10px;border-bottom:1px solid var(--relly-border);gap:5px;transition:opacity .2s var(--relly-ease)}.relly-graph-row.relly-search-hidden{display:none!important}.relly-graph-header{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--relly-fg)}.relly-graph-label{font-weight:500;opacity:.85}.relly-graph-stats{display:flex;align-items:center;gap:5px;font-family:monospace;font-size:10px}.relly-graph-badge{opacity:.55;font-size:9px}.relly-graph-badge--paused{opacity:1!important;color:#f59e0b;background:#f59e0b2e;font-weight:700;border-radius:3px;padding:1px 4px;border:1px solid rgba(245,158,11,.4);letter-spacing:.5px}.relly-graph-val{color:var(--relly-accent);font-weight:600;background:#6366f11f;padding:1px 4px;border-radius:3px;border:1px solid rgba(99,102,241,.2)}.relly-graph-legend{display:none;align-items:center;gap:8px;font-size:9px;font-family:monospace;opacity:.75;margin-top:-2px}.relly-graph-legend-item{display:flex;align-items:center;gap:4px}.relly-graph-legend-dot{width:6px;height:6px;border-radius:50%;display:inline-block}.relly-graph-canvas-container{width:100%;height:90px;background:var(--relly-input-bg);border-radius:4px;border:1px solid var(--relly-border);overflow:hidden;position:relative;box-shadow:inset 0 2px 6px #00000040;cursor:crosshair;transition:border-color .2s ease,box-shadow .2s ease}.relly-graph-canvas-container.relly-graph-paused{border-color:#f59e0b;box-shadow:inset 0 2px 6px #00000040,0 0 10px #f59e0b40}.relly-graph-canvas{width:100%;height:100%;display:block}.relly-graph-tooltip{position:absolute;pointer-events:none;background:#0f172aeb;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border:1px solid var(--relly-border);border-radius:4px;padding:3px 6px;font-size:9px;font-family:monospace;color:#fff;white-space:nowrap;z-index:10;transform:translate(-50%);opacity:0;transition:opacity .12s ease;box-shadow:0 4px 12px #00000080}.relly-graph-tooltip.relly-tooltip-show{opacity:1}.relly-section{display:flex;flex-direction:column;border-bottom:1px solid var(--relly-border);transition:opacity .2s var(--relly-ease)}.relly-section.relly-search-hidden{display:none!important}.relly-section-header{display:flex;align-items:center;justify-content:space-between;padding:5px 10px;background-color:#ffffff05;cursor:pointer;font-weight:600;color:var(--relly-header-fg);transition:background-color .15s var(--relly-ease)}.relly-section-header:hover{background-color:#ffffff0d}.relly-section-title-wrap{display:flex;align-items:center;gap:6px}.relly-section-arrow{width:12px;height:12px;transition:transform .22s var(--relly-ease);fill:currentColor}.relly-section.relly-section--collapsed .relly-section-arrow{transform:rotate(-90deg)}.relly-section-content{display:flex;flex-direction:column;padding-left:6px;border-left:2px solid var(--relly-accent);transition:opacity .2s var(--relly-ease)}.relly-section.relly-section--collapsed .relly-section-content{display:none}.relly-disabled,.relly-component-row.relly-disabled,.relly-section.relly-disabled{opacity:.42!important;pointer-events:none!important;-webkit-user-select:none!important;user-select:none!important;filter:grayscale(.5)}.relly-jog-scrubbing,.relly-jog-scrubbing *{cursor:ew-resize!important;-webkit-user-select:none!important;user-select:none!important}.relly-mini-sparkline{width:48px;height:16px;display:inline-block;vertical-align:middle;margin-left:6px;border-radius:3px;background:#00000040}.relly-point3d-container{display:flex;align-items:center;gap:4px;width:100%}.relly-point3d-item{display:flex;align-items:center;gap:2px;flex:1;min-width:0}.relly-point3d-tag{font-size:9px;font-weight:700;line-height:1;padding:2px 4px;border-radius:3px;text-transform:uppercase}.relly-point3d-tag--x{background-color:#ef444433;color:#ef4444;border:1px solid rgba(239,68,68,.4)}.relly-point3d-tag--y{background-color:#22c55e33;color:#22c55e;border:1px solid rgba(34,197,94,.4)}.relly-point3d-tag--z{background-color:#3b82f633;color:#3b82f6;border:1px solid rgba(59,130,246,.4)}.relly-point3d-input{width:100%;min-width:24px;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:3px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:2px 4px;text-align:right;cursor:ew-resize}.relly-range-wrapper{display:flex;align-items:center;gap:6px;width:100%}.relly-range-track{flex:1;height:6px;background:var(--relly-input-bg);border-radius:9999px;position:relative;cursor:pointer;box-shadow:inset 0 1px 2px #0000004d}.relly-range-bar{position:absolute;top:0;bottom:0;background:var(--relly-accent);border-radius:9999px;cursor:grab;transition:background-color .15s}.relly-range-bar:active{cursor:grabbing;background:var(--relly-accent-hover)}.relly-range-thumb{position:absolute;top:50%;width:12px;height:12px;border-radius:50%;background:#fff;border:2px solid var(--relly-accent);transform:translate(-50%,-50%);cursor:grab;z-index:2;transition:transform .1s var(--relly-ease),box-shadow .15s;box-shadow:0 1px 4px #0006}.relly-range-thumb:hover{transform:translate(-50%,-50%) scale(1.2);box-shadow:0 0 6px var(--relly-accent)}.relly-range-thumb:active{cursor:grabbing;transform:translate(-50%,-50%) scale(1.25)}.relly-range-input{width:38px;background:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:3px;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:2px 4px;text-align:right}.relly-segmented-container{display:flex;position:relative;background:var(--relly-input-bg);border-radius:4px;border:1px solid var(--relly-border);padding:2px;width:100%;overflow:hidden}.relly-segmented-glider{position:absolute;top:2px;bottom:2px;background:var(--relly-accent);border-radius:3px;box-shadow:0 1px 4px #00000059;transition:transform .2s var(--relly-ease),width .2s var(--relly-ease),opacity .15s;pointer-events:none;z-index:1}.relly-segmented-btn{flex:1;position:relative;background:transparent;border:none;color:var(--relly-fg);font-family:inherit;font-size:11px;padding:3px 6px;cursor:pointer;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:2;transition:color .15s var(--relly-ease)}.relly-segmented-btn:hover{color:#fff}.relly-segmented-btn.relly-segmented-btn--active{color:#fff;font-weight:600}.relly-status-wrapper{display:flex;align-items:center;gap:8px;width:100%;justify-content:flex-end}.relly-status-led{position:relative;width:8px;height:8px;display:flex;align-items:center;justify-content:center}.relly-status-led-core{width:7px;height:7px;border-radius:50%;background-color:#22c55e;position:relative;z-index:2}.relly-status-pulse-ring{position:absolute;width:100%;height:100%;border-radius:50%;background-color:inherit;opacity:.75;animation:relly-status-pulse 2s cubic-bezier(.24,0,.38,1) infinite;z-index:1}@keyframes relly-status-pulse{0%{transform:scale(.95);opacity:.8}70%{transform:scale(2.4);opacity:0}to{transform:scale(2.4);opacity:0}}.relly-status-led--online .relly-status-led-core,.relly-status-led--online .relly-status-pulse-ring{background-color:#22c55e}.relly-status-led--busy .relly-status-led-core,.relly-status-led--busy .relly-status-pulse-ring{background-color:#f59e0b}.relly-status-led--offline .relly-status-led-core,.relly-status-led--offline .relly-status-pulse-ring{background-color:#ef4444}.relly-status-led--info .relly-status-led-core,.relly-status-led--info .relly-status-pulse-ring{background-color:#3b82f6}.relly-status-led--ready .relly-status-led-core,.relly-status-led--ready .relly-status-pulse-ring{background-color:#a855f7}.relly-status-badge{font-size:10px;font-weight:700;padding:1px 6px;border-radius:9999px;text-transform:uppercase;letter-spacing:.04em;background:#ffffff14}.relly-status-badge--online{color:#22c55e;background:#22c55e26}.relly-status-badge--busy{color:#f59e0b;background:#f59e0b26}.relly-status-badge--offline{color:#ef4444;background:#ef444426}.relly-status-badge--info{color:#3b82f6;background:#3b82f626}.relly-status-badge--ready{color:#a855f7;background:#a855f726}.relly-status-detail{font-size:10px;color:var(--relly-fg);opacity:.7;font-family:monospace}.relly-switch-wrap{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.relly-switch-native{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.relly-switch-track{position:relative;width:34px;height:18px;border-radius:9999px;background-color:#ffffff29;border:1px solid rgba(255,255,255,.12);transition:all .22s cubic-bezier(.4,0,.2,1);display:inline-block}.relly-switch-wrap:hover .relly-switch-track{background-color:#ffffff3d;border-color:#fff3}.relly-switch-thumb{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background-color:#fff;box-shadow:0 1px 3px #0006;transition:transform .22s cubic-bezier(.34,1.56,.64,1),background-color .2s}.relly-switch-track--checked{background-color:var(--relly-accent);border-color:var(--relly-accent);box-shadow:0 0 10px var(--relly-accent)}.relly-switch-track--checked .relly-switch-thumb{transform:translate(16px);background-color:#fff}.relly-switch-text{font-size:10px;font-family:monospace;font-weight:700;color:var(--relly-fg);opacity:.8}.relly-button-group-row{padding:3px 0}.relly-button-group{display:flex;width:100%;gap:4px}.relly-btn--group{flex:1;min-width:0;padding:5px 8px;font-size:11px;font-weight:600;text-align:center;border-radius:var(--relly-radius);background-color:var(--relly-input-bg);color:var(--relly-fg);border:1px solid var(--relly-border);cursor:pointer;transition:all .16s var(--relly-ease)}.relly-btn--group:hover{background-color:var(--relly-input-hover);border-color:var(--relly-accent);transform:translateY(-1px)}.relly-btn--group:active{transform:translateY(1px)}.relly-btn--group.relly-btn--primary{background-color:var(--relly-accent);color:#0f172a;border-color:var(--relly-accent)}.relly-btn--group.relly-btn--primary:hover{filter:brightness(1.15);box-shadow:0 0 10px var(--relly-accent)}.relly-btn--group.relly-btn--danger{color:#f87171;border-color:#ef444459}.relly-btn--group.relly-btn--danger:hover{background-color:#ef44442e;border-color:#ef4444}.relly-text-wrap{position:relative;display:flex;align-items:center;width:100%}.relly-text-input{width:100%;background-color:var(--relly-input-bg);border:1px solid var(--relly-border);border-radius:var(--relly-radius);color:var(--relly-fg);font-size:11px;padding:4px 24px 4px 8px;outline:none;transition:all .15s ease}.relly-text-input:hover{background-color:var(--relly-input-hover);border-color:#fff3}.relly-text-input:focus{border-color:var(--relly-accent);background-color:var(--relly-input-hover);box-shadow:0 0 0 2px #38bdf833}.relly-text-clear{position:absolute;right:6px;background:none;border:none;color:var(--relly-fg);opacity:.45;cursor:pointer;font-size:10px;padding:2px 4px;line-height:1;transition:opacity .15s}.relly-text-clear:hover{opacity:1}.relly-progress-wrap{display:flex;align-items:center;gap:8px;width:100%}.relly-progress-track{flex:1;height:6px;border-radius:9999px;background-color:#ffffff1a;overflow:hidden;position:relative}.relly-progress-bar{height:100%;border-radius:9999px;background:linear-gradient(90deg,var(--relly-accent),#38bdf8);box-shadow:0 0 8px var(--relly-accent);transition:width .18s ease-out;width:0%}.relly-progress-text{font-size:10px;font-family:monospace;font-weight:700;color:var(--relly-fg);opacity:.8;min-width:32px;text-align:right}.relly-separator-row{padding:6px 0}.relly-separator{display:flex;align-items:center;gap:8px;width:100%}.relly-separator-line{flex:1;height:1px;background-color:#ffffff1f}.relly-separator--dashed .relly-separator-line{background:none;border-bottom:1px dashed rgba(255,255,255,.2);height:0}.relly-separator-title{font-size:9px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;color:var(--relly-fg);opacity:.55;white-space:nowrap}', L = "relly-ui-stylesheet";
|
|
2531
|
+
function X(f) {
|
|
2532
|
+
const i = f || (typeof document < "u" ? document : null);
|
|
2533
|
+
if (!i || "getElementById" in i && i.getElementById(L) || "querySelector" in i && i.querySelector(`#${L}`)) return;
|
|
2198
2534
|
const e = document.createElement("style");
|
|
2199
|
-
e.id =
|
|
2535
|
+
e.id = L, e.textContent = xe, "head" in i && i.head ? i.head.appendChild(e) : i.appendChild(e);
|
|
2200
2536
|
}
|
|
2201
2537
|
const S = class S extends T {
|
|
2538
|
+
// Calm, readable telemetry rate (~5.5 samples per sec)
|
|
2202
2539
|
constructor(e = {}) {
|
|
2203
|
-
const t = e.shadowDOM !== !1, n = new
|
|
2204
|
-
|
|
2205
|
-
const
|
|
2206
|
-
if (
|
|
2207
|
-
const
|
|
2208
|
-
|
|
2540
|
+
const t = e.shadowDOM !== !1, n = new Q(), s = new Z(), r = new ce(e.sound !== !1, e.soundPack || "synth"), o = document.createElement("div");
|
|
2541
|
+
o.className = "relly-panel";
|
|
2542
|
+
const a = e.width ?? 280;
|
|
2543
|
+
if (o.style.width = typeof a == "number" ? `${a}px` : a, e.height) {
|
|
2544
|
+
const b = e.height;
|
|
2545
|
+
o.style.height = typeof b == "number" ? `${b}px` : b;
|
|
2209
2546
|
}
|
|
2210
2547
|
const h = document.createElement("div");
|
|
2211
2548
|
h.className = "relly-header";
|
|
@@ -2217,8 +2554,8 @@ const S = class S extends T {
|
|
|
2217
2554
|
<line x1="9" y1="21" x2="9" y2="9"></line>
|
|
2218
2555
|
</svg>
|
|
2219
2556
|
`;
|
|
2220
|
-
const
|
|
2221
|
-
|
|
2557
|
+
const m = document.createElement("span");
|
|
2558
|
+
m.textContent = e.title || "RellyUI", c.appendChild(m);
|
|
2222
2559
|
const p = document.createElement("div");
|
|
2223
2560
|
p.className = "relly-header-actions";
|
|
2224
2561
|
const d = document.createElement("button");
|
|
@@ -2228,69 +2565,71 @@ const S = class S extends T {
|
|
|
2228
2565
|
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
|
|
2229
2566
|
</svg>
|
|
2230
2567
|
`, p.appendChild(d);
|
|
2231
|
-
const
|
|
2232
|
-
|
|
2568
|
+
const y = document.createElement("button");
|
|
2569
|
+
y.className = "relly-header-btn", y.title = "Import settings from JSON", y.innerHTML = `
|
|
2233
2570
|
<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
2234
2571
|
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
|
|
2235
2572
|
<polyline points="7 10 12 15 17 10"></polyline>
|
|
2236
2573
|
<line x1="12" y1="15" x2="12" y2="3"></line>
|
|
2237
2574
|
</svg>
|
|
2238
|
-
`, p.appendChild(
|
|
2239
|
-
const
|
|
2240
|
-
|
|
2241
|
-
const
|
|
2242
|
-
|
|
2575
|
+
`, p.appendChild(y);
|
|
2576
|
+
const x = document.createElement("button");
|
|
2577
|
+
x.className = "relly-header-btn relly-minihud-btn", x.title = "Toggle Mini-HUD pill (or double-click header)", x.textContent = "⤢", p.appendChild(x);
|
|
2578
|
+
const u = document.createElement("button");
|
|
2579
|
+
u.className = "relly-header-btn", u.title = "Collapse/Expand", u.textContent = "_", p.appendChild(u), h.appendChild(c), h.appendChild(p), o.appendChild(h);
|
|
2243
2580
|
const v = document.createElement("div");
|
|
2244
|
-
v.className = "relly-copy-toast", v.textContent = "JSON Copied!",
|
|
2245
|
-
const
|
|
2246
|
-
|
|
2247
|
-
super(
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2581
|
+
v.className = "relly-copy-toast", v.textContent = "JSON Copied!", o.appendChild(v);
|
|
2582
|
+
const w = document.createElement("div");
|
|
2583
|
+
w.className = "relly-body", e.height && (w.style.maxHeight = "none", w.style.flex = "1"), o.appendChild(w);
|
|
2584
|
+
super(w, n, s, r);
|
|
2585
|
+
l(this, "hostEl");
|
|
2586
|
+
l(this, "shadowRoot", null);
|
|
2587
|
+
l(this, "panelEl");
|
|
2588
|
+
l(this, "headerEl");
|
|
2589
|
+
l(this, "titleEl");
|
|
2590
|
+
l(this, "collapseBtn");
|
|
2591
|
+
l(this, "copyToastEl");
|
|
2592
|
+
l(this, "themeManager");
|
|
2593
|
+
l(this, "soundEngine");
|
|
2594
|
+
l(this, "draggableInstance");
|
|
2595
|
+
l(this, "resizableInstance");
|
|
2596
|
+
l(this, "hotkeyInstance");
|
|
2597
|
+
l(this, "searchBarInstance");
|
|
2598
|
+
l(this, "tabsManagerInstance");
|
|
2599
|
+
l(this, "importModalInstance");
|
|
2600
|
+
l(this, "toastManager");
|
|
2601
|
+
l(this, "contextMenuManager");
|
|
2602
|
+
l(this, "isPanelCollapsed", !1);
|
|
2603
|
+
l(this, "isPanelHidden", !1);
|
|
2604
|
+
l(this, "isMiniHud", !1);
|
|
2605
|
+
l(this, "ghostOnIdle", !1);
|
|
2606
|
+
l(this, "idleOpacity", 0.38);
|
|
2607
|
+
l(this, "onResizeBound");
|
|
2608
|
+
l(this, "autoSave", !1);
|
|
2609
|
+
l(this, "autoSaveKey", "relly-ui-session");
|
|
2610
|
+
l(this, "autoSaveTimeout", null);
|
|
2611
|
+
l(this, "sparklineCtx");
|
|
2612
|
+
l(this, "sparklineData", [16, 17, 18, 17, 19, 20, 21, 20, 22, 23, 22, 24, 25, 24, 25, 26]);
|
|
2613
|
+
l(this, "sparklineAnimId");
|
|
2614
|
+
l(this, "lastSparklineTime", 0);
|
|
2615
|
+
l(this, "sparklineInterval", 180);
|
|
2616
|
+
this.panelEl = o, this.headerEl = h, this.titleEl = m, this.collapseBtn = u, this.copyToastEl = v, this.soundEngine = r, this.onResizeBound = () => this.clampToViewport(), e.searchBar && (this.searchBarInstance = new he(w, e.searchOptions), h.insertAdjacentElement("afterend", this.searchBarInstance.element)), this.themeManager = new le(this.panelEl, e.theme), this.mount(e, t), e.autoInjectStyles !== !1 && (this.shadowRoot ? X(this.shadowRoot) : X()), e.draggable !== !1 && (this.draggableInstance = new ae(this.headerEl, this.panelEl, this.soundEngine)), e.resizable !== !1 && (this.resizableInstance = new oe(this.panelEl)), this.toastManager = new ue(this.panelEl, this.soundEngine), this.contextMenuManager = new me(this.panelEl, this.soundEngine), this.importModalInstance = new de(this.panelEl, (b) => {
|
|
2617
|
+
this.importJSON(b);
|
|
2279
2618
|
});
|
|
2280
2619
|
const g = e.hotkey === void 0 ? "KeyH" : e.hotkey;
|
|
2281
|
-
g && (this.hotkeyInstance = new
|
|
2620
|
+
g && (this.hotkeyInstance = new W(g, () => {
|
|
2282
2621
|
this.toggle();
|
|
2283
|
-
})),
|
|
2284
|
-
|
|
2285
|
-
}), this.headerEl.addEventListener("dblclick", (
|
|
2286
|
-
|
|
2287
|
-
}), this.collapseBtn.addEventListener("click", (
|
|
2288
|
-
|
|
2289
|
-
}), d.addEventListener("click", (
|
|
2290
|
-
|
|
2291
|
-
}),
|
|
2292
|
-
var
|
|
2293
|
-
|
|
2622
|
+
})), x.addEventListener("click", (b) => {
|
|
2623
|
+
b.stopPropagation(), this.toggleMiniHud();
|
|
2624
|
+
}), this.headerEl.addEventListener("dblclick", (b) => {
|
|
2625
|
+
b.target.closest(".relly-header-btn") || this.toggleMiniHud();
|
|
2626
|
+
}), this.collapseBtn.addEventListener("click", (b) => {
|
|
2627
|
+
b.stopPropagation(), this.soundEngine.playClick(), this.toggleCollapse();
|
|
2628
|
+
}), d.addEventListener("click", (b) => {
|
|
2629
|
+
b.stopPropagation(), this.soundEngine.playClick(), this.copyJSON();
|
|
2630
|
+
}), y.addEventListener("click", (b) => {
|
|
2631
|
+
var C;
|
|
2632
|
+
b.stopPropagation(), this.soundEngine.playClick(), (C = this.importModalInstance) == null || C.show();
|
|
2294
2633
|
}), e.soundVolume !== void 0 && this.soundEngine.setVolume(e.soundVolume), e.accordion && this.setAccordion(!0), e.ghostOnIdle && this.setGhostMode(!0, e.idleOpacity), this.initSparkline(c), this.panelEl.addEventListener("mouseenter", () => {
|
|
2295
2634
|
this.ghostOnIdle && (this.panelEl.style.opacity = "1");
|
|
2296
2635
|
}), this.panelEl.addEventListener("mouseleave", () => {
|
|
@@ -2318,7 +2657,7 @@ const S = class S extends T {
|
|
|
2318
2657
|
}
|
|
2319
2658
|
}
|
|
2320
2659
|
addTab(e) {
|
|
2321
|
-
return this.tabsManagerInstance || (this.tabsManagerInstance = new
|
|
2660
|
+
return this.tabsManagerInstance || (this.tabsManagerInstance = new ye(
|
|
2322
2661
|
this.headerEl,
|
|
2323
2662
|
this.contentEl,
|
|
2324
2663
|
this.bindingEngine,
|
|
@@ -2357,7 +2696,7 @@ const S = class S extends T {
|
|
|
2357
2696
|
return this;
|
|
2358
2697
|
}
|
|
2359
2698
|
loadSchema(e) {
|
|
2360
|
-
return e.title && this.setTitle(e.title),
|
|
2699
|
+
return e.title && this.setTitle(e.title), pe.load(this, e), this;
|
|
2361
2700
|
}
|
|
2362
2701
|
setTitle(e) {
|
|
2363
2702
|
return this.titleEl.textContent = e, this;
|
|
@@ -2398,30 +2737,51 @@ const S = class S extends T {
|
|
|
2398
2737
|
initSparkline(e) {
|
|
2399
2738
|
const t = document.createElement("canvas");
|
|
2400
2739
|
t.className = "relly-mini-sparkline", t.width = 48, t.height = 16, e.appendChild(t), this.sparklineCtx = t.getContext("2d");
|
|
2401
|
-
const n = () => {
|
|
2402
|
-
this.isMiniHud && this.sparklineCtx && this.drawSparkline(), typeof requestAnimationFrame < "u" && (this.sparklineAnimId = requestAnimationFrame(n));
|
|
2740
|
+
const n = (s) => {
|
|
2741
|
+
this.isMiniHud && this.sparklineCtx && (!this.lastSparklineTime || s - this.lastSparklineTime >= this.sparklineInterval) && (this.lastSparklineTime = s, this.updateSparklinePoint(), this.drawSparkline()), typeof requestAnimationFrame < "u" && (this.sparklineAnimId = requestAnimationFrame(n));
|
|
2403
2742
|
};
|
|
2404
2743
|
typeof requestAnimationFrame < "u" && (this.sparklineAnimId = requestAnimationFrame(n));
|
|
2405
2744
|
}
|
|
2745
|
+
findActiveGraphValue() {
|
|
2746
|
+
for (const e of this.children)
|
|
2747
|
+
if (typeof e.getLatestValue == "function")
|
|
2748
|
+
return e.getLatestValue();
|
|
2749
|
+
if (this.tabsManagerInstance) {
|
|
2750
|
+
for (const e of this.tabsManagerInstance.getTabs())
|
|
2751
|
+
for (const t of e.children || [])
|
|
2752
|
+
if (typeof t.getLatestValue == "function")
|
|
2753
|
+
return t.getLatestValue();
|
|
2754
|
+
}
|
|
2755
|
+
return null;
|
|
2756
|
+
}
|
|
2757
|
+
updateSparklinePoint() {
|
|
2758
|
+
let e;
|
|
2759
|
+
const t = this.findActiveGraphValue();
|
|
2760
|
+
if (t !== null && !isNaN(t) && isFinite(t))
|
|
2761
|
+
e = t;
|
|
2762
|
+
else {
|
|
2763
|
+
const n = this.sparklineData[this.sparklineData.length - 1] ?? 20;
|
|
2764
|
+
e = Math.max(8, Math.min(28, n + (Math.random() - 0.49) * 2.2));
|
|
2765
|
+
}
|
|
2766
|
+
this.sparklineData.push(e), this.sparklineData.length > 20 && this.sparklineData.shift();
|
|
2767
|
+
}
|
|
2406
2768
|
drawSparkline() {
|
|
2407
2769
|
const e = this.sparklineCtx;
|
|
2408
2770
|
if (!e) return;
|
|
2409
2771
|
const t = 48, n = 16;
|
|
2410
|
-
e.clearRect(0, 0, t, n);
|
|
2411
|
-
const s =
|
|
2412
|
-
this.sparklineData.push(r), this.sparklineData.length > 14 && this.sparklineData.shift();
|
|
2413
|
-
const l = Math.min(...this.sparklineData) - 1, h = Math.max(...this.sparklineData) + 1 - l || 1, c = t / (this.sparklineData.length - 1);
|
|
2772
|
+
if (e.clearRect(0, 0, t, n), this.sparklineData.length < 2) return;
|
|
2773
|
+
const s = Math.min(...this.sparklineData) - 1, o = Math.max(...this.sparklineData) + 1 - s || 1, a = t / (this.sparklineData.length - 1);
|
|
2414
2774
|
e.beginPath(), e.moveTo(0, n);
|
|
2415
|
-
for (let
|
|
2416
|
-
const
|
|
2417
|
-
e.lineTo(
|
|
2775
|
+
for (let h = 0; h < this.sparklineData.length; h++) {
|
|
2776
|
+
const c = h * a, m = n - (this.sparklineData[h] - s) / o * (n - 3) - 1.5;
|
|
2777
|
+
e.lineTo(c, m);
|
|
2418
2778
|
}
|
|
2419
|
-
e.lineTo(t, n), e.closePath(), e.fillStyle = "rgba(56, 189, 248, 0.
|
|
2420
|
-
for (let
|
|
2421
|
-
const
|
|
2422
|
-
|
|
2779
|
+
e.lineTo(t, n), e.closePath(), e.fillStyle = "rgba(56, 189, 248, 0.2)", e.fill(), e.beginPath();
|
|
2780
|
+
for (let h = 0; h < this.sparklineData.length; h++) {
|
|
2781
|
+
const c = h * a, m = n - (this.sparklineData[h] - s) / o * (n - 3) - 1.5;
|
|
2782
|
+
h === 0 ? e.moveTo(c, m) : e.lineTo(c, m);
|
|
2423
2783
|
}
|
|
2424
|
-
e.strokeStyle = "#38bdf8", e.lineWidth = 1.
|
|
2784
|
+
e.strokeStyle = "#38bdf8", e.lineWidth = 1.3, e.stroke();
|
|
2425
2785
|
}
|
|
2426
2786
|
clampToViewport() {
|
|
2427
2787
|
var e, t;
|
|
@@ -2430,6 +2790,9 @@ const S = class S extends T {
|
|
|
2430
2790
|
toggleCollapse() {
|
|
2431
2791
|
return this.setCollapsed(!this.isPanelCollapsed);
|
|
2432
2792
|
}
|
|
2793
|
+
setHotkey(e) {
|
|
2794
|
+
return this.hotkeyInstance ? this.hotkeyInstance.setHotkey(e) : this.hotkeyInstance = new W(e, () => this.toggle()), this;
|
|
2795
|
+
}
|
|
2433
2796
|
setCollapsed(e) {
|
|
2434
2797
|
return this.isPanelCollapsed = e, this.isPanelCollapsed ? (this.panelEl.classList.add("relly-collapsed"), this.collapseBtn.textContent = "+", this.bindingEngine.pause()) : (this.panelEl.classList.remove("relly-collapsed"), this.collapseBtn.textContent = "_", this.bindingEngine.resume()), this.autoSave && this.queueAutoSave(), this;
|
|
2435
2798
|
}
|
|
@@ -2520,10 +2883,10 @@ const S = class S extends T {
|
|
|
2520
2883
|
typeof window < "u" && (window.removeEventListener("resize", this.onResizeBound), this.sparklineAnimId && cancelAnimationFrame(this.sparklineAnimId)), this.draggableInstance && this.draggableInstance.destroy(), this.resizableInstance && this.resizableInstance.destroy(), this.hotkeyInstance && this.hotkeyInstance.destroy(), this.searchBarInstance && this.searchBarInstance.destroy(), this.tabsManagerInstance && this.tabsManagerInstance.destroy(), this.importModalInstance && this.importModalInstance.destroy(), this.toastManager.destroy(), this.contextMenuManager.destroy(), this.bindingEngine.destroy(), this.destroyChildren(), this.hostEl ? this.hostEl.remove() : this.panelEl.remove();
|
|
2521
2884
|
}
|
|
2522
2885
|
};
|
|
2523
|
-
|
|
2886
|
+
l(S, "version", "1.1.0");
|
|
2524
2887
|
let k = S;
|
|
2525
2888
|
Object.assign(k, {
|
|
2526
|
-
Checkbox:
|
|
2889
|
+
Checkbox: I,
|
|
2527
2890
|
Slider: V,
|
|
2528
2891
|
Button: A,
|
|
2529
2892
|
Select: z,
|
|
@@ -2532,78 +2895,88 @@ Object.assign(k, {
|
|
|
2532
2895
|
ColorPicker: R,
|
|
2533
2896
|
Point2D: P,
|
|
2534
2897
|
Point3D: D,
|
|
2535
|
-
RangeSlider:
|
|
2536
|
-
Segmented:
|
|
2898
|
+
RangeSlider: j,
|
|
2899
|
+
Segmented: H,
|
|
2537
2900
|
StatusIndicator: F,
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2901
|
+
Switch: q,
|
|
2902
|
+
ButtonGroup: J,
|
|
2903
|
+
TextInput: $,
|
|
2904
|
+
Progress: U,
|
|
2905
|
+
Separator: Y,
|
|
2906
|
+
Section: G,
|
|
2907
|
+
Row: _,
|
|
2908
|
+
Tab: fe,
|
|
2909
|
+
TabsManager: ye,
|
|
2910
|
+
BaseComponent: E,
|
|
2911
|
+
BindingEngine: Q,
|
|
2912
|
+
PresetManager: Z,
|
|
2913
|
+
ThemeManager: le,
|
|
2914
|
+
DARK_THEME: K,
|
|
2915
|
+
LIGHT_THEME: O,
|
|
2916
|
+
CYBERPUNK_THEME: ee,
|
|
2917
|
+
NORD_THEME: te,
|
|
2918
|
+
DRACULA_THEME: ie,
|
|
2919
|
+
TOKYO_NIGHT_THEME: ne,
|
|
2920
|
+
MATRIX_THEME: se,
|
|
2921
|
+
SYNTHWAVE_THEME: re,
|
|
2922
|
+
Draggable: ae,
|
|
2923
|
+
Resizable: oe,
|
|
2924
|
+
HotkeyManager: W,
|
|
2925
|
+
SearchBar: he,
|
|
2926
|
+
SoundEngine: ce,
|
|
2927
|
+
ImportModal: de,
|
|
2928
|
+
ToastManager: ue,
|
|
2929
|
+
ContextMenuManager: me,
|
|
2930
|
+
SchemaLoader: pe,
|
|
2563
2931
|
ContainerHelper: T,
|
|
2564
2932
|
RellyUI: k
|
|
2565
2933
|
});
|
|
2566
2934
|
typeof window < "u" && (window.RellyUI = k);
|
|
2567
2935
|
export {
|
|
2568
|
-
|
|
2569
|
-
|
|
2936
|
+
E as BaseComponent,
|
|
2937
|
+
Q as BindingEngine,
|
|
2570
2938
|
A as Button,
|
|
2571
|
-
J as
|
|
2572
|
-
|
|
2939
|
+
J as ButtonGroup,
|
|
2940
|
+
ee as CYBERPUNK_THEME,
|
|
2941
|
+
I as Checkbox,
|
|
2573
2942
|
R as ColorPicker,
|
|
2574
2943
|
T as ContainerHelper,
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2944
|
+
me as ContextMenuManager,
|
|
2945
|
+
K as DARK_THEME,
|
|
2946
|
+
ie as DRACULA_THEME,
|
|
2947
|
+
ae as Draggable,
|
|
2579
2948
|
B as DynamicLabel,
|
|
2580
2949
|
N as Graph,
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2950
|
+
W as HotkeyManager,
|
|
2951
|
+
de as ImportModal,
|
|
2952
|
+
O as LIGHT_THEME,
|
|
2953
|
+
se as MATRIX_THEME,
|
|
2954
|
+
te as NORD_THEME,
|
|
2586
2955
|
P as Point2D,
|
|
2587
2956
|
D as Point3D,
|
|
2588
|
-
|
|
2589
|
-
|
|
2957
|
+
Z as PresetManager,
|
|
2958
|
+
U as Progress,
|
|
2959
|
+
j as RangeSlider,
|
|
2590
2960
|
k as RellyUI,
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2961
|
+
oe as Resizable,
|
|
2962
|
+
_ as Row,
|
|
2963
|
+
re as SYNTHWAVE_THEME,
|
|
2964
|
+
pe as SchemaLoader,
|
|
2965
|
+
he as SearchBar,
|
|
2966
|
+
G as Section,
|
|
2967
|
+
H as Segmented,
|
|
2598
2968
|
z as Select,
|
|
2969
|
+
Y as Separator,
|
|
2599
2970
|
V as Slider,
|
|
2600
|
-
|
|
2971
|
+
ce as SoundEngine,
|
|
2601
2972
|
F as StatusIndicator,
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2973
|
+
q as Switch,
|
|
2974
|
+
ne as TOKYO_NIGHT_THEME,
|
|
2975
|
+
fe as Tab,
|
|
2976
|
+
ye as TabsManager,
|
|
2977
|
+
$ as TextInput,
|
|
2978
|
+
le as ThemeManager,
|
|
2979
|
+
ue as ToastManager,
|
|
2607
2980
|
k as default
|
|
2608
2981
|
};
|
|
2609
2982
|
//# sourceMappingURL=relly-ui.es.js.map
|