@camstack/addon-model-studio 1.1.313 → 1.1.315

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/CHANGELOG.md +12 -0
  2. package/dist/{MotionZonesSettings-Bbq95ygz.mjs → MotionZonesSettings-CMawQJsh.mjs} +2 -2
  3. package/dist/{PrivacyMaskSettings-ZpD6VN7X.mjs → PrivacyMaskSettings-CgnGd4mf.mjs} +4 -4
  4. package/dist/{SceneMonitorEditor-BvsLHttM.mjs → SceneMonitorEditor-DWT-TJnC.mjs} +3 -3
  5. package/dist/_stub.js +6607 -6476
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-vhAznt0g.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BMPYqtXC.mjs} +3 -3
  7. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DX84dVuY.mjs +26 -0
  8. package/dist/addon-model-studio.css +1 -1
  9. package/dist/{hostInit-BIVqb0f7.mjs → hostInit-D55wgKus.mjs} +2 -2
  10. package/dist/model-studio.addon.js +174 -122
  11. package/dist/model-studio.addon.mjs +174 -122
  12. package/dist/{player-overlays-Dc4klu5U.mjs → player-overlays-BgD3YVin.mjs} +1 -1
  13. package/dist/remoteEntry.js +1 -1
  14. package/dist/{responsive-D28CBU7-.mjs → responsive-LheddRXr.mjs} +1 -1
  15. package/dist/{scene-monitor-copy-KG_LV8wy.mjs → scene-monitor-copy-BwVALZ45.mjs} +1 -1
  16. package/dist/{square-BpIRNy9u.mjs → square-DmabZIoV.mjs} +1 -1
  17. package/dist/{trash-2-BwbD1FGM.mjs → trash-2-UrytgZd6.mjs} +1 -1
  18. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CeE6-aSe.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DEQI__Rz.mjs} +1 -1
  19. package/package.json +1 -1
  20. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DxAMUMtD.mjs +0 -26
