@camstack/addon-post-analysis 1.2.319 → 1.2.320

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 (15) hide show
  1. package/dist/{clip-model-registry-DSqobJfx.mjs → clip-model-registry-C-IEAIQQ.mjs} +223 -46
  2. package/dist/{clip-model-registry-BjYpZuuI.js → clip-model-registry-C_aKxHpy.js} +252 -45
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CKHzDA_B.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-D553qWb_.mjs} +2 -2
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-7e_3hsiC.mjs +26 -0
  8. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-C1V_UEyk.mjs +26 -0
  9. package/dist/pipeline-analytics/{hostInit-DDDjJDA6.mjs → hostInit-ByDyL2zi.mjs} +2 -2
  10. package/dist/pipeline-analytics/index.js +287 -66
  11. package/dist/pipeline-analytics/index.mjs +287 -66
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bz37odzX.mjs +0 -26
  15. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-B_KS96RA.mjs +0 -26
@@ -21843,14 +21843,52 @@ var NcAlarmNonBlockingEditSchema = object({
21843
21843
  nonBlocking: boolean()
21844
21844
  });
21845
21845
  /**
21846
+ * Controllable openings: opt IN to blocking (default is do not block). Contacts
21847
+ * keep using {@link NcAlarmNonBlockingEditSchema}.
21848
+ */
21849
+ var NcAlarmBlockingEditSchema = object({
21850
+ mode: AlarmArmModeSchema,
21851
+ deviceId: number().int().positive(),
21852
+ /** true = on the list (blocks when open); false = off the list (default). */
21853
+ blocking: boolean()
21854
+ });
21855
+ /**
21856
+ * Controllable openings: opt OUT of secure-on-arm (default is secure ON —
21857
+ * close / lock / turn off when this mode arms).
21858
+ */
21859
+ var NcAlarmSecureOnArmEditSchema = object({
21860
+ mode: AlarmArmModeSchema,
21861
+ deviceId: number().int().positive(),
21862
+ /** true = secure on arm (default); false = do not actuate on arm. */
21863
+ secureOnArm: boolean()
21864
+ });
21865
+ /**
21866
+ * One arm mode's device-id list (non-blocking, blocking, or secure-on-arm-off).
21867
+ */
21868
+ var NcAlarmModeDeviceListSchema = object({
21869
+ mode: AlarmArmModeSchema,
21870
+ deviceIds: array(number().int()).max(200)
21871
+ });
21872
+ /**
21873
+ * One arm mode's non-blocking list: devices that may be open when that mode
21874
+ * arms, without the arm being refused.
21875
+ */
21876
+ var NcAlarmNonBlockingSchema = NcAlarmModeDeviceListSchema;
21877
+ /** Controllable devices that DO block when open (opt-in; default empty). */
21878
+ var NcAlarmBlockingSchema = NcAlarmModeDeviceListSchema;
21879
+ /**
21880
+ * Controllable devices that do NOT secure on arm (opt-out; default empty =
21881
+ * every controllable secures).
21882
+ */
21883
+ var NcAlarmSecureOnArmOffSchema = NcAlarmModeDeviceListSchema;
21884
+ /**
21846
21885
  * The per-mode lists, at most one per mode. Two lists for one mode have no
21847
21886
  * meaning a reader could agree on (union? the last one?), so they are refused
21848
21887
  * at the boundary rather than interpreted.
21849
21888
  */
