@camstack/addon-training 0.1.83 → 0.1.85

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 (20) hide show
  1. package/dist/{MotionZonesSettings-ua7eMlj6.mjs → MotionZonesSettings-DTU9fMJZ.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-tOwuzUR7.mjs → PrivacyMaskSettings-8MmRT5Ow.mjs} +2 -2
  3. package/dist/{SceneMonitorEditor-D70yDpkr.mjs → SceneMonitorEditor-qbsyyldN.mjs} +1 -1
  4. package/dist/_stub.js +4552 -4466
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-CX_OmaCS.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-_MdKeniv.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CHXZ7Vwy.mjs +26 -0
  7. package/dist/{dist-BinKWWJ5.js → dist-DIvqaK45.js} +446 -10
  8. package/dist/{dist-BK5jIqgk.mjs → dist-vmoGj7S3.mjs} +446 -10
  9. package/dist/{hostInit-DR72gpW3.mjs → hostInit-BKy0E1EU.mjs} +2 -2
  10. package/dist/index.js +1 -1
  11. package/dist/orchestrator/training.addon.js +1 -1
  12. package/dist/orchestrator/training.addon.mjs +1 -1
  13. package/dist/{player-overlays-DCStC-vp.mjs → player-overlays-B_I7m2Ml.mjs} +1 -1
  14. package/dist/providers/modal/training-modal.addon.js +1 -1
  15. package/dist/providers/modal/training-modal.addon.mjs +1 -1
  16. package/dist/remoteEntry.js +1 -1
  17. package/dist/{responsive-DsQ48pYk.mjs → responsive-BlFhgdjv.mjs} +1 -1
  18. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-BToJVQAB.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-BH-X_-uQ.mjs} +1 -1
  19. package/package.json +1 -1
  20. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CF6J142s.mjs +0 -26