@@ -5816,7 +5816,7 @@ var ZodIssueCode = {
5816
5816
  var ZodFirstPartyTypeKind;
5817
5817
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5818
5818
  //#endregion
5819
- //#region ../types/dist/sleep-DFaVPxfm.mjs
5819
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
5820
5820
  /**
5821
5821
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5822
5822
  * window to float samples (D455).
@@ -9136,11 +9136,11 @@ var CAP_NAMES = Object.freeze([
9136
9136
  Object.freeze({
9137
9137
  "air-quality-sensor": [
9138
9138
  {
9139
- "path": "co2Ppm",
9139
+ "path": "co2",
9140
9140
  "valueType": "number"
9141
9141
  },
9142
9142
  {
9143
- "path": "vocPpb",
9143
+ "path": "voc",
9144
9144
  "valueType": "number"
9145
9145
  },
9146
9146
  {
@@ -9190,7 +9190,7 @@ Object.freeze({
9190
9190
  }
9191
9191
  ],
9192
9192
  "ambient-light-sensor": [{
9193
- "path": "lux",
9193
+ "path": "illuminance",
9194
9194
  "valueType": "number"
9195
9195
  }],
9196
9196
  "audio-metrics": [
@@ -9251,7 +9251,7 @@ Object.freeze({
9251
9251
  ],
9252
9252
  "battery": [
9253
9253
  {
9254
- "path": "percentage",
9254
+ "path": "level",
9255
9255
  "valueType": "number"
9256
9256
  },
9257
9257
  {
@@ -9273,7 +9273,7 @@ Object.freeze({
9273
9273
  "valueType": "number"
9274
9274
  },
9275
9275
  {
9276
- "path": "volts",
9276
+ "path": "voltage",
9277
9277
  "valueType": "number"
9278
9278
  },
9279
9279
  {
@@ -9294,7 +9294,7 @@ Object.freeze({
9294
9294
  "valueType": "boolean"
9295
9295
  }],
9296
9296
  "brightness": [{
9297
- "path": "percentage",
9297
+ "path": "level",
9298
9298
  "valueType": "number"
9299
9299
  }],
9300
9300
  "broker": [{
@@ -9495,7 +9495,7 @@ Object.freeze({
9495
9495
  "valueType": "number"
9496
9496
  },
9497
9497
  {
9498
- "path": "mireds",
9498
+ "path": "colorTemperature",
9499
9499
  "valueType": "number"
9500
9500
  }
9501
9501
  ],
@@ -9674,15 +9674,15 @@ Object.freeze({
9674
9674
  "valueType": "string"
9675
9675
  },
9676
9676
  {
9677
- "path": "remainingSeconds",
9677
+ "path": "remaining",
9678
9678
  "valueType": "number"
9679
9679
  },
9680
9680
  {
9681
- "path": "delayedStartSeconds",
9681
+ "path": "delayedStart",
9682
9682
  "valueType": "number"
9683
9683
  },
9684
9684
  {
9685
- "path": "progressPercent",
9685
+ "path": "progress",
9686
9686
  "valueType": "number"
9687
9687
  },
9688
9688
  {
@@ -9796,7 +9796,7 @@ Object.freeze({
9796
9796
  ],
9797
9797
  "fan-control": [
9798
9798
  {
9799
- "path": "percentage",
9799
+ "path": "speed",
9800
9800
  "valueType": "number"
9801
9801
  },
9802
9802
  {
@@ -9896,7 +9896,7 @@ Object.freeze({
9896
9896
  }
9897
9897
  ],
9898
9898
  "humidity-sensor": [{
9899
- "path": "percent",
9899
+ "path": "humidity",
9900
9900
  "valueType": "number"
9901
9901
  }],
9902
9902
  "image": [{
@@ -10006,7 +10006,7 @@ Object.freeze({
10006
10006
  "valueType": "number"
10007
10007
  },
10008
10008
  {
10009
- "path": "progressPercent",
10009
+ "path": "progress",
10010
10010
  "valueType": "number"
10011
10011
  },
10012
10012
  {
@@ -10085,11 +10085,11 @@ Object.freeze({
10085
10085
  "valueType": "string"
10086
10086
  },
10087
10087
  {
10088
- "path": "positionMs",
10088
+ "path": "position",
10089
10089
  "valueType": "number"
10090
10090
  },
10091
10091
  {
10092
- "path": "durationMs",
10092
+ "path": "duration",
10093
10093
  "valueType": "number"
10094
10094
  },
10095
10095
  {
@@ -10191,11 +10191,11 @@ Object.freeze({
10191
10191
  ]
10192
10192
  },
10193
10193
  {
10194
- "path": "signalPercent",
10194
+ "path": "signal",
10195
10195
  "valueType": "number"
10196
10196
  },
10197
10197
  {
10198
- "path": "rssiDbm",
10198
+ "path": "rssi",
10199
10199
  "valueType": "number"
10200
10200
  },
10201
10201
  {
@@ -10326,23 +10326,23 @@ Object.freeze({
10326
10326
  ],
10327
10327
  "power-meter": [
10328
10328
  {
10329
- "path": "watts",
10329
+ "path": "power",
10330
10330
  "valueType": "number"
10331
10331
  },
10332
10332
  {
10333
- "path": "kwhTotal",
10333
+ "path": "energy",
10334
10334
  "valueType": "number"
10335
10335
  },
10336
10336
  {
10337
- "path": "volts",
10337
+ "path": "voltage",
10338
10338
  "valueType": "number"
10339
10339
  },
10340
10340
  {
10341
- "path": "amps",
10341
+ "path": "current",
10342
10342
  "valueType": "number"
10343
10343
  },
10344
10344
  {
10345
- "path": "va",
10345
+ "path": "apparentPower",
10346
10346
  "valueType": "number"
10347
10347
  },
10348
10348
  {
@@ -10370,14 +10370,10 @@ Object.freeze({
10370
10370
  {
10371
10371
  "path": "gps.accuracyMeters",
10372
10372
  "valueType": "number"
10373
- },
10374
- {
10375
- "path": "batteryPercent",
10376
- "valueType": "number"
10377
10373
  }
10378
10374
  ],
10379
10375
  "pressure-sensor": [{
10380
- "path": "hpa",
10376
+ "path": "pressure",
10381
10377
  "valueType": "number"
10382
10378
  }],
10383
10379
  "privacy-mask": [{
@@ -10691,7 +10687,7 @@ Object.freeze({
10691
10687
  "valueType": "boolean"
10692
10688
  }],
10693
10689
  "temperature-sensor": [{
10694
- "path": "celsius",
10690
+ "path": "temperature",
10695
10691
  "valueType": "number"
10696
10692
  }],
10697
10693
  "update": [
@@ -10739,7 +10735,7 @@ Object.freeze({
10739
10735
  "valueType": "string"
10740
10736
  },
10741
10737
  {
10742
- "path": "progressPercent",
10738
+ "path": "progress",
10743
10739
  "valueType": "number"
10744
10740
  },
10745
10741
  {
@@ -11214,7 +11210,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11214
11210
  return DeviceRole;
11215
11211
  }({});
11216
11212
  //#endregion
11217
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
11213
+ //#region ../types/dist/composition-DwA0uVW5.mjs
11218
11214
  /**
11219
11215
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11220
11216
  *
@@ -19000,7 +18996,7 @@ var CompositionEventPlanSchema = object({
19000
18996
  stateField: string(),
19001
18997
  fieldKey: string()
19002
18998
  });
19003
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
18999
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
19004
19000
  var CompositionProblemSchema = object({
19005
19001
  code: _enum([
19006
19002
  "reserved-variant",
@@ -19282,12 +19278,13 @@ var CHANGED = {
19282
19278
  expr: "now"
19283
19279
  };
19284
19280
  function numeric(input) {
19281
+ const { alsoFrom, ...base } = input;
19285
19282
  return {
19286
- ...input,
19283
+ ...base,
19287
19284
  family: "numeric",
19288
19285
  deviceType: DeviceType.Sensor,
19289
19286
  memberDeviceType: DeviceType.Sensor,
19290
- memberDeviceTypes: [DeviceType.Sensor],
19287
+ memberDeviceTypes: [DeviceType.Sensor, ...alsoFrom?.deviceTypes ?? []],
19291
19288
  activeWhen: void 0,
19292
19289
  commandCaps: [],
19293
19290
  baseUnit: baseUnitOf(input.quantity),
@@ -19295,9 +19292,10 @@ function numeric(input) {
19295
19292
  accept: [{
19296
19293
  cap: input.outputCap,
19297
19294
  fieldPath: input.outputField
19298
- }]
19295
+ }, ...alsoFrom === void 0 ? [] : [alsoFrom.accept]]
19299
19296
  };
19300
19297
  }
19298
+ var CLIMATE_DEVICES = [DeviceType.Thermostat, DeviceType.Climate];
19301
19299
  function binary(input) {
19302
19300
  return {
19303
19301
  ...input,
@@ -19319,29 +19317,43 @@ var GROUP_TEMPLATES = [
19319
19317
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19320
19318
  role: DeviceRole.TemperatureSensor,
19321
19319
  outputCap: "temperature-sensor",
19322
- outputField: "celsius",
19320
+ outputField: "temperature",
19323
19321
  quantity: "temperature",
19324
19322
  defaultAggregate: "mean",
19325
19323
  empty: "null",
19326
- companions: [NOW$2]
19324
+ companions: [NOW$2],
19325
+ alsoFrom: {
19326
+ deviceTypes: CLIMATE_DEVICES,
19327
+ accept: {
19328
+ cap: "climate-control",
19329
+ fieldPath: "currentTemp"
19330
+ }
19331
+ }
19327
19332
  }),
19328
19333
  numeric({
19329
19334
  id: "humidity",
19330
19335
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19331
19336
  role: DeviceRole.HumiditySensor,
19332
19337
  outputCap: "humidity-sensor",
19333
- outputField: "percent",
19338
+ outputField: "humidity",
19334
19339
  quantity: "humidity",
19335
19340
  defaultAggregate: "mean",
19336
19341
  empty: "null",
19337
- companions: [NOW$2]
19342
+ companions: [NOW$2],
19343
+ alsoFrom: {
19344
+ deviceTypes: CLIMATE_DEVICES,
19345
+ accept: {
19346
+ cap: "climate-control",
19347
+ fieldPath: "currentHumidity"
19348
+ }
19349
+ }
19338
19350
  }),
19339
19351
  numeric({
19340
19352
  id: "pressure",
19341
19353
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19342
19354
  role: DeviceRole.PressureSensor,
19343
19355
  outputCap: "pressure-sensor",
19344
- outputField: "hpa",
19356
+ outputField: "pressure",
19345
19357
  quantity: "pressure",
19346
19358
  defaultAggregate: "mean",
19347
19359
  empty: "null",
@@ -19352,7 +19364,7 @@ var GROUP_TEMPLATES = [
19352
19364
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19353
19365
  role: DeviceRole.AmbientLightSensor,
19354
19366
  outputCap: "ambient-light-sensor",
19355
- outputField: "lux",
19367
+ outputField: "illuminance",
19356
19368
  quantity: "illuminance",
19357
19369
  defaultAggregate: "mean",
19358
19370
  empty: "null",
@@ -19363,7 +19375,7 @@ var GROUP_TEMPLATES = [
19363
19375
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19364
19376
  role: DeviceRole.PowerSensor,
19365
19377
  outputCap: "power-meter",
19366
- outputField: "watts",
19378
+ outputField: "power",
19367
19379
  quantity: "power",
19368
19380
  defaultAggregate: "sum",
19369
19381
  empty: "omit",
@@ -19374,7 +19386,7 @@ var GROUP_TEMPLATES = [
19374
19386
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19375
19387
  role: DeviceRole.EnergySensor,
19376
19388
  outputCap: "power-meter",
19377
- outputField: "kwhTotal",
19389
+ outputField: "energy",
19378
19390
  quantity: "energy",
19379
19391
  defaultAggregate: "sum",
19380
19392
  empty: "omit",
@@ -19385,7 +19397,7 @@ var GROUP_TEMPLATES = [
19385
19397
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19386
19398
  role: DeviceRole.BatterySensor,
19387
19399
  outputCap: "battery",
19388
- outputField: "percentage",
19400
+ outputField: "level",
19389
19401
  quantity: "percentage",
19390
19402
  defaultAggregate: "mean",
19391
19403
  empty: "null",
@@ -44874,6 +44886,43 @@ var NotificationActionSchema = object({
44874
44886
  */
44875
44887
  mode: _enum(["navigate", "background"]).optional()
44876
44888
  });
