@camstack/addon-provider-rademacher 0.2.104 → 0.2.106

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/addon.js CHANGED
@@ -14464,6 +14464,107 @@ var ExposeInputSchema = object({
14464
14464
  });
14465
14465
  var UnexposeInputSchema = object({ deviceId: string() });
14466
14466
  method(_void(), DeviceExportStatusSchema), method(_void(), array(DeviceKindSchema)), method(_void(), array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), { kind: "mutation" }), method(UnexposeInputSchema, _void(), { kind: "mutation" });
14467
+ /** Wire/storage schema for one icon id. */
14468
+ var LocationIconIdSchema = _enum([
14469
+ "map-pin",
14470
+ "house",
14471
+ "door-open",
14472
+ "sofa",
14473
+ "utensils",
14474
+ "bed-double",
14475
+ "bath",
14476
+ "briefcase",
14477
+ "car",
14478
+ "circle-parking",
14479
+ "route",
14480
+ "trees",
14481
+ "umbrella",
14482
+ "waves-ladder",
14483
+ "fence",
14484
+ "package",
14485
+ "warehouse",
14486
+ "store",
14487
+ "sun",
14488
+ "radar"
14489
+ ]);
14490
+ /**
14491
+ * One (location, icon) assignment as it travels.
14492
+ *
14493
+ * `locationKey` is ALWAYS {@link locationIconKey} of the label — never the
14494
+ * operator's casing. The registry matches labels trimmed + case-insensitively
14495
+ * everywhere (`addLocation`, `removeLocation`, `renameLocation`), and a
14496
+ * case-only rename (`cucina` → `Cucina`) is a real edit this repo supports; a
14497
+ * map keyed on the displayed casing would orphan its entry on exactly that
14498
+ * edit. Consumers join by keying their own label through `locationIconKey`.
14499
+ */
14500
+ var LocationIconAssignmentSchema = object({
14501
+ locationKey: string(),
14502
+ icon: LocationIconIdSchema
14503
+ });
14504
+ /**
14505
+ * One (location, description) assignment as it travels.
14506
+ *
14507
+ * Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
14508
+ * reason: this lived for a while in the post-analysis addon's own settings,
14509
+ * keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
14510
+ * the Locations page carried the icon and silently orphaned the description —
14511
+ * two authorities for one thing, joined by two different rules. Now both hang
14512
+ * off the location itself, on `locationIconKey`.
14513
+ */
14514
+ var LocationDescriptionAssignmentSchema = object({
14515
+ locationKey: string(),
14516
+ description: string()
14517
+ });
14518
+ /**
14519
+ * A SITE ZONE — a named part of the property that several locations belong to.
14520
+ *
14521
+ * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
14522
+ * kitchen. A camera belongs to exactly one location, and a location to at most
14523
+ * one zone, so a camera's zone is derived and never stored on the device: the
14524
+ * whole point of this entity is that grouping rooms touches no device row.
14525
+ *
14526
+ * ## Why not `zone`
14527
+ *
14528
+ * Because `zone` is already the most loaded word in this product: 612 source
14529
+ * files and 24 Italian strings where it means a DETECTION zone drawn on a
14530
+ * camera. The two are unrelated — one is a polygon in a frame, the other is a
14531
+ * set of rooms — and a reader who confuses them will look for a camera's
14532
+ * bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
14533
+ * word by calling the drawn one what it actually is: a detection zone.
14534
+ *
14535
+ * ## The key
14536
+ *
14537
+ * `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
14538
+ * use (`locationIconKey`). Membership and the icon both hang off it, so a
14539
+ * case-only rename keeps them, which is exactly the orphaning that cost us a
14540
+ * silently-dropped location description.
14541
+ *
14542
+ * The icon vocabulary is the location one, unchanged: a zone is drawn on the
14543
+ * same two surfaces by the same glyph map, so a second vocabulary would be a
14544
+ * second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
14545
+ */
14546
+ /**
14547
+ * One zone as it travels: its key, the label the operator typed, its icon and
14548
+ * the locations inside it.
14549
+ *
14550
+ * The LABEL is carried alongside the key because the key is lossy on purpose —
14551
+ * a surface must show "Zona notte", not "zona notte". Locations are carried
14552
+ * here, rather than left to a second call, because every consumer wants both
14553
+ * at once and a viewer that asked twice could render a zone whose membership
14554
+ * it has not fetched yet.
14555
+ *
14556
+ * `icon: null` means nobody chose one, which is NOT the fallback pin: only one
14557
+ * of those two is a choice, and a picker has to draw them differently.
14558
+ */
14559
+ var SiteZoneSchema = object({
14560
+ zoneKey: string(),
14561
+ label: string(),
14562
+ icon: LocationIconIdSchema.nullable(),
14563
+ /** Folded location keys, sorted. A location listed here need not be
14564
+ * REGISTERED — devices carry labels nobody registered, and those rooms are
14565
+ * the ones that most want grouping. */
14566
+ locationKeys: array(string())
14567
+ });
14467
14568
  var ProviderStatusSchema = object({
14468
14569
  connected: boolean(),
14469
14570
  deviceCount: number(),
@@ -15056,6 +15157,39 @@ method(object({
15056
15157
  }), object({ moved: number() }), {
15057
15158
  kind: "mutation",
15058
15159
  auth: "admin"
15160
+ }), method(_void(), array(LocationIconAssignmentSchema)), method(object({
15161
+ location: string(),
15162
+ icon: LocationIconIdSchema.nullable()
15163
+ }), _void(), {
15164
+ kind: "mutation",
15165
+ auth: "admin"
15166
+ }), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
15167
+ location: string(),
15168
+ description: string().max(400).nullable()
15169
+ }), _void(), {
15170
+ kind: "mutation",
15171
+ auth: "admin"
15172
+ }), method(_void(), array(SiteZoneSchema)), method(object({
15173
+ name: string(),
15174
+ icon: LocationIconIdSchema.nullable().optional()
15175
+ }), _void(), {
15176
+ kind: "mutation",
15177
+ auth: "admin"
15178
+ }), method(object({ name: string() }), _void(), {
15179
+ kind: "mutation",
15180
+ auth: "admin"
15181
+ }), method(object({
15182
+ from: string(),
15183
+ to: string()
15184
+ }), _void(), {
15185
+ kind: "mutation",
15186
+ auth: "admin"
15187
+ }), method(object({
15188
+ location: string(),
15189
+ zone: string().nullable()
15190
+ }), _void(), {
15191
+ kind: "mutation",
15192
+ auth: "admin"
15059
15193
  }), method(object({
15060
15194
  deviceId: number(),
15061
15195
  disabled: boolean()
@@ -37966,6 +38100,18 @@ Object.freeze({
37966
38100
  addonId: null,
37967
38101
  access: "view"
37968
38102
  },
38103
+ "deviceManager.listLocationDescriptions": {
38104
+ capName: "device-manager",
38105
+ capScope: "system",
38106
+ addonId: null,
38107
+ access: "view"
38108
+ },
38109
+ "deviceManager.listLocationIcons": {
38110
+ capName: "device-manager",
38111
+ capScope: "system",
38112
+ addonId: null,
38113
+ access: "view"
38114
+ },
37969
38115
  "deviceManager.listLocations": {
37970
38116
  capName: "device-manager",
37971
38117
  capScope: "system",
@@ -37978,6 +38124,12 @@ Object.freeze({
37978
38124
  addonId: null,
37979
38125
  access: "view"
37980
38126
  },
38127
+ "deviceManager.listSiteZones": {
38128
+ capName: "device-manager",
38129
+ capScope: "system",
38130
+ addonId: null,
38131
+ access: "view"
38132
+ },
37981
38133
  "deviceManager.listWrappersForCap": {
37982
38134
  capName: "device-manager",
37983
38135
  capScope: "system",
@@ -38062,12 +38214,24 @@ Object.freeze({
38062
38214
  addonId: null,
38063
38215
  access: "delete"
38064
38216
  },
38217
+ "deviceManager.removeSiteZone": {
38218
+ capName: "device-manager",
38219
+ capScope: "system",
38220
+ addonId: null,
38221
+ access: "delete"
38222
+ },
38065
38223
  "deviceManager.renameLocation": {
38066
38224
  capName: "device-manager",
38067
38225
  capScope: "system",
38068
38226
  addonId: null,
38069
38227
  access: "create"
38070
38228
  },
38229
+ "deviceManager.renameSiteZone": {
38230
+ capName: "device-manager",
38231
+ capScope: "system",
38232
+ addonId: null,
38233
+ access: "create"
38234
+ },
38071
38235
  "deviceManager.runDeviceAction": {
38072
38236
  capName: "device-manager",
38073
38237
  capScope: "system",
@@ -38110,6 +38274,24 @@ Object.freeze({
38110
38274
  addonId: null,
38111
38275
  access: "create"
38112
38276
  },
38277
+ "deviceManager.setLocationDescription": {
38278
+ capName: "device-manager",
38279
+ capScope: "system",
38280
+ addonId: null,
38281
+ access: "create"
38282
+ },
38283
+ "deviceManager.setLocationIcon": {
38284
+ capName: "device-manager",
38285
+ capScope: "system",
38286
+ addonId: null,
38287
+ access: "create"
38288
+ },
38289
+ "deviceManager.setLocationZone": {
38290
+ capName: "device-manager",
38291
+ capScope: "system",
38292
+ addonId: null,
38293
+ access: "create"
38294
+ },
38113
38295
  "deviceManager.setMetadata": {
38114
38296
  capName: "device-manager",
38115
38297
  capScope: "system",
@@ -38140,6 +38322,12 @@ Object.freeze({
38140
38322
  addonId: null,
38141
38323
  access: "create"
38142
38324
  },
38325
+ "deviceManager.setSiteZone": {
38326
+ capName: "device-manager",
38327
+ capScope: "system",
38328
+ addonId: null,
38329
+ access: "create"
38330
+ },
38143
38331
  "deviceManager.setStreamProfileMap": {
38144
38332
  capName: "device-manager",
38145
38333
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -14463,6 +14463,107 @@ var ExposeInputSchema = object({
14463
14463
  });
14464
14464
  var UnexposeInputSchema = object({ deviceId: string() });
14465
14465
  method(_void(), DeviceExportStatusSchema), method(_void(), array(DeviceKindSchema)), method(_void(), array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), { kind: "mutation" }), method(UnexposeInputSchema, _void(), { kind: "mutation" });
14466
+ /** Wire/storage schema for one icon id. */
14467
+ var LocationIconIdSchema = _enum([
14468
+ "map-pin",
14469
+ "house",
14470
+ "door-open",
14471
+ "sofa",
14472
+ "utensils",
14473
+ "bed-double",
14474
+ "bath",
14475
+ "briefcase",
14476
+ "car",
14477
+ "circle-parking",
14478
+ "route",
14479
+ "trees",
14480
+ "umbrella",
14481
+ "waves-ladder",
14482
+ "fence",
14483
+ "package",
14484
+ "warehouse",
14485
+ "store",
14486
+ "sun",
14487
+ "radar"
14488
+ ]);
14489
+ /**
14490
+ * One (location, icon) assignment as it travels.
14491
+ *
14492
+ * `locationKey` is ALWAYS {@link locationIconKey} of the label — never the
14493
+ * operator's casing. The registry matches labels trimmed + case-insensitively
14494
+ * everywhere (`addLocation`, `removeLocation`, `renameLocation`), and a
14495
+ * case-only rename (`cucina` → `Cucina`) is a real edit this repo supports; a
14496
+ * map keyed on the displayed casing would orphan its entry on exactly that
14497
+ * edit. Consumers join by keying their own label through `locationIconKey`.
14498
+ */
14499
+ var LocationIconAssignmentSchema = object({
14500
+ locationKey: string(),
14501
+ icon: LocationIconIdSchema
14502
+ });
14503
+ /**
14504
+ * One (location, description) assignment as it travels.
14505
+ *
14506
+ * Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
14507
+ * reason: this lived for a while in the post-analysis addon's own settings,
14508
+ * keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
14509
+ * the Locations page carried the icon and silently orphaned the description —
14510
+ * two authorities for one thing, joined by two different rules. Now both hang
14511
+ * off the location itself, on `locationIconKey`.
14512
+ */
14513
+ var LocationDescriptionAssignmentSchema = object({
14514
+ locationKey: string(),
14515
+ description: string()
14516
+ });
14517
+ /**
14518
+ * A SITE ZONE — a named part of the property that several locations belong to.
14519
+ *
14520
+ * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
14521
+ * kitchen. A camera belongs to exactly one location, and a location to at most
14522
+ * one zone, so a camera's zone is derived and never stored on the device: the
14523
+ * whole point of this entity is that grouping rooms touches no device row.
14524
+ *
14525
+ * ## Why not `zone`
14526
+ *
14527
+ * Because `zone` is already the most loaded word in this product: 612 source
14528
+ * files and 24 Italian strings where it means a DETECTION zone drawn on a
14529
+ * camera. The two are unrelated — one is a polygon in a frame, the other is a
14530
+ * set of rooms — and a reader who confuses them will look for a camera's
14531
+ * bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
14532
+ * word by calling the drawn one what it actually is: a detection zone.
14533
+ *
14534
+ * ## The key
14535
+ *
14536
+ * `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
14537
+ * use (`locationIconKey`). Membership and the icon both hang off it, so a
14538
+ * case-only rename keeps them, which is exactly the orphaning that cost us a
14539
+ * silently-dropped location description.
14540
+ *
14541
+ * The icon vocabulary is the location one, unchanged: a zone is drawn on the
14542
+ * same two surfaces by the same glyph map, so a second vocabulary would be a
14543
+ * second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
14544
+ */
14545
+ /**
14546
+ * One zone as it travels: its key, the label the operator typed, its icon and
14547
+ * the locations inside it.
14548
+ *
14549
+ * The LABEL is carried alongside the key because the key is lossy on purpose —
14550
+ * a surface must show "Zona notte", not "zona notte". Locations are carried
14551
+ * here, rather than left to a second call, because every consumer wants both
14552
+ * at once and a viewer that asked twice could render a zone whose membership
14553
+ * it has not fetched yet.
14554
+ *
14555
+ * `icon: null` means nobody chose one, which is NOT the fallback pin: only one
14556
+ * of those two is a choice, and a picker has to draw them differently.
14557
+ */
14558
+ var SiteZoneSchema = object({
14559
+ zoneKey: string(),
14560
+ label: string(),
14561
+ icon: LocationIconIdSchema.nullable(),
14562
+ /** Folded location keys, sorted. A location listed here need not be
14563
+ * REGISTERED — devices carry labels nobody registered, and those rooms are
14564
+ * the ones that most want grouping. */
14565
+ locationKeys: array(string())
14566
+ });
14466
14567
  var ProviderStatusSchema = object({
14467
14568
  connected: boolean(),
14468
14569
  deviceCount: number(),
@@ -15055,6 +15156,39 @@ method(object({
15055
15156
  }), object({ moved: number() }), {
15056
15157
  kind: "mutation",
15057
15158
  auth: "admin"
15159
+ }), method(_void(), array(LocationIconAssignmentSchema)), method(object({
15160
+ location: string(),
15161
+ icon: LocationIconIdSchema.nullable()
15162
+ }), _void(), {
15163
+ kind: "mutation",
15164
+ auth: "admin"
15165
+ }), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
15166
+ location: string(),
15167
+ description: string().max(400).nullable()
15168
+ }), _void(), {
15169
+ kind: "mutation",
15170
+ auth: "admin"
15171
+ }), method(_void(), array(SiteZoneSchema)), method(object({
15172
+ name: string(),
15173
+ icon: LocationIconIdSchema.nullable().optional()
15174
+ }), _void(), {
15175
+ kind: "mutation",
15176
+ auth: "admin"
15177
+ }), method(object({ name: string() }), _void(), {
15178
+ kind: "mutation",
15179
+ auth: "admin"
15180
+ }), method(object({
15181
+ from: string(),
15182
+ to: string()
15183
+ }), _void(), {
15184
+ kind: "mutation",
15185
+ auth: "admin"
15186
+ }), method(object({
15187
+ location: string(),
15188
+ zone: string().nullable()
15189
+ }), _void(), {
15190
+ kind: "mutation",
15191
+ auth: "admin"
15058
15192
  }), method(object({
15059
15193
  deviceId: number(),
15060
15194
  disabled: boolean()
@@ -37965,6 +38099,18 @@ Object.freeze({
37965
38099
  addonId: null,
37966
38100
  access: "view"
37967
38101
  },
38102
+ "deviceManager.listLocationDescriptions": {
38103
+ capName: "device-manager",
38104
+ capScope: "system",
38105
+ addonId: null,
38106
+ access: "view"
38107
+ },
38108
+ "deviceManager.listLocationIcons": {
38109
+ capName: "device-manager",
38110
+ capScope: "system",
38111
+ addonId: null,
38112
+ access: "view"
38113
+ },
37968
38114
  "deviceManager.listLocations": {
37969
38115
  capName: "device-manager",
37970
38116
  capScope: "system",
@@ -37977,6 +38123,12 @@ Object.freeze({
37977
38123
  addonId: null,
37978
38124
  access: "view"
37979
38125
  },
38126
+ "deviceManager.listSiteZones": {
38127
+ capName: "device-manager",
38128
+ capScope: "system",
38129
+ addonId: null,
38130
+ access: "view"
38131
+ },
37980
38132
  "deviceManager.listWrappersForCap": {
37981
38133
  capName: "device-manager",
37982
38134
  capScope: "system",
@@ -38061,12 +38213,24 @@ Object.freeze({
38061
38213
  addonId: null,
38062
38214
  access: "delete"
38063
38215
  },
38216
+ "deviceManager.removeSiteZone": {
38217
+ capName: "device-manager",
38218
+ capScope: "system",
38219
+ addonId: null,
38220
+ access: "delete"
38221
+ },
38064
38222
  "deviceManager.renameLocation": {
38065
38223
  capName: "device-manager",
38066
38224
  capScope: "system",
38067
38225
  addonId: null,
38068
38226
  access: "create"
38069
38227
  },
38228
+ "deviceManager.renameSiteZone": {
38229
+ capName: "device-manager",
38230
+ capScope: "system",
38231
+ addonId: null,
38232
+ access: "create"
38233
+ },
38070
38234
  "deviceManager.runDeviceAction": {
38071
38235
  capName: "device-manager",
38072
38236
  capScope: "system",
@@ -38109,6 +38273,24 @@ Object.freeze({
38109
38273
  addonId: null,
38110
38274
  access: "create"
38111
38275
  },
38276
+ "deviceManager.setLocationDescription": {
38277
+ capName: "device-manager",
38278
+ capScope: "system",
38279
+ addonId: null,
38280
+ access: "create"
38281
+ },
38282
+ "deviceManager.setLocationIcon": {
38283
+ capName: "device-manager",
38284
+ capScope: "system",
38285
+ addonId: null,
38286
+ access: "create"
38287
+ },
38288
+ "deviceManager.setLocationZone": {
38289
+ capName: "device-manager",
38290
+ capScope: "system",
38291
+ addonId: null,
38292
+ access: "create"
38293
+ },
38112
38294
  "deviceManager.setMetadata": {
38113
38295
  capName: "device-manager",
38114
38296
  capScope: "system",
@@ -38139,6 +38321,12 @@ Object.freeze({
38139
38321
  addonId: null,
38140
38322
  access: "create"
38141
38323
  },
38324
+ "deviceManager.setSiteZone": {
38325
+ capName: "device-manager",
38326
+ capScope: "system",
38327
+ addonId: null,
38328
+ access: "create"
38329
+ },
38142
38330
  "deviceManager.setStreamProfileMap": {
38143
38331
  capName: "device-manager",
38144
38332
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rademacher",
3
- "version": "0.2.104",
3
+ "version": "0.2.106",
4
4
  "description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
5
5
  "keywords": [
6
6
  "camstack",