@@ -5567,7 +5567,7 @@ var ZodIssueCode = {
5567
5567
  var ZodFirstPartyTypeKind;
5568
5568
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5569
5569
  //#endregion
5570
- //#region ../types/dist/sleep-CARd6wZF.mjs
5570
+ //#region ../types/dist/sleep-B81gwQuR.mjs
5571
5571
  /**
5572
5572
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5573
5573
  * window to float samples (D455).
@@ -8341,6 +8341,53 @@ var READING_QUANTITIES = [
8341
8341
  ];
8342
8342
  var ReadingQuantitySchema = _enum(READING_QUANTITIES);
8343
8343
  new Set(READING_QUANTITIES);
8344
+ /**
8345
+ * Stored unit symbol for a quantity. `none` means the number is dimensionless
8346
+ * (or an index / ratio / count). `device` means the cap has no single unit.
8347
+ */
8348
+ var QUANTITY_BASE = {
8349
+ temperature: "°C",
8350
+ pressure: "hPa",
8351
+ speed: "m/s",
8352
+ precipitation: "mm",
8353
+ "precipitation-rate": "mm/h",
8354
+ length: "m",
8355
+ area: "m²",
8356
+ illuminance: "lx",
8357
+ irradiance: "W/m²",
8358
+ power: "W",
8359
+ energy: "kWh",
8360
+ voltage: "V",
8361
+ current: "A",
8362
+ "apparent-power": "VA",
8363
+ humidity: "%",
8364
+ percentage: "%",
8365
+ "concentration-volume": "ppm",
8366
+ "concentration-mass": "µg/m³",
8367
+ "concentration-ppb": "ppb",
8368
+ volume: "L",
8369
+ duration: "s",
8370
+ "duration-ms": "ms",
8371
+ information: "B",
8372
+ "sound-level": "dBFS",
8373
+ "signal-level": "dBm",
8374
+ "colour-temperature": "mired",
8375
+ angle: "°",
8376
+ bitrate: "kbps",
8377
+ rate: "fps",
8378
+ mass: "kg",
8379
+ index: "none",
8380
+ ratio: "none",
8381
+ count: "none",
8382
+ none: "none",
8383
+ device: "device"
8384
+ };
8385
+ /** The stored unit, or `undefined` when the quantity has no unit symbol. */
8386
+ function baseUnitOf(quantity) {
8387
+ const symbol = QUANTITY_BASE[quantity];
8388
+ if (symbol === "none" || symbol === "device") return void 0;
8389
+ return symbol;
8390
+ }
8344
8391
  function readingMeta(quantity, extras) {
8345
8392
  return {
8346
8393
  quantity,
@@ -8890,6 +8937,7 @@ var CAP_NAMES = Object.freeze([
8890
8937
  "filesystem-browse",
8891
8938
  "flood",
8892
8939
  "gas",
8940
+ "group-status",
8893
8941
  "heating-valve",
8894
8942
  "humidifier",
8895
8943
  "humidity-sensor",
@@ -9708,6 +9756,20 @@ Object.freeze({
9708
9756
  "path": "detected",
9709
9757
  "valueType": "boolean"
9710
9758
  }],
9759
+ "group-status": [
9760
+ {
9761
+ "path": "included",
9762
+ "valueType": "number"
9763
+ },
9764
+ {
9765
+ "path": "excluded",
9766
+ "valueType": "number"
9767
+ },
9768
+ {
9769
+ "path": "total",
9770
+ "valueType": "number"
9771
+ }
9772
+ ],
9711
9773
  "heating-valve": [{
9712
9774
  "path": "position",
9713
9775
  "valueType": "number"
@@ -11039,7 +11101,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11039
11101
  return DeviceRole;
11040
11102
  }({});
11041
11103
  //#endregion
11042
- //#region ../types/dist/composition-kEl9mevu.mjs
11104
+ //#region ../types/dist/composition-B85l9j1M.mjs
11043
11105
  /**
11044
11106
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11045
11107
  *
@@ -11794,15 +11856,67 @@ function validateExpressionSource(src) {
11794
11856
  }
11795
11857
  return null;
11796
11858
  }
11797
- /** A composed device's stableId is this prefix plus the block id. */
11798
- var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
11799
- /** Longest snippet a `code` source may carry (slice 4). */
11800
- var MAX_COMPOSITION_CODE_LENGTH = 2e4;
11859
+ /**
11860
+ * A composition source identity: `(addonId, stableId)`, never a numeric device
11861
+ * id. Split out so helper schemas can name it without a cycle through
11862
+ * `composition.ts` (D659).
11863
+ */
11801
11864
  var CompositionSourceRefSchema = object({
11802
11865
  /** The owning addon; `stableId` is unique only within it. */
11803
11866
  addonId: string().min(1),
11804
11867
  stableId: string().min(1)
11805
11868
  });
11869
+ var GROUP_TEMPLATE_IDS = [
11870
+ "temperature",
11871
+ "humidity",
11872
+ "pressure",
11873
+ "illuminance",
11874
+ "power",
11875
+ "energy",
11876
+ "battery",
11877
+ "numeric",
11878
+ "motion",
11879
+ "contact",
11880
+ "leak",
11881
+ "smoke",
11882
+ "occupancy",
11883
+ "binary"
11884
+ ];
11885
+ var NUMERIC_AGGREGATES = [
11886
+ "mean",
11887
+ "median",
11888
+ "min",
11889
+ "max",
11890
+ "sum"
11891
+ ];
11892
+ var BINARY_AGGREGATES = ["any", "all"];
11893
+ var AGGREGATE_REDUCERS = [
11894
+ "mean",
11895
+ "median",
11896
+ "min",
11897
+ "max",
11898
+ "sum",
11899
+ "any",
11900
+ "all"
11901
+ ];
11902
+ var GroupTemplateIdSchema = _enum(GROUP_TEMPLATE_IDS);
11903
+ var AggregateReducerSchema = _enum(AGGREGATE_REDUCERS);
11904
+ /** One member. The field is stored so occupancy can name motion or binary. */
11905
+ var HelperMemberSchema = object({
11906
+ source: CompositionSourceRefSchema,
11907
+ cap: string().min(1),
11908
+ fieldPath: string().min(1)
11909
+ });
11910
+ var HelperSpecSchema = discriminatedUnion("kind", [object({
11911
+ kind: literal("group"),
11912
+ templateId: GroupTemplateIdSchema,
11913
+ aggregate: AggregateReducerSchema,
11914
+ members: array(HelperMemberSchema).min(1).max(64)
11915
+ })]);
11916
+ /** A composed device's stableId is this prefix plus the block id. */
11917
+ var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
11918
+ /** Longest snippet a `code` source may carry (slice 4). */
11919
+ var MAX_COMPOSITION_CODE_LENGTH = 2e4;
11806
11920
  /** One field of one capability of one source device. */
11807
11921
  var CompositionFieldReadSchema = object({
11808
11922
  source: CompositionSourceRefSchema,
@@ -11846,7 +11960,33 @@ var CompositionCodeSourceSchema = object({
11846
11960
  var CompositionFieldSourceSchema = discriminatedUnion("kind", [
11847
11961
  CompositionFromSourceSchema,
11848
11962
  CompositionExpressionSourceSchema,
11849
- CompositionCodeSourceSchema
11963
+ CompositionCodeSourceSchema,
11964
+ object({
11965
+ kind: literal("aggregate"),
11966
+ reducer: _enum([
11967
+ "mean",
11968
+ "median",
11969
+ "min",
11970
+ "max",
11971
+ "sum",
11972
+ "any",
11973
+ "all"
11974
+ ]),
11975
+ reads: array(CompositionFieldReadSchema).min(1).max(64),
11976
+ /** `value` is the reading; the others are the member counts. */
11977
+ publish: _enum([
11978
+ "value",
11979
+ "included",
11980
+ "excluded",
11981
+ "total"
11982
+ ]),
11983
+ /** What a `value` publish does when nobody is included. Counts ignore this. */
11984
+ empty: _enum([
11985
+ "null",
11986
+ "omit",
11987
+ "offline"
11988
+ ])
11989
+ })
11850
11990
  ]);
11851
11991
  var CompositionCommandTargetSchema = discriminatedUnion("kind", [object({
11852
11992
  kind: literal("forward"),
@@ -11892,7 +12032,13 @@ var CompositionSchema = object({
11892
12032
  kind: literal("existing"),
11893
12033
  device: CompositionSourceRefSchema
11894
12034
  })]),
11895
- features: array(CompositionFeatureSchema).min(1).max(16)
12035
+ features: array(CompositionFeatureSchema).min(1).max(16),
12036
+ /**
12037
+ * Present when the block is a helper template. Absent on a free
12038
+ * composition (the room example, device 4603). The editor reads this,
12039
+ * never the compiled features.
12040
+ */
12041
+ helper: HelperSpecSchema.optional()
11896
12042
  }).superRefine((composition, ctx) => {
11897
12043
  const seen = /* @__PURE__ */ new Set();
11898
12044
  composition.features.forEach((feature, index) => {
@@ -18030,7 +18176,10 @@ var CompositionProblemSchema = object({
18030
18176
  "target-missing",
18031
18177
  "target-unreadable",
18032
18178
  "not-replaceable",
18033
- "native-capability-replace"
18179
+ "native-capability-replace",
18180
+ "mixed-quantity",
18181
+ "helper-mismatch",
18182
+ "member-constraint"
18034
18183
  ]),
18035
18184
  path: string(),
18036
18185
  message: string()
@@ -18051,7 +18200,8 @@ var CompositionUnavailableModeSchema = _enum([
18051
18200
  "null",
18052
18201
  "offline",
18053
18202
  "unknown",
18054
- "release"
18203
+ "release",
18204
+ "omit"
18055
18205
  ]);
18056
18206
  /**
18057
18207
  * `derived` reads a source · `clock` reads only `now`, recomputed when a sibling
@@ -18265,6 +18415,235 @@ Object.freeze({
18265
18415
  result: ["number", "null"]
18266
18416
  }
18267
18417
  });
18418
+ /**
18419
+ * One catalog row per base reading a group helper can build (D944 §3).
18420
+ * Data, not a form default written into the block.
18421
+ */
18422
+ var NOW = {
18423
+ fieldPath: "lastFetchedAt",
18424
+ expr: "now"
18425
+ };
18426
+ var CHANGED = {
18427
+ fieldPath: "lastChangedAt",
18428
+ expr: "now"
18429
+ };
18430
+ function numeric(input) {
18431
+ return {
18432
+ ...input,
18433
+ family: "numeric",
18434
+ deviceType: DeviceType.Sensor,
18435
+ memberDeviceType: DeviceType.Sensor,
18436
+ baseUnit: baseUnitOf(input.quantity),
18437
+ aggregates: NUMERIC_AGGREGATES,
18438
+ accept: [{
18439
+ cap: input.outputCap,
18440
+ fieldPath: input.outputField
18441
+ }]
18442
+ };
18443
+ }
18444
+ function binary(input) {
18445
+ return {
18446
+ ...input,
18447
+ family: "binary",
18448
+ deviceType: DeviceType.Sensor,
18449
+ memberDeviceType: DeviceType.Sensor,
18450
+ quantity: "none",
18451
+ baseUnit: void 0,
18452
+ aggregates: BINARY_AGGREGATES,
18453
+ empty: "offline"
18454
+ };
18455
+ }
18456
+ var GROUP_TEMPLATES = [
18457
+ numeric({
18458
+ id: "temperature",
18459
+ summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
18460
+ role: DeviceRole.TemperatureSensor,
18461
+ outputCap: "temperature-sensor",
18462
+ outputField: "celsius",
18463
+ quantity: "temperature",
18464
+ defaultAggregate: "mean",
18465
+ empty: "null",
18466
+ companions: [NOW]
18467
+ }),
18468
+ numeric({
18469
+ id: "humidity",
18470
+ summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
18471
+ role: DeviceRole.HumiditySensor,
18472
+ outputCap: "humidity-sensor",
18473
+ outputField: "percent",
18474
+ quantity: "humidity",
18475
+ defaultAggregate: "mean",
18476
+ empty: "null",
18477
+ companions: [NOW]
18478
+ }),
18479
+ numeric({
18480
+ id: "pressure",
18481
+ summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
18482
+ role: DeviceRole.PressureSensor,
18483
+ outputCap: "pressure-sensor",
18484
+ outputField: "hpa",
18485
+ quantity: "pressure",
18486
+ defaultAggregate: "mean",
18487
+ empty: "null",
18488
+ companions: [NOW]
18489
+ }),
18490
+ numeric({
18491
+ id: "illuminance",
18492
+ summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
18493
+ role: DeviceRole.AmbientLightSensor,
18494
+ outputCap: "ambient-light-sensor",
18495
+ outputField: "lux",
18496
+ quantity: "illuminance",
18497
+ defaultAggregate: "mean",
18498
+ empty: "null",
18499
+ companions: [NOW]
18500
+ }),
18501
+ numeric({
18502
+ id: "power",
18503
+ summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
18504
+ role: DeviceRole.PowerSensor,
18505
+ outputCap: "power-meter",
18506
+ outputField: "watts",
18507
+ quantity: "power",
18508
+ defaultAggregate: "sum",
18509
+ empty: "omit",
18510
+ companions: [NOW]
18511
+ }),
18512
+ numeric({
18513
+ id: "energy",
18514
+ summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
18515
+ role: DeviceRole.EnergySensor,
18516
+ outputCap: "power-meter",
18517
+ outputField: "kwhTotal",
18518
+ quantity: "energy",
18519
+ defaultAggregate: "sum",
18520
+ empty: "omit",
18521
+ companions: [NOW]
18522
+ }),
18523
+ numeric({
18524
+ id: "battery",
18525
+ summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
18526
+ role: DeviceRole.BatterySensor,
18527
+ outputCap: "battery",
18528
+ outputField: "percentage",
18529
+ quantity: "percentage",
18530
+ defaultAggregate: "mean",
18531
+ empty: "null",
18532
+ companions: [
18533
+ {
18534
+ fieldPath: "charging",
18535
+ expr: "\"unknown\""
18536
+ },
18537
+ {
18538
+ fieldPath: "sleeping",
18539
+ expr: "false"
18540
+ },
18541
+ {
18542
+ fieldPath: "lastUpdated",
18543
+ expr: "now"
18544
+ }
18545
+ ]
18546
+ }),
18547
+ numeric({
18548
+ id: "numeric",
18549
+ summary: "A numeric reading in the members’ shared quantity. Mixed quantities are refused. Nobody reporting publishes null, not 0.",
18550
+ role: DeviceRole.NumericSensor,
18551
+ outputCap: "numeric-sensor",
18552
+ outputField: "value",
18553
+ quantity: "device",
18554
+ defaultAggregate: "mean",
18555
+ empty: "null",
18556
+ companions: [NOW]
18557
+ }),
18558
+ binary({
18559
+ id: "motion",
18560
+ summary: "Any or all motion. Offline and unknown members are left out, never read as off. Nobody reporting takes the device offline.",
18561
+ role: DeviceRole.MotionSensor,
18562
+ outputCap: "motion",
18563
+ outputField: "detected",
18564
+ defaultAggregate: "any",
18565
+ accept: [{
18566
+ cap: "motion",
18567
+ fieldPath: "detected"
18568
+ }],
18569
+ companions: [{
18570
+ fieldPath: "lastDetectedAt",
18571
+ expr: "null"
18572
+ }, {
18573
+ fieldPath: "autoClearAfterMs",
18574
+ expr: "null"
18575
+ }]
18576
+ }),
18577
+ binary({
18578
+ id: "contact",
18579
+ summary: "Any or all open contacts. Offline and unknown members are left out, never read as closed.",
18580
+ role: DeviceRole.ContactSensor,
18581
+ outputCap: "contact",
18582
+ outputField: "entryOpen",
18583
+ defaultAggregate: "any",
18584
+ accept: [{
18585
+ cap: "contact",
18586
+ fieldPath: "entryOpen"
18587
+ }],
18588
+ companions: [CHANGED]
18589
+ }),
18590
+ binary({
18591
+ id: "leak",
18592
+ summary: "Any or all leak detections. Offline and unknown members are left out, never read as dry.",
18593
+ role: DeviceRole.LeakSensor,
18594
+ outputCap: "flood",
18595
+ outputField: "flooded",
18596
+ defaultAggregate: "any",
18597
+ accept: [{
18598
+ cap: "flood",
18599
+ fieldPath: "flooded"
18600
+ }],
18601
+ companions: [CHANGED]
18602
+ }),
18603
+ binary({
18604
+ id: "smoke",
18605
+ summary: "Any or all smoke detections. Offline and unknown members are left out, never read as clear.",
18606
+ role: DeviceRole.SmokeSensor,
18607
+ outputCap: "smoke",
18608
+ outputField: "detected",
18609
+ defaultAggregate: "any",
18610
+ accept: [{
18611
+ cap: "smoke",
18612
+ fieldPath: "detected"
18613
+ }],
18614
+ companions: [CHANGED]
18615
+ }),
18616
+ binary({
18617
+ id: "occupancy",
18618
+ summary: "Any or all of motion or binary sensors, published as a binary. Presence zones are not aggregated. Nobody reporting is offline, not off.",
18619
+ role: DeviceRole.BinarySensor,
18620
+ outputCap: "binary",
18621
+ outputField: "on",
18622
+ defaultAggregate: "any",
18623
+ accept: [{
18624
+ cap: "motion",
18625
+ fieldPath: "detected"
18626
+ }, {
18627
+ cap: "binary",
18628
+ fieldPath: "on"
18629
+ }],
18630
+ companions: [CHANGED]
18631
+ }),
18632
+ binary({
18633
+ id: "binary",
18634
+ summary: "Any or all generic binary sensors. Offline and unknown members are left out, never read as off.",
18635
+ role: DeviceRole.BinarySensor,
18636
+ outputCap: "binary",
18637
+ outputField: "on",
18638
+ defaultAggregate: "any",
18639
+ accept: [{
18640
+ cap: "binary",
18641
+ fieldPath: "on"
18642
+ }],
18643
+ companions: [CHANGED]
18644
+ })
18645
+ ];
18646
+ new Map(GROUP_TEMPLATES.map((template) => [template.id, template]));
18268
18647
  `${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
18269
18648
  /**
18270
18649
  * What a composition may BUILD on a device type (G2, D676): the caps a new
@@ -58085,6 +58464,24 @@ object({
58085
58464
  lastChangedAt: number()
58086
58465
  });
58087
58466
  DeviceType.Sensor;
58467
+ object({
58468
+ /** Members whose current value entered the aggregate. */
58469
+ included: number().int().nonnegative().meta(readingMeta("count", {
58470
+ precision: 0,
58471
+ label: "Reporting"
58472
+ })),
58473
+ /** Members left out: offline, unknown, or not a finite reading (D393). */
58474
+ excluded: number().int().nonnegative().meta(readingMeta("count", {
58475
+ precision: 0,
58476
+ label: "Excluded"
58477
+ })),
58478
+ /** `included` + `excluded`. */
58479
+ total: number().int().nonnegative().meta(readingMeta("count", {
58480
+ precision: 0,
58481
+ label: "Members"
58482
+ }))
58483
+ });
58484
+ DeviceType.Sensor;
58088
58485
  object({
58089
58486
  /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
58090
58487
  position: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
@@ -68466,6 +68863,13 @@ Object.freeze({
68466
68863
  access: "view",
68467
68864
  role: "viewer"
68468
68865
  },
68866
+ "groupStatus.getStatus": {
68867
+ capName: "group-status",
68868
+ capScope: "device",
68869
+ addonId: null,
68870
+ access: "view",
68871
+ role: "viewer"
68872
+ },
68469
68873
  "heatingValve.getStatus": {
68470
68874
  capName: "heating-valve",
68471
68875
  capScope: "device",
@@ -78288,6 +78692,33 @@ var SENSOR_CAP_VOCABULARY = {
78288
78692
  icon: "flame"
78289
78693
  }]
78290
78694
  },
78695
+ "group-status": {
78696
+ scope: "device",
78697
+ noun: t("Group", "Gruppo"),
78698
+ state: [
78699
+ {
78700
+ kind: "numeric",
78701
+ field: "included",
78702
+ quantity: t("the members reporting", "i membri che rispondono"),
78703
+ label: t("Reporting", "Rispondono"),
78704
+ icon: "users"
78705
+ },
78706
+ {
78707
+ kind: "numeric",
78708
+ field: "excluded",
78709
+ quantity: t("the members left out", "i membri esclusi"),
78710
+ label: t("Excluded", "Esclusi"),
78711
+ icon: "users"
78712
+ },
78713
+ {
78714
+ kind: "numeric",
78715
+ field: "total",
78716
+ quantity: t("the member count", "il numero di membri"),
78717
+ label: t("Members", "Membri"),
78718
+ icon: "sigma"
78719
+ }
78720
+ ]
78721
+ },
78291
78722
  "humidity-sensor": {
78292
78723
  scope: "device",
78293
78724
  noun: t("Humidity", "Umidità"),
@@ -79753,6 +80184,11 @@ Object.freeze({
79753
80184
  form: "single",
79754
80185
  optional: false
79755
80186
  }],
80187
+ "groupStatus.getStatus": [{
80188
+ name: "deviceId",
80189
+ form: "single",
80190
+ optional: false
80191
+ }],
79756
80192
  "heatingValve.getStatus": [{
79757
80193
  name: "deviceId",
79758
80194
  form: "single",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.417",
39
+ version: "1.2.418",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.326",
84
+ version: "1.2.328",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("./dist-BinKWWJ5.js");
2
+ require("./dist-DIvqaK45.js");
3
3
  const require_orchestrator_training_addon = require("./orchestrator/training.addon.js");
4
4
  const require_providers_modal_training_modal_addon = require("./providers/modal/training-modal.addon.js");
5
5
  //#region src/providers/fake/fake-provider.ts
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_dist = require("../dist-BinKWWJ5.js");
2
+ const require_dist = require("../dist-DIvqaK45.js");
3
3
  let node_path = require("node:path");
4
4
  node_path = require_dist.__toESM(node_path);
5
5
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { a as addonPagesSourceCapability, i as TrainingResultSchema, l as BaseAddon, m as defineRecordKinds, n as TrainingJobSchema, o as parseTrainingEventLine, r as TrainingJobSpecSchema, s as trainingCapability, t as TRAINING_JOB_SCHEMA, u as RECORD_MAX_DATA_BYTES } from "../dist-BK5jIqgk.mjs";
1
+ import { a as addonPagesSourceCapability, i as TrainingResultSchema, l as BaseAddon, m as defineRecordKinds, n as TrainingJobSchema, o as parseTrainingEventLine, r as TrainingJobSpecSchema, s as trainingCapability, t as TRAINING_JOB_SCHEMA, u as RECORD_MAX_DATA_BYTES } from "../dist-vmoGj7S3.mjs";
2
2
  import path from "node:path";
3
3
  import { createHash } from "node:crypto";
4
4
  import { createReadStream } from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import { d as e, u as t, w as n, y as r } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare__react__loadShare__.js-CEvdvp1T.mjs";
2
2
  import { n as i, r as a, t as o } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DnrbBvrw.mjs";
3
3
  import { n as s, t as c } from "./chevron-right-cA8Hucbi.mjs";
4
- import { g as l } from "./responsive-DsQ48pYk.mjs";
4
+ import { g as l } from "./responsive-BlFhgdjv.mjs";
5
5
  //#region ../ui-library/src/composites/widget-panel.tsx
6
6
  n();
7
7
  function u({ title: e, icon: t, headerRight: n, collapsible: l = !1, defaultOpen: u = !0, open: d, onOpenChange: f, bodyClassName: p = "p-3", children: m }) {
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_dist = require("../../dist-BinKWWJ5.js");
2
+ const require_dist = require("../../dist-DIvqaK45.js");
3
3
  let node_path = require("node:path");
4
4
  node_path = require_dist.__toESM(node_path, 1);
5
5
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { C as record, S as object, _ as isSecretClear, b as boolean, c as trainingProviderCapability, d as SECRET_CLEAR, f as arrayItemFieldPath, g as globalSecretScope, h as entryBody, l as BaseAddon, p as defineEntryKind, v as isSecretMarker, w as string, x as number, y as toSecretFieldView } from "../../dist-BK5jIqgk.mjs";
1
+ import { C as record, S as object, _ as isSecretClear, b as boolean, c as trainingProviderCapability, d as SECRET_CLEAR, f as arrayItemFieldPath, g as globalSecretScope, h as entryBody, l as BaseAddon, p as defineEntryKind, v as isSecretMarker, w as string, x as number, y as toSecretFieldView } from "../../dist-vmoGj7S3.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import path, { dirname, posix } from "node:path";
4
4
  import { createHash, createPrivateKey, createPublicKey, createSign, randomBytes, randomUUID } from "node:crypto";
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-BToJVQAB.mjs";
1
+ import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-BH-X_-uQ.mjs";
2
2
  export { t as get, e as init };
@@ -1,6 +1,6 @@
1
1
  import { b as e, d as t, g as n, l as r, n as i, u as a, w as o, y as s } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare__react__loadShare__.js-CEvdvp1T.mjs";
2
2
  import "./_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DnrbBvrw.mjs";
3
- import { E as c } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CF6J142s.mjs";
3
+ import { D as c } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CHXZ7Vwy.mjs";
4
4
  //#region ../ui-library/src/lib/shared-context.ts
5
5
  o();
6
6
  function l(e, t) {
@@ -2762,7 +2762,7 @@ async function or(e) {
2762
2762
  }
2763
2763
  }
2764
2764
  async function sr() {
2765
- return ir ||= or(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-CX_OmaCS.mjs")).catch((e) => {
2765
+ return ir ||= or(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-_MdKeniv.mjs")).catch((e) => {
2766
2766
  throw ir = void 0, e;
2767
2767
  }), ir;
2768
2768
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-training",
3
- "version": "0.1.83",
3
+ "version": "0.1.85",
4
4
  "description": "Cloud training for CamStack: fine-tune the root detector on your own frames, on your own GPU-cloud account",
5
5
  "keywords": [
6
6
  "camstack",