@camstack/addon-admin-ui 1.2.261 → 1.2.263

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 (82) hide show
  1. package/dist/assets/{AddonCollectionPage--eDij6gR.js → AddonCollectionPage-J8z6UMQo.js} +1 -1
  2. package/dist/assets/{Addons-DPcMLHlz.js → Addons-CM_Y7pMH.js} +1 -1
  3. package/dist/assets/{AdminTabs-BK7N8lsV.js → AdminTabs-hyuVAxxz.js} +1 -1
  4. package/dist/assets/{AiProfiles-B7jyJdda.js → AiProfiles-DClxdmox.js} +1 -1
  5. package/dist/assets/{BrokerForm-ITsMv2qE.js → BrokerForm-TNZ9QyfX.js} +1 -1
  6. package/dist/assets/{Build-BBPfMW38.js → Build-YTaIKS1B.js} +3 -3
  7. package/dist/assets/{Capabilities-CuUy6amU.js → Capabilities-CO44-o71.js} +1 -1
  8. package/dist/assets/{CapabilityBadges-crNVvPMW.js → CapabilityBadges-Bo-BH2uc.js} +1 -1
  9. package/dist/assets/{Cluster-CTZlYWRi.js → Cluster-98d3x5B3.js} +1 -1
  10. package/dist/assets/{Data-vU8VVocG.js → Data-oGeSaknS.js} +1 -1
  11. package/dist/assets/{DetectionIntelligence-CsXbDOMG.js → DetectionIntelligence-PdGRL8lg.js} +1 -1
  12. package/dist/assets/{DeviceAggregateSection-Bns6q4dh.js → DeviceAggregateSection-BEXHugHL.js} +1 -1
  13. package/dist/assets/{DeviceDetail-Bf9bvxlm.js → DeviceDetail-CUt2USC6.js} +2 -2
  14. package/dist/assets/{Devices-DyfNHzjP.js → Devices-shZWP5Yg.js} +1 -1
  15. package/dist/assets/{EmbedPlayerPage-OeC5zBSX.js → EmbedPlayerPage-DV83pkcB.js} +1 -1
  16. package/dist/assets/{Events-bi-6IwJN.js → Events-BFRPAHa4.js} +1 -1
  17. package/dist/assets/FormBuilder-C3vJBSX-.js +1 -0
  18. package/dist/assets/{Identity-BBIh2my-.js → Identity-CYbD_-ic.js} +1 -1
  19. package/dist/assets/{IntegrationDetail-CKWEoy9C.js → IntegrationDetail-Baziqx9Y.js} +1 -1
  20. package/dist/assets/{Integrations-Ciw2g5r2.js → Integrations--B5a_e2E.js} +1 -1
  21. package/dist/assets/{Integrations-BWWIE00S.js → Integrations-DiLGO-6Z.js} +1 -1
  22. package/dist/assets/{Locations-2ZAHX5o0.js → Locations-KB7V5Ppo.js} +2 -2
  23. package/dist/assets/{Logs-D671CkLk.js → Logs-DoKzOnUi.js} +1 -1
  24. package/dist/assets/{MotionZonesSettings-BLY_TxNO.js → MotionZonesSettings-D1gJv8PU.js} +1 -1
  25. package/dist/assets/{MyAccess-DhSsXA2u.js → MyAccess-DfxJNeSK.js} +1 -1
  26. package/dist/assets/{Network-B2odAKC8.js → Network-D-Dzd878.js} +1 -1
  27. package/dist/assets/{NodeAddonsSettingsPanel-D5FQHmR2.js → NodeAddonsSettingsPanel-cAEQIZgk.js} +1 -1
  28. package/dist/assets/{NodeInferenceDevices-C7Az-W_O.js → NodeInferenceDevices-KxYvEA3S.js} +1 -1
  29. package/dist/assets/Notifications-CDpKRLvB.js +1 -0
  30. package/dist/assets/{Pipeline-DoJ8nNnx.js → Pipeline-BG4a7x11.js} +1 -1
  31. package/dist/assets/{Plates-IKZ7Utth.js → Plates-BJGA6QU4.js} +1 -1
  32. package/dist/assets/{PrivacyMaskSettings-CqzEZNtz.js → PrivacyMaskSettings-BafWGIBw.js} +1 -1
  33. package/dist/assets/{ProviderIcon-BAV-Rvhs.js → ProviderIcon-Ier5778X.js} +1 -1
  34. package/dist/assets/{Recordings-BP0eyo5u.js → Recordings-BJpeP7u1.js} +1 -1
  35. package/dist/assets/{ScanNetworkModal-CU9cvVBy.js → ScanNetworkModal-CXa0dvg6.js} +1 -1
  36. package/dist/assets/{SceneMonitorEditor-v5nh2Lxc.js → SceneMonitorEditor-ClVY678X.js} +1 -1
  37. package/dist/assets/{Scenes-D1EvPYdu.js → Scenes-BRnLcHWu.js} +1 -1
  38. package/dist/assets/{Settings-dgHQMbm7.js → Settings-DnxZIVgH.js} +1 -1
  39. package/dist/assets/{Showroom-CsAbqvVD.js → Showroom-DgJj4G1e.js} +1 -1
  40. package/dist/assets/{StorageLocationsPanel-C2e4eB8x.js → StorageLocationsPanel-BCoV1JYL.js} +1 -1
  41. package/dist/assets/{Terminal-hYboOO7b.js → Terminal-Cp-ihrhX.js} +1 -1
  42. package/dist/assets/{Viewer-B02QBhjE.js → Viewer-Cb3MHJA6.js} +1 -1
  43. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BKuXrkMW.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CVllR8dg.js} +1 -1
  44. package/dist/assets/{archive-DIvzskcI.js → archive-fqvC5Brj.js} +1 -1
  45. package/dist/assets/{authed-media-Bd-QFC5W.js → authed-media-CCdIEUUc.js} +1 -1
  46. package/dist/assets/{boxes-CSKKBi4u.js → boxes-ClWpPtWg.js} +1 -1
  47. package/dist/assets/circle-slash-Nc-f9yJq.js +1 -0
  48. package/dist/assets/{debounced-invalidate-BV3nDQPS.js → debounced-invalidate-DgHMg9UT.js} +1 -1
  49. package/dist/assets/{dist-C4v18q8H.js → dist-B2jY4wyb.js} +1 -1
  50. package/dist/assets/dist-DcOFqKuw.js +349 -0
  51. package/dist/assets/{face-bbox-BvbTxaCS.js → face-bbox-eM3CYrIO.js} +1 -1
  52. package/dist/assets/{hard-drive-download-B2GSnQHz.js → hard-drive-download-DU8y4SBf.js} +1 -1
  53. package/dist/assets/{hostInit-DSbv4-s9.js → hostInit-DLZ0fmTR.js} +1 -1
  54. package/dist/assets/{index-DAAsNMtg.js → index-Wx8qmf6S.js} +3 -3
  55. package/dist/assets/{layers-BBmKM8YT.js → layers-CRY7Jre0.js} +1 -1
  56. package/dist/assets/{location-owned-usage-kZ5sn58L.js → location-owned-usage-D96OhJZW.js} +1 -1
  57. package/dist/assets/{mf-entry-bootstrap-0-86b82436.js → mf-entry-bootstrap-0-c1d3ec86.js} +2 -2
  58. package/dist/assets/{player-overlays-DRIy-fCw.js → player-overlays-CjslyEYg.js} +1 -1
  59. package/dist/assets/remoteEntry-BcN492UK.js +1 -0
  60. package/dist/assets/{send-DHfS_uWJ.js → send-DmQ6sJmy.js} +1 -1
  61. package/dist/assets/{settings-2-BBZVr4ih.js → settings-2-D5fIb1dV.js} +1 -1
  62. package/dist/assets/{square-check-big-D11rDTUh.js → square-check-big-BTFyRrw3.js} +1 -1
  63. package/dist/assets/src-DPG5IJP-.js +349 -0
  64. package/dist/assets/src-D_A-r19A.js +67 -0
  65. package/dist/assets/{use-scenes-feed-BrKLinIU.js → use-scenes-feed-DOxdzFvn.js} +1 -1
  66. package/dist/assets/{use-stationary-objects-BK5BDo2O.js → use-stationary-objects-D4OTJ7li.js} +1 -1
  67. package/dist/assets/useEventInvalidation-zyhPhPWm.js +1 -0
  68. package/dist/assets/{useNodeUrlSelection-DjLiOaP3.js → useNodeUrlSelection-DGnePN6G.js} +1 -1
  69. package/dist/assets/user-round-DfBfVsLc.js +1 -0
  70. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BmTwfqc6.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DsQi1FDd.js} +2 -2
  71. package/dist/index.html +5 -5
  72. package/dist/server/addon.js +243 -42
  73. package/package.json +1 -1
  74. package/dist/assets/FormBuilder-GwoY4eBk.js +0 -1
  75. package/dist/assets/Notifications-Blz8iPpb.js +0 -1
  76. package/dist/assets/circle-slash-CteLsla4.js +0 -1
  77. package/dist/assets/dist-BbIc-rCH.js +0 -349
  78. package/dist/assets/remoteEntry-554FIKL7.js +0 -1
  79. package/dist/assets/src-CsP-9WJl.js +0 -349
  80. package/dist/assets/src-CvEqSgs7.js +0 -67
  81. package/dist/assets/useEventInvalidation-apdOrvxA.js +0 -1
  82. package/dist/assets/user-round-kptqRABF.js +0 -1
