@absolutejs/voice 0.0.22-beta.537 → 0.0.22-beta.539

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 (48) hide show
  1. package/dist/angular/index.js +118 -0
  2. package/dist/client/callDebugger.d.ts +2 -0
  3. package/dist/client/campaignDialerProof.d.ts +2 -0
  4. package/dist/client/deliveryRuntime.d.ts +2 -0
  5. package/dist/client/index.d.ts +2 -0
  6. package/dist/client/index.js +258 -36
  7. package/dist/client/opsActionCenter.d.ts +2 -0
  8. package/dist/client/opsActionHistory.d.ts +2 -0
  9. package/dist/client/opsStatus.d.ts +2 -0
  10. package/dist/client/platformCoverage.d.ts +2 -0
  11. package/dist/client/profileComparison.d.ts +2 -0
  12. package/dist/client/profileSwitchRecommendation.d.ts +2 -0
  13. package/dist/client/proofTrends.d.ts +2 -0
  14. package/dist/client/providerCapabilities.d.ts +2 -0
  15. package/dist/client/providerContracts.d.ts +2 -0
  16. package/dist/client/providerStatus.d.ts +2 -0
  17. package/dist/client/reactiveSource.d.ts +8 -0
  18. package/dist/client/readinessFailures.d.ts +2 -0
  19. package/dist/client/reconnectProfileEvidence.d.ts +2 -0
  20. package/dist/client/routingStatus.d.ts +2 -0
  21. package/dist/client/sessionObservability.d.ts +2 -0
  22. package/dist/client/sessionSnapshot.d.ts +2 -0
  23. package/dist/client/traceTimeline.d.ts +2 -0
  24. package/dist/client/turnLatency.d.ts +2 -0
  25. package/dist/client/turnQuality.d.ts +2 -0
  26. package/dist/client/workflowStatus.d.ts +2 -0
  27. package/dist/drizzle/assistantMemory.d.ts +17 -0
  28. package/dist/drizzle/index.d.ts +17 -0
  29. package/dist/drizzle/index.js +8 -13
  30. package/dist/react/index.js +252 -36
  31. package/dist/svelte/index.js +202 -24
  32. package/dist/vue/VoiceCallDebuggerLaunch.d.ts +4 -0
  33. package/dist/vue/VoiceDeliveryRuntime.d.ts +4 -0
  34. package/dist/vue/VoiceOpsStatus.d.ts +4 -0
  35. package/dist/vue/VoicePlatformCoverage.d.ts +4 -0
  36. package/dist/vue/VoiceProofTrends.d.ts +4 -0
  37. package/dist/vue/VoiceProviderCapabilities.d.ts +4 -0
  38. package/dist/vue/VoiceProviderContracts.d.ts +4 -0
  39. package/dist/vue/VoiceProviderStatus.d.ts +4 -0
  40. package/dist/vue/VoiceReadinessFailures.d.ts +4 -0
  41. package/dist/vue/VoiceReconnectProfileEvidence.d.ts +4 -0
  42. package/dist/vue/VoiceRoutingStatus.d.ts +4 -0
  43. package/dist/vue/VoiceSessionObservability.d.ts +4 -0
  44. package/dist/vue/VoiceSessionSnapshot.d.ts +4 -0
  45. package/dist/vue/VoiceTurnLatency.d.ts +4 -0
  46. package/dist/vue/VoiceTurnQuality.d.ts +4 -0
  47. package/dist/vue/index.js +261 -30
  48. package/package.json +1 -1
package/dist/vue/index.js CHANGED
@@ -89,6 +89,24 @@ import { defineComponent, h } from "vue";
89
89
  // src/internal/html.ts
90
90
  var escapeHtml = (value) => String(value).replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
91
91
 
92
+ // src/client/reactiveSource.ts
93
+ var bindVoiceReactiveSource = (refresh, source) => {
94
+ const cleanup = source?.(refresh);
95
+ return typeof cleanup === "function" ? cleanup : () => {};
96
+ };
97
+ var voiceSseReactiveSource = (topic, options = {}) => (refresh) => {
98
+ const Impl = options.eventSourceImpl ?? (typeof EventSource !== "undefined" ? EventSource : undefined);
99
+ if (!Impl) {
100
+ return () => {};
101
+ }
102
+ const url = `${options.path ?? "/sync"}?topics=${encodeURIComponent(topic)}`;
103
+ const source = new Impl(url, {
104
+ withCredentials: options.withCredentials ?? false
105
+ });
106
+ source.onmessage = () => refresh();
107
+ return () => source.close();
108
+ };
109
+
92
110
  // src/client/opsStatus.ts
93
111
  var createVoiceOpsStatusStore = (path = "/api/voice/ops-status", options = {}) => {
94
112
  const listeners = new Set;
@@ -133,12 +151,14 @@ var createVoiceOpsStatusStore = (path = "/api/voice/ops-status", options = {}) =
133
151
  throw error;
134
152
  }
135
153
  };
154
+ let unbindReactiveSource = () => {};
136
155
  const close = () => {
137
156
  closed = true;
138
157
  if (timer) {
139
158
  clearInterval(timer);
140
159
  timer = undefined;
141
160
  }
161
+ unbindReactiveSource();
142
162
  listeners.clear();
143
163
  };
144
164
  if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
@@ -146,6 +166,9 @@ var createVoiceOpsStatusStore = (path = "/api/voice/ops-status", options = {}) =
146
166
  refresh().catch(() => {});
147
167
  }, options.intervalMs);
148
168
  }
169
+ if (typeof window !== "undefined" && options.reactiveSource) {
170
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
171
+ }
149
172
  return {
150
173
  close,
151
174
  refresh,
@@ -229,11 +252,16 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
229
252
  mounted;
230
253
  connectedCallback() {
231
254
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
255
+ const reactiveTopic = this.getAttribute("reactive-topic");
232
256
  this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/api/voice/ops-status", {
233
257
  description: this.getAttribute("description") ?? undefined,
234
258
  includeLinks: this.getAttribute("include-links") !== "false",
235
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
236
- title: this.getAttribute("title") ?? undefined
259
+ title: this.getAttribute("title") ?? undefined,
260
+ ...reactiveTopic ? {
261
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
262
+ path: this.getAttribute("reactive-path") ?? undefined
263
+ })
264
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
237
265
  });
238
266
  }