21850
- var NcAlarmNonBlockingListSchema = array(object({
21851
- mode: AlarmArmModeSchema,
21852
- deviceIds: array(number().int()).max(200)
21853
- })).max(8).refine(uniqueModes, { message: "nonBlocking: at most one list per arm mode" });
21889
+ var NcAlarmNonBlockingListSchema = array(NcAlarmNonBlockingSchema).max(8).refine(uniqueModes, { message: "nonBlocking: at most one list per arm mode" });
21890
+ var NcAlarmBlockingListSchema = array(NcAlarmBlockingSchema).max(8).refine(uniqueModes, { message: "blocking: at most one list per arm mode" });
21891
+ var NcAlarmSecureOnArmOffListSchema = array(NcAlarmSecureOnArmOffSchema).max(8).refine(uniqueModes, { message: "secureOnArmOff: at most one list per arm mode" });
21854
21892
  /**
21855
21893
  * The three durations — global, and per mode since D697 — the panel's state
21856
21894
  * machine runs on, who hears about its transitions, and which openings each mode tolerates.
@@ -21893,9 +21931,23 @@ var NcAlarmSettingsSchema = object({
21893
21931
  * arm (a window left ajar for the cat under `home`, say). At most one entry
21894
21932
  * per mode is meaningful. Defaulted to `[]` so a blob stored before D630
21895
21933
  * parses as "every opening blocks" — the behaviour it was written under.
21934
+ * Contacts use this list; controllable openings use {@link blocking} instead
21935
+ * (default: do not block).
21896
21936
  */
21897
21937
  nonBlocking: NcAlarmNonBlockingListSchema.default([]),
21898
21938
  /**
21939
+ * Per arm mode, controllable openings that DO refuse the arm when open.
21940
+ * Default `[]` = none block (secure-on-arm closes them instead). Absent on a
21941
+ * blob older than this field — read as empty.
21942
+ */
21943
+ blocking: NcAlarmBlockingListSchema.default([]),
21944
+ /**
21945
+ * Per arm mode, controllable openings that must NOT be actuated on arm.
21946
+ * Default `[]` = every controllable secures (close / lock / off). Absent on
21947
+ * an older blob — read as empty (secure ON).
21948
+ */
21949
+ secureOnArmOff: NcAlarmSecureOnArmOffListSchema.default([]),
21950
+ /**
21899
21951
  * Per arm mode, the delays that mode OVERRIDES (D697). A mode with no entry, or an entry
21900
21952
  * without a field, uses the global value above — so `[]`, the default, is exactly the
21901
21953
  * behaviour of a blob stored before this field existed. Read through `resolveModeDelays`.
@@ -21905,7 +21957,7 @@ var NcAlarmSettingsSchema = object({
21905
21957
  /**
21906
21958
  * Every field optional — a tab edits one control at a time.
21907
21959
  *
21908
- * `nonBlocking` and `modeDelays` are re-declared WITHOUT their defaults:
21960
+ * List fields and `modeDelays` are re-declared WITHOUT their defaults:
21909
21961
  * `.partial()` does not remove an inner `.default()`, so a patch that never
21910
21962
  * named the field would parse to `[]` and wipe every mode's list on an
21911
21963
  * unrelated edit (the same trap {@link NcRulePatchSchema} documents). Here
@@ -21913,11 +21965,15 @@ var NcAlarmSettingsSchema = object({
21913
21965
  */
21914
21966
  var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({
21915
21967
  nonBlocking: NcAlarmNonBlockingListSchema,
21968
+ blocking: NcAlarmBlockingListSchema,
21969
+ secureOnArmOff: NcAlarmSecureOnArmOffListSchema,
21916
21970
  /** Per-mode, per-field edits — NOT the whole list (see NcAlarmModeDelaysEditSchema). */
21917
21971
  modeDelays: NcAlarmModeDelaysEditListSchema,
21918
21972
  /** ONE membership change; the panel applies it to the list it holds at its turn. */
21919
- nonBlockingEdit: NcAlarmNonBlockingEditSchema
21920
- }).partial().refine((p) => p.nonBlocking === void 0 || p.nonBlockingEdit === void 0, { message: "nonBlocking and nonBlockingEdit are exclusive — send the whole lists or one edit" });
21973
+ nonBlockingEdit: NcAlarmNonBlockingEditSchema,
21974
+ blockingEdit: NcAlarmBlockingEditSchema,
21975
+ secureOnArmEdit: NcAlarmSecureOnArmEditSchema
21976
+ }).partial().refine((p) => p.nonBlocking === void 0 || p.nonBlockingEdit === void 0, { message: "nonBlocking and nonBlockingEdit are exclusive — send the whole lists or one edit" }).refine((p) => p.blocking === void 0 || p.blockingEdit === void 0, { message: "blocking and blockingEdit are exclusive — send the whole lists or one edit" }).refine((p) => p.secureOnArmOff === void 0 || p.secureOnArmEdit === void 0, { message: "secureOnArmOff and secureOnArmEdit are exclusive — send the whole lists or one edit" });
21921
21977
  /**
21922
21978
  * What one arm mode actually arms, DERIVED from the enabled rules gated on it.
21923
21979
  * Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
@@ -22032,7 +22088,13 @@ var NcAlarmSensorStateSchema = object({
22032
22088
  /** Why `unknown`: the read failed, or the slice holds no word its cap defines (a placeholder included). */
