@camstack/addon-training 0.1.77 → 0.1.79

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.
Files changed (21) hide show
  1. package/dist/{MotionZonesSettings-DW358mxE.mjs → MotionZonesSettings-CHoUtlZU.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-8OQfCROj.mjs → PrivacyMaskSettings-DfxPrf-U.mjs} +2 -2
  3. package/dist/{SceneMonitorEditor-D8KPyVBc.mjs → SceneMonitorEditor-B32hWMGP.mjs} +1 -1
  4. package/dist/_stub.js +5551 -5310
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-pvaNdWyD.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-GwANcGcn.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-ff_0UQsH.mjs +26 -0
  7. package/dist/addon-training.css +1 -1
  8. package/dist/{dist-0l-u0kED.js → dist-DuaaneP-.js} +189 -90
  9. package/dist/{dist--WYP29ef.mjs → dist-we-Yi15l.mjs} +189 -90
  10. package/dist/{hostInit-C8nnpFIy.mjs → hostInit-OSodFHgq.mjs} +2 -2
  11. package/dist/index.js +1 -1
  12. package/dist/orchestrator/training.addon.js +1 -1
  13. package/dist/orchestrator/training.addon.mjs +1 -1
  14. package/dist/{player-overlays-DUX0-57y.mjs → player-overlays-CN0bZ_0v.mjs} +1 -1
  15. package/dist/providers/modal/training-modal.addon.js +1 -1
  16. package/dist/providers/modal/training-modal.addon.mjs +1 -1
  17. package/dist/remoteEntry.js +1 -1
  18. package/dist/{responsive-LBIGYpcj.mjs → responsive-wQi9hajb.mjs} +1 -1
  19. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-CMBXXfj3.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-CbTZ0yvt.mjs} +1 -1
  20. package/package.json +1 -1
  21. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-qjGlK6dB.mjs +0 -26
@@ -32,7 +32,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
32
32
  }) : target, mod));
33
33
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
34
  require("node:crypto");
35
- //#region ../types/dist/event-category-fDPduoeC.mjs
35
+ //#region ../types/dist/event-category-Ceif8n-v.mjs
36
36
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
37
37
  EventCategory["SystemBoot"] = "system.boot";
38
38
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -504,6 +504,10 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
504
504
  * on the device detail page.
505
505
  */
506
506
  EventCategory["DoorbellOnPressed"] = "doorbell.onPressed";
507
+ /** Mirrors `runningStateCapability.events.onStarted`. */
508
+ EventCategory["RunningStarted"] = "running.started";
509
+ /** Mirrors `runningStateCapability.events.onFinished`. */
510
+ EventCategory["RunningFinished"] = "running.finished";
507
511
  /**
508
512
  * Cap event fired by every device that registers the `event-emitter`
509
513
  * capability. Mirrors `eventEmitterCapability.events.onEvent`. Carries
@@ -5596,7 +5600,7 @@ var ZodIssueCode = {
5596
5600
  var ZodFirstPartyTypeKind;
5597
5601
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5598
5602
  //#endregion
5599
- //#region ../types/dist/sleep-CHIEEJkY.mjs
5603
+ //#region ../types/dist/sleep-CYfIZzGv.mjs
5600
5604
  /**
5601
5605
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5602
5606
  * window to float samples (D455).
@@ -5935,7 +5939,7 @@ Object.fromEntries([
5935
5939
  * `hydrateSchema` to skip the `value` injection for structural-only fields.
5936
5940
  */
5937
5941
  function isValuelessField(field) {
5938
- return field.type === "separator" || field.type === "info" || field.type === "qr-code" || field.type === "button" || field.type === "object-array" || field.type === "widget" || field.type === "addon-action-button" || field.type === "device-action-button";
5942
+ return field.type === "separator" || field.type === "info" || field.type === "qr-code" || field.type === "button" || field.type === "object-array" || field.type === "widget" || field.type === "addon-action-button" || field.type === "device-action-button" || field.type === "account-sign-in" || field.type === "secret-presence";
5939
5943
  }
