@camstack/addon-benchmark 1.2.119 → 1.2.120
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/dist/{MotionZonesSettings-Bx-G7x1P.mjs → MotionZonesSettings-Cm_Dvpz5.mjs} +129 -147
- package/dist/{SceneMonitorEditor-BB9ER6u6.mjs → SceneMonitorEditor-CteqhKoH.mjs} +135 -135
- package/dist/_stub.js +4655 -4189
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_benchmark_page-CCHt4d63.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_benchmark_page-Djy8wQOo.mjs} +4 -4
- package/dist/addon-benchmark.css +1 -1
- package/dist/grid-2x2-DAxEj9uR.mjs +21 -0
- package/dist/{hostInit-DUsS2QiP.mjs → hostInit-DImjZQfo.mjs} +3 -3
- package/dist/remoteEntry.js +1 -1
- package/dist/{use-device-snapshot-DWVeIvA3.mjs → scene-monitor-copy-Dm15cpj1.mjs} +45 -45
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_benchmark_page__remoteEntry_js-7mYMB1_q.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_benchmark_page__remoteEntry_js-DnKwDDwd.mjs} +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { c as e, g as t, h as n, p as r, u as i, x as a } from "./_virtual_mf___mfe_internal__addon_benchmark_page__loadShare__react__loadShare__.js-GeuxDuzQ.mjs";
|
|
2
2
|
import { a as o, c as s, n as c, o as l, r as u, t as d } from "./responsive-CIPaE71n.mjs";
|
|
3
|
-
import { a as f, d as p, f as ee, i as te, l as m, n as h, o as g, r as ne, s as
|
|
4
|
-
import { t as
|
|
5
|
-
import { n as
|
|
6
|
-
import { MaskShapeCanvas as
|
|
7
|
-
var
|
|
3
|
+
import { a as f, d as p, f as ee, i as te, l as m, n as h, o as g, r as ne, s as re, t as ie, u as _ } from "./scene-monitor-copy-Dm15cpj1.mjs";
|
|
4
|
+
import { t as v } from "./trash-2-D24swekJ.mjs";
|
|
5
|
+
import { n as y, r as b, t as x } from "./_virtual_mf___mfe_internal__addon_benchmark_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-SOU_VnTj.mjs";
|
|
6
|
+
import { MaskShapeCanvas as S } from "./MaskShapeCanvas-BDvrLf-K.mjs";
|
|
7
|
+
var C = s("settings-2", [
|
|
8
8
|
["path", {
|
|
9
9
|
d: "M14 17H5",
|
|
10
10
|
key: "gfn3mx"
|
|
@@ -54,37 +54,37 @@ function D(e) {
|
|
|
54
54
|
var O = "rounded border border-danger/50 bg-danger/10 px-1 py-0.5 text-[10px] font-medium text-danger hover:bg-danger/20 disabled:opacity-40 transition-colors";
|
|
55
55
|
function k({ monitor: e, disabled: n, onDelete: r }) {
|
|
56
56
|
let i = E(e), a = D(e), [o, s] = t(null);
|
|
57
|
-
return i.length === 0 ? /* @__PURE__ */
|
|
57
|
+
return i.length === 0 ? /* @__PURE__ */ y("p", {
|
|
58
58
|
className: `${d} leading-relaxed`,
|
|
59
59
|
children: "No photographs captured yet. Press “Capture daylight” to take the one this scene will judge everything against."
|
|
60
|
-
}) : /* @__PURE__ */
|
|
60
|
+
}) : /* @__PURE__ */ y("div", {
|
|
61
61
|
className: "flex flex-col gap-2",
|
|
62
|
-
children: i.map((e) => /* @__PURE__ */
|
|
62
|
+
children: i.map((e) => /* @__PURE__ */ b("div", {
|
|
63
63
|
className: "flex flex-col gap-1",
|
|
64
|
-
children: [/* @__PURE__ */
|
|
64
|
+
children: [/* @__PURE__ */ b("p", {
|
|
65
65
|
className: "text-[10px] font-semibold uppercase tracking-wide text-foreground-subtle",
|
|
66
66
|
children: [
|
|
67
|
-
|
|
67
|
+
g(e.condition),
|
|
68
68
|
" · ",
|
|
69
69
|
e.tiles.length
|
|
70
70
|
]
|
|
71
|
-
}), /* @__PURE__ */
|
|
71
|
+
}), /* @__PURE__ */ y("ul", {
|
|
72
72
|
className: "flex flex-wrap gap-1.5",
|
|
73
73
|
children: e.tiles.map((t) => {
|
|
74
74
|
let i = `${t.stateId}:${String(t.index)}`, c = a === 1, l = o === i;
|
|
75
|
-
return /* @__PURE__ */
|
|
75
|
+
return /* @__PURE__ */ b("li", {
|
|
76
76
|
className: "flex w-24 flex-col gap-1 rounded-md border border-border p-1",
|
|
77
77
|
children: [
|
|
78
|
-
/* @__PURE__ */
|
|
79
|
-
/* @__PURE__ */
|
|
78
|
+
/* @__PURE__ */ y(A, { reference: t.reference }),
|
|
79
|
+
/* @__PURE__ */ y("span", {
|
|
80
80
|
className: `${d} tabular-nums`,
|
|
81
81
|
children: j(t.reference.capturedAt)
|
|
82
82
|
}),
|
|
83
|
-
/* @__PURE__ */
|
|
83
|
+
/* @__PURE__ */ b("button", {
|
|
84
84
|
type: "button",
|
|
85
85
|
className: O,
|
|
86
86
|
disabled: n,
|
|
87
|
-
"aria-label": `Delete the ${
|
|
87
|
+
"aria-label": `Delete the ${g(e.condition).toLowerCase()} photograph from ${j(t.reference.capturedAt)}`,
|
|
88
88
|
onClick: () => {
|
|
89
89
|
if (c && !l) {
|
|
90
90
|
s(i);
|
|
@@ -95,9 +95,9 @@ function k({ monitor: e, disabled: n, onDelete: r }) {
|
|
|
95
95
|
index: t.index
|
|
96
96
|
});
|
|
97
97
|
},
|
|
98
|
-
children: [/* @__PURE__ */
|
|
98
|
+
children: [/* @__PURE__ */ y(v, { className: "mr-1 inline h-3 w-3" }), l ? "Confirm" : "Delete"]
|
|
99
99
|
}),
|
|
100
|
-
l && /* @__PURE__ */
|
|
100
|
+
l && /* @__PURE__ */ y("p", {
|
|
101
101
|
className: "text-[10px] leading-snug text-warning",
|
|
102
102
|
children: "This is the only photograph this scene has. Delete it and the scene no longer knows what normal looks like — it stops judging until you capture again."
|
|
103
103
|
})
|
|
@@ -110,14 +110,14 @@ function k({ monitor: e, disabled: n, onDelete: r }) {
|
|
|
110
110
|
}
|
|
111
111
|
function A({ reference: e }) {
|
|
112
112
|
let [n, r] = t(!1), i = e.thumbnailMediaId;
|
|
113
|
-
return i === void 0 || n ? /* @__PURE__ */
|
|
113
|
+
return i === void 0 || n ? /* @__PURE__ */ b("div", {
|
|
114
114
|
className: "flex h-16 w-full flex-col items-center justify-center gap-0.5 rounded bg-surface text-foreground-subtle",
|
|
115
115
|
title: "The picture for this reference is no longer stored. The reference itself is intact and still being scored against.",
|
|
116
|
-
children: [/* @__PURE__ */
|
|
116
|
+
children: [/* @__PURE__ */ y(p, { className: "h-4 w-4" }), /* @__PURE__ */ y("span", {
|
|
117
117
|
className: "text-[9px]",
|
|
118
118
|
children: "no picture"
|
|
119
119
|
})]
|
|
120
|
-
}) : /* @__PURE__ */
|
|
120
|
+
}) : /* @__PURE__ */ y("img", {
|
|
121
121
|
src: T(i),
|
|
122
122
|
alt: "",
|
|
123
123
|
loading: "lazy",
|
|
@@ -169,22 +169,22 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
169
169
|
...e.check,
|
|
170
170
|
hysteresisCount: t.hysteresisCount ?? e.check.hysteresisCount
|
|
171
171
|
}, f = e.confirm?.enabled === !0, p = e.check.mode === "similarity" ? e.check.threshold : null;
|
|
172
|
-
return /* @__PURE__ */
|
|
172
|
+
return /* @__PURE__ */ b("div", {
|
|
173
173
|
className: "flex flex-col gap-2",
|
|
174
174
|
children: [
|
|
175
|
-
/* @__PURE__ */
|
|
175
|
+
/* @__PURE__ */ b("div", {
|
|
176
176
|
className: P,
|
|
177
177
|
children: [
|
|
178
|
-
/* @__PURE__ */
|
|
178
|
+
/* @__PURE__ */ y("p", {
|
|
179
179
|
className: F,
|
|
180
180
|
children: "What it watches"
|
|
181
181
|
}),
|
|
182
|
-
/* @__PURE__ */
|
|
182
|
+
/* @__PURE__ */ b("label", {
|
|
183
183
|
className: "flex flex-col gap-1",
|
|
184
|
-
children: [/* @__PURE__ */
|
|
184
|
+
children: [/* @__PURE__ */ y("span", {
|
|
185
185
|
className: N,
|
|
186
186
|
children: "Name"
|
|
187
|
-
}), /* @__PURE__ */
|
|
187
|
+
}), /* @__PURE__ */ y("input", {
|
|
188
188
|
type: "text",
|
|
189
189
|
value: a.label,
|
|
190
190
|
disabled: n,
|
|
@@ -200,28 +200,28 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
200
200
|
}
|
|
201
201
|
})]
|
|
202
202
|
}),
|
|
203
|
-
/* @__PURE__ */
|
|
203
|
+
/* @__PURE__ */ b("label", {
|
|
204
204
|
className: "flex items-center gap-2",
|
|
205
|
-
children: [/* @__PURE__ */
|
|
205
|
+
children: [/* @__PURE__ */ y("input", {
|
|
206
206
|
type: "checkbox",
|
|
207
207
|
checked: e.enabled,
|
|
208
208
|
disabled: n,
|
|
209
209
|
onChange: (e) => l({ enabled: e.target.checked })
|
|
210
|
-
}), /* @__PURE__ */
|
|
210
|
+
}), /* @__PURE__ */ y("span", {
|
|
211
211
|
className: N,
|
|
212
212
|
children: "Watching"
|
|
213
213
|
})]
|
|
214
214
|
}),
|
|
215
|
-
/* @__PURE__ */
|
|
215
|
+
/* @__PURE__ */ y("p", {
|
|
216
216
|
className: d,
|
|
217
217
|
children: "Turned off, the scene keeps its region, its references and its flag — it simply stops checking. Nothing is lost by pausing one for a while."
|
|
218
218
|
}),
|
|
219
|
-
/* @__PURE__ */
|
|
219
|
+
/* @__PURE__ */ b("label", {
|
|
220
220
|
className: "flex flex-col gap-1",
|
|
221
|
-
children: [/* @__PURE__ */
|
|
221
|
+
children: [/* @__PURE__ */ y("span", {
|
|
222
222
|
className: N,
|
|
223
223
|
children: "When to look"
|
|
224
|
-
}), /* @__PURE__ */
|
|
224
|
+
}), /* @__PURE__ */ b("select", {
|
|
225
225
|
value: e.triggerMode,
|
|
226
226
|
disabled: n,
|
|
227
227
|
className: M,
|
|
@@ -230,31 +230,31 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
230
230
|
(t === "periodic" || t === "on-motion" || t === "both") && l({ triggerMode: t });
|
|
231
231
|
},
|
|
232
232
|
children: [
|
|
233
|
-
/* @__PURE__ */
|
|
233
|
+
/* @__PURE__ */ y("option", {
|
|
234
234
|
value: "both",
|
|
235
235
|
children: "On the clock and after motion settles"
|
|
236
236
|
}),
|
|
237
|
-
/* @__PURE__ */
|
|
237
|
+
/* @__PURE__ */ y("option", {
|
|
238
238
|
value: "periodic",
|
|
239
239
|
children: "On the clock only"
|
|
240
240
|
}),
|
|
241
|
-
/* @__PURE__ */
|
|
241
|
+
/* @__PURE__ */ y("option", {
|
|
242
242
|
value: "on-motion",
|
|
243
243
|
children: "After motion settles only"
|
|
244
244
|
})
|
|
245
245
|
]
|
|
246
246
|
})]
|
|
247
247
|
}),
|
|
248
|
-
/* @__PURE__ */
|
|
248
|
+
/* @__PURE__ */ y("p", {
|
|
249
249
|
className: d,
|
|
250
250
|
children: R[e.triggerMode]
|
|
251
251
|
}),
|
|
252
|
-
/* @__PURE__ */
|
|
252
|
+
/* @__PURE__ */ b("label", {
|
|
253
253
|
className: "flex flex-col gap-1",
|
|
254
|
-
children: [/* @__PURE__ */
|
|
254
|
+
children: [/* @__PURE__ */ y("span", {
|
|
255
255
|
className: N,
|
|
256
256
|
children: "Check every (seconds)"
|
|
257
|
-
}), /* @__PURE__ */
|
|
257
|
+
}), /* @__PURE__ */ y("input", {
|
|
258
258
|
type: "number",
|
|
259
259
|
min: I,
|
|
260
260
|
max: L,
|
|
@@ -272,28 +272,28 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
272
272
|
}
|
|
273
273
|
})]
|
|
274
274
|
}),
|
|
275
|
-
/* @__PURE__ */
|
|
275
|
+
/* @__PURE__ */ y("p", {
|
|
276
276
|
className: d,
|
|
277
277
|
children: "60 s suits “is the bin still out”. Every check costs one photograph and one encode, so going below about 30 s buys latency you almost never need and multiplies the cost by the number of scenes you own."
|
|
278
278
|
})
|
|
279
279
|
]
|
|
280
280
|
}),
|
|
281
|
-
/* @__PURE__ */
|
|
281
|
+
/* @__PURE__ */ b("div", {
|
|
282
282
|
className: P,
|
|
283
283
|
children: [
|
|
284
|
-
/* @__PURE__ */
|
|
284
|
+
/* @__PURE__ */ y("p", {
|
|
285
285
|
className: F,
|
|
286
286
|
children: "How sure it has to be"
|
|
287
287
|
}),
|
|
288
|
-
e.check.mode === "similarity" && /* @__PURE__ */ x
|
|
288
|
+
e.check.mode === "similarity" && /* @__PURE__ */ b(x, { children: [/* @__PURE__ */ b("label", {
|
|
289
289
|
className: "flex flex-col gap-1",
|
|
290
|
-
children: [/* @__PURE__ */
|
|
290
|
+
children: [/* @__PURE__ */ b("span", {
|
|
291
291
|
className: N,
|
|
292
|
-
children: ["Match threshold — ", /* @__PURE__ */
|
|
292
|
+
children: ["Match threshold — ", /* @__PURE__ */ y("span", {
|
|
293
293
|
className: "tabular-nums",
|
|
294
294
|
children: a.threshold.toFixed(2)
|
|
295
295
|
})]
|
|
296
|
-
}), /* @__PURE__ */
|
|
296
|
+
}), /* @__PURE__ */ y("input", {
|
|
297
297
|
type: "range",
|
|
298
298
|
min: .3,
|
|
299
299
|
max: .99,
|
|
@@ -312,16 +312,16 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
312
312
|
a.threshold === p ? c(!1) : l({ check: u({ threshold: a.threshold }) });
|
|
313
313
|
}
|
|
314
314
|
})]
|
|
315
|
-
}), /* @__PURE__ */
|
|
315
|
+
}), /* @__PURE__ */ y("p", {
|
|
316
316
|
className: "text-[10px] text-foreground-subtle",
|
|
317
317
|
children: "How closely the region still has to resemble the photograph to count as unchanged. Higher means fussier: at 0.95 a passing cloud can read as a change; at 0.60 the bin can be taken and the scene will shrug. 0.80 is a sensible start — if it cries wolf, lower it; if it misses the thing you care about, raise it."
|
|
318
318
|
})] }),
|
|
319
|
-
/* @__PURE__ */
|
|
319
|
+
/* @__PURE__ */ b("label", {
|
|
320
320
|
className: "flex flex-col gap-1",
|
|
321
|
-
children: [/* @__PURE__ */
|
|
321
|
+
children: [/* @__PURE__ */ y("span", {
|
|
322
322
|
className: N,
|
|
323
323
|
children: "Agreeing checks before it changes its mind"
|
|
324
|
-
}), /* @__PURE__ */
|
|
324
|
+
}), /* @__PURE__ */ y("input", {
|
|
325
325
|
type: "number",
|
|
326
326
|
min: 1,
|
|
327
327
|
max: 10,
|
|
@@ -339,16 +339,16 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
339
339
|
}
|
|
340
340
|
})]
|
|
341
341
|
}),
|
|
342
|
-
/* @__PURE__ */
|
|
342
|
+
/* @__PURE__ */ y("p", {
|
|
343
343
|
className: d,
|
|
344
344
|
children: "One bad photograph must never be able to flip a scene. 3 agreeing checks at 60 s is about four minutes of latency and is what makes the answer trustworthy — leaving a state costs exactly the same as entering one."
|
|
345
345
|
}),
|
|
346
|
-
/* @__PURE__ */
|
|
346
|
+
/* @__PURE__ */ b("label", {
|
|
347
347
|
className: "flex flex-col gap-1",
|
|
348
|
-
children: [/* @__PURE__ */
|
|
348
|
+
children: [/* @__PURE__ */ y("span", {
|
|
349
349
|
className: N,
|
|
350
350
|
children: "Quiet for (seconds) before a check counts"
|
|
351
|
-
}), /* @__PURE__ */
|
|
351
|
+
}), /* @__PURE__ */ y("input", {
|
|
352
352
|
type: "number",
|
|
353
353
|
min: 0,
|
|
354
354
|
max: 3600,
|
|
@@ -366,16 +366,16 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
366
366
|
}
|
|
367
367
|
})]
|
|
368
368
|
}),
|
|
369
|
-
/* @__PURE__ */
|
|
369
|
+
/* @__PURE__ */ y("p", {
|
|
370
370
|
className: d,
|
|
371
371
|
children: "A check taken while something is moving is a photograph of the van parked in front of the bin, so it is discarded rather than merely delayed. 0 disables the gate."
|
|
372
372
|
}),
|
|
373
|
-
/* @__PURE__ */
|
|
373
|
+
/* @__PURE__ */ b("label", {
|
|
374
374
|
className: "flex flex-col gap-1",
|
|
375
|
-
children: [/* @__PURE__ */
|
|
375
|
+
children: [/* @__PURE__ */ y("span", {
|
|
376
376
|
className: N,
|
|
377
377
|
children: "Minimum gap between counted checks (seconds)"
|
|
378
|
-
}), /* @__PURE__ */
|
|
378
|
+
}), /* @__PURE__ */ y("input", {
|
|
379
379
|
type: "number",
|
|
380
380
|
min: 0,
|
|
381
381
|
max: 3600,
|
|
@@ -393,25 +393,25 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
393
393
|
}
|
|
394
394
|
})]
|
|
395
395
|
}),
|
|
396
|
-
/* @__PURE__ */
|
|
396
|
+
/* @__PURE__ */ y("p", {
|
|
397
397
|
className: d,
|
|
398
398
|
children: "Spreads the agreeing checks over real time instead of letting three adjacent polls inside one long occlusion be mistaken for three independent opinions."
|
|
399
399
|
})
|
|
400
400
|
]
|
|
401
401
|
}),
|
|
402
|
-
/* @__PURE__ */
|
|
402
|
+
/* @__PURE__ */ b("div", {
|
|
403
403
|
className: P,
|
|
404
404
|
children: [
|
|
405
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ y("p", {
|
|
406
406
|
className: F,
|
|
407
407
|
children: "Lighting"
|
|
408
408
|
}),
|
|
409
|
-
/* @__PURE__ */
|
|
409
|
+
/* @__PURE__ */ b("label", {
|
|
410
410
|
className: "flex flex-col gap-1",
|
|
411
|
-
children: [/* @__PURE__ */
|
|
411
|
+
children: [/* @__PURE__ */ y("span", {
|
|
412
412
|
className: N,
|
|
413
413
|
children: "When a light has no reference of its own"
|
|
414
|
-
}), /* @__PURE__ */
|
|
414
|
+
}), /* @__PURE__ */ b("select", {
|
|
415
415
|
value: e.onUncoveredCondition,
|
|
416
416
|
disabled: n,
|
|
417
417
|
className: M,
|
|
@@ -419,34 +419,34 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
419
419
|
let t = e.target.value;
|
|
420
420
|
(t === "skip" || t === "judge-anyway") && l({ onUncoveredCondition: t });
|
|
421
421
|
},
|
|
422
|
-
children: [/* @__PURE__ */
|
|
422
|
+
children: [/* @__PURE__ */ y("option", {
|
|
423
423
|
value: "skip",
|
|
424
424
|
children: "Skip the check (recommended)"
|
|
425
|
-
}), /* @__PURE__ */
|
|
425
|
+
}), /* @__PURE__ */ y("option", {
|
|
426
426
|
value: "judge-anyway",
|
|
427
427
|
children: "Judge against the other light anyway"
|
|
428
428
|
})]
|
|
429
429
|
})]
|
|
430
430
|
}),
|
|
431
|
-
/* @__PURE__ */
|
|
431
|
+
/* @__PURE__ */ y("p", {
|
|
432
432
|
className: d,
|
|
433
433
|
children: z[e.onUncoveredCondition]
|
|
434
434
|
})
|
|
435
435
|
]
|
|
436
436
|
}),
|
|
437
|
-
/* @__PURE__ */
|
|
437
|
+
/* @__PURE__ */ b("div", {
|
|
438
438
|
className: P,
|
|
439
439
|
children: [
|
|
440
|
-
/* @__PURE__ */
|
|
440
|
+
/* @__PURE__ */ y("p", {
|
|
441
441
|
className: F,
|
|
442
442
|
children: "What you get told"
|
|
443
443
|
}),
|
|
444
|
-
/* @__PURE__ */
|
|
444
|
+
/* @__PURE__ */ b("label", {
|
|
445
445
|
className: "flex flex-col gap-1",
|
|
446
|
-
children: [/* @__PURE__ */
|
|
446
|
+
children: [/* @__PURE__ */ y("span", {
|
|
447
447
|
className: N,
|
|
448
448
|
children: "Notifications follow"
|
|
449
|
-
}), /* @__PURE__ */
|
|
449
|
+
}), /* @__PURE__ */ b("select", {
|
|
450
450
|
value: e.emit,
|
|
451
451
|
disabled: n,
|
|
452
452
|
className: M,
|
|
@@ -454,47 +454,47 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
454
454
|
let t = e.target.value;
|
|
455
455
|
(t === "latched" || t === "live") && l({ emit: t });
|
|
456
456
|
},
|
|
457
|
-
children: [/* @__PURE__ */
|
|
457
|
+
children: [/* @__PURE__ */ y("option", {
|
|
458
458
|
value: "latched",
|
|
459
459
|
children: "The flag — told once, still visible at breakfast"
|
|
460
|
-
}), /* @__PURE__ */
|
|
460
|
+
}), /* @__PURE__ */ y("option", {
|
|
461
461
|
value: "live",
|
|
462
462
|
children: "The live state — follows the region as it changes"
|
|
463
463
|
})]
|
|
464
464
|
})]
|
|
465
465
|
}),
|
|
466
|
-
/* @__PURE__ */
|
|
466
|
+
/* @__PURE__ */ y("p", {
|
|
467
467
|
className: d,
|
|
468
468
|
children: "“Is the bin gone” is a flag: you want to be told once and still see it later. “Is the gate open” is a live state."
|
|
469
469
|
}),
|
|
470
|
-
/* @__PURE__ */
|
|
470
|
+
/* @__PURE__ */ b("label", {
|
|
471
471
|
className: "flex items-center gap-2",
|
|
472
|
-
children: [/* @__PURE__ */
|
|
472
|
+
children: [/* @__PURE__ */ y("input", {
|
|
473
473
|
type: "checkbox",
|
|
474
474
|
checked: e.autoRestore,
|
|
475
475
|
disabled: n,
|
|
476
476
|
onChange: (e) => l({ autoRestore: e.target.checked })
|
|
477
|
-
}), /* @__PURE__ */
|
|
477
|
+
}), /* @__PURE__ */ y("span", {
|
|
478
478
|
className: N,
|
|
479
479
|
children: "Clear the flag by itself when things look normal again"
|
|
480
480
|
})]
|
|
481
481
|
}),
|
|
482
|
-
/* @__PURE__ */
|
|
482
|
+
/* @__PURE__ */ y("p", {
|
|
483
483
|
className: d,
|
|
484
484
|
children: "Off by default, so an alarm never silently clears itself. The “back to normal” moment is recorded either way, so an automation can still react to it."
|
|
485
485
|
})
|
|
486
486
|
]
|
|
487
487
|
}),
|
|
488
|
-
/* @__PURE__ */
|
|
488
|
+
/* @__PURE__ */ b("div", {
|
|
489
489
|
className: P,
|
|
490
490
|
children: [
|
|
491
|
-
/* @__PURE__ */
|
|
491
|
+
/* @__PURE__ */ y("p", {
|
|
492
492
|
className: F,
|
|
493
493
|
children: "AI double-check"
|
|
494
494
|
}),
|
|
495
|
-
/* @__PURE__ */
|
|
495
|
+
/* @__PURE__ */ b("label", {
|
|
496
496
|
className: "flex items-center gap-2",
|
|
497
|
-
children: [/* @__PURE__ */
|
|
497
|
+
children: [/* @__PURE__ */ y("input", {
|
|
498
498
|
type: "checkbox",
|
|
499
499
|
checked: f,
|
|
500
500
|
disabled: n || a.confirmPrompt.trim().length === 0,
|
|
@@ -502,17 +502,17 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
502
502
|
...U(a.confirmPrompt.trim()),
|
|
503
503
|
enabled: !0
|
|
504
504
|
} } : { confirm: null })
|
|
505
|
-
}), /* @__PURE__ */
|
|
505
|
+
}), /* @__PURE__ */ y("span", {
|
|
506
506
|
className: N,
|
|
507
507
|
children: "Ask a vision model before changing the answer"
|
|
508
508
|
})]
|
|
509
509
|
}),
|
|
510
|
-
/* @__PURE__ */
|
|
510
|
+
/* @__PURE__ */ b("label", {
|
|
511
511
|
className: "flex flex-col gap-1",
|
|
512
|
-
children: [/* @__PURE__ */
|
|
512
|
+
children: [/* @__PURE__ */ y("span", {
|
|
513
513
|
className: N,
|
|
514
514
|
children: "The question to ask"
|
|
515
|
-
}), /* @__PURE__ */
|
|
515
|
+
}), /* @__PURE__ */ y("input", {
|
|
516
516
|
type: "text",
|
|
517
517
|
value: a.confirmPrompt,
|
|
518
518
|
placeholder: "e.g. Is the wheelie bin still there?",
|
|
@@ -532,11 +532,11 @@ function V({ monitor: e, disabled: n, onPatch: r }) {
|
|
|
532
532
|
}
|
|
533
533
|
})]
|
|
534
534
|
}),
|
|
535
|
-
/* @__PURE__ */
|
|
535
|
+
/* @__PURE__ */ b("p", {
|
|
536
536
|
className: d,
|
|
537
537
|
children: [
|
|
538
538
|
"The model is asked ",
|
|
539
|
-
/* @__PURE__ */
|
|
539
|
+
/* @__PURE__ */ y("strong", { children: "only" }),
|
|
540
540
|
" when the region has already changed enough to flip the answer — roughly twice a week for a bin, not once a minute. It reasons about the object rather than the pixels, so rain, shadows and a repositioned bin stop counting as the thing being taken. If it cannot be reached, the change is held rather than announced."
|
|
541
541
|
]
|
|
542
542
|
})
|
|
@@ -635,19 +635,19 @@ function X({ deviceId: a }) {
|
|
|
635
635
|
H,
|
|
636
636
|
$
|
|
637
637
|
]);
|
|
638
|
-
return s ? /* @__PURE__ */
|
|
638
|
+
return s ? /* @__PURE__ */ y("div", {
|
|
639
639
|
className: "flex flex-col gap-3",
|
|
640
|
-
children: E ? /* @__PURE__ */
|
|
640
|
+
children: E ? /* @__PURE__ */ y("p", {
|
|
641
641
|
className: `${d} leading-relaxed`,
|
|
642
642
|
children: "Scene monitoring is not available for this camera."
|
|
643
|
-
}) : /* @__PURE__ */ x
|
|
644
|
-
/* @__PURE__ */
|
|
643
|
+
}) : /* @__PURE__ */ b(x, { children: [
|
|
644
|
+
/* @__PURE__ */ y("p", {
|
|
645
645
|
className: `${d} leading-relaxed`,
|
|
646
646
|
children: "A scene watches one region of this camera and tells you when it stops looking like the picture you captured. Draw a box around the thing you care about — a wheelie bin, a gate, a parking space — then capture what “normal” looks like. Daylight is enough to start: the night reference is optional, and without it the scene simply sits the infrared hours out instead of reporting a problem."
|
|
647
647
|
}),
|
|
648
|
-
/* @__PURE__ */
|
|
648
|
+
/* @__PURE__ */ y("div", {
|
|
649
649
|
className: "relative overflow-hidden rounded-md border border-border",
|
|
650
|
-
children: /* @__PURE__ */
|
|
650
|
+
children: /* @__PURE__ */ y(S, {
|
|
651
651
|
items: oe,
|
|
652
652
|
supportedShapes: ["rect"],
|
|
653
653
|
selectedId: N ?? (z === null ? null : "__draft__"),
|
|
@@ -655,7 +655,7 @@ function X({ deviceId: a }) {
|
|
|
655
655
|
onShapeChange: se,
|
|
656
656
|
onDrawComplete: ce,
|
|
657
657
|
drawingKind: L && z === null ? "rect" : null,
|
|
658
|
-
backdrop: m.src === null ? null : /* @__PURE__ */
|
|
658
|
+
backdrop: m.src === null ? null : /* @__PURE__ */ y("img", {
|
|
659
659
|
src: m.src,
|
|
660
660
|
alt: "",
|
|
661
661
|
className: "h-full w-full object-contain",
|
|
@@ -663,9 +663,9 @@ function X({ deviceId: a }) {
|
|
|
663
663
|
})
|
|
664
664
|
})
|
|
665
665
|
}),
|
|
666
|
-
/* @__PURE__ */
|
|
666
|
+
/* @__PURE__ */ b("div", {
|
|
667
667
|
className: "flex flex-wrap items-center gap-2",
|
|
668
|
-
children: [/* @__PURE__ */
|
|
668
|
+
children: [/* @__PURE__ */ y("button", {
|
|
669
669
|
type: "button",
|
|
670
670
|
className: L ? G : W,
|
|
671
671
|
"aria-pressed": L,
|
|
@@ -674,7 +674,7 @@ function X({ deviceId: a }) {
|
|
|
674
674
|
},
|
|
675
675
|
disabled: O !== null,
|
|
676
676
|
children: L ? "Cancel" : "+ New scene"
|
|
677
|
-
}), /* @__PURE__ */
|
|
677
|
+
}), /* @__PURE__ */ y("button", {
|
|
678
678
|
type: "button",
|
|
679
679
|
className: W,
|
|
680
680
|
onClick: m.refresh,
|
|
@@ -682,26 +682,26 @@ function X({ deviceId: a }) {
|
|
|
682
682
|
children: "Refresh frame"
|
|
683
683
|
})]
|
|
684
684
|
}),
|
|
685
|
-
L && /* @__PURE__ */
|
|
685
|
+
L && /* @__PURE__ */ b("div", {
|
|
686
686
|
className: "flex flex-col gap-2 rounded-md border border-border bg-surface p-2",
|
|
687
687
|
children: [
|
|
688
|
-
/* @__PURE__ */
|
|
688
|
+
/* @__PURE__ */ y("p", {
|
|
689
689
|
className: "text-[10px] text-foreground-subtle",
|
|
690
690
|
children: z === null ? "Click on the frame to drop a box, then drag its corner to fit it around the thing you want watched." : "Name it, then create. You capture what “normal” looks like next."
|
|
691
691
|
}),
|
|
692
|
-
z !== null &&
|
|
692
|
+
z !== null && te(z) && /* @__PURE__ */ y("p", {
|
|
693
693
|
className: "text-[11px] leading-relaxed text-warning",
|
|
694
694
|
children: "That box covers most of the frame. A scene that big is dominated by the weather, the sky and passing cars — it will quietly stop noticing the thing you actually care about. Draw it tighter."
|
|
695
695
|
}),
|
|
696
|
-
/* @__PURE__ */
|
|
696
|
+
/* @__PURE__ */ b("div", {
|
|
697
697
|
className: "flex items-center gap-2",
|
|
698
|
-
children: [/* @__PURE__ */
|
|
698
|
+
children: [/* @__PURE__ */ y("input", {
|
|
699
699
|
type: "text",
|
|
700
700
|
value: H,
|
|
701
701
|
onChange: (e) => U(e.target.value),
|
|
702
702
|
placeholder: "e.g. Immondizia prelevata",
|
|
703
703
|
className: "flex-1 rounded-md border border-border bg-surface px-2 py-1 text-[12px] text-foreground"
|
|
704
|
-
}), /* @__PURE__ */
|
|
704
|
+
}), /* @__PURE__ */ y("button", {
|
|
705
705
|
type: "button",
|
|
706
706
|
className: G,
|
|
707
707
|
onClick: () => void le(),
|
|
@@ -711,41 +711,41 @@ function X({ deviceId: a }) {
|
|
|
711
711
|
})
|
|
712
712
|
]
|
|
713
713
|
}),
|
|
714
|
-
j !== null && /* @__PURE__ */
|
|
714
|
+
j !== null && /* @__PURE__ */ y("p", {
|
|
715
715
|
className: "text-[11px] leading-relaxed text-danger",
|
|
716
716
|
children: j
|
|
717
717
|
}),
|
|
718
|
-
Q.length === 0 ? /* @__PURE__ */
|
|
718
|
+
Q.length === 0 ? /* @__PURE__ */ y("p", {
|
|
719
719
|
className: `${d} leading-relaxed`,
|
|
720
720
|
children: "No scenes on this camera yet."
|
|
721
|
-
}) : /* @__PURE__ */
|
|
721
|
+
}) : /* @__PURE__ */ y("ul", {
|
|
722
722
|
className: "flex flex-col gap-2",
|
|
723
723
|
children: Q.map((e) => {
|
|
724
|
-
let t =
|
|
725
|
-
return /* @__PURE__ */
|
|
724
|
+
let t = h(e);
|
|
725
|
+
return /* @__PURE__ */ b("li", {
|
|
726
726
|
className: `flex flex-col gap-1.5 rounded-md border p-2 ${N === e.id ? "border-primary/50" : "border-border"}`,
|
|
727
727
|
children: [
|
|
728
|
-
/* @__PURE__ */
|
|
728
|
+
/* @__PURE__ */ b("div", {
|
|
729
729
|
className: "flex items-center gap-2",
|
|
730
|
-
children: [/* @__PURE__ */
|
|
730
|
+
children: [/* @__PURE__ */ y("button", {
|
|
731
731
|
type: "button",
|
|
732
732
|
className: "flex-1 text-left text-[12px] font-medium text-foreground",
|
|
733
733
|
onClick: () => P(e.id),
|
|
734
734
|
children: e.label
|
|
735
|
-
}), /* @__PURE__ */
|
|
735
|
+
}), /* @__PURE__ */ y("span", {
|
|
736
736
|
className: `rounded border px-1.5 py-0.5 text-[10px] font-medium ${q[t.tone]}`,
|
|
737
737
|
children: t.text
|
|
738
738
|
})]
|
|
739
739
|
}),
|
|
740
|
-
/* @__PURE__ */
|
|
740
|
+
/* @__PURE__ */ y("p", {
|
|
741
741
|
className: `${d} leading-relaxed`,
|
|
742
|
-
children:
|
|
742
|
+
children: f(e, ae)
|
|
743
743
|
}),
|
|
744
|
-
/* @__PURE__ */
|
|
744
|
+
/* @__PURE__ */ y("p", {
|
|
745
745
|
className: `${d} tabular-nums`,
|
|
746
|
-
children:
|
|
746
|
+
children: ne(e)
|
|
747
747
|
}),
|
|
748
|
-
/* @__PURE__ */
|
|
748
|
+
/* @__PURE__ */ y(k, {
|
|
749
749
|
monitor: e,
|
|
750
750
|
disabled: O !== null,
|
|
751
751
|
onDelete: ({ stateId: t, index: n }) => void $(`refdel-${e.id}-${t}-${String(n)}`, async () => s.sceneMonitor?.deleteReference({
|
|
@@ -754,65 +754,65 @@ function X({ deviceId: a }) {
|
|
|
754
754
|
index: n
|
|
755
755
|
}))
|
|
756
756
|
}),
|
|
757
|
-
/* @__PURE__ */
|
|
757
|
+
/* @__PURE__ */ b("div", {
|
|
758
758
|
className: "flex flex-wrap items-center gap-1.5",
|
|
759
759
|
children: [
|
|
760
|
-
|
|
760
|
+
ie.map((t) => {
|
|
761
761
|
let n = t === "ir";
|
|
762
|
-
return /* @__PURE__ */
|
|
762
|
+
return /* @__PURE__ */ b("button", {
|
|
763
763
|
type: "button",
|
|
764
764
|
className: W,
|
|
765
765
|
disabled: O !== null,
|
|
766
|
-
title: n ? "Optional. Without a night reference the checks in infrared are simply skipped — the scene keeps working in daylight and nothing is reported as broken." : `Take a fresh photo now and store it as the ${
|
|
766
|
+
title: n ? "Optional. Without a night reference the checks in infrared are simply skipped — the scene keeps working in daylight and nothing is reported as broken." : `Take a fresh photo now and store it as the ${g(t).toLowerCase()} reference`,
|
|
767
767
|
onClick: () => void $(`cap-${e.id}-${t}`, async () => s.sceneMonitor?.captureReference({
|
|
768
768
|
monitorId: e.id,
|
|
769
769
|
condition: t
|
|
770
770
|
})),
|
|
771
771
|
children: [
|
|
772
|
-
/* @__PURE__ */
|
|
772
|
+
/* @__PURE__ */ y(ee, { className: "mr-1 inline h-3 w-3" }),
|
|
773
773
|
"Capture ",
|
|
774
|
-
|
|
775
|
-
n && /* @__PURE__ */
|
|
774
|
+
g(t).toLowerCase(),
|
|
775
|
+
n && /* @__PURE__ */ y("span", {
|
|
776
776
|
className: "ml-1 text-foreground-subtle/70",
|
|
777
777
|
children: "(optional)"
|
|
778
778
|
})
|
|
779
779
|
]
|
|
780
780
|
}, t);
|
|
781
781
|
}),
|
|
782
|
-
/* @__PURE__ */
|
|
782
|
+
/* @__PURE__ */ b("button", {
|
|
783
783
|
type: "button",
|
|
784
784
|
className: G,
|
|
785
785
|
disabled: O !== null || e.states.length === 0,
|
|
786
786
|
title: "Clear the flag and re-photograph what normal looks like right now",
|
|
787
787
|
onClick: () => void $(`reset-${e.id}`, async () => s.sceneMonitor?.resetScene({ monitorId: e.id })),
|
|
788
|
-
children: [/* @__PURE__ */
|
|
788
|
+
children: [/* @__PURE__ */ y(_, { className: "mr-1 inline h-3 w-3" }), "Reset"]
|
|
789
789
|
}),
|
|
790
|
-
/* @__PURE__ */
|
|
790
|
+
/* @__PURE__ */ y("button", {
|
|
791
791
|
type: "button",
|
|
792
792
|
className: W,
|
|
793
793
|
disabled: O !== null,
|
|
794
794
|
onClick: () => void $(`check-${e.id}`, async () => s.sceneMonitor?.recheckNow({ monitorId: e.id })),
|
|
795
795
|
children: "Check now"
|
|
796
796
|
}),
|
|
797
|
-
/* @__PURE__ */
|
|
797
|
+
/* @__PURE__ */ b("button", {
|
|
798
798
|
type: "button",
|
|
799
799
|
className: F === e.id ? G : W,
|
|
800
800
|
"aria-pressed": F === e.id,
|
|
801
801
|
"aria-label": `Settings for ${e.label}`,
|
|
802
802
|
disabled: O !== null,
|
|
803
803
|
onClick: () => I((t) => t === e.id ? null : e.id),
|
|
804
|
-
children: [/* @__PURE__ */
|
|
804
|
+
children: [/* @__PURE__ */ y(C, { className: "mr-1 inline h-3 w-3" }), "Settings"]
|
|
805
805
|
}),
|
|
806
|
-
/* @__PURE__ */
|
|
806
|
+
/* @__PURE__ */ y("button", {
|
|
807
807
|
type: "button",
|
|
808
808
|
className: K,
|
|
809
809
|
disabled: O !== null,
|
|
810
810
|
onClick: () => void $(`del-${e.id}`, async () => s.sceneMonitor?.deleteScene({ monitorId: e.id })),
|
|
811
|
-
children: /* @__PURE__ */
|
|
811
|
+
children: /* @__PURE__ */ y(v, { className: "h-3 w-3" })
|
|
812
812
|
})
|
|
813
813
|
]
|
|
814
814
|
}),
|
|
815
|
-
F === e.id && /* @__PURE__ */
|
|
815
|
+
F === e.id && /* @__PURE__ */ y(V, {
|
|
816
816
|
monitor: e,
|
|
817
817
|
disabled: O !== null,
|
|
818
818
|
onPatch: (t) => void $(`tune-${e.id}`, async () => s.sceneMonitor?.updateScene({
|