@camstack/addon-model-studio 1.1.79 → 1.1.80

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/_stub.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import "./virtualExposes-CWSi4E_g.mjs";
2
- import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DX_ehC1Y.mjs";
2
+ import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BJzd0enU.mjs";
3
3
  import { _ as e, c as t, d as n, h as r, i, l as a, m as o, p as s, r as c, t as l, u, y as d } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
4
4
  import { a as f, i as p, o as m, r as h, s as g } from "./responsive-Ctlf972o.mjs";
5
5
  import { c as _, l as v, u as y } from "./use-device-snapshot-bjVC8XD5.mjs";
@@ -1,9 +1,9 @@
1
- import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DX_ehC1Y.mjs";
1
+ import "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BJzd0enU.mjs";
2
2
  //#region \0virtual:mf-localSharedImportMap:__mfe_internal__addon_model_studio_page
3
3
  var e = {
4
4
  "@camstack/sdk": {
5
5
  name: "@camstack/sdk",
6
- version: "1.2.60",
6
+ version: "1.2.61",
7
7
  scope: ["default"],
8
8
  loaded: !1,
9
9
  from: "addon_model_studio_page",
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.140",
21
+ version: "1.2.141",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_model_studio_page",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.106",
36
+ version: "1.2.107",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_model_studio_page",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.140",
39
+ version: "1.2.141",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.60",
48
+ version: "1.2.61",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.106",
84
+ version: "1.2.107",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -19470,7 +19470,20 @@ var RecentTracksQueryInput = object({
19470
19470
  projection: TrackProjectionSchema.optional(),
19471
19471
  /** Include stationary-promoted rows (parked objects). Default false: the
19472
19472
  * feed lists passages; parking records live on the stationary registry. */
19473
- includeStationary: boolean().optional()
19473
+ includeStationary: boolean().optional(),
19474
+ /**
19475
+ * Restrict to these track classes. ABSENT or EMPTY means no filter.
19476
+ *
19477
+ * The same filter `listTracks` takes, because the timeline's class chips must
19478
+ * mean the same thing whether the scope is one camera or twelve. Until this
19479
+ * existed the scoped feed downloaded a page and narrowed it on the phone
19480
+ * while the single-camera path narrowed the read — one filter, two costs.
19481
+ *
19482
+ * A SUPERSET prefilter on `classes[]`, like its single-camera twin: rows
19483
+ * whose class list is unreadable are kept, and the client's rule stays the
19484
+ * exact one.
19485
+ */
19486
+ classes: array(string()).optional()
19474
19487
  });
19475
19488
  var RecentTracksPageSchema = object({
19476
19489
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -23508,8 +23521,22 @@ DeviceType.Automation, method(object({ deviceId: number().int().nonnegative() })
23508
23521
  * threshold.
23509
23522
  */
23510
23523
  var BatteryStatusSchema = object({
23511
- /** 0..100 inclusive. Firmware-reported. */
23512
- percentage: number().min(0).max(100),
23524
+ /**
23525
+ * 0..100 inclusive, firmware-reported. **`null` means NOT YET KNOWN** — the
23526
+ * provider has registered the capability but no reading has landed.
23527
+ *
23528
+ * It is nullable because it was not, and the only value a provider could
23529
+ * seed with was `0`. A battery camera behind an NVR therefore announced
23530
+ * itself at 0% on every start and corrected itself a moment later, which is
23531
+ * indistinguishable from a real flat battery: it fires the low-battery alert
23532
+ * every time the hub restarts. Unknown is not empty (D315), and on a battery
23533
+ * reading the difference is an alarm.
23534
+ *
23535
+ * `vacuum-control` and `lawn-mower-control` already model it this way.
23536
+ * Consumers must SKIP a null rather than coerce it — `battery-band` already
23537
+ * declines to band a non-finite reading, which is the correct shape.
23538
+ */
23539
+ percentage: number().min(0).max(100).nullable(),
23513
23540
  /**
23514
23541
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
23515
23542
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -19449,7 +19449,20 @@ var RecentTracksQueryInput = object({
19449
19449
  projection: TrackProjectionSchema.optional(),
19450
19450
  /** Include stationary-promoted rows (parked objects). Default false: the
19451
19451
  * feed lists passages; parking records live on the stationary registry. */
19452
- includeStationary: boolean().optional()
19452
+ includeStationary: boolean().optional(),
19453
+ /**
19454
+ * Restrict to these track classes. ABSENT or EMPTY means no filter.
19455
+ *
19456
+ * The same filter `listTracks` takes, because the timeline's class chips must
19457
+ * mean the same thing whether the scope is one camera or twelve. Until this
19458
+ * existed the scoped feed downloaded a page and narrowed it on the phone
19459
+ * while the single-camera path narrowed the read — one filter, two costs.
19460
+ *
19461
+ * A SUPERSET prefilter on `classes[]`, like its single-camera twin: rows
19462
+ * whose class list is unreadable are kept, and the client's rule stays the
19463
+ * exact one.
19464
+ */
19465
+ classes: array(string()).optional()
19453
19466
  });
19454
19467
  var RecentTracksPageSchema = object({
19455
19468
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -23487,8 +23500,22 @@ DeviceType.Automation, method(object({ deviceId: number().int().nonnegative() })
23487
23500
  * threshold.
23488
23501
  */
23489
23502
  var BatteryStatusSchema = object({
23490
- /** 0..100 inclusive. Firmware-reported. */
23491
- percentage: number().min(0).max(100),
23503
+ /**
23504
+ * 0..100 inclusive, firmware-reported. **`null` means NOT YET KNOWN** — the
23505
+ * provider has registered the capability but no reading has landed.
23506
+ *
23507
+ * It is nullable because it was not, and the only value a provider could
23508
+ * seed with was `0`. A battery camera behind an NVR therefore announced
23509
+ * itself at 0% on every start and corrected itself a moment later, which is
23510
+ * indistinguishable from a real flat battery: it fires the low-battery alert
23511
+ * every time the hub restarts. Unknown is not empty (D315), and on a battery
23512
+ * reading the difference is an alarm.
23513
+ *
23514
+ * `vacuum-control` and `lawn-mower-control` already model it this way.
23515
+ * Consumers must SKIP a null rather than coerce it — `battery-band` already
23516
+ * declines to band a non-finite reading, which is the correct shape.
23517
+ */
23518
+ percentage: number().min(0).max(100).nullable(),
23492
23519
  /**
23493
23520
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
23494
23521
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DX_ehC1Y.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BJzd0enU.mjs";
2
2
  export { t as get, e as init };
@@ -2753,7 +2753,7 @@ async function rr(e) {
2753
2753
  }
2754
2754
  }
2755
2755
  async function ir() {
2756
- return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BvPP4_4P.mjs")).catch((e) => {
2756
+ return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-7FiiJCJ7.mjs")).catch((e) => {
2757
2757
  throw tr = void 0, e;
2758
2758
  }), tr;
2759
2759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-model-studio",
3
- "version": "1.1.79",
3
+ "version": "1.1.80",
4
4
  "description": "Custom detection model registry, conversion & distribution for CamStack",
5
5
  "keywords": [
6
6
  "camstack",