239
267
  disconnectedCallback() {
@@ -339,6 +367,7 @@ var VoiceOpsStatus = defineComponent({
339
367
  default: "/api/voice/ops-status",
340
368
  type: String
341
369
  },
370
+ reactiveSource: Function,
342
371
  title: String
343
372
  },
344
373
  setup(props) {
@@ -346,6 +375,7 @@ var VoiceOpsStatus = defineComponent({
346
375
  description: props.description,
347
376
  includeLinks: props.includeLinks,
348
377
  intervalMs: props.intervalMs,
378
+ reactiveSource: props.reactiveSource,
349
379
  title: props.title
350
380
  };
351
381
  const status = useVoiceOpsStatus(props.path, options);
@@ -538,12 +568,14 @@ var createVoiceOpsActionCenterStore = (options = {}) => {
538
568
  throw error;
539
569
  }
540
570
  };
571
+ let unbindReactiveSource = () => {};
541
572
  const close = () => {
542
573
  closed = true;
543
574
  if (timer) {
544
575
  clearInterval(timer);
545
576
  timer = undefined;
546
577
  }
578
+ unbindReactiveSource();
547
579
  listeners.clear();
548
580
  };
549
581
  if (options.intervalMs && options.intervalMs > 0) {
@@ -551,6 +583,9 @@ var createVoiceOpsActionCenterStore = (options = {}) => {
551
583
  emit();
552
584
  }, options.intervalMs);
553
585
  }
586
+ if (typeof window !== "undefined" && options.reactiveSource) {
587
+ unbindReactiveSource = bindVoiceReactiveSource(() => emit(), options.reactiveSource);
588
+ }
554
589
  return {
555
590
  close,
556
591
  run,
@@ -844,12 +879,14 @@ var createVoiceDeliveryRuntimeStore = (path = "/api/voice-delivery-runtime", opt
844
879
  throw error;
845
880
  }
846
881
  };
882
+ let unbindReactiveSource = () => {};
847
883
  const close = () => {
848
884
  closed = true;
849
885
  if (timer) {
850
886
  clearInterval(timer);
851
887
  timer = undefined;
852
888
  }
889
+ unbindReactiveSource();
853
890
  listeners.clear();
854
891
  };
855
892
  if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
@@ -857,6 +894,9 @@ var createVoiceDeliveryRuntimeStore = (path = "/api/voice-delivery-runtime", opt
857
894
  refresh().catch(() => {});
858
895
  }, options.intervalMs);
859
896
  }
897
+ if (typeof window !== "undefined" && options.reactiveSource) {
898
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
899
+ }
860
900
  return {
861
901
  close,
862
902
  refresh,
@@ -954,10 +994,15 @@ var defineVoiceDeliveryRuntimeElement = (tagName = "absolute-voice-delivery-runt
954
994
  mounted;
955
995
  connectedCallback() {
956
996
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
997
+ const reactiveTopic = this.getAttribute("reactive-topic");
957
998
  this.mounted = mountVoiceDeliveryRuntime(this, this.getAttribute("path") ?? "/api/voice-delivery-runtime", {
958
999
  description: this.getAttribute("description") ?? undefined,
959
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
960
- title: this.getAttribute("title") ?? undefined
1000
+ title: this.getAttribute("title") ?? undefined,
1001
+ ...reactiveTopic ? {
1002
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
1003
+ path: this.getAttribute("reactive-path") ?? undefined
1004
+ })
1005
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
961
1006
  });
962
1007
  }
963
1008
  disconnectedCallback() {
@@ -1079,12 +1124,14 @@ var VoiceDeliveryRuntime = defineComponent3({
1079
1124
  default: "/api/voice-delivery-runtime",
1080
1125
  type: String
1081
1126
  },
1127
+ reactiveSource: Function,
1082
1128
  title: String
1083
1129
  },
1084
1130
  setup(props) {
1085
1131
  const options = {
1086
1132
  description: props.description,
1087
1133
  intervalMs: props.intervalMs,
1134
+ reactiveSource: props.reactiveSource,
1088
1135
  title: props.title
1089
1136
  };
1090
1137
  const runtime = useVoiceDeliveryRuntime(props.path, options);
@@ -1192,12 +1239,14 @@ var createVoicePlatformCoverageStore = (path = "/api/voice/platform-coverage", o
1192
1239
  throw error;
1193
1240
  }
1194
1241
  };
1242
+ let unbindReactiveSource = () => {};
1195
1243
  const close = () => {
1196
1244
  closed = true;
1197
1245
  if (timer) {
1198
1246
  clearInterval(timer);
1199
1247
  timer = undefined;
1200
1248
  }
1249
+ unbindReactiveSource();
1201
1250
  listeners.clear();
1202
1251
  };
1203
1252
  if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
@@ -1205,6 +1254,9 @@ var createVoicePlatformCoverageStore = (path = "/api/voice/platform-coverage", o
1205
1254
  refresh().catch(() => {});
1206
1255
  }, options.intervalMs);
1207
1256
  }