5940
5944
  function hydrateSchema(schema, values, options = {}) {
5941
5945
  return {
@@ -9144,7 +9148,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
9144
9148
  return DeviceRole;
9145
9149
  }({});
9146
9150
  //#endregion
9147
- //#region ../types/dist/composition-CB6PMT9p.mjs
9151
+ //#region ../types/dist/composition-BJ8iAZb3.mjs
9148
9152
  /**
9149
9153
  * The ffmpeg build every CamStack node downloads, per platform and arch.
9150
9154
  *
@@ -9204,7 +9208,7 @@ portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac
9204
9208
  * ONE table for everyone who asks "is this device HIGH?": the
9205
9209
  * recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
9206
9210
  * sensor markers, the orchestrator's camera-sensors bridge and
9207
- * the sources of a composite doorbell (`doorbellFeatureSources`, D671).
9211
+ * the sources of a pulse (`compilePulseOverride`, D936).
9208
9212
  * A second copy would diverge at the first cap added, and the symptom — "the
9209
9213
  * sensor rings the doorbell but does not record" — is exactly D62.
9210
9214
  *
@@ -9445,6 +9449,20 @@ var table = {
9445
9449
  apply: () => {
9446
9450
  throw new ExpressionEvalError("count: stateful evaluation context is required");
9447
9451
  }
9452
+ },
9453
+ dwell: {
9454
+ minArgs: 3,
9455
+ maxArgs: 3,
9456
+ apply: () => {
9457
+ throw new ExpressionEvalError("dwell: stateful evaluation context is required");
9458
+ }
9459
+ },
9460
+ latchedAt: {
9461
+ minArgs: 1,
9462
+ maxArgs: 1,
9463
+ apply: () => {
9464
+ throw new ExpressionEvalError("latchedAt: stateful evaluation context is required");
9465
+ }
9448
9466
  }
9449
9467
  };
9450
9468
  Object.freeze(Object.assign(Object.create(null), table));
@@ -16323,7 +16341,15 @@ Object.freeze({
16323
16341
  kind: "fixed",
16324
16342
  result: ["number", "null"]
16325
16343
  },
16326
- count: NUMBER
16344
+ count: NUMBER,
16345
+ dwell: {
16346
+ kind: "fixed",
16347
+ result: ["boolean", "null"]
16348
+ },
16349
+ latchedAt: {
16350
+ kind: "fixed",
16351
+ result: ["number", "null"]
16352
+ }
16327
16353
  });
16328
16354
  `${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
16329
16355
  /**
@@ -42517,9 +42543,6 @@ var NcSystemEventKindSchema = _enum([
42517
42543
  "device-battery-normal",
42518
42544
  "device-consumable-low",
42519
42545
  "device-consumable-normal",
42520
- "device-tank-low",
42521
- "device-tank-full",
42522
- "device-tank-normal",
42523
42546
  "stream-online",
42524
42547
  "stream-offline",
42525
42548
  "node-online",
@@ -42566,13 +42589,14 @@ var NcSystemEventKindSchema = _enum([
42566
42589
  "camera-enabled"
42567
42590
  ]);
42568
42591
  /** The legacy tail of {@link NcSystemEventKindSchema} — see its docblock. */
42569
- var NC_LEGACY_SYSTEM_EVENT_KINDS = new Set([
42592
+ var NC_LEGACY_SYSTEM_EVENT_KINDS = [
42570
42593
  "camera-online",
42571
42594
  "camera-offline",
42572
42595
  "camera-disabled",
42573
42596
  "camera-enabled"
42574
- ]);
42575
- NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KINDS.has(kind));
42597
+ ];
42598
+ var NC_LEGACY_SYSTEM_EVENT_KIND_SET = new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
42599
+ NcSystemEventKindSchema.options.filter((kind) => !NC_LEGACY_SYSTEM_EVENT_KIND_SET.has(kind));
42576
42600
  /**
42577
42601
  * The panel's transitions, as ONE list.
42578
42602
  *
@@ -43691,18 +43715,11 @@ var NcRuleSchema = NcRuleInputSchema.extend({
43691
43715
  */
43692
43716
  disabledTargetIds: array(string()).default([])
43693
43717
  });