@@ -5361,7 +5361,7 @@ var ZodIssueCode = {
5361
5361
  var ZodFirstPartyTypeKind;
5362
5362
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5363
5363
  //#endregion
5364
- //#region ../types/dist/sleep-pM_J7YnY.mjs
5364
+ //#region ../types/dist/sleep-D_4W7xuQ.mjs
5365
5365
  /**
5366
5366
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5367
5367
  * window to float samples (D455).
@@ -7356,11 +7356,17 @@ var RawStateResultSchema = object({
7356
7356
  method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(object({ deviceId: number() }), array(ConfigEntrySchema$1)), method(object({
7357
7357
  deviceId: number(),
7358
7358
  values: record(string(), unknown())
7359
- }), _void(), { kind: "mutation" }), method(object({
7359
+ }), _void(), {
7360
+ kind: "mutation",
7361
+ auth: "admin"
7362
+ }), method(object({
7360
7363
  deviceId: number(),
7361
7364
  action: string().min(1),
7362
7365
  input: unknown()
7363
- }), unknown(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
7366
+ }), unknown(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), {
7367
+ kind: "mutation",
7368
+ auth: "admin"
7369
+ }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
7364
7370
  new Set([
7365
7371
  "track",
7366
7372
  "summary",
@@ -11584,7 +11590,7 @@ method(ListInputSchema, array(BrokerInfoSchema$1)), method(GetInputSchema, Broke
11584
11590
  }), method(UnsubscribeInputSchema, _void(), {
11585
11591
  kind: "mutation",
11586
11592
  auth: "admin"
11587
- }), method(GetStateInputSchema, unknown().nullable()), method(_void(), RegistryStatusSchema);
11593
+ }), method(GetStateInputSchema, unknown().nullable(), { auth: "admin" }), method(_void(), RegistryStatusSchema);
11588
11594
  DeviceType.Camera;
11589
11595
  /** Stream delivery format. (Relocated from the retired `streaming-engine` cap.) */
11590
11596
  var StreamFormatSchema = _enum([
@@ -12665,17 +12671,20 @@ method(object({
12665
12671
  namespace: string().optional(),
12666
12672
  collection: string(),
12667
12673
  key: string()
12668
- }), unknown()), method(object({
12674
+ }), unknown(), { auth: "admin" }), method(object({
12669
12675
  namespace: string().optional(),
12670
12676
  collection: string(),
12671
12677
  key: string(),
12672
12678
  value: unknown()
12673
- }), _void(), { kind: "mutation" }), method(object({
12679
+ }), _void(), {
12680
+ kind: "mutation",
12681
+ auth: "admin"
12682
+ }), method(object({
12674
12683
  namespace: string().optional(),
12675
12684
  collection: string(),
12676
12685
  filter: QueryFilterSchema.optional(),
12677
12686
  columns: array(string()).readonly().optional()
12678
- }), array(SettingsRecordSchema).readonly()), method(object({
12687
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
12679
12688
  namespace: string().optional(),
12680
12689
  collection: string(),
12681
12690
  /** Declared columns identifying the slot; must be covered by a UNIQUE
@@ -12685,7 +12694,10 @@ method(object({
12685
12694
  }), object({
12686
12695
  /** The id the row HAS: assigned by SQLite on an insert, or the existing
12687
12696
  * row's own id on an update. */
12688
- id: union([string(), number()]) }), { kind: "mutation" }), method(object({
12697
+ id: union([string(), number()]) }), {
12698
+ kind: "mutation",
12699
+ auth: "admin"
12700
+ }), method(object({
12689
12701
  namespace: string().optional(),
12690
12702
  collection: string(),
12691
12703
  record: object({
@@ -12698,38 +12710,56 @@ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
12698
12710
  * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
12699
12711
  * primary key — which is the only place an auto key is knowable.
12700
12712
  */
12701
- id: union([string(), number()]) }), { kind: "mutation" }), method(object({
12713
+ id: union([string(), number()]) }), {
12714
+ kind: "mutation",
12715
+ auth: "admin"
12716
+ }), method(object({
12702
12717
  namespace: string().optional(),
12703
12718
  collection: string(),
12704
12719
  records: array(BulkRecordSchema).readonly()
12705
- }), object({ inserted: number().int() }), { kind: "mutation" }), method(object({
12720
+ }), object({ inserted: number().int() }), {
12721
+ kind: "mutation",
12722
+ auth: "admin"
12723
+ }), method(object({
12706
12724
  namespace: string().optional(),
12707
12725
  collection: string(),
12708
12726
  id: string(),
12709
12727
  data: record(string(), unknown())
12710
- }), _void(), { kind: "mutation" }), method(object({
12728
+ }), _void(), {
12729
+ kind: "mutation",
12730
+ auth: "admin"
12731
+ }), method(object({
12711
12732
  namespace: string().optional(),
12712
12733
  collection: string(),
12713
12734
  key: string()
12714
- }), _void(), { kind: "mutation" }), method(object({
12735
+ }), _void(), {
12736
+ kind: "mutation",
12737
+ auth: "admin"
12738
+ }), method(object({
12715
12739
  namespace: string().optional(),
12716
12740
  collection: string(),
12717
12741
  filter: MutationFilterSchema
12718
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
12742
+ }), object({ deleted: number().int() }), {
12743
+ kind: "mutation",
12744
+ auth: "admin"
12745
+ }), method(object({
12719
12746
  namespace: string().optional(),
12720
12747
  collection: string(),
12721
12748
  filter: MutationFilterSchema,
12722
12749
  data: record(string(), unknown())
12723
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
12750
+ }), object({ updated: number().int() }), {
12751
+ kind: "mutation",
12752
+ auth: "admin"
12753
+ }), method(object({
12724
12754
  namespace: string().optional(),
12725
12755
  collection: string(),
12726
12756
  filter: QueryFilterSchema.optional()
12727
- }), number()), method(object({
12757
+ }), number(), { auth: "admin" }), method(object({
12728
12758
  namespace: string().optional(),
12729
12759
  collection: string(),
12730
12760
  fields: array(AggregateFieldSchema).readonly(),
12731
12761
  filter: QueryFilterSchema.optional()
12732
- }), AggregateResultSchema), method(object({
12762
+ }), AggregateResultSchema, { auth: "admin" }), method(object({
12733
12763
  namespace: string().optional(),
12734
12764
  collection: string(),
12735
12765
  field: string(),
@@ -12739,15 +12769,18 @@ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
12739
12769
  }), array(object({
12740
12770
  bucket: number().int(),
12741
12771
  count: number().int()
12742
- })).readonly()), method(object({
12772
+ })).readonly(), { auth: "admin" }), method(object({
12743
12773
  namespace: string().optional(),
12744
12774
  collection: string()
12745
- }), boolean()), method(object({
12775
+ }), boolean(), { auth: "admin" }), method(object({
12746
12776
  namespace: string().optional(),
12747
12777
  collection: string(),
12748
12778
  columns: array(CollectionColumnSchema).readonly(),
12749
12779
  indexes: array(CollectionIndexSchema).readonly().optional()
12750
- }), _void(), { kind: "mutation" });
12780
+ }), _void(), {
12781
+ kind: "mutation",
12782
+ auth: "admin"
12783
+ });
12751
12784
  /**
12752
12785
  * What one engine says about itself. The orchestrator uses `kind` to pick
12753
12786
  * a registrant for a collection; `engineId` is what a log line names when
@@ -13431,7 +13464,13 @@ var ExposeInputSchema = object({
13431
13464
  capabilities: array(string()).optional()
13432
13465
  });
13433
13466
  var UnexposeInputSchema = object({ deviceId: string() });
13434
- method(_void(), DeviceExportStatusSchema), method(_void(), array(DeviceKindSchema)), method(_void(), array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), { kind: "mutation" }), method(UnexposeInputSchema, _void(), { kind: "mutation" });
13467
+ method(_void(), DeviceExportStatusSchema), method(_void(), array(DeviceKindSchema)), method(_void(), array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), {
13468
+ kind: "mutation",
13469
+ auth: "admin"
13470
+ }), method(UnexposeInputSchema, _void(), {
13471
+ kind: "mutation",
13472
+ auth: "admin"
13473
+ });
13435
13474
  /** Wire/storage schema for one icon id. */
13436
13475
  var LocationIconIdSchema = _enum([
13437
13476
  "map-pin",
@@ -13935,7 +13974,10 @@ method(object({
13935
13974
  kind: "mutation",
13936
13975
  auth: "admin",
13937
13976
  timeoutMs: 12 * 6e4
13938
- }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
13977
+ }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), {
13978
+ kind: "mutation",
13979
+ auth: "admin"
13980
+ }), method(object({ deviceId: number() }), record(string(), unknown()), { auth: "admin" }), method(object({ deviceId: number() }), record(string(), unknown()), { auth: "admin" }), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
13939
13981
  deviceId: number(),
13940
13982
  name: string()
13941
13983
  }), _void(), {
@@ -14140,7 +14182,7 @@ method(object({
14140
14182
  }), method(object({ deviceId: number() }), array(StreamProbeResultSchema), {
14141
14183
  kind: "mutation",
14142
14184
  auth: "admin"
14143
- }), method(object({ deviceId: number() }), DeviceBindingsForDeviceSchema), method(object({ deviceIds: array(number()) }), array(DeviceBindingsForDeviceSchema)), method(object({}), array(DeviceBindingsForDeviceSchema)), method(object({
14185
+ }), method(object({ deviceId: number() }), DeviceBindingsForDeviceSchema), method(object({ deviceIds: array(number()) }), array(DeviceBindingsForDeviceSchema)), method(object({}), array(DeviceBindingsForDeviceSchema)), method(object({ capNames: array(string().min(1)).min(1).max(16) }), array(number())), method(object({
14144
14186
  deviceId: number(),
14145
14187
  capName: string(),
14146
14188
  wrapperAddonId: string(),
@@ -15687,7 +15729,22 @@ var StatusSchema = object({
15687
15729
  brokerCount: number(),
15688
15730
  embeddedRunning: boolean()
15689
15731
  });
15690
- method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema), method(AddBrokerInputSchema, AddBrokerResultSchema, { kind: "mutation" }), method(IdInputSchema, _void(), { kind: "mutation" }), method(IdInputSchema, TestResultSchema$1, { kind: "mutation" }), method(StartEmbeddedInputSchema, StartEmbeddedResultSchema, { kind: "mutation" }), method(IdInputSchema, _void(), { kind: "mutation" }), method(_void(), StatusSchema);
15732
+ method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
15733
+ kind: "mutation",
15734
+ auth: "admin"
15735
+ }), method(IdInputSchema, _void(), {
15736
+ kind: "mutation",
15737
+ auth: "admin"
15738
+ }), method(IdInputSchema, TestResultSchema$1, {
15739
+ kind: "mutation",
15740
+ auth: "admin"
15741
+ }), method(StartEmbeddedInputSchema, StartEmbeddedResultSchema, {
15742
+ kind: "mutation",
15743
+ auth: "admin"
15744
+ }), method(IdInputSchema, _void(), {
15745
+ kind: "mutation",
15746
+ auth: "admin"
15747
+ }), method(_void(), StatusSchema);
15691
15748
  var NetworkEndpointSchema = object({
15692
15749
  url: string(),
15693
15750
  hostname: string(),
@@ -15982,6 +16039,18 @@ var TargetKindSchema = object({
15982
16039
  */
15983
16040
  iconMediaType: string().optional(),
15984
16041
  configSchema: ConfigSchemaPassthrough,
16042
+ /**
16043
+ * The config keys that decide WHERE this kind's secrets are sent (server,
16044
+ * base URL, instance, chat, recipient). A save that changes any of them
16045
+ * while leaving a secret redacted is refused by the provider (D634), so an
16046
+ * editor uses this to ask for the secret on exactly those edits instead of
16047
+ * on every edit.
16048
+ *
16049
+ * Optional: absent from a provider that holds no secret (the Home Assistant
16050
+ * kinds) and from a provider older than this field — an editor that finds
16051
+ * it absent must assume ANY edit may need the secret.
16052
+ */
16053
+ destinationKeys: array(string()).optional(),
15985
16054
  supportsDiscovery: boolean(),
15986
16055
  caps: TargetKindCapsSchema
15987
16056
  });
@@ -16020,19 +16089,34 @@ var SendResultSchema = object({
16020
16089
  });
16021
16090
  /** Same shape as SendResult — kept as a distinct name for the test panel. */
16022
16091
  var TestResultSchema = SendResultSchema;
16023
- method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSchema)), method(object({
16092
+ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSchema), { auth: "admin" }), method(object({
16024
16093
  kind: string(),
16025
16094
  config: record(string(), unknown()).optional()
16026
- }), array(DiscoveredTargetSchema)), method(object({
16095
+ }), array(DiscoveredTargetSchema), { auth: "admin" }), method(object({
16027
16096
  targetId: string(),
16028
16097
  notification: NotificationSchema
16029
- }), SendResultSchema, { kind: "mutation" }), method(object({
16098
+ }), SendResultSchema, {
16099
+ kind: "mutation",
16100
+ auth: "admin"
16101
+ }), method(object({
16030
16102
  targetId: string(),
16031
16103
  sample: NotificationSchema.optional()
16032
- }), TestResultSchema, { kind: "mutation" }), method(object({ target: TargetSchema }), TargetSchema, { kind: "mutation" }), method(object({ targetId: string() }), _void(), { kind: "mutation" }), method(object({
16104
+ }), TestResultSchema, {
16105
+ kind: "mutation",
16106
+ auth: "admin"
16107
+ }), method(object({ target: TargetSchema }), TargetSchema, {
16108
+ kind: "mutation",
16109
+ auth: "admin"
16110
+ }), method(object({ targetId: string() }), _void(), {
16111
+ kind: "mutation",
16112
+ auth: "admin"
16113
+ }), method(object({
16033
16114
  targetId: string(),
16034
16115
  enabled: boolean()
16035
- }), _void(), { kind: "mutation" });
16116
+ }), _void(), {
16117
+ kind: "mutation",
16118
+ auth: "admin"
16119
+ });
16036
16120
  new Set([
16037
16121
  {
16038
16122
  id: "person",
@@ -16875,6 +16959,19 @@ var NcSystemEventConditionSchema = object({
16875
16959
  * does not carry) matches no `deviceTypes` list.
16876
16960
  */
16877
16961
  deviceTypes: array(string().min(1)).min(1).optional(),
16962
+ /**
16963
+ * Devices this rule NEVER speaks about, whatever else matched. Scoped to the
16964
+ * same kind family as `deviceIds` (`systemEventFilterApplies(kind,
16965
+ * 'deviceIds')`) and applied AFTER it: include first, then exclude. A
16966
+ * consumable subject (`consumable:<id>:<key>`) is excluded by its device id.
16967
+ *
16968
+ * It never fails closed: a subject that carries no device id is not in the
16969
+ * list, so it is not excluded. "Every battery except the one thermometer that
16970
+ * reads 0 % forever" is the question this answers — expressed as an include
16971
+ * list it would have to name every other battery device, and every device
16972
+ * adopted later would be silently left out (D636).
16973
+ */
16974
+ excludeDeviceIds: array(number().int()).min(1).optional(),
16878
16975
  nodeIds: array(string().min(1)).min(1).optional(),
16879
16976
  packageNames: array(string().min(1)).min(1).optional()
16880
16977
  });
@@ -23408,41 +23505,65 @@ var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object(
23408
23505
  method(object({
23409
23506
  location: StorageLocationRefSchema,
23410
23507
  relativePath: string()
23411
- }), string()), method(object({
23508
+ }), string(), { auth: "admin" }), method(object({
23412
23509
  location: StorageLocationRefSchema,
23413
23510
  relativePath: string(),
23414
23511
  data: _instanceof(Uint8Array)
23415
- }), _void(), { kind: "mutation" }), method(object({
23512
+ }), _void(), {
23513
+ kind: "mutation",
23514
+ auth: "admin"
23515
+ }), method(object({
23416
23516
  location: StorageLocationRefSchema,
23417
23517
  relativePath: string()
23418
- }), _instanceof(Uint8Array)), method(object({
23518
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
23419
23519
  location: StorageLocationRefSchema,
23420
23520
  relativePath: string()
23421
- }), boolean()), method(object({
23521
+ }), boolean(), { auth: "admin" }), method(object({
23422
23522
  location: StorageLocationRefSchema,
23423
23523
  prefix: string().optional()
23424
- }), array(string()).readonly()), method(object({
23524
+ }), array(string()).readonly(), { auth: "admin" }), method(object({
23425
23525
  location: StorageLocationRefSchema,
23426
23526
  relativePath: string()
23427
- }), _void(), { kind: "mutation" }), method(object({ location: StorageLocationRefSchema }), number().nullable()), method(object({
23527
+ }), _void(), {
23528
+ kind: "mutation",
23529
+ auth: "admin"
23530
+ }), method(object({ location: StorageLocationRefSchema }), number().nullable()), method(object({
23428
23531
  location: StorageLocationRefSchema,
23429
23532
  relativePath: string(),
23430
23533
  sizeBytes: number().optional()
23431
- }), object({ uploadId: string() }), { kind: "mutation" }), method(object({
23534
+ }), object({ uploadId: string() }), {
23535
+ kind: "mutation",
23536
+ auth: "admin"
23537
+ }), method(object({
23432
23538
  uploadId: string(),
23433
23539
  offset: number(),
23434
23540
  data: _instanceof(Uint8Array)
23435
- }), _void(), { kind: "mutation" }), method(object({ uploadId: string() }), _void(), { kind: "mutation" }), method(object({ uploadId: string() }), _void(), { kind: "mutation" }), method(object({
23541
+ }), _void(), {
23542
+ kind: "mutation",
23543
+ auth: "admin"
23544
+ }), method(object({ uploadId: string() }), _void(), {
23545
+ kind: "mutation",
23546
+ auth: "admin"
23547
+ }), method(object({ uploadId: string() }), _void(), {
23548
+ kind: "mutation",
23549
+ auth: "admin"
23550
+ }), method(object({
23436
23551
  location: StorageLocationRefSchema,
23437
23552
  relativePath: string()
23438
23553
  }), object({
23439
23554
  downloadId: string(),
23440
23555
  sizeBytes: number()
23441
- }), { kind: "mutation" }), method(object({
23556
+ }), {
23557
+ kind: "mutation",
23558
+ auth: "admin"
23559
+ }), method(object({
23442
23560
  downloadId: string(),
23443
23561
  offset: number(),
23444
23562
  length: number()
23445
- }), _instanceof(Uint8Array)), method(object({ downloadId: string() }), _void(), { kind: "mutation" }), method(object({ type: StorageLocationTypeSchema.optional() }), array(StorageLocationSchema).readonly()), method(_void(), array(StorageLocationDeclarationSchema).readonly()), method(StorageLocationSchema.omit({
23563
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({ downloadId: string() }), _void(), {
23564
+ kind: "mutation",
23565
+ auth: "admin"
23566
+ }), method(object({ type: StorageLocationTypeSchema.optional() }), array(StorageLocationSchema).readonly()), method(_void(), array(StorageLocationDeclarationSchema).readonly()), method(StorageLocationSchema.omit({
23446
23567
  createdAt: true,
23447
23568
  updatedAt: true
23448
23569
  }), StorageLocationSchema, {
@@ -25018,7 +25139,67 @@ var WebrtcLadderDecisionSchema = object({
25018
25139
  serverSending: boolean().nullable(),
25019
25140
  /** Epoch ms. The overlay prints its age; a decision from 40 minutes ago
25020
25141
  * must not read like one from this second. */
25021
- at: number()
25142
+ at: number(),
25143
+ /** The broker's own cause when it is finer than `cause` can carry, e.g.
25144
+ * `trial-revert` (reported as `stall`/`loss` for older consumers). Optional:
25145
+ * an older server strips it instead of rejecting the answer. */
25146
+ causeDetail: string().optional()
25147
+ });
25148
+ var WebrtcClimbHoldSchema = object({
25149
+ /** `stall-building` — the client receives ≪ what is sent; `delivery` — the
25150
+ * current rung is not landing whole; `no-evidence` — no receiver feedback;
25151
+ * `warming` — healthy, accumulating the streak; `cooldown` — too soon after
25152
+ * a change; `capacity` — a MEASURED probe below the next rung's bar;
25153
+ * `try-unclean` — no capacity evidence, and the path is not clean enough to
25154
+ * try; `try-backoff` — a try reverted, waiting out its backoff; `trial` —
25155
+ * this rung IS a try, reverting if it does not land; `suspended` —
25156
+ * recorded playback on the track. */
25157
+ code: string(),
25158
+ /** The rung a climb would go to. */
25159
+ nextTier: CamProfileSchema,
25160
+ /** Bytes received ÷ bytes sent over the delivery window (≥ one GOP). */
25161
+ deliveryRatio: number().nullable(),
25162
+ deliveryWindowMs: number().nullable(),
25163
+ /** The ratio a climb requires. */
25164
+ climbDeliveryRatio: number(),
25165
+ /** The receiver's bandwidth estimate (REMB), kbps. Capped by what is sent. */
25166
+ capacityKbps: number().nullable(),
25167
+ /** The viewer's downlink probe for this session, kbps. */
25168
+ probeKbps: number().nullable(),
25169
+ /** The next rung's measured bitrate, kbps. */
25170
+ nextTierKbps: number().nullable(),
25171
+ capacityMargin: number(),
25172
+ /** The capacity a climb to `nextTier` needs, kbps (bitrate × margin, or the
25173
+ * client ladder threshold when the rung has measured nothing). */
25174
+ neededKbps: number().nullable(),
25175
+ /** For `try-unclean`: which clean-path condition failed (a `WebrtcTryBlocker`,
25176
+ * carried as a string for the same reason as `code`). */
25177
+ tryBlockedBy: string().nullable(),
25178
+ /** The delivery ratio and the loss ratio a try requires / must stay under.
25179
+ * Optional, like every field added to this schema after it first shipped:
25180
+ * the router validates output, so a REQUIRED new field makes a newer server
25181
+ * reject an older broker's whole answer (review m1). */
25182
+ tryDeliveryRatio: number().optional(),
25183
+ tryMaxLossRatio: number().optional(),
25184
+ /** For `try-backoff`: time until the next try, ms. */
25185
+ retryInMs: number().nullable(),
25186
+ /** The last try that reverted in this viewer session. */
25187
+ lastRevert: object({
25188
+ tier: CamProfileSchema,
25189
+ deliveryRatio: number().nullable(),
25190
+ stalled: boolean(),
25191
+ at: number()
25192
+ }).nullable(),
25193
+ /** For `trial`: how long this rung has been on trial, and for how long it must hold. */
25194
+ trialForMs: number().nullable(),
25195
+ trialMs: number().nullable(),
25196
+ healthyForMs: number().nullable(),
25197
+ requiredHealthyMs: number().nullable(),
25198
+ /** Epoch ms this hold's code began. */
25199
+ since: number(),
25200
+ /** The same one-line account the broker logs, e.g.
25201
+ * `held: delivery 0.97 over 4.0s ok, REMB 480 kbps < mid 1800 kbps × 1.2`. */
25202
+ summary: string()
25022
25203
  });
25023
25204
  /** Per-tier count of MEASURED downgrades this viewer session has suffered. */
25024
25205
  var WebrtcTierFailureSchema = object({
@@ -25082,7 +25263,12 @@ var WebrtcSessionDebugSchema = object({
25082
25263
  tierFailures: array(WebrtcTierFailureSchema),
25083
25264
  /** Successful promotions in this viewer session (drives the progressive
25084
25265
  * healthy timer). Null when no ladder is running. */
25085
- upgradeCount: number().nullable()
25266
+ upgradeCount: number().nullable(),
25267
+ /** Why the ladder is not climbing right now. Null when no ladder runs, it
25268
+ * is at the top rung, or it just moved. Optional because this output is
25269
+ * validated by the router: a server carrying this schema must still accept
25270
+ * the answer of a stream-broker deployed before the field existed. */
25271
+ climbHold: WebrtcClimbHoldSchema.nullable().optional()
25086
25272
  });
25087
25273
  DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), array(WebrtcStreamChoiceSchema)), method(object({
25088
25274
  deviceId: number().int().nonnegative(),
@@ -28774,6 +28960,11 @@ var ClientNetworkStatsSchema = object({
28774
28960
  jitterMs: number(),
28775
28961
  estimatedBandwidthKbps: number(),
28776
28962
  packetLossPercent: number().min(0).max(100),
28963
+ /** The viewer's latest `/adaptive-probe` reading, Mbps — whatever it read
28964
+ * (D635 I4). Absent when it never probed or the probe failed (unknown). */
28965
+ downlinkMbps: number().optional(),
28966
+ /** Age of that reading when this report was sent, ms. */
28967
+ downlinkAgeMs: number().optional(),
28777
28968
  lastUpdated: number()
28778
28969
  });
28779
28970
  var DeviceNetworkStatsSchema = object({
@@ -28786,7 +28977,11 @@ method(object({ deviceId: number() }), DeviceNetworkStatsSchema.nullable()), met
28786
28977
  rttMs: number().min(0).max(6e4),
28787
28978
  jitterMs: number().min(0).max(1e4),
28788
28979
  estimatedBandwidthKbps: number().min(0).max(1e6),
28789
- packetLossPercent: number().min(0).max(100)
28980
+ packetLossPercent: number().min(0).max(100),
28981
+ /** Latest downlink probe, Mbps, whatever it read; absent = never / failed. */
28982
+ downlinkMbps: number().min(0).max(1e5).optional(),
28983
+ /** Age of that probe when this report is sent, ms. */
28984
+ downlinkAgeMs: number().min(0).max(864e5).optional()
28790
28985
  }), _void(), { kind: "mutation" });
28791
28986
  /**
28792
28987
  * nodes — system-scoped singleton capability for cluster topology
@@ -36368,6 +36563,12 @@ Object.freeze({
36368
36563
  addonId: null,
36369
36564
  access: "view"
36370
36565
  },
36566
+ "deviceManager.listDeviceIdsByCaps": {
36567
+ capName: "device-manager",
36568
+ capScope: "system",
36569
+ addonId: null,
36570
+ access: "view"
36571
+ },
36371
36572
  "deviceManager.listLocationDescriptions": {
36372
36573
  capName: "device-manager",
36373
36574
  capScope: "system",
@@ -44300,7 +44501,7 @@ var AdminUIAddon = class extends BaseAddon {
44300
44501
  capability: adminUiCapability,
44301
44502
  provider: {
44302
44503
  getStaticDir: async () => ({ staticDir: resolveAdminUiDistDir() }),
44303
- getVersion: async () => ({ version: "1.2.261" })
44504
+ getVersion: async () => ({ version: "1.2.263" })
44304
44505
  }
44305
44506
  }];
44306
44507
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-admin-ui",
3
- "version": "1.2.261",
3
+ "version": "1.2.263",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Admin UI — Vite frontend build and server-side addon",
@@ -1 +0,0 @@
1
- import{K as e,Q as t,S as n,W as r,b as i,q as a,x as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{gt as s}from"./player-overlays-DRIy-fCw.js";import{Cu as c,Dc as l,Jt as u,Ll as d,Nl as f,_n as p,dl as m,ni as h,qt as g,vl as _}from"./src-CvEqSgs7.js";import{a as v}from"./index-DAAsNMtg.js";function y({deviceId:e}){let t=v(),{data:r,isLoading:i,isFetching:a,isError:s,refetch:c}=h({deviceId:e},{enabled:Number.isFinite(e)}),l=r?.devices??[];return n(`div`,{className:`mt-3 rounded-md border border-border bg-background p-2.5`,children:[n(`div`,{className:`flex items-center justify-between mb-1.5`,children:[n(`span`,{className:`text-[11px] font-medium text-foreground`,children:[`Resolved links`,o(`span`,{className:`ml-1.5 text-[10px] font-normal text-foreground-subtle`,children:`children + your picks`})]}),n(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded border border-border px-1.5 py-0.5 text-[10px] text-foreground-subtle hover:bg-surface-hover disabled:opacity-50`,disabled:a,onClick:()=>void c(),title:`Re-run the resolver`,children:[o(_,{className:`h-3 w-3 ${a?`animate-spin`:``}`}),`Refresh`]})]}),i?n(`div`,{className:`flex items-center gap-1.5 py-1 text-[11px] text-foreground-subtle`,children:[o(d,{className:`h-3 w-3 animate-spin`}),`Resolving…`]}):s?o(`p`,{className:`py-1 text-[11px] text-danger`,children:`Failed to resolve linked devices.`}):l.length===0?o(`p`,{className:`py-1 text-[11px] text-foreground-subtle italic`,children:`No linked devices resolved.`}):o(`div`,{className:`flex flex-wrap gap-1`,children:l.map(e=>n(`button`,{type:`button`,onClick:()=>t(`/devices/${e.deviceId}`),className:`inline-flex cursor-pointer items-center gap-1 rounded-md border border-border bg-surface px-1.5 py-0.5 text-[11px] text-foreground max-w-full hover:bg-surface-hover hover:border-primary/50 focus:outline-none focus-visible:ring-1 focus-visible:ring-primary/50`,title:e.location??void 0,children:[o(`span`,{className:`truncate`,children:e.name}),e.location!==null&&e.location.length>0&&n(`span`,{className:`inline-flex items-center gap-0.5 shrink-0 text-[10px] text-foreground-subtle`,children:[o(f,{className:`h-2.5 w-2.5`}),e.location]})]},e.deviceId))})]})}function b(e){return[e.value,e.label,e.description].filter(e=>typeof e==`string`&&e.length>0).join(` `).toLowerCase()}function x(e,t){let n=t.trim().toLowerCase().split(/\s+/).filter(Boolean);return n.length===0?e:e.filter(e=>{let t=b(e);return n.every(e=>t.includes(e))})}function S(e,t){let n=new Map(e.map(e=>[e.value,e])),r=new Set(t);return{selectedOptions:t.map(e=>n.get(e)??{value:e,label:e}),unselected:e.filter(e=>!r.has(e.value))}}function C(e){return e>=8}t();var w=`flex items-center gap-1.5 rounded-md border border-border bg-background px-2 py-1.5 focus-within:border-primary focus-within:ring-1 focus-within:ring-primary/30`,T=`block text-[11px] font-medium text-foreground mb-1 break-words`,E=`text-[10px] text-foreground-subtle mt-0.5 break-words`;function D({field:t,value:i,onChange:u,disabled:d,translationFn:f}){let h=Array.isArray(i)?i:[],g=d===!0||t.disabled===!0,_=t.maxItems!==void 0&&h.length>=t.maxItems,[v,y]=a(``),[b,C]=a(!1),[D,O]=a(0),k=e(null),A=e(null),{selectedOptions:j}=r(()=>S(t.options,h),[t.options,h]),N=r(()=>x(t.options,v),[t.options,v]),P=e=>{if(!g)if(h.includes(e))u(h.filter(t=>t!==e));else{if(t.maxItems!==void 0&&h.length>=t.maxItems)return;u([...h,e])}},F=e=>{if(e.key===`ArrowDown`)e.preventDefault(),C(!0),O(e=>N.length===0?0:(e+1)%N.length);else if(e.key===`ArrowUp`)e.preventDefault(),C(!0),O(e=>N.length===0?0:(e-1+N.length)%N.length);else if(e.key===`Enter`){e.preventDefault();let t=N[D];t&&P(t.value)}else e.key===`Escape`?C(!1):e.key===`Backspace`&&v===``&&h.length>0&&u(h.slice(0,-1))},I=M(t.label,f),L=M(t.description,f);return n(`div`,{className:`min-w-0`,children:[I!==void 0&&I!==``&&o(`label`,{className:T,children:I}),j.length>0&&o(`div`,{className:`flex flex-wrap gap-1 mb-1.5`,children:j.map(e=>n(`span`,{className:`inline-flex items-center gap-1 rounded-md bg-primary/10 px-1.5 py-0.5 text-[11px] text-primary max-w-full`,children:[e.iconId!==void 0&&o(p,{iconId:e.iconId,size:12}),o(`span`,{className:`truncate`,children:e.label}),!g&&o(`button`,{type:`button`,className:`shrink-0 hover:text-danger`,"aria-label":`Remove ${e.label}`,onClick:()=>P(e.value),children:o(l,{className:`h-2.5 w-2.5`})})]},e.value))}),n(`div`,{className:w+(g?` opacity-50`:``),children:[o(m,{className:`h-3.5 w-3.5 shrink-0 text-foreground-subtle`}),o(`input`,{ref:k,type:`text`,role:`combobox`,"aria-expanded":b,"aria-controls":`msel-${t.key}`,className:`min-w-0 flex-1 bg-transparent text-xs text-foreground outline-none placeholder:text-foreground-disabled`,value:v,placeholder:_?`Max ${t.maxItems} selected`:t.placeholder??`Search to add…`,disabled:g,onChange:e=>{y(e.target.value),C(!0),O(0)},onFocus:()=>C(!0),onBlur:()=>{A.current=setTimeout(()=>C(!1),120)},onKeyDown:F}),o(s,{className:`h-3.5 w-3.5 shrink-0 cursor-pointer text-foreground-subtle`,onMouseDown:e=>{e.preventDefault(),A.current&&clearTimeout(A.current),C(e=>!e),k.current?.focus()}})]}),b&&!g&&o(`div`,{id:`msel-${t.key}`,role:`listbox`,className:`mt-1 max-h-56 overflow-y-auto rounded-md border border-border bg-surface shadow-lg`,onMouseDown:e=>{e.preventDefault()},children:N.length===0?n(`div`,{className:`px-2.5 py-2 text-[11px] text-foreground-subtle italic`,children:[`No matches for “`,v,`”`]}):N.map((e,t)=>{let r=h.includes(e.value),i=!r&&_;return n(`button`,{type:`button`,role:`option`,"aria-selected":r,disabled:i,className:[`flex w-full items-center gap-2 px-2.5 py-1.5 text-left text-xs transition-colors`,t===D?`bg-primary/10`:`hover:bg-surface-hover`,i?`opacity-40 cursor-not-allowed`:`cursor-pointer`].join(` `),onMouseEnter:()=>O(t),onClick:()=>P(e.value),children:[o(`span`,{className:[`flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border`,r?`border-primary bg-primary text-white`:`border-border`].join(` `),children:r&&o(c,{className:`h-2.5 w-2.5`})}),e.iconId!==void 0&&o(p,{iconId:e.iconId,size:13}),o(`span`,{className:`truncate text-foreground`,children:e.label})]},e.value)})}),L&&o(`p`,{className:E,children:L})]})}t();var O=`_linkedDeviceIds`;function k(e){return e.type===`multiselect`}function A({field:e,values:t,onChange:n,disabled:r,translationFn:i,onTestField:a,externalProbe:s,allFields:c,onAction:l}){return k(e)&&C(e.options.length)?u(e,t,c)?o(D,{field:e,value:t[e.key],onChange:t=>n(e.key,t),disabled:r,translationFn:i}):null:o(g,{field:e,values:t,onChange:n,disabled:r,translationFn:i,onTestField:a,externalProbe:s,allFields:c,onAction:l})}function j(e){return/^[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)+$/.test(e)}function M(e,t){if(e!==void 0)return t&&j(e)?t(e):e}function N({section:e,values:t,onChange:r,disabled:s,translationFn:c,onTestField:l,probeResults:d,onAction:f,deviceId:p}){let[m,h]=a(e.defaultCollapsed??!1),_=e.style===`accordion`;if(e.fields.reduce((n,r)=>n+ +!!u(r,t,e.fields),0)===0)return null;let v=e.fields.some(e=>`key`in e&&e.key===O),b=e.fields,x=v?1:e.columns??2,S=x===1?`grid-cols-1`:x===3?`grid-cols-1 @[480px]:grid-cols-2 @[880px]:grid-cols-3`:x===4?`grid-cols-1 @[480px]:grid-cols-2 @[1140px]:grid-cols-4`:`grid-cols-1 @[480px]:grid-cols-2`,C=e.fields.length===1&&e.fields[0]?.type===`widget`?e.fields[0]:void 0;return n(`div`,{className:`@container rounded-lg border border-border bg-surface p-3`,style:{containerType:`inline-size`},children:[!(C!==void 0||!e.title&&!e.description)&&n(`div`,{className:[`flex items-center justify-between mb-2`,_?`cursor-pointer`:``].join(` `),onClick:_?()=>h(e=>!e):void 0,children:[n(`div`,{children:[e.title&&o(`h3`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wider`,children:M(e.title,c)}),e.description&&o(`p`,{className:`text-[10px] text-foreground-subtle mt-0.5`,children:M(e.description,c)})]}),_&&o(`span`,{className:`text-foreground-subtle text-xs ml-2`,children:m?`▸`:`▾`})]}),!m&&(C===void 0?n(i,{children:[o(`div`,{className:`grid ${S} gap-x-3 gap-y-2.5`,children:b.map(n=>o(A,{field:n,values:t,onChange:r,disabled:s,translationFn:c,onTestField:l,externalProbe:d?.[n.key],allFields:e.fields,onAction:f},n.key))}),v&&p!==void 0&&o(y,{deviceId:p})]}):o(g,{field:C,values:t,onChange:r,disabled:s,translationFn:c,onTestField:l,externalProbe:d?.[C.key],allFields:e.fields,onAction:f},C.key))]})}function P({schema:e,values:t,onChange:n,disabled:r,translationFn:i,onTestField:a,probeResults:s,onClearProbe:c,onAction:l,deviceId:u}){let d=(e,r)=>{n({...t,[e]:r}),c?.(e)};return o(`div`,{className:`space-y-4`,children:e.sections.map((e,n)=>o(N,{section:e,values:t,onChange:d,disabled:r,translationFn:i,onTestField:a,probeResults:s,onAction:l,deviceId:u},`${e.id}-${n}`))})}export{P as t};