44889
+ /** A delivery parameter value: what a notifier declared it takes. */
44890
+ var DeliveryParamValueSchema = union([
44891
+ string(),
44892
+ number(),
44893
+ boolean()
44894
+ ]);
44895
+ /**
44896
+ * One extra delivery parameter a notifier KIND declares (D938). A rule that
44897
+ * addresses a target of that kind may set it; a kind that declares nothing is
44898
+ * never handed one. The admin UI derives its control from this descriptor —
44899
+ * no editor knows a service by name.
44900
+ *
44901
+ * Optional fields are `.optional()`, never `.default()` (a Zod default does not
44902
+ * run on the addon cap path).
44903
+ */
44904
+ var DeliveryParamSchema = object({
44905
+ key: string().min(1),
44906
+ label: string(),
44907
+ /** i18n key of the label, resolved by the declaring addon's namespace. */
44908
+ labelKey: string().optional(),
44909
+ type: _enum([
44910
+ "enum",
44911
+ "number",
44912
+ "boolean",
44913
+ "string"
44914
+ ]),
44915
+ /** `enum` only: the closed set of accepted values. */
44916
+ options: array(object({
44917
+ value: string(),
44918
+ label: string()
44919
+ })).optional(),
44920
+ /** `number` only. */
44921
+ min: number().optional(),
44922
+ max: number().optional(),
44923
+ /** What the notifier does when the rule sets nothing; shown as the placeholder. */
44924
+ default: DeliveryParamValueSchema.optional()
44925
+ });
44877
44926
  /**
44878
44927
  * The canonical notification. `body` is the only hard field (Apprise model).
44879
44928
  * `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
@@ -44896,7 +44945,13 @@ var NotificationSchema = object({
44896
44945
  tag: string().optional(),
44897
44946
  deviceId: number().optional(),
44898
44947
  eventId: string().optional(),
44899
- metadata: record(string(), unknown()).optional()
44948
+ metadata: record(string(), unknown()).optional(),
44949
+ /**
44950
+ * Values for the parameters the target's kind DECLARES in
44951
+ * {@link TargetKindSchema} `deliveryParams`. Already validated against the
44952
+ * declaration by the sender; a notifier reads only the keys it declared.
44953
+ */
44954
+ delivery: record(string(), DeliveryParamValueSchema).optional()
44900
44955
  });