43694
- /**
43695
- * The state-summary SECTIONS (D647 / D698 / D708): the D637 kind groups that
43696
- * report a still-true state. `addons` is the crash-looped addons only and
43697
- * `addon-updates` the addons that are behind (D708 split them). `backups-exports` and `alarm` are not sections — a completed
43698
- * job is not an open state, and the alarm stays instant.
43699
- */
43700
43718
  var NcStateSummarySectionIdSchema = _enum([
43701
43719
  "device-state",
43702
43720
  "streams",
43703
43721
  "battery",
43704
43722
  "consumables",
43705
- "tanks",
43706
43723
  "detection-blind",
43707
43724
  "nodes",
43708
43725
  "addons",
@@ -54066,7 +54083,8 @@ var BatteryStatusSchema = object({
54066
54083
  */
54067
54084
  binary: boolean().optional()
54068
54085
  });
54069
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, method(object({
54086
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat;
54087
+ method(object({
54070
54088
  deviceId: number(),
54071
54089
  /** Bound on the wait. Sensible range 3000–10000ms. */
54072
54090
  timeoutMs: number().int().min(500).max(3e4).default(8e3)
@@ -54775,6 +54793,7 @@ var ConsumablesStatusSchema = object({
54775
54793
  })),
54776
54794
  lastChangedAt: number()
54777
54795
  });
54796
+ Object.values(DeviceType), [...ConsumableRemainingUnitSchema.options], [...ConsumableStatusSchema.options], [...ConsumableKindSchema.options], [...ConsumableFormSchema.options];
54778
54797
  Object.values(DeviceType), method(object({
54779
54798
  deviceId: number().int().nonnegative(),
54780
54799
  key: string().min(1)
@@ -55246,6 +55265,7 @@ DeviceType.Dishwasher, method(object({
55246
55265
  kind: "mutation",
55247
55266
  auth: "protected"
55248
55267
  }), method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" });
55268
+ DeviceType.Camera;
55249
55269
  object({
55250
55270
  /** Ms epoch of the last press. null = never observed since this provider started. */
55251
55271
  lastPressedAt: number().nullable(),
@@ -57038,6 +57058,7 @@ authKey: string().optional() }), object({
57038
57058
  /** Human-readable error when `ok: false`. */
57039
57059
  error: string().optional()
57040
57060
  }), { kind: "mutation" });
57061
+ DeviceType.Camera;
57041
57062
  object({
57042
57063
  detected: boolean(),
57043
57064
  /** Ms epoch of the last detected-true observation. Null if never detected. */
@@ -59101,6 +59122,24 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
59101
59122
  deviceId: number(),
59102
59123
  status: PtzAutotrackStatusSchema
59103
59124
  });
59125
+ var RunningStateSourceSchema = _enum(["native", "assigned"]);
59126
+ object({
59127
+ /** null = unknown — never coerced to false (D393). */
59128
+ running: boolean().nullable(),
59129
+ /** Epoch ms the current boolean began; null while `running` is null. */
59130
+ since: number().nullable(),
59131
+ source: RunningStateSourceSchema,
59132
+ phase: string().nullable(),
59133
+ /** null until a reading has been published (D393). */
59134
+ lastFetchedAt: number().nullable()
59135
+ });
59136
+ object({
59137
+ deviceId: number(),
59138
+ since: number().nullable(),
59139
+ phase: string().nullable()
59140
+ });
59141
+ Object.values(DeviceType);
59142
+ DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
59104
59143
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
59105
59144
  kind: "mutation",
59106
59145
  auth: "admin"
@@ -70497,6 +70536,13 @@ Object.freeze({
70497
70536
  access: "create",
70498
70537
  role: "admin"
70499
70538
  },
70539
+ "runningState.getStatus": {
70540
+ capName: "running-state",
70541
+ capScope: "device",
70542
+ addonId: null,
70543
+ access: "view",
70544
+ role: "viewer"
70545
+ },
70500
70546
  "sceneMonitor.captureReference": {
70501
70547
  capName: "scene-monitor",
70502
70548
  capScope: "device",
@@ -75211,6 +75257,32 @@ var APPLIANCE_CAP_VOCABULARY = {
75211
75257
  }],
75212
75258
  events: { onSent: { notOperatorFacing: "a delivery receipt of a send this system made — not a fact about the world" } }
75213
75259
  },
75260
+ "running-state": {
75261
+ scope: "device",
75262
+ noun: t("Running", "In funzione"),
75263
+ state: [{
75264
+ kind: "boolean",
75265
+ field: "running",
75266
+ label: t("Running", "In funzione"),
75267
+ whenTrue: t("When {device} starts", "Quando {device} inizia"),
75268
+ whenFalse: t("When {device} finishes", "Quando {device} finisce"),
75269
+ icon: "play"
75270
+ }],
75271
+ events: {
75272
+ onStarted: {
75273
+ category: EventCategory.RunningStarted,
75274
+ label: t("Started running", "Ha iniziato a funzionare"),
75275
+ phrase: t("When {device} starts running", "Quando {device} inizia a funzionare"),
75276
+ icon: "play"
75277
+ },
75278
+ onFinished: {
75279
+ category: EventCategory.RunningFinished,
75280
+ label: t("Finished", "Ha finito"),
75281
+ phrase: t("When {device} finishes", "Quando {device} finisce"),
75282
+ icon: "square"
75283
+ }
75284
+ }
75285
+ },
75214
75286
  update: {
75215
75287
  scope: "device",
75216
75288
  noun: t("Firmware update", "Aggiornamento firmware"),
@@ -78751,6 +78823,11 @@ Object.freeze({
78751
78823
  form: "single",
78752
78824
  optional: true
78753
78825
  }],
78826
+ "runningState.getStatus": [{
78827
+ name: "deviceId",
78828
+ form: "single",
78829
+ optional: false
78830
+ }],
78754
78831
  "sceneMonitor.captureReference": [{
78755
78832
  name: "deviceId",
78756
78833
  form: "single",
@@ -79249,6 +79326,96 @@ Object.freeze({
79249
79326
  "smtp-provider": "email"
79250
79327
  });
79251
79328
  DeviceType.Camera;
79329
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Camera, DeviceType.Camera, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
79330
+ /**
79331
+ * A saved Customize assignment (D936). The schema is the type: callers use
79332
+ * `z.infer`, they do not restate the shape.
79333
+ */
79334
+ var OverrideSourceSchema = object({
79335
+ addonId: string().min(1),
79336
+ stableId: string().min(1),
79337
+ cap: string().min(1),
79338
+ fieldPath: string().min(1)
79339
+ });
79340
+ var CustomizeTransformDraftSchema = discriminatedUnion("kind", [
79341
+ object({ kind: literal("identity") }),
79342
+ object({ kind: literal("invert") }),
79343
+ object({
79344
+ kind: literal("threshold"),
79345
+ comparison: _enum(["gte", "lte"]),
79346
+ threshold: number(),
79347
+ startDwellMs: number().nonnegative(),
79348
+ stopDwellMs: number().nonnegative()
79349
+ }),
79350
+ object({
79351
+ kind: literal("linear"),
79352
+ scale: number(),
79353
+ offset: number(),
79354
+ clampMin: number().optional(),
79355
+ clampMax: number().optional()
79356
+ }),
79357
+ object({
79358
+ kind: literal("enum-map"),
79359
+ mapping: record(string(), string().nullable())
79360
+ }),
79361
+ object({ kind: literal("number") })
79362
+ ]);
79363
+ var ScalarOverrideDraftSchema = object({
79364
+ kind: literal("scalar"),
79365
+ cap: string().min(1),
79366
+ targetId: string().min(1),
79367
+ source: OverrideSourceSchema,
79368
+ transform: CustomizeTransformDraftSchema
79369
+ });
79370
+ var KeyedArrayOverrideDraftSchema = object({
79371
+ kind: literal("keyedArray"),
79372
+ cap: string().min(1),
79373
+ targetId: string().min(1),
79374
+ key: string().min(1),
79375
+ label: string().min(1),
79376
+ fieldPath: string().min(1),
79377
+ source: OverrideSourceSchema,
79378
+ transform: CustomizeTransformDraftSchema
79379
+ });
79380
+ var PulseOverrideDraftSchema = object({
79381
+ kind: literal("pulse"),
79382
+ cap: string().min(1),
79383
+ targetId: string().min(1),
79384
+ enabled: boolean(),
79385
+ debounceMs: number().nonnegative(),
79386
+ sources: array(OverrideSourceSchema).min(1)
79387
+ });
79388
+ var SpanSourceDraftSchema = OverrideSourceSchema.extend({ mode: _enum([
79389
+ "in-addition",
79390
+ "confirm",
79391
+ "replace"
79392
+ ]).optional() });
79393
+ discriminatedUnion("kind", [
79394
+ ScalarOverrideDraftSchema,
79395
+ KeyedArrayOverrideDraftSchema,
79396
+ PulseOverrideDraftSchema,
79397
+ object({
79398
+ kind: literal("span"),
79399
+ cap: string().min(1),
79400
+ targetId: string().min(1),
79401
+ timeoutMs: number().nonnegative(),
79402
+ cooldownMs: number().nonnegative().optional(),
79403
+ sources: array(SpanSourceDraftSchema)
79404
+ })
79405
+ ]);
79406
+ object({
79407
+ targetId: string().min(1),
79408
+ configured: boolean(),
79409
+ source: _enum(["native", "assigned"]),
79410
+ state: _enum([
79411
+ "active",
79412
+ "stale",
79413
+ "released",
79414
+ "unavailable"
79415
+ ]),
79416
+ reason: string().nullable()
79417
+ });
79418
+ String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
79252
79419
  var G711_SCALE_CORRECTION_DB = {
79253
79420
  PCMU: 20 * Math.log10(4),
79254
79421
  PCMA: 20 * Math.log10(8)
@@ -79301,40 +79468,7 @@ var NC_AUDIO_DEFAULTS = {
79301
79468
  samplingSeconds: 10
79302
79469
  };
79303
79470
  new Set(["devices", "classes"]);
79304
- /**
79305
- * WHICH narrowing filter speaks about WHICH system-event kind — one predicate,
79306
- * consumed by the rule ENGINE and by every rule EDITOR.
79307
- *
79308
- * ── The failure this file exists for ───────────────────────────────────────
79309
- * `NcSystemEventConditionSchema` carries four optional narrowing lists
79310
- * (`deviceIds`, `deviceTypes`, `nodeIds`, `packageNames`) beside a required
79311
- * `kinds` gate. They are not four filters over one vocabulary: each belongs to
79312
- * a FAMILY of kinds and is meaningless outside it. A node going away has no
79313
- * device type; a completed export has no package; `stream-offline` deliberately
79314
- * carries no device type at all (a stream belongs to a camera by construction).
79315
- *
79316
- * The engine applied all four to every kind, so a filter from one family failed
79317
- * a kind from another family CLOSED. The operator's live rule "Eventi di
79318
- * sistema" selected eleven kinds and set `deviceTypes: ['camera']` — the only
79319
- * way to say "only my cameras" about the two liveness kinds — and NINE of the
79320
- * eleven silently stopped being deliverable. Four days of history contained
79321
- * `device-online` and `device-offline` and nothing else, across a window in
79322
- * which agents were restarted and addons were updated.
79323
- *
79324
- * Both editors already computed this scoping, to decide which filter boxes to
79325
- * render; the cap's own docblock already promised it ("Narrow a `device-*` kind
79326
- * to these device TYPES"). Only the engine disagreed, and it disagreed in the
79327
- * destructive direction. So the rule is stated ONCE, here, and the engine and
79328
- * the editors are readers of it rather than three independent authors.
79329
- *
79330
- * ── The direction ─────────────────────────────────────────────────────────
79331
- * Out of family ⇒ the filter is IGNORED, never fail-closed. An editor that
79332
- * hides a box has already told the operator this filter does not speak about
79333
- * these kinds, so honouring it as an exclusion contradicts the only
79334
- * explanation the operator was ever given. Inside its family the filter still
79335
- * narrows, and still fails CLOSED on a subject that cannot produce the identity
79336
- * it tests (a device the mirror cannot name is not evidence of a camera).
79337
- */
79471
+ new Set(NC_LEGACY_SYSTEM_EVENT_KINDS);
79338
79472
  /**
79339
79473
  * Every filter, for the callers that must cover all of them (guards, tests).
79340
79474
  *
@@ -79360,9 +79494,6 @@ new Map(Object.entries({
79360
79494
  "device-battery-normal": "device-events",
79361
79495
  "device-consumable-low": "device-events",
79362
79496
  "device-consumable-normal": "device-events",
79363
- "device-tank-low": "device-events",
79364
- "device-tank-full": "device-events",
79365
- "device-tank-normal": "device-events",
79366
79497
  "stream-online": "device-events",
79367
79498
  "stream-offline": "device-events",
79368
79499
  "detection-blind": "device-events",
@@ -79439,16 +79570,6 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
79439
79570
  label: "Consumables",
79440
79571
  kinds: ["device-consumable-low", "device-consumable-normal"]
79441
79572
  },
79442
- {
79443
- id: "tanks",
79444
- family: "device-events",
79445
- label: "Tanks",
79446
- kinds: [
79447
- "device-tank-low",
79448
- "device-tank-full",
79449
- "device-tank-normal"
79450
- ]
79451
- },
79452
79573
  {
79453
79574
  id: "detection-blind",
79454
79575
  family: "device-events",
@@ -79606,11 +79727,6 @@ var RULE_BODY_ONLY = ["body"];
79606
79727
  var RULE_TEXT = ["title", "body"];
79607
79728
  var BATTERY = ["device-battery-low", "device-battery-normal"];
79608
79729
  var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
79609
- var TANK = [
79610
- "device-tank-low",
79611
- "device-tank-full",
79612
- "device-tank-normal"
79613
- ];
79614
79730
  var ALERT_EPISODE = [
79615
79731
  "alert-critical",
79616
79732
  "alert-error",
@@ -79642,7 +79758,6 @@ var DEVICE_EVENTS = [
79642
79758
  "device-enabled",
79643
79759
  ...BATTERY,
79644
79760
  ...CONSUMABLE,
79645
- ...TANK,
79646
79761
  "stream-online",
79647
79762
  "stream-offline",
79648
79763
  "detection-blind",
@@ -79688,12 +79803,6 @@ var STATE_SUMMARY_SECTION_VARS = [
79688
79803
  example: "Robot — filter 10 %",
79689
79804
  kinds: CONSUMABLE
79690
79805
  },
79691
- {
79692
- name: "summaryTanks",
79693
- label: "Summary: tanks",
79694
- example: "Robot — clean water low",
79695
- kinds: TANK
79696
- },
79697
79806
  {
79698
79807
  name: "summaryDetection",
79699
79808
  label: "Summary: cameras detecting nothing",
@@ -79809,8 +79918,7 @@ var STATE_SUMMARY_VARS = [
79809
79918
  ([...RULE_TEXT], [...COMBINED_ALARM]),
79810
79919
  ([...RULE_TEXT], [...DEVICE_EVENTS]),
79811
79920
  ([...RULE_TEXT], [...BATTERY, ...CONSUMABLE]),
79812
- ([...RULE_TEXT], [...CONSUMABLE, ...TANK]),
79813
- ([...RULE_TEXT], [...TANK]),
79921
+ ([...RULE_TEXT], [...CONSUMABLE]),
79814
79922
  [...RULE_TEXT],
79815
79923
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
79816
79924
  ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
@@ -79914,15 +80022,6 @@ new Map([
79914
80022
  snapshotLabel: "Consumables low now",
79915
80023
  snapshotSection: "consumables"
79916
80024
  },
79917
- {
79918
- id: "tanks",
79919
- family: "device-events",
79920
- label: "Tanks (low or full / back to normal)",
79921
- bad: ["device-tank-low", "device-tank-full"],
79922
- recovery: ["device-tank-normal"],
79923
- snapshotLabel: "Tanks low or full now",
79924
- snapshotSection: "tanks"
79925
- },
79926
80025
  {
79927
80026
  id: "motion-noise",
79928
80027
  family: "device-events",