22033
22089
  unknownWhy: _enum(["read-failed", "unknown-word"]).nullable(),
22034
22090
  /** The device manager's liveness as the centre mirrors it; null = not known. */
22035
- online: boolean().nullable()
22091
+ online: boolean().nullable(),
22092
+ /**
22093
+ * True when the opening is a cover / lock / switch — the table shows the
22094
+ * Secure-on-arm switch and uses the controllable defaults. False for contacts
22095
+ * and for non-openings. Defaulted so an older hub answer still parses.
22096
+ */
22097
+ controllable: boolean().default(false)
22036
22098
  });
22037
22099
  var NcAlarmSensorsInputSchema = object({ deviceIds: array(number().int().positive()).max(500) });
22038
22100
  var NcAlarmSensorsSchema = object({
@@ -36129,38 +36191,52 @@ DeviceType.Camera, method(object({
36129
36191
  deviceId: number(),
36130
36192
  status: OsdStatusSchema
36131
36193
  });
36194
+ _enum([
36195
+ "value",
36196
+ "unit",
36197
+ "full"
36198
+ ]);
36199
+ _enum([
36200
+ "value+unit",
36201
+ "value",
36202
+ "unit"
36203
+ ]);
36132
36204
  /**
36133
- * `osd-manager` — the ORCHESTRATOR over the device-scope `osd` cap.
36134
- *
36135
- * The `osd` cap is the firmware contract: it probes a camera's overlay
36136
- * SLOTS and writes literal text into one. It has no idea WHERE that text
36137
- * comes from, and it must not — a driver that grew a "show the temperature
36138
- * here" feature would grow it once per vendor.
36139
- *
36140
- * This cap owns the other half: a per-(camera, slot) BINDING that says
36141
- * which value feeds the slot, how it is formatted, and under which
36142
- * conditions it is shown at all. One addon renders every binding on every
36143
- * camera, so a new source costs zero driver code.
36144
- *
36145
- * Three deliberate choices, each with a rejected alternative:
36146
- *
36147
- * 1. A source is `(capName, valuePath)` over the kernel's device
36148
- * runtime-state mirror — NOT a closed enum of source kinds. Every
36149
- * cap-keyed slice a device publishes is bindable the day the cap
36150
- * ships. The rejected alternative (one enum member per source, with
36151
- * a resolver branch each) is what makes "add the humidity too" a
36152
- * code change.
36153
- * 2. The display gate reuses `NcConditionsSchema` verbatim — the
36154
- * notification centre's condition vocabulary — rather than a parallel
36155
- * model. An operator who has learned one condition editor has learned
36156
- * both.
36157
- * 3. Because the renderer's facts are device STATE and not a detection
36158
- * record, only a SUBSET of that vocabulary can be answered here.
36159
- * `setSlotBinding` REJECTS the rest at write time (see
36160
- * `getConditionSupport`). It does not accept-then-fail-closed: a
36161
- * condition that can never be true renders a permanently blank
36162
- * overlay, and a blank overlay looks exactly like a broken camera.
36205
+ * How the operator reached the leaf device. `deviceId` is ALWAYS the
36206
+ * OSD-supported leaf that is read; `containerId` is set when the pick
36207
+ * went through a container (gateway) first.
36163
36208
  */
36209
+ var OsdTemplatePickSchema = object({
36210
+ containerId: number().int().optional(),
36211
+ deviceId: number().int()
36212
+ });
36213
+ /**
36214
+ * One named binding inside a multi-device template: device path + unit
36215
+ * selection + precision. The parser expands `{alias}`, `{alias.value}`,
36216
+ * `{alias.unit}`, or `{alias.full}` from the same binding — there is no
36217
+ * per-binding format lock.
36218
+ */
36219
+ var OsdTemplateBindingSchema = object({
36220
+ /** Token stem in the parser, e.g. `t` → `{t}` / `{t.value}`. Unique within the template. */
36221
+ alias: string().min(1).max(32).regex(/^[A-Za-z][A-Za-z0-9_-]*$/, "alias must start with a letter"),
36222
+ pick: OsdTemplatePickSchema,
36223
+ capName: string().min(1).max(64),
36224
+ valuePath: string().min(1).max(64),
36225
+ /** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
36226
+ displayUnit: string().max(16).optional(),
36227
+ maxDecimals: number().int().min(0).max(4).default(1)
36228
+ });
36229
+ /**
36230
+ * A named template: bindings (alias → leaf field) + a parser that
36231
+ * references `{alias}` / `{alias.value}` / `{alias.unit}` / `{alias.full}`.
36232
+ */
36233
+ var OsdNamedTemplateSchema = object({
36234
+ id: string().min(1).max(64),
36235
+ name: string().min(1).max(64),
36236
+ bindings: array(OsdTemplateBindingSchema).max(32).default([]),
36237
+ /** Parser with alias placeholders, e.g. `{t.value} {t.unit} / {h}`. */
36238
+ parser: string().max(256).default("")
36239
+ });
36164
36240
  /** Where a slot's value comes from. */
36165
36241
  var OsdSourceSchema = discriminatedUnion("kind", [
36166
36242
  object({
@@ -36179,11 +36255,17 @@ var OsdSourceSchema = discriminatedUnion("kind", [
36179
36255
  deviceId: number().int().optional(),
36180
36256
  capName: string().min(1).max(64),
36181
36257
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
36182
- valuePath: string().min(1).max(64)
36258
+ valuePath: string().min(1).max(64),
36259
+ /** Convert TO this unit at render. Absent = no conversion. */
36260
+ displayUnit: string().max(16).optional()
36183
36261
  }),
36184
36262
  object({
36185
36263
  kind: literal("latest-recognition"),
36186
36264
  recognition: _enum(["person", "plate"])
36265
+ }),
36266
+ object({
36267
+ kind: literal("template"),
36268
+ templateId: string().min(1).max(64)
36187
36269
  })
36188
36270
  ]);
36189
36271
  var OsdSlotBindingSchema = object({
@@ -36199,7 +36281,10 @@ var OsdSlotBindingSchema = object({
36199
36281
  * documented workaround for firmwares that reject `.` in overlay text.
36200
36282
  */
36201
36283
  maxDecimals: number().int().min(0).max(4).default(1),
36202
- /** Appended via `${unit}`. The state mirror does not carry units. */
36284
+ /**
36285
+ * Appended via `${unit}` when no unit conversion produces a label.
36286
+ * Prefer `source.displayUnit` for converted device-state values.
36287
+ */
36203
36288
  unitLabel: string().max(8).optional(),
36204
36289
  /** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
36205
36290
  valueMap: record(string(), string()).optional(),
@@ -36308,6 +36393,12 @@ method(object({ deviceId: number().int() }), object({
36308
36393
  }), method(object({ deviceId: number().int() }), object({ results: array(OsdRenderResultSchema) }), {
36309
36394
  kind: "mutation",
36310
36395
  auth: "admin"
36396
+ }), method(object({}), object({ templates: array(OsdNamedTemplateSchema) }), { auth: "admin" }), method(object({ template: OsdNamedTemplateSchema }), object({ template: OsdNamedTemplateSchema }), {
36397
+ kind: "mutation",
36398
+ auth: "admin"
36399
+ }), method(object({ templateId: string().min(1).max(64) }), object({ success: literal(true) }), {
36400
+ kind: "mutation",
36401
+ auth: "admin"
36311
36402
  });
36312
36403
  /**
36313
36404
  * Feeder connectivity / power status — mirrors the HA petkit device-status
@@ -47756,6 +47847,12 @@ Object.freeze({
47756
47847
  addonId: null,
47757
47848
  access: "create"
47758
47849
  },
47850
+ "osdManager.deleteTemplate": {
47851
+ capName: "osd-manager",
47852
+ capScope: "system",
47853
+ addonId: null,
47854
+ access: "delete"
47855
+ },
47759
47856
  "osdManager.getConditionSupport": {
47760
47857
  capName: "osd-manager",
47761
47858
  capScope: "system",
@@ -47774,6 +47871,12 @@ Object.freeze({
47774
47871
  addonId: null,
47775
47872
  access: "view"
47776
47873
  },
47874
+ "osdManager.listTemplates": {
47875
+ capName: "osd-manager",
47876
+ capScope: "system",
47877
+ addonId: null,
47878
+ access: "view"
47879
+ },
47777
47880
  "osdManager.previewSlot": {
47778
47881
  capName: "osd-manager",
47779
47882
  capScope: "system",
@@ -47792,6 +47895,12 @@ Object.freeze({
47792
47895
  addonId: null,
47793
47896
  access: "create"
47794
47897
  },
47898
+ "osdManager.upsertTemplate": {
47899
+ capName: "osd-manager",
47900
+ capScope: "system",
47901
+ addonId: null,
47902
+ access: "create"
47903
+ },
47795
47904
  "petFeeder.callPet": {
47796
47905
  capName: "pet-feeder",
47797
47906
  capScope: "device",
@@ -54372,6 +54481,18 @@ var ARMED_WORD_PREFIX = "armed_";
54372
54481
  var ALARM_PANEL_CAP = "alarm-panel";
54373
54482
  var ALARM_PANEL_TRIGGER_METHOD = "trigger";
54374
54483
  /**
54484
+ * Opening caps that can be ACTUATED to a secure state on arm (close / lock /
54485
+ * off). Contacts are openings but not controllable — they only block.
54486
+ */
54487
+ var NC_ALARM_CONTROLLABLE_CAPS = [
54488
+ "cover",
54489
+ "lock-control",
54490
+ "switch"
54491
+ ];
54492
+ function isAlarmControllableCap(cap) {
54493
+ return NC_ALARM_CONTROLLABLE_CAPS.includes(cap);
54494
+ }
54495
+ /**
54375
54496
  * A rule belongs to the alarm when its `deviceState` gate names ANY device's
54376
54497
  * `armed_*` word, or an ENABLED `onTrigger` sequence pulls the alarm panel's
54377
54498
  * trigger (D630).
@@ -54380,6 +54501,32 @@ function ruleBelongsToAlarm(rule) {
54380
54501
  if ((rule.conditions.deviceState?.states ?? []).some((s) => s.trim().toLowerCase().startsWith(ARMED_WORD_PREFIX))) return true;
54381
54502
  return (rule.onTrigger ?? []).some((sequence) => sequence.enabled && sequence.actions.some((step) => step.kind === "cap" && step.cap === ALARM_PANEL_CAP && step.method === ALARM_PANEL_TRIGGER_METHOD));
54382
54503
  }
54504
+ /** Whether this controllable should be closed/locked/turned off on arm. */
54505
+ function alarmDeviceSecureOnArm(input) {
54506
+ if (!input.controllable) return false;
54507
+ return !input.secureOnArmOff.includes(input.deviceId);
54508
+ }
54509
+ /** The one secure command for a controllable opening cap, or null for contacts. */
54510
+ function secureActuationFor(cap) {
54511
+ if (!isAlarmControllableCap(cap)) return null;
54512
+ switch (cap) {
54513
+ case "cover": return {
54514
+ cap,
54515
+ method: "close",
54516
+ args: {}
54517
+ };
54518
+ case "lock-control": return {
54519
+ cap,
54520
+ method: "lock",
54521
+ args: {}
54522
+ };
54523
+ case "switch": return {
54524
+ cap,
54525
+ method: "setState",
54526
+ args: { on: false }
54527
+ };
54528
+ }
54529
+ }
54383
54530
  var NC_ALARM_DELAY_FIELDS = [
54384
54531
  "exitDelaySec",
54385
54532
  "entryDelaySec",
@@ -54439,10 +54586,11 @@ function applyModeDelaysEdits(current, edits) {
54439
54586
  return out.filter((e) => e.exitDelaySec !== void 0 || e.entryDelaySec !== void 0 || e.triggeredDurationSec !== void 0);
54440
54587
  }
54441
54588
  /**
54442
- * Put ONE device on, or take it off, ONE mode's list. A no-op answers `changed: false`; an add
54443
- * to a full list is REFUSED by reason (never silently dropped); an emptied list drops its entry.
54589
+ * Put ONE device on, or take it off, ONE mode's device-id list. A no-op answers
54590
+ * `changed: false`; an add to a full list is REFUSED by reason (never silently
54591
+ * dropped); an emptied list drops its entry.
54444
54592
  */
54445
- function applyNonBlockingEdit(lists, edit) {
54593
+ function applyModeDeviceListEdit(lists, edit) {
54446
54594
  const copy = lists.map((l) => ({
54447
54595
  mode: l.mode,
54448
54596
  deviceIds: [...l.deviceIds]
@@ -54450,12 +54598,12 @@ function applyNonBlockingEdit(lists, edit) {
54450
54598
  const at = copy.findIndex((l) => l.mode === edit.mode);
54451
54599
  const held = at >= 0 ? copy[at]?.deviceIds ?? [] : [];
54452
54600
  const present = held.includes(edit.deviceId);
54453
- if (edit.nonBlocking === present) return {
54601
+ if (edit.present === present) return {
54454
54602
  kind: "applied",
54455
54603
  lists: copy,
54456
54604
  changed: false
54457
54605
  };
54458
- if (edit.nonBlocking) {
54606
+ if (edit.present) {
54459
54607
  if (held.length >= 200) return {
54460
54608
  kind: "refused",
54461
54609
  reason: "list-full",
@@ -54482,6 +54630,35 @@ function applyNonBlockingEdit(lists, edit) {
54482
54630
  };
54483
54631
  }
54484
54632
  /**
54633
+ * Put ONE device on, or take it off, ONE mode's non-blocking list.
54634
+ */
54635
+ function applyNonBlockingEdit(lists, edit) {
54636
+ return applyModeDeviceListEdit(lists, {
54637
+ mode: edit.mode,
54638
+ deviceId: edit.deviceId,
54639
+ present: edit.nonBlocking
54640
+ });
54641
+ }
54642
+ /** Controllable opt-in to blocking. */
54643
+ function applyBlockingEdit(lists, edit) {
54644
+ return applyModeDeviceListEdit(lists, {
54645
+ mode: edit.mode,
54646
+ deviceId: edit.deviceId,
54647
+ present: edit.blocking
54648
+ });
54649
+ }
54650
+ /**
54651
+ * Controllable secure-on-arm: `secureOnArm: true` removes from the opt-out list;
54652
+ * `false` adds to it.
54653
+ */
54654
+ function applySecureOnArmEdit(lists, edit) {
54655
+ return applyModeDeviceListEdit(lists, {
54656
+ mode: edit.mode,
54657
+ deviceId: edit.deviceId,
54658
+ present: !edit.secureOnArm
54659
+ });
54660
+ }
54661
+ /**
54485
54662
  * WHICH WAY A BOOLEAN SENSOR MOVED — read off the one slice a sensor event
54486
54663
  * persists (D640 "a sensor rule fires on the raise, the clear, or both").
54487
54664
  *
@@ -57684,12 +57861,24 @@ Object.defineProperty(exports, "addonWidgetsSourceCapability", {
57684
57861
  return addonWidgetsSourceCapability;
57685
57862
  }
57686
57863
  });
57864
+ Object.defineProperty(exports, "alarmDeviceSecureOnArm", {
57865
+ enumerable: true,
57866
+ get: function() {
57867
+ return alarmDeviceSecureOnArm;
57868
+ }
57869
+ });
57687
57870
  Object.defineProperty(exports, "alarmPanelCapability", {
57688
57871
  enumerable: true,
57689
57872
  get: function() {
57690
57873
  return alarmPanelCapability;
57691
57874
  }
57692
57875
  });
57876
+ Object.defineProperty(exports, "applyBlockingEdit", {
57877
+ enumerable: true,
57878
+ get: function() {
57879
+ return applyBlockingEdit;
57880
+ }
57881
+ });
57693
57882
  Object.defineProperty(exports, "applyModeDelaysEdits", {
57694
57883
  enumerable: true,
57695
57884
  get: function() {
@@ -57702,6 +57891,12 @@ Object.defineProperty(exports, "applyNonBlockingEdit", {
57702
57891
  return applyNonBlockingEdit;
57703
57892
  }
57704
57893
  });
57894
+ Object.defineProperty(exports, "applySecureOnArmEdit", {
57895
+ enumerable: true,
57896
+ get: function() {
57897
+ return applySecureOnArmEdit;
57898
+ }
57899
+ });
57705
57900
  Object.defineProperty(exports, "array", {
57706
57901
  enumerable: true,
57707
57902
  get: function() {
@@ -57882,6 +58077,12 @@ Object.defineProperty(exports, "hydrateSchema", {
57882
58077
  return hydrateSchema;
57883
58078
  }
57884
58079
  });
58080
+ Object.defineProperty(exports, "isAlarmControllableCap", {
58081
+ enumerable: true,
58082
+ get: function() {
58083
+ return isAlarmControllableCap;
58084
+ }
58085
+ });
57885
58086
  Object.defineProperty(exports, "isAudioClassName", {
57886
58087
  enumerable: true,
57887
58088
  get: function() {
@@ -58134,6 +58335,12 @@ Object.defineProperty(exports, "sceneMonitorCapability", {
58134
58335
  return sceneMonitorCapability;
58135
58336
  }
58136
58337
  });
58338
+ Object.defineProperty(exports, "secureActuationFor", {
58339
+ enumerable: true,
58340
+ get: function() {
58341
+ return secureActuationFor;
58342
+ }
58343
+ });
58137
58344
  Object.defineProperty(exports, "sensorRaisedOf", {
58138
58345
  enumerable: true,
58139
58346
  get: function() {
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_clip_model_registry = require("../clip-model-registry-BjYpZuuI.js");
5
+ const require_clip_model_registry = require("../clip-model-registry-C_aKxHpy.js");
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_clip_model_registry.__toESM(node_fs);
8
8
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { An as embeddingModelFailedError, Fr as BaseAddon, Ht as PoolMemoryWatchdog, Mn as embeddingRequirementsFailedError, Nn as embeddingRequirementsUnavailableError, Ur as normalizeNodeId, a as CLIP_EMBEDDING_STEP_ID, c as resolveClusterModelPin, i as CLIP_TEXT_MODELS, kn as embeddingEncoderCapability, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, tr as parseProcStatus, ur as resolvePoolMemoryPolicy } from "../clip-model-registry-DSqobJfx.mjs";
1
+ import { Br as BaseAddon, Fn as embeddingRequirementsFailedError, Ht as PoolMemoryWatchdog, In as embeddingRequirementsUnavailableError, Jr as normalizeNodeId, Mn as embeddingEncoderCapability, Nn as embeddingModelFailedError, a as CLIP_EMBEDDING_STEP_ID, ar as parseProcStatus, c as resolveClusterModelPin, i as CLIP_TEXT_MODELS, mr as resolvePoolMemoryPolicy, n as DEFAULT_CLIP_MODEL, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS } from "../clip-model-registry-C-IEAIQQ.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -1,8 +1,8 @@
1
1
  import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-C0AuF9av.mjs";
2
2
  import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
3
- import { a as s, i as c, n as l, o as u, r as d, s as f, t as p } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-B_KS96RA.mjs";
3
+ import { a as s, i as c, n as l, o as u, r as d, s as f, t as p } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-C1V_UEyk.mjs";
4
4
  import { n as m, r as h, t as g } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-Bm-iyjmq.mjs";
5
- import { t as _ } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bz37odzX.mjs";
5
+ import { t as _ } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-7e_3hsiC.mjs";
6
6
  //#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7
7
  var v = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), y = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), b = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), x = (e) => {
8
8
  let t = b(e);
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.292",
21
+ version: "1.2.296",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.222",
36
+ version: "1.2.223",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_pipeline_analytics_widgets",