44901
44956
  /** One declared native severity/priority level for a kind. */
44902
44957
  var TargetKindLevelSchema = object({
@@ -45002,6 +45057,11 @@ var TargetKindSchema = object({
45002
45057
  */
45003
45058
  destinationKeys: array(string()).optional(),
45004
45059
  supportsDiscovery: boolean(),
45060
+ /**
45061
+ * Extra delivery parameters a rule may set for a target of this kind (D938).
45062
+ * Absent = none; the rule editor then offers nothing.
45063
+ */
45064
+ deliveryParams: array(DeliveryParamSchema).optional(),
45005
45065
  caps: TargetKindCapsSchema
45006
45066
  });
45007
45067
  /**
@@ -57172,7 +57232,9 @@ var ManifestShapeSchema = object({
57172
57232
  icon: string().optional()
57173
57233
  }).optional(),
57174
57234
  protected: boolean().optional(),
57175
- removable: boolean().optional()
57235
+ removable: boolean().optional(),
57236
+ /** Declared Integrations-page block (mirror of `AddonDeclaration.integrationSection`). */
57237
+ integrationSection: _enum(["system", "providers"]).optional()
57176
57238
  });
57177
57239
  var AddonProcessSchema = object({
57178
57240
  pid: number().optional(),
@@ -57537,9 +57599,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
57537
57599
  }), LogStreamEntrySchema, { kind: "subscription" });