1257
+ if (typeof window !== "undefined" && options.reactiveSource) {
1258
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
1259
+ }
1208
1260
  return {
1209
1261
  close,
1210
1262
  refresh,
@@ -1307,11 +1359,17 @@ var defineVoicePlatformCoverageElement = (tagName = "absolute-voice-platform-cov
1307
1359
  customElements.define(tagName, class AbsoluteVoicePlatformCoverageElement extends HTMLElement {
1308
1360
  mounted;
1309
1361
  connectedCallback() {
1362
+ const intervalMs = Number(this.getAttribute("interval-ms") ?? 0) || undefined;
1363
+ const reactiveTopic = this.getAttribute("reactive-topic");
1310
1364
  this.mounted = mountVoicePlatformCoverage(this, this.getAttribute("path") ?? "/api/voice/platform-coverage", {
1311
1365
  description: this.getAttribute("description") ?? undefined,
1312
- intervalMs: Number(this.getAttribute("interval-ms") ?? 0) || undefined,
1313
1366
  limit: Number(this.getAttribute("limit") ?? 0) || undefined,
1314
- title: this.getAttribute("title") ?? undefined
1367
+ title: this.getAttribute("title") ?? undefined,
1368
+ ...reactiveTopic ? {
1369
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
1370
+ path: this.getAttribute("reactive-path") ?? undefined
1371
+ })
1372
+ } : { intervalMs }
1315
1373
  });
1316
1374
  }
1317
1375
  disconnectedCallback() {
@@ -1371,6 +1429,7 @@ var VoicePlatformCoverage = defineComponent4({
1371
1429
  default: "/api/voice/platform-coverage",
1372
1430
  type: String
1373
1431
  },
1432
+ reactiveSource: Function,
1374
1433
  title: String
1375
1434
  },
1376
1435
  setup(props) {
@@ -1378,6 +1437,7 @@ var VoicePlatformCoverage = defineComponent4({
1378
1437
  description: props.description,
1379
1438
  intervalMs: props.intervalMs,
1380
1439
  limit: props.limit,
1440
+ reactiveSource: props.reactiveSource,
1381
1441
  title: props.title
1382
1442
  });
1383
1443
  return () => {
@@ -1390,6 +1450,7 @@ var VoicePlatformCoverage = defineComponent4({
1390
1450
  description: props.description,
1391
1451
  intervalMs: props.intervalMs,
1392
1452
  limit: props.limit,
1453
+ reactiveSource: props.reactiveSource,
1393
1454
  title: props.title
1394
1455
  });
1395
1456
  return h4("section", {
@@ -6127,12 +6188,14 @@ var createVoiceProofTrendsStore = (path = "/api/voice/proof-trends", options = {
6127
6188
  throw error;
6128
6189
  }
6129
6190
  };
6191
+ let unbindReactiveSource = () => {};
6130
6192
  const close = () => {
6131
6193
  closed = true;
6132
6194
  if (timer) {
6133
6195
  clearInterval(timer);
6134
6196
  timer = undefined;
6135
6197
  }
6198
+ unbindReactiveSource();
6136
6199
  listeners.clear();
6137
6200
  };
6138
6201
  if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
@@ -6140,6 +6203,9 @@ var createVoiceProofTrendsStore = (path = "/api/voice/proof-trends", options = {
6140
6203
  refresh().catch(() => {});
6141
6204
  }, options.intervalMs);
6142
6205
  }
6206
+ if (typeof window !== "undefined" && options.reactiveSource) {
6207
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
6208
+ }
6143
6209
  return {
6144
6210
  close,
6145
6211
  refresh,
@@ -6222,10 +6288,16 @@ var defineVoiceProofTrendsElement = (tagName = "absolute-voice-proof-trends") =>
6222
6288
  customElements.define(tagName, class AbsoluteVoiceProofTrendsElement extends HTMLElement {
6223
6289
  mounted;
6224
6290
  connectedCallback() {
6291
+ const intervalMs = Number(this.getAttribute("interval-ms") ?? 0) || undefined;
6292
+ const reactiveTopic = this.getAttribute("reactive-topic");
6225
6293
  this.mounted = mountVoiceProofTrends(this, this.getAttribute("path") ?? "/api/voice/proof-trends", {
6226
6294
  description: this.getAttribute("description") ?? undefined,
6227
- intervalMs: Number(this.getAttribute("interval-ms") ?? 0) || undefined,
6228
- title: this.getAttribute("title") ?? undefined
6295
+ title: this.getAttribute("title") ?? undefined,
6296
+ ...reactiveTopic ? {
6297
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
6298
+ path: this.getAttribute("reactive-path") ?? undefined
6299
+ })
6300
+ } : { intervalMs }
6229
6301
  });
6230
6302
  }
6231
6303
  disconnectedCallback() {
@@ -6313,12 +6385,14 @@ var VoiceProofTrends = defineComponent5({
6313
6385
  default: "/api/voice/proof-trends",
6314
6386
  type: String
6315
6387
  },
6388
+ reactiveSource: Function,
6316
6389
  title: String
6317
6390
  },
6318
6391
  setup(props) {
6319
6392
  const state = useVoiceProofTrends(props.path, {
6320
6393
  description: props.description,
6321
6394
  intervalMs: props.intervalMs,
6395
+ reactiveSource: props.reactiveSource,
6322
6396
  title: props.title
6323
6397
  });
6324
6398
  return () => {
@@ -6330,6 +6404,7 @@ var VoiceProofTrends = defineComponent5({
6330
6404
  }, {
6331
6405
  description: props.description,
6332
6406
  intervalMs: props.intervalMs,
6407
+ reactiveSource: props.reactiveSource,
6333
6408
  title: props.title
6334
6409
  });
6335
6410
  return h5("section", {
@@ -6396,12 +6471,14 @@ var createVoiceReconnectProfileEvidenceStore = (path = "/api/voice/reconnect-pro
6396
6471
  throw error;
6397
6472
  }
6398
6473
  };
6474
+ let unbindReactiveSource = () => {};
6399
6475
  const close = () => {
6400
6476
  closed = true;
6401
6477
  if (timer) {
6402
6478
  clearInterval(timer);
6403
6479
  timer = undefined;
6404
6480
  }
6481
+ unbindReactiveSource();
6405
6482
  listeners.clear();
6406
6483
  };
6407
6484
  if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
@@ -6409,6 +6486,9 @@ var createVoiceReconnectProfileEvidenceStore = (path = "/api/voice/reconnect-pro
6409
6486
  refresh().catch(() => {});
6410
6487
  }, options.intervalMs);
6411
6488
  }
6489
+ if (typeof window !== "undefined" && options.reactiveSource) {
6490
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
6491
+ }
6412
6492
  return {
6413
6493
  close,
6414
6494
  refresh,
@@ -6500,10 +6580,15 @@ var defineVoiceReconnectProfileEvidenceElement = (tagName = "absolute-voice-reco
6500
6580
  mounted;
6501
6581
  connectedCallback() {
6502
6582
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
6583
+ const reactiveTopic = this.getAttribute("reactive-topic");
6503
6584
  this.mounted = mountVoiceReconnectProfileEvidence(this, this.getAttribute("path") ?? "/api/voice/reconnect-profile-evidence", {
6504
6585
  description: this.getAttribute("description") ?? undefined,
6505
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
6506
- title: this.getAttribute("title") ?? undefined
6586
+ title: this.getAttribute("title") ?? undefined,
6587
+ ...reactiveTopic ? {
6588
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
6589
+ path: this.getAttribute("reactive-path") ?? undefined
6590
+ })
6591
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
6507
6592
  });
6508
6593
  }
6509
6594
  disconnectedCallback() {
@@ -6593,12 +6678,14 @@ var VoiceReconnectProfileEvidence = defineComponent6({
6593
6678
  default: "/api/voice/reconnect-profile-evidence",
6594
6679
  type: String
6595
6680
  },
6681
+ reactiveSource: Function,
6596
6682
  title: String
6597
6683
  },
6598
6684
  setup(props) {
6599
6685
  const state = useVoiceReconnectProfileEvidence(props.path, {
6600
6686
  description: props.description,
6601
6687
  intervalMs: props.intervalMs,
6688
+ reactiveSource: props.reactiveSource,
6602
6689
  title: props.title
6603
6690
  });
6604
6691
  return () => {
@@ -6610,6 +6697,7 @@ var VoiceReconnectProfileEvidence = defineComponent6({
6610
6697
  }, {
6611
6698
  description: props.description,
6612
6699
  intervalMs: props.intervalMs,
6700
+ reactiveSource: props.reactiveSource,
6613
6701
  title: props.title
6614
6702
  });
6615
6703
  return h6("section", {
@@ -6677,12 +6765,14 @@ var createVoiceCallDebuggerStore = (path, options = {}) => {
6677
6765
  throw error;
6678
6766
  }
6679
6767
  };
6768
+ let unbindReactiveSource = () => {};
6680
6769
  const close = () => {
6681
6770
  closed = true;
6682
6771
  if (timer) {
6683
6772
  clearInterval(timer);
6684
6773
  timer = undefined;
6685
6774
  }
6775
+ unbindReactiveSource();
6686
6776
  listeners.clear();
6687
6777
  };
6688
6778
  if (options.intervalMs && options.intervalMs > 0) {
@@ -6690,6 +6780,9 @@ var createVoiceCallDebuggerStore = (path, options = {}) => {
6690
6780
  refresh().catch(() => {});
6691
6781
  }, options.intervalMs);
6692
6782
  }
6783
+ if (typeof window !== "undefined" && options.reactiveSource) {
6784
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
6785
+ }
6693
6786
  return {
6694
6787
  close,
6695
6788
  refresh,
@@ -6773,12 +6866,17 @@ var defineVoiceCallDebuggerLaunchElement = (tagName = "absolute-voice-call-debug
6773
6866
  mounted;
6774
6867
  connectedCallback() {
6775
6868
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 0);
6869
+ const reactiveTopic = this.getAttribute("reactive-topic");
6776
6870
  this.mounted = mountVoiceCallDebuggerLaunch(this, this.getAttribute("path") ?? "/api/voice-call-debugger/latest", {
6777
6871
  description: this.getAttribute("description") ?? undefined,
6778
6872
  href: this.getAttribute("href") ?? undefined,
6779
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 0,
6780
6873
  linkLabel: this.getAttribute("link-label") ?? undefined,
6781
- title: this.getAttribute("title") ?? undefined
6874
+ title: this.getAttribute("title") ?? undefined,
6875
+ ...reactiveTopic ? {
6876
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
6877
+ path: this.getAttribute("reactive-path") ?? undefined
6878
+ })
6879
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 0 }
6782
6880
  });
6783
6881
  }
6784
6882
  disconnectedCallback() {
@@ -6861,6 +6959,7 @@ var VoiceCallDebuggerLaunch = defineComponent7({
6861
6959
  description: { default: undefined, type: String },
6862
6960
  href: { default: undefined, type: String },
6863
6961
  intervalMs: { default: 0, type: Number },
6962
+ reactiveSource: Function,
6864
6963
  linkLabel: { default: undefined, type: String },
6865
6964
  path: { required: true, type: String },
6866
6965
  title: { default: undefined, type: String }
@@ -6870,6 +6969,7 @@ var VoiceCallDebuggerLaunch = defineComponent7({
6870
6969
  description: props.description,
6871
6970
  href: props.href,
6872
6971
  intervalMs: props.intervalMs,
6972
+ reactiveSource: props.reactiveSource,
6873
6973
  linkLabel: props.linkLabel,
6874
6974
  title: props.title
6875
6975
  };
@@ -6964,12 +7064,14 @@ var createVoiceSessionSnapshotStore = (path, options = {}) => {
6964
7064
  type: "application/json"
6965
7065
  });
6966
7066
  };
7067
+ let unbindReactiveSource = () => {};
6967
7068
  const close = () => {
6968
7069
  closed = true;
6969
7070
  if (timer) {
6970
7071
  clearInterval(timer);
6971
7072
  timer = undefined;
6972
7073
  }
7074
+ unbindReactiveSource();
6973
7075
  listeners.clear();
6974
7076
  };
6975
7077
  if (options.intervalMs && options.intervalMs > 0) {
@@ -6977,6 +7079,9 @@ var createVoiceSessionSnapshotStore = (path, options = {}) => {
6977
7079
  refresh().catch(() => {});
6978
7080
  }, options.intervalMs);
6979
7081
  }
7082
+ if (typeof window !== "undefined" && options.reactiveSource) {
7083
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
7084
+ }
6980
7085
  return {
6981
7086
  close,
6982
7087
  download,
@@ -7091,12 +7196,17 @@ var defineVoiceSessionSnapshotElement = (tagName = "absolute-voice-session-snaps
7091
7196
  mounted;
7092
7197
  connectedCallback() {
7093
7198
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 0);
7199
+ const reactiveTopic = this.getAttribute("reactive-topic");
7094
7200
  this.mounted = mountVoiceSessionSnapshot(this, this.getAttribute("path") ?? "/api/voice/session-snapshot/session", {
7095
7201
  description: this.getAttribute("description") ?? undefined,
7096
7202
  downloadLabel: this.getAttribute("download-label") ?? undefined,
7097
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 0,
7098
7203
  title: this.getAttribute("title") ?? undefined,
7099
- turnId: this.getAttribute("turn-id") ?? undefined
7204
+ turnId: this.getAttribute("turn-id") ?? undefined,
7205
+ ...reactiveTopic ? {
7206
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
7207
+ path: this.getAttribute("reactive-path") ?? undefined
7208
+ })
7209
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 0 }
7100
7210
  });
7101
7211
  }
7102
7212
  disconnectedCallback() {
@@ -7172,6 +7282,7 @@ var VoiceSessionSnapshot = defineComponent8({
7172
7282
  description: { default: undefined, type: String },
7173
7283
  downloadLabel: { default: undefined, type: String },
7174
7284
  intervalMs: { default: 0, type: Number },
7285
+ reactiveSource: Function,
7175
7286
  path: { required: true, type: String },
7176
7287
  title: { default: undefined, type: String },
7177
7288
  turnId: { default: undefined, type: String }
@@ -7181,6 +7292,7 @@ var VoiceSessionSnapshot = defineComponent8({
7181
7292
  description: props.description,
7182
7293
  downloadLabel: props.downloadLabel,
7183
7294
  intervalMs: props.intervalMs,
7295
+ reactiveSource: props.reactiveSource,
7184
7296
  title: props.title,
7185
7297
  turnId: props.turnId
7186
7298
  };
@@ -7264,12 +7376,14 @@ var createVoiceSessionObservabilityStore = (path, options = {}) => {
7264
7376
  throw error;
7265
7377
  }
7266
7378
  };
7379
+ let unbindReactiveSource = () => {};
7267
7380
  const close = () => {
7268
7381
  closed = true;
7269
7382
  if (timer) {
7270
7383
  clearInterval(timer);
7271
7384
  timer = undefined;
7272
7385
  }
7386
+ unbindReactiveSource();
7273
7387
  listeners.clear();
7274
7388
  };
7275
7389
  if (options.intervalMs && options.intervalMs > 0) {
@@ -7277,6 +7391,9 @@ var createVoiceSessionObservabilityStore = (path, options = {}) => {
7277
7391
  refresh().catch(() => {});
7278
7392
  }, options.intervalMs);
7279
7393
  }
7394
+ if (typeof window !== "undefined" && options.reactiveSource) {
7395
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
7396
+ }
7280
7397
  return {
7281
7398
  close,
7282
7399
  refresh,
@@ -7332,12 +7449,17 @@ var defineVoiceSessionObservabilityElement = (tagName = "absolute-voice-session-
7332
7449
  mounted;
7333
7450
  connectedCallback() {
7334
7451
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
7452
+ const reactiveTopic = this.getAttribute("reactive-topic");
7335
7453
  const maxTurns = Number(this.getAttribute("max-turns") ?? 3);
7336
7454
  this.mounted = mountVoiceSessionObservability(this, this.getAttribute("path") ?? "/api/voice/session-observability/latest", {
7337
7455
  description: this.getAttribute("description") ?? undefined,
7338
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
7339
7456
  maxTurns: Number.isFinite(maxTurns) ? maxTurns : 3,
7340
- title: this.getAttribute("title") ?? undefined
7457
+ title: this.getAttribute("title") ?? undefined,
7458
+ ...reactiveTopic ? {
7459
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
7460
+ path: this.getAttribute("reactive-path") ?? undefined
7461
+ })
7462
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
7341
7463
  });
7342
7464
  }
7343
7465
  disconnectedCallback() {
@@ -7390,6 +7512,7 @@ var VoiceSessionObservability = defineComponent9({
7390
7512
  default: "/api/voice/session-observability/latest",
7391
7513
  type: String
7392
7514
  },
7515
+ reactiveSource: Function,
7393
7516
  title: String
7394
7517
  },
7395
7518
  setup(props) {
@@ -7397,6 +7520,7 @@ var VoiceSessionObservability = defineComponent9({
7397
7520
  description: props.description,
7398
7521
  intervalMs: props.intervalMs,
7399
7522
  maxTurns: props.maxTurns,
7523
+ reactiveSource: props.reactiveSource,
7400
7524
  title: props.title
7401
7525
  };
7402
7526
  const store = createVoiceSessionObservabilityStore(props.path, options);
@@ -7476,12 +7600,14 @@ var createVoiceReadinessFailuresStore = (path = "/api/production-readiness", opt
7476
7600
  throw error;
7477
7601
  }
7478
7602
  };
7603
+ let unbindReactiveSource = () => {};
7479
7604
  const close = () => {
7480
7605
  closed = true;
7481
7606
  if (timer) {
7482
7607
  clearInterval(timer);
7483
7608
  timer = undefined;
7484
7609
  }
7610
+ unbindReactiveSource();
7485
7611
  listeners.clear();
7486
7612
  };
7487
7613
  if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
@@ -7489,6 +7615,9 @@ var createVoiceReadinessFailuresStore = (path = "/api/production-readiness", opt
7489
7615
  refresh().catch(() => {});
7490
7616
  }, options.intervalMs);
7491
7617
  }
7618
+ if (typeof window !== "undefined" && options.reactiveSource) {
7619
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
7620
+ }
7492
7621
  return {
7493
7622
  close,
7494
7623
  refresh,
@@ -7563,10 +7692,16 @@ var defineVoiceReadinessFailuresElement = (tagName = "absolute-voice-readiness-f
7563
7692
  customElements.define(tagName, class AbsoluteVoiceReadinessFailuresElement extends HTMLElement {
7564
7693
  mounted;
7565
7694
  connectedCallback() {
7695
+ const intervalMs = Number(this.getAttribute("interval-ms") ?? 0) || undefined;
7696
+ const reactiveTopic = this.getAttribute("reactive-topic");
7566
7697
  this.mounted = mountVoiceReadinessFailures(this, this.getAttribute("path") ?? "/api/production-readiness", {
7567
7698
  description: this.getAttribute("description") ?? undefined,
7568
- intervalMs: Number(this.getAttribute("interval-ms") ?? 0) || undefined,
7569
- title: this.getAttribute("title") ?? undefined
7699
+ title: this.getAttribute("title") ?? undefined,
7700
+ ...reactiveTopic ? {
7701
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
7702
+ path: this.getAttribute("reactive-path") ?? undefined
7703
+ })
7704
+ } : { intervalMs }
7570
7705
  });
7571
7706
  }
7572
7707
  disconnectedCallback() {
@@ -7657,12 +7792,14 @@ var VoiceReadinessFailures = defineComponent10({
7657
7792
  default: "/api/production-readiness",
7658
7793
  type: String
7659
7794
  },
7795
+ reactiveSource: Function,
7660
7796
  title: String
7661
7797
  },
7662
7798
  setup(props) {
7663
7799
  const state = useVoiceReadinessFailures(props.path, {
7664
7800
  description: props.description,
7665
7801
  intervalMs: props.intervalMs,
7802
+ reactiveSource: props.reactiveSource,
7666
7803
  title: props.title
7667
7804
  });
7668
7805
  return () => {
@@ -7674,6 +7811,7 @@ var VoiceReadinessFailures = defineComponent10({
7674
7811
  }, {
7675
7812
  description: props.description,
7676
7813
  intervalMs: props.intervalMs,
7814
+ reactiveSource: props.reactiveSource,
7677
7815
  title: props.title
7678
7816
  });
7679
7817
  return h10("section", {
@@ -8044,12 +8182,14 @@ var createVoiceProviderCapabilitiesStore = (path = "/api/provider-capabilities",
8044
8182
  throw error;
8045
8183
  }
8046
8184
  };
8185
+ let unbindReactiveSource = () => {};
8047
8186
  const close = () => {
8048
8187
  closed = true;
8049
8188
  if (timer) {
8050
8189
  clearInterval(timer);
8051
8190
  timer = undefined;
8052
8191
  }
8192
+ unbindReactiveSource();
8053
8193
  listeners.clear();
8054
8194
  };
8055
8195
  if (options.intervalMs && options.intervalMs > 0) {
@@ -8057,6 +8197,9 @@ var createVoiceProviderCapabilitiesStore = (path = "/api/provider-capabilities",
8057
8197
  refresh().catch(() => {});
8058
8198
  }, options.intervalMs);
8059
8199
  }
8200
+ if (typeof window !== "undefined" && options.reactiveSource) {
8201
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
8202
+ }
8060
8203
  return {
8061
8204
  close,
8062
8205
  refresh,
@@ -8142,10 +8285,15 @@ var defineVoiceProviderCapabilitiesElement = (tagName = "absolute-voice-provider
8142
8285
  mounted;
8143
8286
  connectedCallback() {
8144
8287
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
8288
+ const reactiveTopic = this.getAttribute("reactive-topic");
8145
8289
  this.mounted = mountVoiceProviderCapabilities(this, this.getAttribute("path") ?? "/api/provider-capabilities", {
8146
8290
  description: this.getAttribute("description") ?? undefined,
8147
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
8148
- title: this.getAttribute("title") ?? undefined
8291
+ title: this.getAttribute("title") ?? undefined,
8292
+ ...reactiveTopic ? {
8293
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
8294
+ path: this.getAttribute("reactive-path") ?? undefined
8295
+ })
8296
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
8149
8297
  });
8150
8298
  }
8151
8299
  disconnectedCallback() {
@@ -8242,6 +8390,7 @@ var VoiceProviderCapabilities = defineComponent12({
8242
8390
  default: 5000,
8243
8391
  type: Number
8244
8392
  },
8393
+ reactiveSource: Function,
8245
8394
  path: {
8246
8395
  default: "/api/provider-capabilities",
8247
8396
  type: String
@@ -8255,6 +8404,7 @@ var VoiceProviderCapabilities = defineComponent12({
8255
8404
  const options = {
8256
8405
  description: props.description,
8257
8406
  intervalMs: props.intervalMs,
8407
+ reactiveSource: props.reactiveSource,
8258
8408
  title: props.title
8259
8409
  };
8260
8410
  const capabilities = useVoiceProviderCapabilities(props.path, options);
@@ -8343,12 +8493,14 @@ var createVoiceProviderContractsStore = (path = "/api/provider-contracts", optio
8343
8493
  throw error;
8344
8494
  }
8345
8495
  };
8496
+ let unbindReactiveSource = () => {};
8346
8497
  const close = () => {
8347
8498
  closed = true;
8348
8499
  if (timer) {
8349
8500
  clearInterval(timer);
8350
8501
  timer = undefined;
8351
8502
  }
8503
+ unbindReactiveSource();
8352
8504
  listeners.clear();
8353
8505
  };
8354
8506
  if (options.intervalMs && options.intervalMs > 0) {
@@ -8356,6 +8508,9 @@ var createVoiceProviderContractsStore = (path = "/api/provider-contracts", optio
8356
8508
  refresh().catch(() => {});
8357
8509
  }, options.intervalMs);
8358
8510
  }
8511
+ if (typeof window !== "undefined" && options.reactiveSource) {
8512
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
8513
+ }
8359
8514
  return {
8360
8515
  close,
8361
8516
  refresh,
@@ -8460,10 +8615,15 @@ var defineVoiceProviderContractsElement = (tagName = "absolute-voice-provider-co
8460
8615
  mounted;
8461
8616
  connectedCallback() {
8462
8617
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
8618
+ const reactiveTopic = this.getAttribute("reactive-topic");
8463
8619
  this.mounted = mountVoiceProviderContracts(this, this.getAttribute("path") ?? "/api/provider-contracts", {
8464
8620
  description: this.getAttribute("description") ?? undefined,
8465
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
8466
- title: this.getAttribute("title") ?? undefined
8621
+ title: this.getAttribute("title") ?? undefined,
8622
+ ...reactiveTopic ? {
8623
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
8624
+ path: this.getAttribute("reactive-path") ?? undefined
8625
+ })
8626
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
8467
8627
  });
8468
8628
  }
8469
8629
  disconnectedCallback() {
@@ -8524,12 +8684,14 @@ var VoiceProviderContracts = defineComponent13({
8524
8684
  default: "/api/provider-contracts",
8525
8685
  type: String
8526
8686
  },
8687
+ reactiveSource: Function,
8527
8688
  title: String
8528
8689
  },
8529
8690
  setup(props) {
8530
8691
  const state = useVoiceProviderContracts(props.path, {
8531
8692
  description: props.description,
8532
8693
  intervalMs: props.intervalMs,
8694
+ reactiveSource: props.reactiveSource,
8533
8695
  title: props.title
8534
8696
  });
8535
8697
  return () => {
@@ -8541,6 +8703,7 @@ var VoiceProviderContracts = defineComponent13({
8541
8703
  }, {
8542
8704
  description: props.description,
8543
8705
  intervalMs: props.intervalMs,
8706
+ reactiveSource: props.reactiveSource,
8544
8707
  title: props.title
8545
8708
  });
8546
8709
  return h13("section", {
@@ -8632,12 +8795,14 @@ var createVoiceProviderStatusStore = (path = "/api/provider-status", options = {
8632
8795
  throw error;
8633
8796
  }
8634
8797
  };
8798
+ let unbindReactiveSource = () => {};
8635
8799
  const close = () => {
8636
8800
  closed = true;
8637
8801
  if (timer) {
8638
8802
  clearInterval(timer);
8639
8803
  timer = undefined;
8640
8804
  }
8805
+ unbindReactiveSource();
8641
8806
  listeners.clear();
8642
8807
  };
8643
8808
  if (options.intervalMs && options.intervalMs > 0) {
@@ -8645,6 +8810,9 @@ var createVoiceProviderStatusStore = (path = "/api/provider-status", options = {
8645
8810
  refresh().catch(() => {});
8646
8811
  }, options.intervalMs);
8647
8812
  }
8813
+ if (typeof window !== "undefined" && options.reactiveSource) {
8814
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
8815
+ }
8648
8816
  return {
8649
8817
  close,
8650
8818
  refresh,
@@ -8731,10 +8899,15 @@ var defineVoiceProviderStatusElement = (tagName = "absolute-voice-provider-statu
8731
8899
  mounted;
8732
8900
  connectedCallback() {
8733
8901
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
8902
+ const reactiveTopic = this.getAttribute("reactive-topic");
8734
8903
  this.mounted = mountVoiceProviderStatus(this, this.getAttribute("path") ?? "/api/provider-status", {
8735
8904
  description: this.getAttribute("description") ?? undefined,
8736
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
8737
- title: this.getAttribute("title") ?? undefined
8905
+ title: this.getAttribute("title") ?? undefined,
8906
+ ...reactiveTopic ? {
8907
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
8908
+ path: this.getAttribute("reactive-path") ?? undefined
8909
+ })
8910
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
8738
8911
  });
8739
8912
  }
8740
8913
  disconnectedCallback() {
@@ -8831,6 +9004,7 @@ var VoiceProviderStatus = defineComponent14({
8831
9004
  default: 5000,
8832
9005
  type: Number
8833
9006
  },
9007
+ reactiveSource: Function,
8834
9008
  path: {
8835
9009
  default: "/api/provider-status",
8836
9010
  type: String
@@ -8844,6 +9018,7 @@ var VoiceProviderStatus = defineComponent14({
8844
9018
  const options = {
8845
9019
  description: props.description,
8846
9020
  intervalMs: props.intervalMs,
9021
+ reactiveSource: props.reactiveSource,
8847
9022
  title: props.title
8848
9023
  };
8849
9024
  const status = useVoiceProviderStatus(props.path, options);
@@ -8934,12 +9109,14 @@ var createVoiceRoutingStatusStore = (path = "/api/routing/latest", options = {})
8934
9109
  throw error;
8935
9110
  }
8936
9111
  };
9112
+ let unbindReactiveSource = () => {};
8937
9113
  const close = () => {
8938
9114
  closed = true;
8939
9115
  if (timer) {
8940
9116
  clearInterval(timer);
8941
9117
  timer = undefined;
8942
9118
  }
9119
+ unbindReactiveSource();
8943
9120
  listeners.clear();
8944
9121
  };
8945
9122
  if (options.intervalMs && options.intervalMs > 0) {
@@ -8947,6 +9124,9 @@ var createVoiceRoutingStatusStore = (path = "/api/routing/latest", options = {})
8947
9124
  refresh().catch(() => {});
8948
9125
  }, options.intervalMs);
8949
9126
  }
9127
+ if (typeof window !== "undefined" && options.reactiveSource) {
9128
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
9129
+ }
8950
9130
  return {
8951
9131
  close,
8952
9132
  refresh,
@@ -9058,10 +9238,15 @@ var defineVoiceRoutingStatusElement = (tagName = "absolute-voice-routing-status"
9058
9238
  mounted;
9059
9239
  connectedCallback() {
9060
9240
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
9241
+ const reactiveTopic = this.getAttribute("reactive-topic");
9061
9242
  this.mounted = mountVoiceRoutingStatus(this, this.getAttribute("path") ?? "/api/routing/latest", {
9062
9243
  description: this.getAttribute("description") ?? undefined,
9063
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
9064
- title: this.getAttribute("title") ?? undefined
9244
+ title: this.getAttribute("title") ?? undefined,
9245
+ ...reactiveTopic ? {
9246
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
9247
+ path: this.getAttribute("reactive-path") ?? undefined
9248
+ })
9249
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
9065
9250
  });
9066
9251
  }
9067
9252
  disconnectedCallback() {
@@ -9156,6 +9341,7 @@ var VoiceRoutingStatus = defineComponent15({
9156
9341
  default: 5000,
9157
9342
  type: Number
9158
9343
  },
9344
+ reactiveSource: Function,
9159
9345
  path: {
9160
9346
  default: "/api/routing/latest",
9161
9347
  type: String
@@ -9169,6 +9355,7 @@ var VoiceRoutingStatus = defineComponent15({
9169
9355
  const options = {
9170
9356
  description: props.description,
9171
9357
  intervalMs: props.intervalMs,
9358
+ reactiveSource: props.reactiveSource,
9172
9359
  title: props.title
9173
9360
  };
9174
9361
  const status = useVoiceRoutingStatus(props.path, options);
@@ -9246,12 +9433,14 @@ var createVoiceTraceTimelineStore = (path = "/api/voice-traces", options = {}) =
9246
9433
  throw error;
9247
9434
  }
9248
9435
  };
9436
+ let unbindReactiveSource = () => {};
9249
9437
  const close = () => {
9250
9438
  closed = true;
9251
9439
  if (timer) {
9252
9440
  clearInterval(timer);
9253
9441
  timer = undefined;
9254
9442
  }
9443
+ unbindReactiveSource();
9255
9444
  listeners.clear();
9256
9445
  };
9257
9446
  if (options.intervalMs && options.intervalMs > 0) {
@@ -9259,6 +9448,9 @@ var createVoiceTraceTimelineStore = (path = "/api/voice-traces", options = {}) =
9259
9448
  refresh().catch(() => {});
9260
9449
  }, options.intervalMs);
9261
9450
  }
9451
+ if (typeof window !== "undefined" && options.reactiveSource) {
9452
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
9453
+ }
9262
9454
  return {
9263
9455
  close,
9264
9456
  refresh,
@@ -9451,12 +9643,14 @@ var createVoiceTurnLatencyStore = (path = "/api/turn-latency", options = {}) =>
9451
9643
  throw error;
9452
9644
  }
9453
9645
  };
9646
+ let unbindReactiveSource = () => {};
9454
9647
  const close = () => {
9455
9648
  closed = true;
9456
9649
  if (timer) {
9457
9650
  clearInterval(timer);
9458
9651
  timer = undefined;
9459
9652
  }
9653
+ unbindReactiveSource();
9460
9654
  listeners.clear();
9461
9655
  };
9462
9656
  if (options.intervalMs && options.intervalMs > 0) {
@@ -9464,6 +9658,9 @@ var createVoiceTurnLatencyStore = (path = "/api/turn-latency", options = {}) =>
9464
9658
  refresh().catch(() => {});
9465
9659
  }, options.intervalMs);
9466
9660
  }
9661
+ if (typeof window !== "undefined" && options.reactiveSource) {
9662
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
9663
+ }
9467
9664
  return {
9468
9665
  close,
9469
9666
  refresh,
@@ -9532,12 +9729,17 @@ var defineVoiceTurnLatencyElement = (tagName = "absolute-voice-turn-latency") =>
9532
9729
  mounted;
9533
9730
  connectedCallback() {
9534
9731
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
9732
+ const reactiveTopic = this.getAttribute("reactive-topic");
9535
9733
  this.mounted = mountVoiceTurnLatency(this, this.getAttribute("path") ?? "/api/turn-latency", {
9536
9734
  description: this.getAttribute("description") ?? undefined,
9537
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
9538
9735
  proofLabel: this.getAttribute("proof-label") ?? undefined,
9539
9736
  proofPath: this.getAttribute("proof-path") ?? undefined,
9540
- title: this.getAttribute("title") ?? undefined
9737
+ title: this.getAttribute("title") ?? undefined,
9738
+ ...reactiveTopic ? {
9739
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
9740
+ path: this.getAttribute("reactive-path") ?? undefined
9741
+ })
9742
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
9541
9743
  });
9542
9744
  }
9543
9745
  disconnectedCallback() {
@@ -9633,6 +9835,7 @@ var VoiceTurnLatency = defineComponent16({
9633
9835
  class: { default: "", type: String },
9634
9836
  description: { default: undefined, type: String },
9635
9837
  intervalMs: { default: 5000, type: Number },
9838
+ reactiveSource: Function,
9636
9839
  path: { default: "/api/turn-latency", type: String },
9637
9840
  proofLabel: { default: undefined, type: String },
9638
9841
  proofPath: { default: undefined, type: String },
@@ -9642,6 +9845,7 @@ var VoiceTurnLatency = defineComponent16({
9642
9845
  const options = {
9643
9846
  description: props.description,
9644
9847
  intervalMs: props.intervalMs,
9848
+ reactiveSource: props.reactiveSource,
9645
9849
  proofLabel: props.proofLabel,
9646
9850
  proofPath: props.proofPath,
9647
9851
  title: props.title
@@ -9739,12 +9943,14 @@ var createVoiceTurnQualityStore = (path = "/api/turn-quality", options = {}) =>
9739
9943
  throw error;
9740
9944
  }
9741
9945
  };
9946
+ let unbindReactiveSource = () => {};
9742
9947
  const close = () => {
9743
9948
  closed = true;
9744
9949
  if (timer) {
9745
9950
  clearInterval(timer);
9746
9951
  timer = undefined;
9747
9952
  }
9953
+ unbindReactiveSource();
9748
9954
  listeners.clear();
9749
9955
  };
9750
9956
  if (options.intervalMs && options.intervalMs > 0) {
@@ -9752,6 +9958,9 @@ var createVoiceTurnQualityStore = (path = "/api/turn-quality", options = {}) =>
9752
9958
  refresh().catch(() => {});
9753
9959
  }, options.intervalMs);
9754
9960
  }
9961
+ if (typeof window !== "undefined" && options.reactiveSource) {
9962
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
9963
+ }
9755
9964
  return {
9756
9965
  close,
9757
9966
  refresh,
@@ -9838,10 +10047,15 @@ var defineVoiceTurnQualityElement = (tagName = "absolute-voice-turn-quality") =>
9838
10047
  mounted;
9839
10048
  connectedCallback() {
9840
10049
  const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
10050
+ const reactiveTopic = this.getAttribute("reactive-topic");
9841
10051
  this.mounted = mountVoiceTurnQuality(this, this.getAttribute("path") ?? "/api/turn-quality", {
9842
10052
  description: this.getAttribute("description") ?? undefined,
9843
- intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
9844
- title: this.getAttribute("title") ?? undefined
10053
+ title: this.getAttribute("title") ?? undefined,
10054
+ ...reactiveTopic ? {
10055
+ reactiveSource: voiceSseReactiveSource(reactiveTopic, {
10056
+ path: this.getAttribute("reactive-path") ?? undefined
10057
+ })
10058
+ } : { intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000 }
9845
10059
  });
9846
10060
  }
9847
10061
  disconnectedCallback() {
@@ -9923,6 +10137,7 @@ var VoiceTurnQuality = defineComponent17({
9923
10137
  class: { default: "", type: String },
9924
10138
  description: { default: undefined, type: String },
9925
10139
  intervalMs: { default: 5000, type: Number },
10140
+ reactiveSource: Function,
9926
10141
  path: { default: "/api/turn-quality", type: String },
9927
10142
  title: { default: undefined, type: String }
9928
10143
  },
@@ -9930,6 +10145,7 @@ var VoiceTurnQuality = defineComponent17({
9930
10145
  const options = {
9931
10146
  description: props.description,
9932
10147
  intervalMs: props.intervalMs,
10148
+ reactiveSource: props.reactiveSource,
9933
10149
  title: props.title
9934
10150
  };
9935
10151
  const quality = useVoiceTurnQuality(props.path, options);
@@ -10045,12 +10261,14 @@ var createVoiceProfileComparisonStore = (path = "/api/voice/real-call-profile-hi
10045
10261
  throw error;
10046
10262
  }
10047
10263
  };
10264
+ let unbindReactiveSource = () => {};
10048
10265
  const close = () => {
10049
10266
  closed = true;
10050
10267
  if (timer) {
10051
10268
  clearInterval(timer);
10052
10269
  timer = undefined;
10053
10270
  }
10271
+ unbindReactiveSource();
10054
10272
  listeners.clear();
10055
10273
  };
10056
10274
  if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
@@ -10058,6 +10276,9 @@ var createVoiceProfileComparisonStore = (path = "/api/voice/real-call-profile-hi
10058
10276
  refresh().catch(() => {});
10059
10277
  }, options.intervalMs);
10060
10278
  }
10279
+ if (typeof window !== "undefined" && options.reactiveSource) {
10280
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
10281
+ }
10061
10282
  return {
10062
10283
  close,
10063
10284
  refresh,
@@ -10308,12 +10529,14 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
10308
10529
  throw error;
10309
10530
  }
10310
10531
  };
10532
+ let unbindReactiveSource = () => {};
10311
10533
  const close = () => {
10312
10534
  closed = true;
10313
10535
  if (timer) {
10314
10536
  clearInterval(timer);
10315
10537
  timer = undefined;
10316
10538
  }
10539
+ unbindReactiveSource();
10317
10540
  listeners.clear();
10318
10541
  };
10319
10542
  if (options.intervalMs && options.intervalMs > 0) {
@@ -10321,6 +10544,9 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
10321
10544
  refresh().catch(() => {});
10322
10545
  }, options.intervalMs);
10323
10546
  }
10547
+ if (typeof window !== "undefined" && options.reactiveSource) {
10548
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
10549
+ }
10324
10550
  return {
10325
10551
  close,
10326
10552
  refresh,
@@ -13298,12 +13524,14 @@ var createVoiceWorkflowStatusStore = (path = "/evals/scenarios/json", options =
13298
13524
  throw error;
13299
13525
  }
13300
13526
  };
13527
+ let unbindReactiveSource = () => {};
13301
13528
  const close = () => {
13302
13529
  closed = true;
13303
13530
  if (timer) {
13304
13531
  clearInterval(timer);
13305
13532
  timer = undefined;
13306
13533
  }
13534
+ unbindReactiveSource();
13307
13535
  listeners.clear();
13308
13536
  };
13309
13537
  if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
@@ -13311,6 +13539,9 @@ var createVoiceWorkflowStatusStore = (path = "/evals/scenarios/json", options =
13311
13539
  refresh().catch(() => {});
13312
13540
  }, options.intervalMs);
13313
13541
  }
13542
+ if (typeof window !== "undefined" && options.reactiveSource) {
13543
+ unbindReactiveSource = bindVoiceReactiveSource(() => void refresh().catch(() => {}), options.reactiveSource);
13544
+ }
13314
13545
  return {
13315
13546
  close,
13316
13547
  refresh,