57538
57600
  object({
57539
57601
  /** Carbon dioxide concentration in ppm. */
57540
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
57602
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
57541
57603
  /** Total volatile organic compounds in ppb. */
57542
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57604
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57543
57605
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
57544
57606
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
57545
57607
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -57552,7 +57614,7 @@ object({
57552
57614
  DeviceType.Sensor;
57553
57615
  object({
57554
57616
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
57555
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
57617
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
57556
57618
  precision: 0,
57557
57619
  label: "Illuminance"
57558
57620
  })),
@@ -57780,7 +57842,7 @@ var BatteryStatusSchema = object({
57780
57842
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57781
57843
  * declines to band a non-finite reading, which is the correct shape.
57782
57844
  */
57783
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57845
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57784
57846
  /**
57785
57847
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57786
57848
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57790,7 +57852,7 @@ var BatteryStatusSchema = object({
57790
57852
  * `'unknown'` is the absence of an answer: the provider has not read the
57791
57853
  * power fields yet, or the firmware reported neither. Before it existed,
57792
57854
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57793
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57855
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57794
57856
  * by going nullable. Consumers SKIP it (no charger state published, no
57795
57857
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57796
57858
  */
@@ -57814,7 +57876,7 @@ var BatteryStatusSchema = object({
57814
57876
  * that only report charge. A second reading on this cap, not a second
57815
57877
  * `numeric-sensor` on the same device.
57816
57878
  */
57817
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57879
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57818
57880
  /**
57819
57881
  * Ms epoch of the last time the device PROVED it was reachable — a
57820
57882
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57848,7 +57910,7 @@ var BatteryStatusSchema = object({
57848
57910
  /**
57849
57911
  * True when the source is a BINARY low-battery indicator (HA
57850
57912
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57851
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57913
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57852
57914
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57853
57915
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57854
57916
  */
@@ -57874,19 +57936,19 @@ object({
57874
57936
  DeviceType.Sensor;
57875
57937
  object({
57876
57938
  /** Current level as 0..100 inclusive. Firmware-reported. */
57877
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57939
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57878
57940
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57879
57941
  lastChangedAt: number()
57880
57942
  });
57881
57943
  DeviceType.Light, method(object({
57882
57944
  deviceId: number().int().nonnegative(),
57883
- percentage: number().min(0).max(100)
57945
+ level: number().min(0).max(100)
57884
57946
  }), _void(), {
57885
57947
  kind: "mutation",
57886
57948
  auth: "protected"
57887
57949
  }), object({
57888
57950
  deviceId: number(),
57889
- percentage: number().min(0).max(100),
57951
+ level: number().min(0).max(100),
57890
57952
  lastChangedAt: number()
57891
57953
  });
57892
57954
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -58387,11 +58449,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
58387
58449
  }),
58388
58450
  object({
58389
58451
  mode: literal("mired"),
58390
- mireds: number().int().min(50).max(1e3)
58452
+ colorTemperature: number().int().min(50).max(1e3)
58391
58453
  })
58392
58454
  ]);
58393
58455
  object({
58394
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
58456
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
58395
58457
  * the bulb's current state. */
58396
58458
  mode: _enum([
58397
58459
  "rgb",
@@ -58403,7 +58465,7 @@ object({
58403
58465
  /** Populated when `mode === 'hsv'`. */
58404
58466
  hsv: HsvTripletSchema.optional(),
58405
58467
  /** Populated when `mode === 'mired'`. */
58406
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
58468
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
58407
58469
  /** Ms epoch of the last operator-driven change. */
58408
58470
  lastChangedAt: number()
58409
58471
  });
@@ -58422,7 +58484,7 @@ DeviceType.Light, method(object({
58422
58484
  ]),
58423
58485
  rgb: RgbTripletSchema.optional(),
58424
58486
  hsv: HsvTripletSchema.optional(),
58425
- mireds: number().int().optional(),
58487
+ colorTemperature: number().int().optional(),
58426
58488
  lastChangedAt: number()
58427
58489
  });
58428
58490
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58848,11 +58910,11 @@ object({
58848
58910
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58849
58911
  availablePrograms: array(string()),
58850
58912
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58851
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58913
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58852
58914
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58853
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58915
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58854
58916
  /** Cycle completion 0..100, or null when not applicable. */
58855
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58917
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58856
58918
  /** True when the door is reported open; null when the door state is not known. */
58857
58919
  doorOpen: boolean().nullable(),
58858
58920
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -59470,7 +59532,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
59470
59532
  object({
59471
59533
  /** Active speed as 0..100 inclusive. Null when the device has no
59472
59534
  * speed surface (single-speed fan). */
59473
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59535
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59474
59536
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
59475
59537
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
59476
59538
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -59490,7 +59552,7 @@ object({
59490
59552
  });
59491
59553
  DeviceType.Fan, method(object({
59492
59554
  deviceId: number().int().nonnegative(),
59493
- percentage: number().min(0).max(100)
59555
+ speed: number().min(0).max(100)
59494
59556
  }), _void(), {
59495
59557
  kind: "mutation",
59496
59558
  auth: "protected"
@@ -59673,7 +59735,7 @@ DeviceType.Humidifier, method(object({
59673
59735
  });
59674
59736
  object({
59675
59737
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59676
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59738
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59677
59739
  precision: 0,
59678
59740
  label: "Humidity"
59679
59741
  })),
@@ -60116,7 +60178,7 @@ object({
60116
60178
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60117
60179
  /** 0..100 mowing-completion percentage of the current task, or null when no
60118
60180
  * task is active / progress is unavailable. */
60119
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60181
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60120
60182
  /** Current device/event code (dynamic — mostly status, sometimes an error),
60121
60183
  * or null when unknown. */
60122
60184
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -60606,10 +60668,10 @@ object({
60606
60668
  currentMedia: MediaInfoSchema.nullable(),
60607
60669
  /** Current playback position in ms. Null when not seekable or
60608
60670
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
60609
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60671
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60610
60672
  /** Total duration of the current media in ms. Null when unknown
60611
60673
  * (live stream) or nothing is playing. */
60612
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60674
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60613
60675
  /** Shuffle toggle. Null when no shuffle surface.
60614
60676
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
60615
60677
  shuffle: boolean().nullable(),
@@ -60636,7 +60698,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60636
60698
  auth: "protected"
60637
60699
  }), method(object({
60638
60700
  deviceId: number().int().nonnegative(),
60639
- positionMs: number().int().nonnegative()
60701
+ position: number().int().nonnegative()
60640
60702
  }), _void(), {
60641
60703
  kind: "mutation",
60642
60704
  auth: "protected"
@@ -61309,9 +61371,9 @@ var NetworkLinkStatusSchema = object({
61309
61371
  * one whose reading has not landed must not be drawn at 0 %. Consumers
61310
61372
  * SKIP a null rather than coerce it.
61311
61373
  */
61312
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61374
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61313
61375
  /** Raw received signal strength in dBm, when the firmware reports one. */
61314
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
61376
+ rssi: number().optional().meta(readingMeta("signal-level")),
61315
61377
  /** Network name of a wireless link, when the firmware reports it. */
61316
61378
  ssid: string().optional(),
61317
61379
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -62461,16 +62523,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62461
62523
  auth: "admin"
62462
62524
  });
62463
62525
  object({
62464
- /** Instantaneous power draw in watts. */
62465
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
62526
+ /** Instantaneous power draw (watts). */
62527
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
62466
62528
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62467
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62468
- /** Voltage in volts. */
62469
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62529
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62530
+ /** Voltage (volts). */
62531
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62470
62532
  /** Current in amperes. */
62471
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
62533
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
62472
62534
  /** Apparent power in volt-amperes. */
62473
- va: number().optional().meta(readingMeta("apparent-power")),
62535
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
62474
62536
  /** Power factor (0..1) if reported. */
62475
62537
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
62476
62538
  /** Ms epoch when the slice was last updated. */
@@ -62525,16 +62587,13 @@ object({
62525
62587
  location: string().nullable(),
62526
62588
  /** GPS coordinates when available. Null otherwise. */
62527
62589
  gps: GpsLocationSchema.nullable(),
62528
- /** Optional battery level of the tracking device (0..100). Null
62529
- * when not reported. */
62530
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62531
62590
  /** Ms epoch when the slice was last updated. */
62532
62591
  lastChangedAt: number()
62533
62592
  });
62534
62593
  DeviceType.Presence;
62535
62594
  object({
62536
62595
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
62537
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62596
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62538
62597
  /** Ms epoch when the slice was last updated. */
62539
62598
  lastFetchedAt: number()
62540
62599
  });
@@ -65537,7 +65596,7 @@ object({
65537
65596
  DeviceType.Sensor;
65538
65597
  object({
65539
65598
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
65540
- celsius: number().nullable().meta(readingMeta("temperature", {
65599
+ temperature: number().nullable().meta(readingMeta("temperature", {
65541
65600
  precision: 1,
65542
65601
  label: "Temperature"
65543
65602
  })),
@@ -65801,7 +65860,7 @@ object({
65801
65860
  /** Speed tokens the hardware accepts — drives the UI selector. */
65802
65861
  availableFanSpeeds: array(string()),
65803
65862
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65804
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65863
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65805
65864
  /** Current error code (0 / null = no error). */
65806
65865
  errorCode: number().nullable().meta(readingMeta("none")),
65807
65866
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76869,7 +76928,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76869
76928
  label: t("Full brightness", "Luminosità massima"),
76870
76929
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76871
76930
  icon: "sun",
76872
- args: { percentage: 100 }
76931
+ args: { level: 100 }
76873
76932
  },
76874
76933
  {
76875
76934
  id: "brightness.half",
@@ -76877,7 +76936,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76877
76936
  label: t("Half brightness", "Luminosità a metà"),
76878
76937
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76879
76938
  icon: "sun-dim",
76880
- args: { percentage: 50 }
76939
+ args: { level: 50 }
76881
76940
  },
76882
76941
  {
76883
76942
  id: "brightness.off",
@@ -76885,16 +76944,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76885
76944
  label: t("Brightness off", "Luminosità a zero"),
76886
76945
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76887
76946
  icon: "lightbulb-off",
76888
- args: { percentage: 0 }
76947
+ args: { level: 0 }
76889
76948
  },
76890
76949
  {
76891
76950
  id: "brightness.set",
76892
76951
  method: "setBrightness",
76893
76952
  label: t("Set brightness", "Imposta la luminosità"),
76894
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76953
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76895
76954
  icon: "sun-medium",
76896
76955
  openArgs: [{
76897
- key: "percentage",
76956
+ key: "level",
76898
76957
  label: PERCENT,
76899
76958
  offer: {
76900
76959
  kind: "number",
@@ -76908,13 +76967,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76908
76967
  ],
76909
76968
  state: [{
76910
76969
  kind: "numeric",
76911
- field: "percentage",
76970
+ field: "level",
76912
76971
  quantity: t("the brightness", "la luminosità"),
76913
76972
  label: t("Brightness", "Luminosità"),
76914
76973
  unit: "%",
76915
76974
  icon: "sun"
76916
76975
  }],
76917
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76976
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76918
76977
  },
76919
76978
  color: {
76920
76979
  scope: "device",
@@ -76928,7 +76987,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76928
76987
  icon: "sun",
76929
76988
  args: { color: {
76930
76989
  mode: "mired",
76931
- mireds: 370
76990
+ colorTemperature: 370
76932
76991
  } }
76933
76992
  },
76934
76993
  {
@@ -76939,7 +76998,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76939
76998
  icon: "snowflake",
76940
76999
  args: { color: {
76941
77000
  mode: "mired",
76942
- mireds: 200
77001
+ colorTemperature: 200
76943
77002
  } }
76944
77003
  },
76945
77004
  {
@@ -77553,7 +77612,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77553
77612
  label: t("Fan off", "Ventilatore spento"),
77554
77613
  phrase: t("Stop {device}", "Ferma {device}"),
77555
77614
  icon: "power-off",
77556
- args: { percentage: 0 }
77615
+ args: { speed: 0 }
77557
77616
  },
77558
77617
  {
77559
77618
  id: "fan.full",
@@ -77561,16 +77620,16 @@ var ACTUATOR_CAP_VOCABULARY = {
77561
77620
  label: t("Fan full", "Ventilatore al massimo"),
77562
77621
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
77563
77622
  icon: "fan",
77564
- args: { percentage: 100 }
77623
+ args: { speed: 100 }
77565
77624
  },
77566
77625
  {
77567
77626
  id: "fan.speed",
77568
77627
  method: "setPercentage",
77569
77628
  label: t("Set speed", "Imposta la velocità"),
77570
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
77629
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
77571
77630
  icon: "fan",
77572
77631
  openArgs: [{
77573
- key: "percentage",
77632
+ key: "speed",
77574
77633
  label: t("Speed", "Velocità"),
77575
77634
  offer: {
77576
77635
  kind: "number",
@@ -77632,7 +77691,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77632
77691
  ],
77633
77692
  state: [{
77634
77693
  kind: "numeric",
77635
- field: "percentage",
77694
+ field: "speed",
77636
77695
  quantity: t("the speed", "la velocità"),
77637
77696
  label: t("Speed", "Velocità"),
77638
77697
  unit: "%",
@@ -78430,7 +78489,7 @@ var APPLIANCE_CAP_VOCABULARY = {
78430
78489
  },
78431
78490
  {
78432
78491
  kind: "numeric",
78433
- field: "progressPercent",
78492
+ field: "progress",
78434
78493
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
78435
78494
  label: t("Progress", "Avanzamento"),
78436
78495
  unit: "%",
@@ -78788,10 +78847,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78788
78847
  id: "media.seek",
78789
78848
  method: "seek",
78790
78849
  label: t("Seek", "Vai al punto"),
78791
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78850
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78792
78851
  icon: "fast-forward",
78793
78852
  openArgs: [{
78794
- key: "positionMs",
78853
+ key: "position",
78795
78854
  label: t("Position", "Posizione"),
78796
78855
  offer: {
78797
78856
  kind: "number",
@@ -79840,7 +79899,7 @@ var SENSOR_CAP_VOCABULARY = {
79840
79899
  state: [
79841
79900
  {
79842
79901
  kind: "numeric",
79843
- field: "co2Ppm",
79902
+ field: "co2",
79844
79903
  quantity: t("the CO₂", "la CO₂"),
79845
79904
  label: t("CO₂", "CO₂"),
79846
79905
  unit: "ppm",
@@ -79848,7 +79907,7 @@ var SENSOR_CAP_VOCABULARY = {
79848
79907
  },
79849
79908
  {
79850
79909
  kind: "numeric",
79851
- field: "vocPpb",
79910
+ field: "voc",
79852
79911
  quantity: t("the VOC level", "il livello di COV"),
79853
79912
  label: t("VOC", "COV"),
79854
79913
  unit: "ppb",
@@ -79884,7 +79943,7 @@ var SENSOR_CAP_VOCABULARY = {
79884
79943
  noun: t("Light level", "Luminosità ambiente"),
79885
79944
  state: [{
79886
79945
  kind: "numeric",
79887
- field: "lux",
79946
+ field: "illuminance",
79888
79947
  quantity: t("the light level", "la luminosità"),
79889
79948
  label: t("Illuminance", "Illuminamento"),
79890
79949
  unit: "lx",
@@ -80087,7 +80146,7 @@ var SENSOR_CAP_VOCABULARY = {
80087
80146
  noun: t("Humidity", "Umidità"),
80088
80147
  state: [{
80089
80148
  kind: "numeric",
80090
- field: "percent",
80149
+ field: "humidity",
80091
80150
  quantity: t("the humidity", "l’umidità"),
80092
80151
  label: t("Humidity", "Umidità"),
80093
80152
  unit: "%",
@@ -80135,7 +80194,7 @@ var SENSOR_CAP_VOCABULARY = {
80135
80194
  state: [
80136
80195
  {
80137
80196
  kind: "numeric",
80138
- field: "watts",
80197
+ field: "power",
80139
80198
  quantity: t("the power draw", "il consumo"),
80140
80199
  label: t("Power", "Potenza"),
80141
80200
  unit: "W",
@@ -80143,7 +80202,7 @@ var SENSOR_CAP_VOCABULARY = {
80143
80202
  },
80144
80203
  {
80145
80204
  kind: "numeric",
80146
- field: "kwhTotal",
80205
+ field: "energy",
80147
80206
  quantity: t("the energy used", "l’energia consumata"),
80148
80207
  label: t("Energy", "Energia"),
80149
80208
  unit: "kWh",
@@ -80151,7 +80210,7 @@ var SENSOR_CAP_VOCABULARY = {
80151
80210
  },
80152
80211
  {
80153
80212
  kind: "numeric",
80154
- field: "volts",
80213
+ field: "voltage",
80155
80214
  quantity: t("the voltage", "la tensione"),
80156
80215
  label: t("Voltage", "Tensione"),
80157
80216
  unit: "V",
@@ -80159,7 +80218,7 @@ var SENSOR_CAP_VOCABULARY = {
80159
80218
  },
80160
80219
  {
80161
80220
  kind: "numeric",
80162
- field: "amps",
80221
+ field: "current",
80163
80222
  quantity: t("the current", "la corrente"),
80164
80223
  label: t("Current", "Corrente"),
80165
80224
  unit: "A",
@@ -80176,13 +80235,6 @@ var SENSOR_CAP_VOCABULARY = {
80176
80235
  label: t("Where", "Posizione"),
80177
80236
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
80178
80237
  icon: "map-pin"
80179
- }, {
80180
- kind: "numeric",
80181
- field: "batteryPercent",
80182
- quantity: t("the phone battery", "la batteria del telefono"),
80183
- label: t("Battery", "Batteria"),
80184
- unit: "%",
80185
- icon: "battery"
80186
80238
  }]
80187
80239
  },
80188
80240
  "pressure-sensor": {
@@ -80190,7 +80242,7 @@ var SENSOR_CAP_VOCABULARY = {
80190
80242
  noun: t("Pressure", "Pressione"),
80191
80243
  state: [{
80192
80244
  kind: "numeric",
80193
- field: "hpa",
80245
+ field: "pressure",
80194
80246
  quantity: t("the pressure", "la pressione"),
80195
80247
  label: t("Pressure", "Pressione"),
80196
80248
  unit: "hPa",
@@ -80226,7 +80278,7 @@ var SENSOR_CAP_VOCABULARY = {
80226
80278
  noun: t("Temperature", "Temperatura"),
80227
80279
  state: [{
80228
80280
  kind: "numeric",
80229
- field: "celsius",
80281
+ field: "temperature",
80230
80282
  quantity: t("the temperature", "la temperatura"),
80231
80283
  label: t("Temperature", "Temperatura"),
80232
80284
  unit: "°C",
@@ -80297,7 +80349,7 @@ var SENSOR_CAP_VOCABULARY = {
80297
80349
  state: [
80298
80350
  {
80299
80351
  kind: "numeric",
80300
- field: "percentage",
80352
+ field: "level",
80301
80353
  quantity: t("the battery level", "il livello della batteria"),
80302
80354
  label: t("Battery", "Batteria"),
80303
80355
  unit: "%",
@@ -80339,7 +80391,7 @@ var SENSOR_CAP_VOCABULARY = {
80339
80391
  icon: "battery-charging"
80340
80392
  }
80341
80393
  ],
80342
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
80394
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
80343
80395
  extraEvents: [{
80344
80396
  category: EventCategory.DeviceAwake,
80345
80397
  label: t("Woke up", "Risvegliato"),
@@ -80357,7 +80409,7 @@ var SENSOR_CAP_VOCABULARY = {
80357
80409
  noun: t("Network link", "Collegamento di rete"),
80358
80410
  state: [{
80359
80411
  kind: "numeric",
80360
- field: "signalPercent",
80412
+ field: "signal",
80361
80413
  quantity: t("the signal strength", "l’intensità del segnale"),
80362
80414
  label: t("Signal", "Segnale"),
80363
80415
  unit: "%",