@tx5dr/contracts 1.7.12 → 2.5.0

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 (255) hide show
  1. package/dist/index.d.ts +7 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/schema/__tests__/android-operator-audio.schema.test.d.ts +2 -0
  6. package/dist/schema/__tests__/android-operator-audio.schema.test.d.ts.map +1 -0
  7. package/dist/schema/__tests__/android-operator-audio.schema.test.js +27 -0
  8. package/dist/schema/__tests__/android-operator-audio.schema.test.js.map +1 -0
  9. package/dist/schema/__tests__/assisted-queue.schema.test.d.ts +2 -0
  10. package/dist/schema/__tests__/assisted-queue.schema.test.d.ts.map +1 -0
  11. package/dist/schema/__tests__/assisted-queue.schema.test.js +114 -0
  12. package/dist/schema/__tests__/assisted-queue.schema.test.js.map +1 -0
  13. package/dist/schema/__tests__/audio-sidecar.schema.test.d.ts +2 -0
  14. package/dist/schema/__tests__/audio-sidecar.schema.test.d.ts.map +1 -0
  15. package/dist/schema/__tests__/audio-sidecar.schema.test.js +42 -0
  16. package/dist/schema/__tests__/audio-sidecar.schema.test.js.map +1 -0
  17. package/dist/schema/__tests__/audio.schema.test.js +92 -1
  18. package/dist/schema/__tests__/audio.schema.test.js.map +1 -1
  19. package/dist/schema/__tests__/diagnostics.schema.test.d.ts +2 -0
  20. package/dist/schema/__tests__/diagnostics.schema.test.d.ts.map +1 -0
  21. package/dist/schema/__tests__/diagnostics.schema.test.js +31 -0
  22. package/dist/schema/__tests__/diagnostics.schema.test.js.map +1 -0
  23. package/dist/schema/__tests__/logbook-health.schema.test.d.ts +2 -0
  24. package/dist/schema/__tests__/logbook-health.schema.test.d.ts.map +1 -0
  25. package/dist/schema/__tests__/logbook-health.schema.test.js +104 -0
  26. package/dist/schema/__tests__/logbook-health.schema.test.js.map +1 -0
  27. package/dist/schema/__tests__/meter.schema.test.d.ts +2 -0
  28. package/dist/schema/__tests__/meter.schema.test.d.ts.map +1 -0
  29. package/dist/schema/__tests__/meter.schema.test.js +27 -0
  30. package/dist/schema/__tests__/meter.schema.test.js.map +1 -0
  31. package/dist/schema/__tests__/observability.schema.test.d.ts +2 -0
  32. package/dist/schema/__tests__/observability.schema.test.d.ts.map +1 -0
  33. package/dist/schema/__tests__/observability.schema.test.js +12 -0
  34. package/dist/schema/__tests__/observability.schema.test.js.map +1 -0
  35. package/dist/schema/__tests__/operator-context-report.schema.test.d.ts +2 -0
  36. package/dist/schema/__tests__/operator-context-report.schema.test.d.ts.map +1 -0
  37. package/dist/schema/__tests__/operator-context-report.schema.test.js +70 -0
  38. package/dist/schema/__tests__/operator-context-report.schema.test.js.map +1 -0
  39. package/dist/schema/__tests__/operator.schema.test.js +9 -3
  40. package/dist/schema/__tests__/operator.schema.test.js.map +1 -1
  41. package/dist/schema/__tests__/plugin-market.schema.test.js +149 -3
  42. package/dist/schema/__tests__/plugin-market.schema.test.js.map +1 -1
  43. package/dist/schema/__tests__/qso.schema.test.d.ts +2 -0
  44. package/dist/schema/__tests__/qso.schema.test.d.ts.map +1 -0
  45. package/dist/schema/__tests__/qso.schema.test.js +70 -0
  46. package/dist/schema/__tests__/qso.schema.test.js.map +1 -0
  47. package/dist/schema/__tests__/radio-power-support.test.js +15 -0
  48. package/dist/schema/__tests__/radio-power-support.test.js.map +1 -1
  49. package/dist/schema/__tests__/radio-profile.schema.test.d.ts +2 -0
  50. package/dist/schema/__tests__/radio-profile.schema.test.d.ts.map +1 -0
  51. package/dist/schema/__tests__/radio-profile.schema.test.js +36 -0
  52. package/dist/schema/__tests__/radio-profile.schema.test.js.map +1 -0
  53. package/dist/schema/__tests__/radio.schema.test.js +92 -1
  54. package/dist/schema/__tests__/radio.schema.test.js.map +1 -1
  55. package/dist/schema/__tests__/realtime-settings.schema.test.js +2 -1
  56. package/dist/schema/__tests__/realtime-settings.schema.test.js.map +1 -1
  57. package/dist/schema/__tests__/remote-access.schema.test.d.ts +2 -0
  58. package/dist/schema/__tests__/remote-access.schema.test.d.ts.map +1 -0
  59. package/dist/schema/__tests__/remote-access.schema.test.js +18 -0
  60. package/dist/schema/__tests__/remote-access.schema.test.js.map +1 -0
  61. package/dist/schema/__tests__/spectrum.schema.test.d.ts +2 -0
  62. package/dist/schema/__tests__/spectrum.schema.test.d.ts.map +1 -0
  63. package/dist/schema/__tests__/spectrum.schema.test.js +107 -0
  64. package/dist/schema/__tests__/spectrum.schema.test.js.map +1 -0
  65. package/dist/schema/__tests__/strategy-transmission.schema.test.d.ts +2 -0
  66. package/dist/schema/__tests__/strategy-transmission.schema.test.d.ts.map +1 -0
  67. package/dist/schema/__tests__/strategy-transmission.schema.test.js +95 -0
  68. package/dist/schema/__tests__/strategy-transmission.schema.test.js.map +1 -0
  69. package/dist/schema/android-operator-audio.schema.d.ts +174 -0
  70. package/dist/schema/android-operator-audio.schema.d.ts.map +1 -0
  71. package/dist/schema/android-operator-audio.schema.js +38 -0
  72. package/dist/schema/android-operator-audio.schema.js.map +1 -0
  73. package/dist/schema/api-response.schema.d.ts +503 -44
  74. package/dist/schema/api-response.schema.d.ts.map +1 -1
  75. package/dist/schema/api-response.schema.js +9 -0
  76. package/dist/schema/api-response.schema.js.map +1 -1
  77. package/dist/schema/audio-sidecar.schema.d.ts +75 -0
  78. package/dist/schema/audio-sidecar.schema.d.ts.map +1 -1
  79. package/dist/schema/audio-sidecar.schema.js +32 -0
  80. package/dist/schema/audio-sidecar.schema.js.map +1 -1
  81. package/dist/schema/audio.schema.d.ts +4749 -3
  82. package/dist/schema/audio.schema.d.ts.map +1 -1
  83. package/dist/schema/audio.schema.js +101 -2
  84. package/dist/schema/audio.schema.js.map +1 -1
  85. package/dist/schema/auth.schema.d.ts +173 -14
  86. package/dist/schema/auth.schema.d.ts.map +1 -1
  87. package/dist/schema/auth.schema.js +65 -1
  88. package/dist/schema/auth.schema.js.map +1 -1
  89. package/dist/schema/cpu-profile.schema.d.ts +2 -2
  90. package/dist/schema/cw-decoder.schema.d.ts +74 -74
  91. package/dist/schema/cw-keyer.schema.d.ts +20 -14
  92. package/dist/schema/cw-keyer.schema.d.ts.map +1 -1
  93. package/dist/schema/cw-keyer.schema.js +3 -0
  94. package/dist/schema/cw-keyer.schema.js.map +1 -1
  95. package/dist/schema/desktop-https.schema.d.ts +6 -6
  96. package/dist/schema/device-ui.schema.d.ts +16 -16
  97. package/dist/schema/diagnostics.schema.d.ts +163 -0
  98. package/dist/schema/diagnostics.schema.d.ts.map +1 -0
  99. package/dist/schema/diagnostics.schema.js +46 -0
  100. package/dist/schema/diagnostics.schema.js.map +1 -0
  101. package/dist/schema/ft8.schema.d.ts +12 -2
  102. package/dist/schema/ft8.schema.d.ts.map +1 -1
  103. package/dist/schema/ft8.schema.js +8 -0
  104. package/dist/schema/ft8.schema.js.map +1 -1
  105. package/dist/schema/image-radio.schema.d.ts +2597 -0
  106. package/dist/schema/image-radio.schema.d.ts.map +1 -0
  107. package/dist/schema/image-radio.schema.js +283 -0
  108. package/dist/schema/image-radio.schema.js.map +1 -0
  109. package/dist/schema/logbook.schema.d.ts +2128 -18
  110. package/dist/schema/logbook.schema.d.ts.map +1 -1
  111. package/dist/schema/logbook.schema.js +159 -1
  112. package/dist/schema/logbook.schema.js.map +1 -1
  113. package/dist/schema/mode.schema.d.ts +4 -6
  114. package/dist/schema/mode.schema.d.ts.map +1 -1
  115. package/dist/schema/mode.schema.js +18 -6
  116. package/dist/schema/mode.schema.js.map +1 -1
  117. package/dist/schema/observability.schema.d.ts +66 -0
  118. package/dist/schema/observability.schema.d.ts.map +1 -0
  119. package/dist/schema/observability.schema.js +20 -0
  120. package/dist/schema/observability.schema.js.map +1 -0
  121. package/dist/schema/openwebrx.schema.d.ts +2 -2
  122. package/dist/schema/operator.schema.d.ts +2682 -6
  123. package/dist/schema/operator.schema.d.ts.map +1 -1
  124. package/dist/schema/operator.schema.js +10 -20
  125. package/dist/schema/operator.schema.js.map +1 -1
  126. package/dist/schema/plugin.schema.d.ts +1977 -492
  127. package/dist/schema/plugin.schema.d.ts.map +1 -1
  128. package/dist/schema/plugin.schema.js +165 -14
  129. package/dist/schema/plugin.schema.js.map +1 -1
  130. package/dist/schema/process-monitor.schema.d.ts +132 -132
  131. package/dist/schema/pskreporter.schema.d.ts +1 -3
  132. package/dist/schema/pskreporter.schema.d.ts.map +1 -1
  133. package/dist/schema/pskreporter.schema.js +1 -3
  134. package/dist/schema/pskreporter.schema.js.map +1 -1
  135. package/dist/schema/qso.schema.d.ts +246 -1
  136. package/dist/schema/qso.schema.d.ts.map +1 -1
  137. package/dist/schema/qso.schema.js +68 -0
  138. package/dist/schema/qso.schema.js.map +1 -1
  139. package/dist/schema/radio-capability.schema.d.ts +31 -40
  140. package/dist/schema/radio-capability.schema.d.ts.map +1 -1
  141. package/dist/schema/radio-capability.schema.js +8 -15
  142. package/dist/schema/radio-capability.schema.js.map +1 -1
  143. package/dist/schema/radio-power-support.d.ts.map +1 -1
  144. package/dist/schema/radio-power-support.js +3 -0
  145. package/dist/schema/radio-power-support.js.map +1 -1
  146. package/dist/schema/radio-power.schema.d.ts +102 -13
  147. package/dist/schema/radio-power.schema.d.ts.map +1 -1
  148. package/dist/schema/radio-power.schema.js +15 -8
  149. package/dist/schema/radio-power.schema.js.map +1 -1
  150. package/dist/schema/radio-profile.schema.d.ts +1491 -97
  151. package/dist/schema/radio-profile.schema.d.ts.map +1 -1
  152. package/dist/schema/radio-profile.schema.js +7 -0
  153. package/dist/schema/radio-profile.schema.js.map +1 -1
  154. package/dist/schema/radio.schema.d.ts +442 -48
  155. package/dist/schema/radio.schema.d.ts.map +1 -1
  156. package/dist/schema/radio.schema.js +75 -7
  157. package/dist/schema/radio.schema.js.map +1 -1
  158. package/dist/schema/realtime.schema.d.ts +60 -52
  159. package/dist/schema/realtime.schema.d.ts.map +1 -1
  160. package/dist/schema/realtime.schema.js +9 -1
  161. package/dist/schema/realtime.schema.js.map +1 -1
  162. package/dist/schema/rigctld.schema.d.ts +6 -6
  163. package/dist/schema/slot-info.schema.d.ts +28 -9
  164. package/dist/schema/slot-info.schema.d.ts.map +1 -1
  165. package/dist/schema/slot-info.schema.js +17 -10
  166. package/dist/schema/slot-info.schema.js.map +1 -1
  167. package/dist/schema/spectrum-config.schema.d.ts +638 -0
  168. package/dist/schema/spectrum-config.schema.d.ts.map +1 -0
  169. package/dist/schema/spectrum-config.schema.js +129 -0
  170. package/dist/schema/spectrum-config.schema.js.map +1 -0
  171. package/dist/schema/spectrum.schema.d.ts +1323 -30
  172. package/dist/schema/spectrum.schema.d.ts.map +1 -1
  173. package/dist/schema/spectrum.schema.js +72 -0
  174. package/dist/schema/spectrum.schema.js.map +1 -1
  175. package/dist/schema/station-info.schema.d.ts +5 -0
  176. package/dist/schema/station-info.schema.d.ts.map +1 -1
  177. package/dist/schema/station-info.schema.js +5 -0
  178. package/dist/schema/station-info.schema.js.map +1 -1
  179. package/dist/schema/system.schema.d.ts +56 -6
  180. package/dist/schema/system.schema.d.ts.map +1 -1
  181. package/dist/schema/system.schema.js +22 -0
  182. package/dist/schema/system.schema.js.map +1 -1
  183. package/dist/schema/transmission.schema.d.ts +8 -7
  184. package/dist/schema/transmission.schema.d.ts.map +1 -1
  185. package/dist/schema/transmission.schema.js +2 -7
  186. package/dist/schema/transmission.schema.js.map +1 -1
  187. package/dist/schema/tx-audio-input.schema.d.ts +8 -0
  188. package/dist/schema/tx-audio-input.schema.d.ts.map +1 -0
  189. package/dist/schema/tx-audio-input.schema.js +19 -0
  190. package/dist/schema/tx-audio-input.schema.js.map +1 -0
  191. package/dist/schema/voice-keyer.schema.d.ts +16 -16
  192. package/dist/schema/voice.schema.d.ts +1 -1
  193. package/dist/schema/voice.schema.d.ts.map +1 -1
  194. package/dist/schema/voice.schema.js +1 -1
  195. package/dist/schema/voice.schema.js.map +1 -1
  196. package/dist/schema/websocket.schema.d.ts +35811 -7829
  197. package/dist/schema/websocket.schema.d.ts.map +1 -1
  198. package/dist/schema/websocket.schema.js +453 -9
  199. package/dist/schema/websocket.schema.js.map +1 -1
  200. package/package.json +6 -1
  201. package/src/index.ts +7 -0
  202. package/src/schema/__tests__/android-operator-audio.schema.test.ts +31 -0
  203. package/src/schema/__tests__/assisted-queue.schema.test.ts +122 -0
  204. package/src/schema/__tests__/audio-sidecar.schema.test.ts +48 -0
  205. package/src/schema/__tests__/audio.schema.test.ts +102 -0
  206. package/src/schema/__tests__/diagnostics.schema.test.ts +32 -0
  207. package/src/schema/__tests__/logbook-health.schema.test.ts +117 -0
  208. package/src/schema/__tests__/meter.schema.test.ts +28 -0
  209. package/src/schema/__tests__/observability.schema.test.ts +15 -0
  210. package/src/schema/__tests__/operator-context-report.schema.test.ts +77 -0
  211. package/src/schema/__tests__/operator.schema.test.ts +11 -3
  212. package/src/schema/__tests__/plugin-market.schema.test.ts +165 -2
  213. package/src/schema/__tests__/qso.schema.test.ts +91 -0
  214. package/src/schema/__tests__/radio-power-support.test.ts +17 -0
  215. package/src/schema/__tests__/radio-profile.schema.test.ts +44 -0
  216. package/src/schema/__tests__/radio.schema.test.ts +108 -1
  217. package/src/schema/__tests__/realtime-settings.schema.test.ts +2 -1
  218. package/src/schema/__tests__/remote-access.schema.test.ts +22 -0
  219. package/src/schema/__tests__/spectrum.schema.test.ts +119 -0
  220. package/src/schema/__tests__/strategy-transmission.schema.test.ts +106 -0
  221. package/src/schema/android-operator-audio.schema.ts +49 -0
  222. package/src/schema/api-response.schema.ts +11 -0
  223. package/src/schema/audio-sidecar.schema.ts +35 -0
  224. package/src/schema/audio.schema.ts +115 -2
  225. package/src/schema/auth.schema.ts +79 -1
  226. package/src/schema/cw-keyer.schema.ts +5 -0
  227. package/src/schema/diagnostics.schema.ts +55 -0
  228. package/src/schema/ft8.schema.ts +8 -0
  229. package/src/schema/image-radio.schema.ts +342 -0
  230. package/src/schema/logbook.schema.ts +205 -1
  231. package/src/schema/mode.schema.ts +18 -6
  232. package/src/schema/observability.schema.ts +26 -0
  233. package/src/schema/operator.schema.ts +11 -20
  234. package/src/schema/plugin.schema.ts +186 -15
  235. package/src/schema/pskreporter.schema.ts +1 -3
  236. package/src/schema/qso.schema.ts +78 -0
  237. package/src/schema/radio-capability.schema.ts +8 -15
  238. package/src/schema/radio-power-support.ts +3 -0
  239. package/src/schema/radio-power.schema.ts +15 -8
  240. package/src/schema/radio-profile.schema.ts +7 -0
  241. package/src/schema/radio.schema.ts +90 -7
  242. package/src/schema/realtime.schema.ts +9 -1
  243. package/src/schema/slot-info.schema.ts +18 -11
  244. package/src/schema/spectrum-config.schema.ts +156 -0
  245. package/src/schema/spectrum.schema.ts +89 -0
  246. package/src/schema/station-info.schema.ts +5 -0
  247. package/src/schema/system.schema.ts +29 -0
  248. package/src/schema/transmission.schema.ts +2 -7
  249. package/src/schema/tx-audio-input.schema.ts +22 -0
  250. package/src/schema/voice.schema.ts +1 -1
  251. package/src/schema/websocket.schema.ts +601 -13
  252. package/test/image-radio-schema.test.ts +107 -0
  253. package/test/plugin-slot-schema.test.ts +31 -0
  254. package/test/radio-capability-schema.test.ts +44 -0
  255. package/CLAUDE.md +0 -41
@@ -7,6 +7,8 @@ export declare const SpectrumSessionSourceModeSchema: z.ZodEnum<["baseband", "ce
7
7
  export type SpectrumSessionSourceMode = z.infer<typeof SpectrumSessionSourceModeSchema>;
8
8
  export declare const SpectrumSessionFrequencyRangeModeSchema: z.ZodEnum<["baseband", "absolute-center", "absolute-fixed", "absolute-windowed"]>;
9
9
  export type SpectrumSessionFrequencyRangeMode = z.infer<typeof SpectrumSessionFrequencyRangeModeSchema>;
10
+ export declare const SpectrumSessionViewModeSchema: z.ZodEnum<["wide", "radio-center"]>;
11
+ export type SpectrumSessionViewMode = z.infer<typeof SpectrumSessionViewModeSchema>;
10
12
  export declare const SpectrumFrequencyRangeSchema: z.ZodObject<{
11
13
  min: z.ZodNumber;
12
14
  max: z.ZodNumber;
@@ -17,6 +19,63 @@ export declare const SpectrumFrequencyRangeSchema: z.ZodObject<{
17
19
  min: number;
18
20
  max: number;
19
21
  }>;
22
+ export declare const SpectrumViewportSchema: z.ZodEffects<z.ZodObject<{
23
+ min: z.ZodNumber;
24
+ max: z.ZodNumber;
25
+ displayBinCount: z.ZodNumber;
26
+ }, "strip", z.ZodTypeAny, {
27
+ min: number;
28
+ max: number;
29
+ displayBinCount: number;
30
+ }, {
31
+ min: number;
32
+ max: number;
33
+ displayBinCount: number;
34
+ }>, {
35
+ min: number;
36
+ max: number;
37
+ displayBinCount: number;
38
+ }, {
39
+ min: number;
40
+ max: number;
41
+ displayBinCount: number;
42
+ }>;
43
+ export type SpectrumViewport = z.infer<typeof SpectrumViewportSchema>;
44
+ export declare const SpectrumSessionViewportInteractionSchema: z.ZodObject<{
45
+ enabled: z.ZodBoolean;
46
+ canZoom: z.ZodBoolean;
47
+ canPan: z.ZodBoolean;
48
+ canTuneAtEdge: z.ZodBoolean;
49
+ bounds: z.ZodNullable<z.ZodObject<{
50
+ min: z.ZodNumber;
51
+ max: z.ZodNumber;
52
+ }, "strip", z.ZodTypeAny, {
53
+ min: number;
54
+ max: number;
55
+ }, {
56
+ min: number;
57
+ max: number;
58
+ }>>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ enabled: boolean;
61
+ canZoom: boolean;
62
+ canPan: boolean;
63
+ canTuneAtEdge: boolean;
64
+ bounds: {
65
+ min: number;
66
+ max: number;
67
+ } | null;
68
+ }, {
69
+ enabled: boolean;
70
+ canZoom: boolean;
71
+ canPan: boolean;
72
+ canTuneAtEdge: boolean;
73
+ bounds: {
74
+ min: number;
75
+ max: number;
76
+ } | null;
77
+ }>;
78
+ export type SpectrumSessionViewportInteraction = z.infer<typeof SpectrumSessionViewportInteractionSchema>;
20
79
  export declare const SpectrumBinaryFormatSchema: z.ZodObject<{
21
80
  type: z.ZodLiteral<"int16">;
22
81
  length: z.ZodNumber;
@@ -68,27 +127,317 @@ export declare const SpectrumBinaryDataSchema: z.ZodObject<{
68
127
  offset?: number | undefined;
69
128
  };
70
129
  }>;
130
+ export declare const SpectrumLevelDomainSchema: z.ZodEnum<["dbfs", "calibrated-db", "raw"]>;
131
+ export type SpectrumLevelDomain = z.infer<typeof SpectrumLevelDomainSchema>;
132
+ export declare const SpectrumLevelUnitSchema: z.ZodEnum<["dBFS", "dB", "Level"]>;
133
+ export type SpectrumLevelUnit = z.infer<typeof SpectrumLevelUnitSchema>;
134
+ export declare const SpectrumLevelReferenceSchema: z.ZodEnum<["full-scale", "device", "none"]>;
135
+ export type SpectrumLevelReference = z.infer<typeof SpectrumLevelReferenceSchema>;
136
+ export declare const SpectrumLevelDescriptorSchema: z.ZodEffects<z.ZodObject<{
137
+ domain: z.ZodEnum<["dbfs", "calibrated-db", "raw"]>;
138
+ unit: z.ZodEnum<["dBFS", "dB", "Level"]>;
139
+ reference: z.ZodEnum<["full-scale", "device", "none"]>;
140
+ calibrated: z.ZodBoolean;
141
+ min: z.ZodNumber;
142
+ max: z.ZodNumber;
143
+ }, "strip", z.ZodTypeAny, {
144
+ min: number;
145
+ max: number;
146
+ domain: "dbfs" | "calibrated-db" | "raw";
147
+ unit: "dBFS" | "dB" | "Level";
148
+ reference: "none" | "full-scale" | "device";
149
+ calibrated: boolean;
150
+ }, {
151
+ min: number;
152
+ max: number;
153
+ domain: "dbfs" | "calibrated-db" | "raw";
154
+ unit: "dBFS" | "dB" | "Level";
155
+ reference: "none" | "full-scale" | "device";
156
+ calibrated: boolean;
157
+ }>, {
158
+ min: number;
159
+ max: number;
160
+ domain: "dbfs" | "calibrated-db" | "raw";
161
+ unit: "dBFS" | "dB" | "Level";
162
+ reference: "none" | "full-scale" | "device";
163
+ calibrated: boolean;
164
+ }, {
165
+ min: number;
166
+ max: number;
167
+ domain: "dbfs" | "calibrated-db" | "raw";
168
+ unit: "dBFS" | "dB" | "Level";
169
+ reference: "none" | "full-scale" | "device";
170
+ calibrated: boolean;
171
+ }>;
172
+ export type SpectrumLevelDescriptor = z.infer<typeof SpectrumLevelDescriptorSchema>;
173
+ /** A lower-resolution, wider-range representation derived from the same FFT. */
174
+ export declare const SpectrumFrameSupplementSchema: z.ZodObject<{
175
+ frequencyRange: z.ZodObject<{
176
+ min: z.ZodNumber;
177
+ max: z.ZodNumber;
178
+ }, "strip", z.ZodTypeAny, {
179
+ min: number;
180
+ max: number;
181
+ }, {
182
+ min: number;
183
+ max: number;
184
+ }>;
185
+ binaryData: z.ZodObject<{
186
+ data: z.ZodString;
187
+ format: z.ZodObject<{
188
+ type: z.ZodLiteral<"int16">;
189
+ length: z.ZodNumber;
190
+ scale: z.ZodOptional<z.ZodNumber>;
191
+ offset: z.ZodOptional<z.ZodNumber>;
192
+ }, "strip", z.ZodTypeAny, {
193
+ type: "int16";
194
+ length: number;
195
+ scale?: number | undefined;
196
+ offset?: number | undefined;
197
+ }, {
198
+ type: "int16";
199
+ length: number;
200
+ scale?: number | undefined;
201
+ offset?: number | undefined;
202
+ }>;
203
+ }, "strip", z.ZodTypeAny, {
204
+ data: string;
205
+ format: {
206
+ type: "int16";
207
+ length: number;
208
+ scale?: number | undefined;
209
+ offset?: number | undefined;
210
+ };
211
+ }, {
212
+ data: string;
213
+ format: {
214
+ type: "int16";
215
+ length: number;
216
+ scale?: number | undefined;
217
+ offset?: number | undefined;
218
+ };
219
+ }>;
220
+ meta: z.ZodObject<{
221
+ sourceBinCount: z.ZodNumber;
222
+ displayBinCount: z.ZodNumber;
223
+ centerFrequency: z.ZodOptional<z.ZodNumber>;
224
+ spanHz: z.ZodOptional<z.ZodNumber>;
225
+ level: z.ZodOptional<z.ZodEffects<z.ZodObject<{
226
+ domain: z.ZodEnum<["dbfs", "calibrated-db", "raw"]>;
227
+ unit: z.ZodEnum<["dBFS", "dB", "Level"]>;
228
+ reference: z.ZodEnum<["full-scale", "device", "none"]>;
229
+ calibrated: z.ZodBoolean;
230
+ min: z.ZodNumber;
231
+ max: z.ZodNumber;
232
+ }, "strip", z.ZodTypeAny, {
233
+ min: number;
234
+ max: number;
235
+ domain: "dbfs" | "calibrated-db" | "raw";
236
+ unit: "dBFS" | "dB" | "Level";
237
+ reference: "none" | "full-scale" | "device";
238
+ calibrated: boolean;
239
+ }, {
240
+ min: number;
241
+ max: number;
242
+ domain: "dbfs" | "calibrated-db" | "raw";
243
+ unit: "dBFS" | "dB" | "Level";
244
+ reference: "none" | "full-scale" | "device";
245
+ calibrated: boolean;
246
+ }>, {
247
+ min: number;
248
+ max: number;
249
+ domain: "dbfs" | "calibrated-db" | "raw";
250
+ unit: "dBFS" | "dB" | "Level";
251
+ reference: "none" | "full-scale" | "device";
252
+ calibrated: boolean;
253
+ }, {
254
+ min: number;
255
+ max: number;
256
+ domain: "dbfs" | "calibrated-db" | "raw";
257
+ unit: "dBFS" | "dB" | "Level";
258
+ reference: "none" | "full-scale" | "device";
259
+ calibrated: boolean;
260
+ }>>;
261
+ }, "strip", z.ZodTypeAny, {
262
+ displayBinCount: number;
263
+ sourceBinCount: number;
264
+ centerFrequency?: number | undefined;
265
+ spanHz?: number | undefined;
266
+ level?: {
267
+ min: number;
268
+ max: number;
269
+ domain: "dbfs" | "calibrated-db" | "raw";
270
+ unit: "dBFS" | "dB" | "Level";
271
+ reference: "none" | "full-scale" | "device";
272
+ calibrated: boolean;
273
+ } | undefined;
274
+ }, {
275
+ displayBinCount: number;
276
+ sourceBinCount: number;
277
+ centerFrequency?: number | undefined;
278
+ spanHz?: number | undefined;
279
+ level?: {
280
+ min: number;
281
+ max: number;
282
+ domain: "dbfs" | "calibrated-db" | "raw";
283
+ unit: "dBFS" | "dB" | "Level";
284
+ reference: "none" | "full-scale" | "device";
285
+ calibrated: boolean;
286
+ } | undefined;
287
+ }>;
288
+ }, "strip", z.ZodTypeAny, {
289
+ frequencyRange: {
290
+ min: number;
291
+ max: number;
292
+ };
293
+ binaryData: {
294
+ data: string;
295
+ format: {
296
+ type: "int16";
297
+ length: number;
298
+ scale?: number | undefined;
299
+ offset?: number | undefined;
300
+ };
301
+ };
302
+ meta: {
303
+ displayBinCount: number;
304
+ sourceBinCount: number;
305
+ centerFrequency?: number | undefined;
306
+ spanHz?: number | undefined;
307
+ level?: {
308
+ min: number;
309
+ max: number;
310
+ domain: "dbfs" | "calibrated-db" | "raw";
311
+ unit: "dBFS" | "dB" | "Level";
312
+ reference: "none" | "full-scale" | "device";
313
+ calibrated: boolean;
314
+ } | undefined;
315
+ };
316
+ }, {
317
+ frequencyRange: {
318
+ min: number;
319
+ max: number;
320
+ };
321
+ binaryData: {
322
+ data: string;
323
+ format: {
324
+ type: "int16";
325
+ length: number;
326
+ scale?: number | undefined;
327
+ offset?: number | undefined;
328
+ };
329
+ };
330
+ meta: {
331
+ displayBinCount: number;
332
+ sourceBinCount: number;
333
+ centerFrequency?: number | undefined;
334
+ spanHz?: number | undefined;
335
+ level?: {
336
+ min: number;
337
+ max: number;
338
+ domain: "dbfs" | "calibrated-db" | "raw";
339
+ unit: "dBFS" | "dB" | "Level";
340
+ reference: "none" | "full-scale" | "device";
341
+ calibrated: boolean;
342
+ } | undefined;
343
+ };
344
+ }>;
345
+ export type SpectrumFrameSupplement = z.infer<typeof SpectrumFrameSupplementSchema>;
71
346
  export declare const SpectrumFrameMetaSchema: z.ZodObject<{
72
347
  sourceBinCount: z.ZodNumber;
73
348
  displayBinCount: z.ZodNumber;
349
+ /** Original source range before a per-client server-side projection. */
350
+ nativeFrequencyRange: z.ZodOptional<z.ZodObject<{
351
+ min: z.ZodNumber;
352
+ max: z.ZodNumber;
353
+ }, "strip", z.ZodTypeAny, {
354
+ min: number;
355
+ max: number;
356
+ }, {
357
+ min: number;
358
+ max: number;
359
+ }>>;
74
360
  centerFrequency: z.ZodOptional<z.ZodNumber>;
75
361
  spanHz: z.ZodOptional<z.ZodNumber>;
76
362
  profileId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
77
363
  radioModel: z.ZodOptional<z.ZodString>;
364
+ level: z.ZodOptional<z.ZodEffects<z.ZodObject<{
365
+ domain: z.ZodEnum<["dbfs", "calibrated-db", "raw"]>;
366
+ unit: z.ZodEnum<["dBFS", "dB", "Level"]>;
367
+ reference: z.ZodEnum<["full-scale", "device", "none"]>;
368
+ calibrated: z.ZodBoolean;
369
+ min: z.ZodNumber;
370
+ max: z.ZodNumber;
371
+ }, "strip", z.ZodTypeAny, {
372
+ min: number;
373
+ max: number;
374
+ domain: "dbfs" | "calibrated-db" | "raw";
375
+ unit: "dBFS" | "dB" | "Level";
376
+ reference: "none" | "full-scale" | "device";
377
+ calibrated: boolean;
378
+ }, {
379
+ min: number;
380
+ max: number;
381
+ domain: "dbfs" | "calibrated-db" | "raw";
382
+ unit: "dBFS" | "dB" | "Level";
383
+ reference: "none" | "full-scale" | "device";
384
+ calibrated: boolean;
385
+ }>, {
386
+ min: number;
387
+ max: number;
388
+ domain: "dbfs" | "calibrated-db" | "raw";
389
+ unit: "dBFS" | "dB" | "Level";
390
+ reference: "none" | "full-scale" | "device";
391
+ calibrated: boolean;
392
+ }, {
393
+ min: number;
394
+ max: number;
395
+ domain: "dbfs" | "calibrated-db" | "raw";
396
+ unit: "dBFS" | "dB" | "Level";
397
+ reference: "none" | "full-scale" | "device";
398
+ calibrated: boolean;
399
+ }>>;
400
+ spectrumConfigRevision: z.ZodOptional<z.ZodNumber>;
78
401
  }, "strip", z.ZodTypeAny, {
79
- sourceBinCount: number;
80
402
  displayBinCount: number;
403
+ sourceBinCount: number;
81
404
  centerFrequency?: number | undefined;
82
405
  spanHz?: number | undefined;
406
+ level?: {
407
+ min: number;
408
+ max: number;
409
+ domain: "dbfs" | "calibrated-db" | "raw";
410
+ unit: "dBFS" | "dB" | "Level";
411
+ reference: "none" | "full-scale" | "device";
412
+ calibrated: boolean;
413
+ } | undefined;
414
+ nativeFrequencyRange?: {
415
+ min: number;
416
+ max: number;
417
+ } | undefined;
83
418
  profileId?: string | null | undefined;
84
419
  radioModel?: string | undefined;
420
+ spectrumConfigRevision?: number | undefined;
85
421
  }, {
86
- sourceBinCount: number;
87
422
  displayBinCount: number;
423
+ sourceBinCount: number;
88
424
  centerFrequency?: number | undefined;
89
425
  spanHz?: number | undefined;
426
+ level?: {
427
+ min: number;
428
+ max: number;
429
+ domain: "dbfs" | "calibrated-db" | "raw";
430
+ unit: "dBFS" | "dB" | "Level";
431
+ reference: "none" | "full-scale" | "device";
432
+ calibrated: boolean;
433
+ } | undefined;
434
+ nativeFrequencyRange?: {
435
+ min: number;
436
+ max: number;
437
+ } | undefined;
90
438
  profileId?: string | null | undefined;
91
439
  radioModel?: string | undefined;
440
+ spectrumConfigRevision?: number | undefined;
92
441
  }>;
93
442
  export declare const SpectrumFrameSchema: z.ZodObject<{
94
443
  timestamp: z.ZodNumber;
@@ -141,26 +490,272 @@ export declare const SpectrumFrameSchema: z.ZodObject<{
141
490
  meta: z.ZodObject<{
142
491
  sourceBinCount: z.ZodNumber;
143
492
  displayBinCount: z.ZodNumber;
493
+ /** Original source range before a per-client server-side projection. */
494
+ nativeFrequencyRange: z.ZodOptional<z.ZodObject<{
495
+ min: z.ZodNumber;
496
+ max: z.ZodNumber;
497
+ }, "strip", z.ZodTypeAny, {
498
+ min: number;
499
+ max: number;
500
+ }, {
501
+ min: number;
502
+ max: number;
503
+ }>>;
144
504
  centerFrequency: z.ZodOptional<z.ZodNumber>;
145
505
  spanHz: z.ZodOptional<z.ZodNumber>;
146
506
  profileId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
147
507
  radioModel: z.ZodOptional<z.ZodString>;
508
+ level: z.ZodOptional<z.ZodEffects<z.ZodObject<{
509
+ domain: z.ZodEnum<["dbfs", "calibrated-db", "raw"]>;
510
+ unit: z.ZodEnum<["dBFS", "dB", "Level"]>;
511
+ reference: z.ZodEnum<["full-scale", "device", "none"]>;
512
+ calibrated: z.ZodBoolean;
513
+ min: z.ZodNumber;
514
+ max: z.ZodNumber;
515
+ }, "strip", z.ZodTypeAny, {
516
+ min: number;
517
+ max: number;
518
+ domain: "dbfs" | "calibrated-db" | "raw";
519
+ unit: "dBFS" | "dB" | "Level";
520
+ reference: "none" | "full-scale" | "device";
521
+ calibrated: boolean;
522
+ }, {
523
+ min: number;
524
+ max: number;
525
+ domain: "dbfs" | "calibrated-db" | "raw";
526
+ unit: "dBFS" | "dB" | "Level";
527
+ reference: "none" | "full-scale" | "device";
528
+ calibrated: boolean;
529
+ }>, {
530
+ min: number;
531
+ max: number;
532
+ domain: "dbfs" | "calibrated-db" | "raw";
533
+ unit: "dBFS" | "dB" | "Level";
534
+ reference: "none" | "full-scale" | "device";
535
+ calibrated: boolean;
536
+ }, {
537
+ min: number;
538
+ max: number;
539
+ domain: "dbfs" | "calibrated-db" | "raw";
540
+ unit: "dBFS" | "dB" | "Level";
541
+ reference: "none" | "full-scale" | "device";
542
+ calibrated: boolean;
543
+ }>>;
544
+ spectrumConfigRevision: z.ZodOptional<z.ZodNumber>;
148
545
  }, "strip", z.ZodTypeAny, {
149
- sourceBinCount: number;
150
546
  displayBinCount: number;
547
+ sourceBinCount: number;
151
548
  centerFrequency?: number | undefined;
152
549
  spanHz?: number | undefined;
550
+ level?: {
551
+ min: number;
552
+ max: number;
553
+ domain: "dbfs" | "calibrated-db" | "raw";
554
+ unit: "dBFS" | "dB" | "Level";
555
+ reference: "none" | "full-scale" | "device";
556
+ calibrated: boolean;
557
+ } | undefined;
558
+ nativeFrequencyRange?: {
559
+ min: number;
560
+ max: number;
561
+ } | undefined;
153
562
  profileId?: string | null | undefined;
154
563
  radioModel?: string | undefined;
564
+ spectrumConfigRevision?: number | undefined;
155
565
  }, {
156
- sourceBinCount: number;
157
566
  displayBinCount: number;
567
+ sourceBinCount: number;
158
568
  centerFrequency?: number | undefined;
159
569
  spanHz?: number | undefined;
570
+ level?: {
571
+ min: number;
572
+ max: number;
573
+ domain: "dbfs" | "calibrated-db" | "raw";
574
+ unit: "dBFS" | "dB" | "Level";
575
+ reference: "none" | "full-scale" | "device";
576
+ calibrated: boolean;
577
+ } | undefined;
578
+ nativeFrequencyRange?: {
579
+ min: number;
580
+ max: number;
581
+ } | undefined;
160
582
  profileId?: string | null | undefined;
161
583
  radioModel?: string | undefined;
584
+ spectrumConfigRevision?: number | undefined;
162
585
  }>;
586
+ supplement: z.ZodOptional<z.ZodObject<{
587
+ frequencyRange: z.ZodObject<{
588
+ min: z.ZodNumber;
589
+ max: z.ZodNumber;
590
+ }, "strip", z.ZodTypeAny, {
591
+ min: number;
592
+ max: number;
593
+ }, {
594
+ min: number;
595
+ max: number;
596
+ }>;
597
+ binaryData: z.ZodObject<{
598
+ data: z.ZodString;
599
+ format: z.ZodObject<{
600
+ type: z.ZodLiteral<"int16">;
601
+ length: z.ZodNumber;
602
+ scale: z.ZodOptional<z.ZodNumber>;
603
+ offset: z.ZodOptional<z.ZodNumber>;
604
+ }, "strip", z.ZodTypeAny, {
605
+ type: "int16";
606
+ length: number;
607
+ scale?: number | undefined;
608
+ offset?: number | undefined;
609
+ }, {
610
+ type: "int16";
611
+ length: number;
612
+ scale?: number | undefined;
613
+ offset?: number | undefined;
614
+ }>;
615
+ }, "strip", z.ZodTypeAny, {
616
+ data: string;
617
+ format: {
618
+ type: "int16";
619
+ length: number;
620
+ scale?: number | undefined;
621
+ offset?: number | undefined;
622
+ };
623
+ }, {
624
+ data: string;
625
+ format: {
626
+ type: "int16";
627
+ length: number;
628
+ scale?: number | undefined;
629
+ offset?: number | undefined;
630
+ };
631
+ }>;
632
+ meta: z.ZodObject<{
633
+ sourceBinCount: z.ZodNumber;
634
+ displayBinCount: z.ZodNumber;
635
+ centerFrequency: z.ZodOptional<z.ZodNumber>;
636
+ spanHz: z.ZodOptional<z.ZodNumber>;
637
+ level: z.ZodOptional<z.ZodEffects<z.ZodObject<{
638
+ domain: z.ZodEnum<["dbfs", "calibrated-db", "raw"]>;
639
+ unit: z.ZodEnum<["dBFS", "dB", "Level"]>;
640
+ reference: z.ZodEnum<["full-scale", "device", "none"]>;
641
+ calibrated: z.ZodBoolean;
642
+ min: z.ZodNumber;
643
+ max: z.ZodNumber;
644
+ }, "strip", z.ZodTypeAny, {
645
+ min: number;
646
+ max: number;
647
+ domain: "dbfs" | "calibrated-db" | "raw";
648
+ unit: "dBFS" | "dB" | "Level";
649
+ reference: "none" | "full-scale" | "device";
650
+ calibrated: boolean;
651
+ }, {
652
+ min: number;
653
+ max: number;
654
+ domain: "dbfs" | "calibrated-db" | "raw";
655
+ unit: "dBFS" | "dB" | "Level";
656
+ reference: "none" | "full-scale" | "device";
657
+ calibrated: boolean;
658
+ }>, {
659
+ min: number;
660
+ max: number;
661
+ domain: "dbfs" | "calibrated-db" | "raw";
662
+ unit: "dBFS" | "dB" | "Level";
663
+ reference: "none" | "full-scale" | "device";
664
+ calibrated: boolean;
665
+ }, {
666
+ min: number;
667
+ max: number;
668
+ domain: "dbfs" | "calibrated-db" | "raw";
669
+ unit: "dBFS" | "dB" | "Level";
670
+ reference: "none" | "full-scale" | "device";
671
+ calibrated: boolean;
672
+ }>>;
673
+ }, "strip", z.ZodTypeAny, {
674
+ displayBinCount: number;
675
+ sourceBinCount: number;
676
+ centerFrequency?: number | undefined;
677
+ spanHz?: number | undefined;
678
+ level?: {
679
+ min: number;
680
+ max: number;
681
+ domain: "dbfs" | "calibrated-db" | "raw";
682
+ unit: "dBFS" | "dB" | "Level";
683
+ reference: "none" | "full-scale" | "device";
684
+ calibrated: boolean;
685
+ } | undefined;
686
+ }, {
687
+ displayBinCount: number;
688
+ sourceBinCount: number;
689
+ centerFrequency?: number | undefined;
690
+ spanHz?: number | undefined;
691
+ level?: {
692
+ min: number;
693
+ max: number;
694
+ domain: "dbfs" | "calibrated-db" | "raw";
695
+ unit: "dBFS" | "dB" | "Level";
696
+ reference: "none" | "full-scale" | "device";
697
+ calibrated: boolean;
698
+ } | undefined;
699
+ }>;
700
+ }, "strip", z.ZodTypeAny, {
701
+ frequencyRange: {
702
+ min: number;
703
+ max: number;
704
+ };
705
+ binaryData: {
706
+ data: string;
707
+ format: {
708
+ type: "int16";
709
+ length: number;
710
+ scale?: number | undefined;
711
+ offset?: number | undefined;
712
+ };
713
+ };
714
+ meta: {
715
+ displayBinCount: number;
716
+ sourceBinCount: number;
717
+ centerFrequency?: number | undefined;
718
+ spanHz?: number | undefined;
719
+ level?: {
720
+ min: number;
721
+ max: number;
722
+ domain: "dbfs" | "calibrated-db" | "raw";
723
+ unit: "dBFS" | "dB" | "Level";
724
+ reference: "none" | "full-scale" | "device";
725
+ calibrated: boolean;
726
+ } | undefined;
727
+ };
728
+ }, {
729
+ frequencyRange: {
730
+ min: number;
731
+ max: number;
732
+ };
733
+ binaryData: {
734
+ data: string;
735
+ format: {
736
+ type: "int16";
737
+ length: number;
738
+ scale?: number | undefined;
739
+ offset?: number | undefined;
740
+ };
741
+ };
742
+ meta: {
743
+ displayBinCount: number;
744
+ sourceBinCount: number;
745
+ centerFrequency?: number | undefined;
746
+ spanHz?: number | undefined;
747
+ level?: {
748
+ min: number;
749
+ max: number;
750
+ domain: "dbfs" | "calibrated-db" | "raw";
751
+ unit: "dBFS" | "dB" | "Level";
752
+ reference: "none" | "full-scale" | "device";
753
+ calibrated: boolean;
754
+ } | undefined;
755
+ };
756
+ }>>;
163
757
  }, "strip", z.ZodTypeAny, {
758
+ kind: "audio" | "radio-sdr" | "openwebrx-sdr";
164
759
  timestamp: number;
165
760
  frequencyRange: {
166
761
  min: number;
@@ -175,16 +770,58 @@ export declare const SpectrumFrameSchema: z.ZodObject<{
175
770
  offset?: number | undefined;
176
771
  };
177
772
  };
178
- kind: "audio" | "radio-sdr" | "openwebrx-sdr";
179
773
  meta: {
180
- sourceBinCount: number;
181
774
  displayBinCount: number;
775
+ sourceBinCount: number;
182
776
  centerFrequency?: number | undefined;
183
777
  spanHz?: number | undefined;
778
+ level?: {
779
+ min: number;
780
+ max: number;
781
+ domain: "dbfs" | "calibrated-db" | "raw";
782
+ unit: "dBFS" | "dB" | "Level";
783
+ reference: "none" | "full-scale" | "device";
784
+ calibrated: boolean;
785
+ } | undefined;
786
+ nativeFrequencyRange?: {
787
+ min: number;
788
+ max: number;
789
+ } | undefined;
184
790
  profileId?: string | null | undefined;
185
791
  radioModel?: string | undefined;
792
+ spectrumConfigRevision?: number | undefined;
186
793
  };
794
+ supplement?: {
795
+ frequencyRange: {
796
+ min: number;
797
+ max: number;
798
+ };
799
+ binaryData: {
800
+ data: string;
801
+ format: {
802
+ type: "int16";
803
+ length: number;
804
+ scale?: number | undefined;
805
+ offset?: number | undefined;
806
+ };
807
+ };
808
+ meta: {
809
+ displayBinCount: number;
810
+ sourceBinCount: number;
811
+ centerFrequency?: number | undefined;
812
+ spanHz?: number | undefined;
813
+ level?: {
814
+ min: number;
815
+ max: number;
816
+ domain: "dbfs" | "calibrated-db" | "raw";
817
+ unit: "dBFS" | "dB" | "Level";
818
+ reference: "none" | "full-scale" | "device";
819
+ calibrated: boolean;
820
+ } | undefined;
821
+ };
822
+ } | undefined;
187
823
  }, {
824
+ kind: "audio" | "radio-sdr" | "openwebrx-sdr";
188
825
  timestamp: number;
189
826
  frequencyRange: {
190
827
  min: number;
@@ -199,15 +836,56 @@ export declare const SpectrumFrameSchema: z.ZodObject<{
199
836
  offset?: number | undefined;
200
837
  };
201
838
  };
202
- kind: "audio" | "radio-sdr" | "openwebrx-sdr";
203
839
  meta: {
204
- sourceBinCount: number;
205
840
  displayBinCount: number;
841
+ sourceBinCount: number;
206
842
  centerFrequency?: number | undefined;
207
843
  spanHz?: number | undefined;
844
+ level?: {
845
+ min: number;
846
+ max: number;
847
+ domain: "dbfs" | "calibrated-db" | "raw";
848
+ unit: "dBFS" | "dB" | "Level";
849
+ reference: "none" | "full-scale" | "device";
850
+ calibrated: boolean;
851
+ } | undefined;
852
+ nativeFrequencyRange?: {
853
+ min: number;
854
+ max: number;
855
+ } | undefined;
208
856
  profileId?: string | null | undefined;
209
857
  radioModel?: string | undefined;
858
+ spectrumConfigRevision?: number | undefined;
210
859
  };
860
+ supplement?: {
861
+ frequencyRange: {
862
+ min: number;
863
+ max: number;
864
+ };
865
+ binaryData: {
866
+ data: string;
867
+ format: {
868
+ type: "int16";
869
+ length: number;
870
+ scale?: number | undefined;
871
+ offset?: number | undefined;
872
+ };
873
+ };
874
+ meta: {
875
+ displayBinCount: number;
876
+ sourceBinCount: number;
877
+ centerFrequency?: number | undefined;
878
+ spanHz?: number | undefined;
879
+ level?: {
880
+ min: number;
881
+ max: number;
882
+ domain: "dbfs" | "calibrated-db" | "raw";
883
+ unit: "dBFS" | "dB" | "Level";
884
+ reference: "none" | "full-scale" | "device";
885
+ calibrated: boolean;
886
+ } | undefined;
887
+ };
888
+ } | undefined;
211
889
  }>;
212
890
  export declare const SpectrumSourceAvailabilitySchema: z.ZodObject<{
213
891
  kind: z.ZodEnum<["audio", "radio-sdr", "openwebrx-sdr"]>;
@@ -221,8 +899,8 @@ export declare const SpectrumSourceAvailabilitySchema: z.ZodObject<{
221
899
  frequencyRangeMode: z.ZodEnum<["absolute", "baseband"]>;
222
900
  }, "strip", z.ZodTypeAny, {
223
901
  available: boolean;
224
- displayBinCount: number;
225
902
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
903
+ displayBinCount: number;
226
904
  supported: boolean;
227
905
  defaultSelected: boolean;
228
906
  supportsWaterfall: boolean;
@@ -231,8 +909,8 @@ export declare const SpectrumSourceAvailabilitySchema: z.ZodObject<{
231
909
  sourceBinCount?: number | null | undefined;
232
910
  }, {
233
911
  available: boolean;
234
- displayBinCount: number;
235
912
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
913
+ displayBinCount: number;
236
914
  supported: boolean;
237
915
  defaultSelected: boolean;
238
916
  supportsWaterfall: boolean;
@@ -255,8 +933,8 @@ export declare const SpectrumCapabilitiesSchema: z.ZodObject<{
255
933
  frequencyRangeMode: z.ZodEnum<["absolute", "baseband"]>;
256
934
  }, "strip", z.ZodTypeAny, {
257
935
  available: boolean;
258
- displayBinCount: number;
259
936
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
937
+ displayBinCount: number;
260
938
  supported: boolean;
261
939
  defaultSelected: boolean;
262
940
  supportsWaterfall: boolean;
@@ -265,8 +943,8 @@ export declare const SpectrumCapabilitiesSchema: z.ZodObject<{
265
943
  sourceBinCount?: number | null | undefined;
266
944
  }, {
267
945
  available: boolean;
268
- displayBinCount: number;
269
946
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
947
+ displayBinCount: number;
270
948
  supported: boolean;
271
949
  defaultSelected: boolean;
272
950
  supportsWaterfall: boolean;
@@ -274,13 +952,222 @@ export declare const SpectrumCapabilitiesSchema: z.ZodObject<{
274
952
  reason?: string | undefined;
275
953
  sourceBinCount?: number | null | undefined;
276
954
  }>, "many">;
955
+ renderConfig: z.ZodObject<{
956
+ preset: z.ZodEnum<["responsive", "balanced", "fine", "custom"]>;
957
+ revision: z.ZodNumber;
958
+ analysisIntervalMs: z.ZodNumber;
959
+ frameRateHz: z.ZodNumber;
960
+ fftSize: z.ZodNumber;
961
+ targetSampleRate: z.ZodNumber;
962
+ fftWindowDurationMs: z.ZodNumber;
963
+ frequencyResolutionHz: z.ZodNumber;
964
+ frequencyRange: z.ZodEffects<z.ZodObject<{
965
+ min: z.ZodNumber;
966
+ max: z.ZodNumber;
967
+ }, "strip", z.ZodTypeAny, {
968
+ min: number;
969
+ max: number;
970
+ }, {
971
+ min: number;
972
+ max: number;
973
+ }>, {
974
+ min: number;
975
+ max: number;
976
+ }, {
977
+ min: number;
978
+ max: number;
979
+ }>;
980
+ displayBinCount: z.ZodNumber;
981
+ windowFunction: z.ZodEnum<["hann", "hamming", "blackman", "blackmanHarris", "none"]>;
982
+ haloReduce: z.ZodBoolean;
983
+ customSettings: z.ZodOptional<z.ZodObject<{
984
+ analysisIntervalMs: z.ZodNumber;
985
+ fftSize: z.ZodUnion<[z.ZodLiteral<1024>, z.ZodLiteral<2048>, z.ZodLiteral<4096>, z.ZodLiteral<8192>, z.ZodLiteral<16384>]>;
986
+ targetSampleRate: z.ZodUnion<[z.ZodLiteral<3000>, z.ZodLiteral<4000>, z.ZodLiteral<6000>, z.ZodLiteral<8000>, z.ZodLiteral<12000>]>;
987
+ windowFunction: z.ZodEnum<["hann", "hamming", "blackman", "blackmanHarris", "none"]>;
988
+ haloReduce: z.ZodBoolean;
989
+ }, "strip", z.ZodTypeAny, {
990
+ analysisIntervalMs: number;
991
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
992
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
993
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
994
+ haloReduce: boolean;
995
+ }, {
996
+ analysisIntervalMs: number;
997
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
998
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
999
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1000
+ haloReduce: boolean;
1001
+ }>>;
1002
+ }, "strip", z.ZodTypeAny, {
1003
+ preset: "custom" | "balanced" | "responsive" | "fine";
1004
+ frequencyRange: {
1005
+ min: number;
1006
+ max: number;
1007
+ };
1008
+ analysisIntervalMs: number;
1009
+ fftSize: number;
1010
+ targetSampleRate: number;
1011
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1012
+ haloReduce: boolean;
1013
+ revision: number;
1014
+ frameRateHz: number;
1015
+ fftWindowDurationMs: number;
1016
+ frequencyResolutionHz: number;
1017
+ displayBinCount: number;
1018
+ customSettings?: {
1019
+ analysisIntervalMs: number;
1020
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1021
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1022
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1023
+ haloReduce: boolean;
1024
+ } | undefined;
1025
+ }, {
1026
+ preset: "custom" | "balanced" | "responsive" | "fine";
1027
+ frequencyRange: {
1028
+ min: number;
1029
+ max: number;
1030
+ };
1031
+ analysisIntervalMs: number;
1032
+ fftSize: number;
1033
+ targetSampleRate: number;
1034
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1035
+ haloReduce: boolean;
1036
+ revision: number;
1037
+ frameRateHz: number;
1038
+ fftWindowDurationMs: number;
1039
+ frequencyResolutionHz: number;
1040
+ displayBinCount: number;
1041
+ customSettings?: {
1042
+ analysisIntervalMs: number;
1043
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1044
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1045
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1046
+ haloReduce: boolean;
1047
+ } | undefined;
1048
+ }>;
1049
+ presets: z.ZodArray<z.ZodObject<Omit<{
1050
+ preset: z.ZodEnum<["responsive", "balanced", "fine", "custom"]>;
1051
+ revision: z.ZodNumber;
1052
+ analysisIntervalMs: z.ZodNumber;
1053
+ frameRateHz: z.ZodNumber;
1054
+ fftSize: z.ZodNumber;
1055
+ targetSampleRate: z.ZodNumber;
1056
+ fftWindowDurationMs: z.ZodNumber;
1057
+ frequencyResolutionHz: z.ZodNumber;
1058
+ frequencyRange: z.ZodEffects<z.ZodObject<{
1059
+ min: z.ZodNumber;
1060
+ max: z.ZodNumber;
1061
+ }, "strip", z.ZodTypeAny, {
1062
+ min: number;
1063
+ max: number;
1064
+ }, {
1065
+ min: number;
1066
+ max: number;
1067
+ }>, {
1068
+ min: number;
1069
+ max: number;
1070
+ }, {
1071
+ min: number;
1072
+ max: number;
1073
+ }>;
1074
+ displayBinCount: z.ZodNumber;
1075
+ windowFunction: z.ZodEnum<["hann", "hamming", "blackman", "blackmanHarris", "none"]>;
1076
+ haloReduce: z.ZodBoolean;
1077
+ customSettings: z.ZodOptional<z.ZodObject<{
1078
+ analysisIntervalMs: z.ZodNumber;
1079
+ fftSize: z.ZodUnion<[z.ZodLiteral<1024>, z.ZodLiteral<2048>, z.ZodLiteral<4096>, z.ZodLiteral<8192>, z.ZodLiteral<16384>]>;
1080
+ targetSampleRate: z.ZodUnion<[z.ZodLiteral<3000>, z.ZodLiteral<4000>, z.ZodLiteral<6000>, z.ZodLiteral<8000>, z.ZodLiteral<12000>]>;
1081
+ windowFunction: z.ZodEnum<["hann", "hamming", "blackman", "blackmanHarris", "none"]>;
1082
+ haloReduce: z.ZodBoolean;
1083
+ }, "strip", z.ZodTypeAny, {
1084
+ analysisIntervalMs: number;
1085
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1086
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1087
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1088
+ haloReduce: boolean;
1089
+ }, {
1090
+ analysisIntervalMs: number;
1091
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1092
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1093
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1094
+ haloReduce: boolean;
1095
+ }>>;
1096
+ }, "revision">, "strip", z.ZodTypeAny, {
1097
+ preset: "custom" | "balanced" | "responsive" | "fine";
1098
+ frequencyRange: {
1099
+ min: number;
1100
+ max: number;
1101
+ };
1102
+ analysisIntervalMs: number;
1103
+ fftSize: number;
1104
+ targetSampleRate: number;
1105
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1106
+ haloReduce: boolean;
1107
+ frameRateHz: number;
1108
+ fftWindowDurationMs: number;
1109
+ frequencyResolutionHz: number;
1110
+ displayBinCount: number;
1111
+ customSettings?: {
1112
+ analysisIntervalMs: number;
1113
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1114
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1115
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1116
+ haloReduce: boolean;
1117
+ } | undefined;
1118
+ }, {
1119
+ preset: "custom" | "balanced" | "responsive" | "fine";
1120
+ frequencyRange: {
1121
+ min: number;
1122
+ max: number;
1123
+ };
1124
+ analysisIntervalMs: number;
1125
+ fftSize: number;
1126
+ targetSampleRate: number;
1127
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1128
+ haloReduce: boolean;
1129
+ frameRateHz: number;
1130
+ fftWindowDurationMs: number;
1131
+ frequencyResolutionHz: number;
1132
+ displayBinCount: number;
1133
+ customSettings?: {
1134
+ analysisIntervalMs: number;
1135
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1136
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1137
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1138
+ haloReduce: boolean;
1139
+ } | undefined;
1140
+ }>, "many">;
277
1141
  }, "strip", z.ZodTypeAny, {
1142
+ presets: {
1143
+ preset: "custom" | "balanced" | "responsive" | "fine";
1144
+ frequencyRange: {
1145
+ min: number;
1146
+ max: number;
1147
+ };
1148
+ analysisIntervalMs: number;
1149
+ fftSize: number;
1150
+ targetSampleRate: number;
1151
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1152
+ haloReduce: boolean;
1153
+ frameRateHz: number;
1154
+ fftWindowDurationMs: number;
1155
+ frequencyResolutionHz: number;
1156
+ displayBinCount: number;
1157
+ customSettings?: {
1158
+ analysisIntervalMs: number;
1159
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1160
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1161
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1162
+ haloReduce: boolean;
1163
+ } | undefined;
1164
+ }[];
278
1165
  profileId: string | null;
279
1166
  defaultKind: "audio" | "radio-sdr" | "openwebrx-sdr";
280
1167
  sources: {
281
1168
  available: boolean;
282
- displayBinCount: number;
283
1169
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
1170
+ displayBinCount: number;
284
1171
  supported: boolean;
285
1172
  defaultSelected: boolean;
286
1173
  supportsWaterfall: boolean;
@@ -288,13 +1175,60 @@ export declare const SpectrumCapabilitiesSchema: z.ZodObject<{
288
1175
  reason?: string | undefined;
289
1176
  sourceBinCount?: number | null | undefined;
290
1177
  }[];
1178
+ renderConfig: {
1179
+ preset: "custom" | "balanced" | "responsive" | "fine";
1180
+ frequencyRange: {
1181
+ min: number;
1182
+ max: number;
1183
+ };
1184
+ analysisIntervalMs: number;
1185
+ fftSize: number;
1186
+ targetSampleRate: number;
1187
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1188
+ haloReduce: boolean;
1189
+ revision: number;
1190
+ frameRateHz: number;
1191
+ fftWindowDurationMs: number;
1192
+ frequencyResolutionHz: number;
1193
+ displayBinCount: number;
1194
+ customSettings?: {
1195
+ analysisIntervalMs: number;
1196
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1197
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1198
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1199
+ haloReduce: boolean;
1200
+ } | undefined;
1201
+ };
291
1202
  }, {
1203
+ presets: {
1204
+ preset: "custom" | "balanced" | "responsive" | "fine";
1205
+ frequencyRange: {
1206
+ min: number;
1207
+ max: number;
1208
+ };
1209
+ analysisIntervalMs: number;
1210
+ fftSize: number;
1211
+ targetSampleRate: number;
1212
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1213
+ haloReduce: boolean;
1214
+ frameRateHz: number;
1215
+ fftWindowDurationMs: number;
1216
+ frequencyResolutionHz: number;
1217
+ displayBinCount: number;
1218
+ customSettings?: {
1219
+ analysisIntervalMs: number;
1220
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1221
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1222
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1223
+ haloReduce: boolean;
1224
+ } | undefined;
1225
+ }[];
292
1226
  profileId: string | null;
293
1227
  defaultKind: "audio" | "radio-sdr" | "openwebrx-sdr";
294
1228
  sources: {
295
1229
  available: boolean;
296
- displayBinCount: number;
297
1230
  kind: "audio" | "radio-sdr" | "openwebrx-sdr";
1231
+ displayBinCount: number;
298
1232
  supported: boolean;
299
1233
  defaultSelected: boolean;
300
1234
  supportsWaterfall: boolean;
@@ -302,6 +1236,30 @@ export declare const SpectrumCapabilitiesSchema: z.ZodObject<{
302
1236
  reason?: string | undefined;
303
1237
  sourceBinCount?: number | null | undefined;
304
1238
  }[];
1239
+ renderConfig: {
1240
+ preset: "custom" | "balanced" | "responsive" | "fine";
1241
+ frequencyRange: {
1242
+ min: number;
1243
+ max: number;
1244
+ };
1245
+ analysisIntervalMs: number;
1246
+ fftSize: number;
1247
+ targetSampleRate: number;
1248
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1249
+ haloReduce: boolean;
1250
+ revision: number;
1251
+ frameRateHz: number;
1252
+ fftWindowDurationMs: number;
1253
+ frequencyResolutionHz: number;
1254
+ displayBinCount: number;
1255
+ customSettings?: {
1256
+ analysisIntervalMs: number;
1257
+ fftSize: 1024 | 2048 | 4096 | 8192 | 16384;
1258
+ targetSampleRate: 8000 | 12000 | 3000 | 4000 | 6000;
1259
+ windowFunction: "none" | "hann" | "hamming" | "blackman" | "blackmanHarris";
1260
+ haloReduce: boolean;
1261
+ } | undefined;
1262
+ };
305
1263
  }>;
306
1264
  export declare const SpectrumSessionControlIdSchema: z.ZodEnum<["zoom-step", "digital-window-toggle", "openwebrx-detail-toggle", "viewport-zoom"]>;
307
1265
  export type SpectrumSessionControlId = z.infer<typeof SpectrumSessionControlIdSchema>;
@@ -321,17 +1279,17 @@ export declare const SpectrumSessionControlSchema: z.ZodObject<{
321
1279
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
322
1280
  active: boolean;
323
1281
  kind: "server" | "local";
1282
+ enabled: boolean;
324
1283
  action: "in" | "out" | "toggle";
325
1284
  visible: boolean;
326
- enabled: boolean;
327
1285
  pending: boolean;
328
1286
  }, {
329
1287
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
330
1288
  active: boolean;
331
1289
  kind: "server" | "local";
1290
+ enabled: boolean;
332
1291
  action: "in" | "out" | "toggle";
333
1292
  visible: boolean;
334
- enabled: boolean;
335
1293
  pending: boolean;
336
1294
  }>;
337
1295
  export type SpectrumSessionControl = z.infer<typeof SpectrumSessionControlSchema>;
@@ -372,7 +1330,89 @@ export declare const SpectrumSessionPresetMarkerSchema: z.ZodObject<{
372
1330
  clickable: boolean;
373
1331
  }>;
374
1332
  export type SpectrumSessionPresetMarker = z.infer<typeof SpectrumSessionPresetMarkerSchema>;
1333
+ export declare const SpectrumSessionFrequencyOverlaySchema: z.ZodEffects<z.ZodObject<{
1334
+ id: z.ZodString;
1335
+ label: z.ZodString;
1336
+ lineFrequency: z.ZodNumber;
1337
+ rangeStartFrequency: z.ZodNumber;
1338
+ rangeEndFrequency: z.ZodNumber;
1339
+ variant: z.ZodEnum<["tx", "rx", "window"]>;
1340
+ draggable: z.ZodBoolean;
1341
+ frequencyTarget: z.ZodNullable<z.ZodEnum<["radio-frequency", "operator-tx", "split-frequency"]>>;
1342
+ }, "strip", z.ZodTypeAny, {
1343
+ id: string;
1344
+ label: string;
1345
+ lineFrequency: number;
1346
+ rangeStartFrequency: number;
1347
+ rangeEndFrequency: number;
1348
+ variant: "tx" | "rx" | "window";
1349
+ draggable: boolean;
1350
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1351
+ }, {
1352
+ id: string;
1353
+ label: string;
1354
+ lineFrequency: number;
1355
+ rangeStartFrequency: number;
1356
+ rangeEndFrequency: number;
1357
+ variant: "tx" | "rx" | "window";
1358
+ draggable: boolean;
1359
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1360
+ }>, {
1361
+ id: string;
1362
+ label: string;
1363
+ lineFrequency: number;
1364
+ rangeStartFrequency: number;
1365
+ rangeEndFrequency: number;
1366
+ variant: "tx" | "rx" | "window";
1367
+ draggable: boolean;
1368
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1369
+ }, {
1370
+ id: string;
1371
+ label: string;
1372
+ lineFrequency: number;
1373
+ rangeStartFrequency: number;
1374
+ rangeEndFrequency: number;
1375
+ variant: "tx" | "rx" | "window";
1376
+ draggable: boolean;
1377
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1378
+ }>;
1379
+ export type SpectrumSessionFrequencyOverlay = z.infer<typeof SpectrumSessionFrequencyOverlaySchema>;
375
1380
  export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
1381
+ viewMode: z.ZodDefault<z.ZodEnum<["wide", "radio-center"]>>;
1382
+ viewport: z.ZodDefault<z.ZodObject<{
1383
+ enabled: z.ZodBoolean;
1384
+ canZoom: z.ZodBoolean;
1385
+ canPan: z.ZodBoolean;
1386
+ canTuneAtEdge: z.ZodBoolean;
1387
+ bounds: z.ZodNullable<z.ZodObject<{
1388
+ min: z.ZodNumber;
1389
+ max: z.ZodNumber;
1390
+ }, "strip", z.ZodTypeAny, {
1391
+ min: number;
1392
+ max: number;
1393
+ }, {
1394
+ min: number;
1395
+ max: number;
1396
+ }>>;
1397
+ }, "strip", z.ZodTypeAny, {
1398
+ enabled: boolean;
1399
+ canZoom: boolean;
1400
+ canPan: boolean;
1401
+ canTuneAtEdge: boolean;
1402
+ bounds: {
1403
+ min: number;
1404
+ max: number;
1405
+ } | null;
1406
+ }, {
1407
+ enabled: boolean;
1408
+ canZoom: boolean;
1409
+ canPan: boolean;
1410
+ canTuneAtEdge: boolean;
1411
+ bounds: {
1412
+ min: number;
1413
+ max: number;
1414
+ } | null;
1415
+ }>>;
376
1416
  showTxMarkers: z.ZodBoolean;
377
1417
  showRxMarkers: z.ZodBoolean;
378
1418
  canDragTx: z.ZodBoolean;
@@ -400,6 +1440,52 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
400
1440
  label: string;
401
1441
  clickable: boolean;
402
1442
  }>, "many">;
1443
+ frequencyOverlays: z.ZodArray<z.ZodEffects<z.ZodObject<{
1444
+ id: z.ZodString;
1445
+ label: z.ZodString;
1446
+ lineFrequency: z.ZodNumber;
1447
+ rangeStartFrequency: z.ZodNumber;
1448
+ rangeEndFrequency: z.ZodNumber;
1449
+ variant: z.ZodEnum<["tx", "rx", "window"]>;
1450
+ draggable: z.ZodBoolean;
1451
+ frequencyTarget: z.ZodNullable<z.ZodEnum<["radio-frequency", "operator-tx", "split-frequency"]>>;
1452
+ }, "strip", z.ZodTypeAny, {
1453
+ id: string;
1454
+ label: string;
1455
+ lineFrequency: number;
1456
+ rangeStartFrequency: number;
1457
+ rangeEndFrequency: number;
1458
+ variant: "tx" | "rx" | "window";
1459
+ draggable: boolean;
1460
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1461
+ }, {
1462
+ id: string;
1463
+ label: string;
1464
+ lineFrequency: number;
1465
+ rangeStartFrequency: number;
1466
+ rangeEndFrequency: number;
1467
+ variant: "tx" | "rx" | "window";
1468
+ draggable: boolean;
1469
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1470
+ }>, {
1471
+ id: string;
1472
+ label: string;
1473
+ lineFrequency: number;
1474
+ rangeStartFrequency: number;
1475
+ rangeEndFrequency: number;
1476
+ variant: "tx" | "rx" | "window";
1477
+ draggable: boolean;
1478
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1479
+ }, {
1480
+ id: string;
1481
+ label: string;
1482
+ lineFrequency: number;
1483
+ rangeStartFrequency: number;
1484
+ rangeEndFrequency: number;
1485
+ variant: "tx" | "rx" | "window";
1486
+ draggable: boolean;
1487
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1488
+ }>, "many">;
403
1489
  canDragVoiceOverlay: z.ZodBoolean;
404
1490
  showVoiceOverlay: z.ZodBoolean;
405
1491
  canLocalViewportZoom: z.ZodBoolean;
@@ -408,13 +1494,24 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
408
1494
  supportsAutoRange: z.ZodBoolean;
409
1495
  defaultRangeMode: z.ZodNullable<z.ZodEnum<["auto", "manual"]>>;
410
1496
  }, "strip", z.ZodTypeAny, {
1497
+ viewMode: "wide" | "radio-center";
1498
+ viewport: {
1499
+ enabled: boolean;
1500
+ canZoom: boolean;
1501
+ canPan: boolean;
1502
+ canTuneAtEdge: boolean;
1503
+ bounds: {
1504
+ min: number;
1505
+ max: number;
1506
+ } | null;
1507
+ };
411
1508
  showTxMarkers: boolean;
412
1509
  showRxMarkers: boolean;
413
1510
  canDragTx: boolean;
414
1511
  canRightClickSetFrequency: boolean;
415
1512
  canDoubleClickSetFrequency: boolean;
416
1513
  canDragFrequency: boolean;
417
- frequencyGestureTarget: "operator-tx" | "radio-frequency" | null;
1514
+ frequencyGestureTarget: "radio-frequency" | "operator-tx" | null;
418
1515
  frequencyStepHz: number | null;
419
1516
  presetMarkers: {
420
1517
  id: string;
@@ -423,6 +1520,16 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
423
1520
  label: string;
424
1521
  clickable: boolean;
425
1522
  }[];
1523
+ frequencyOverlays: {
1524
+ id: string;
1525
+ label: string;
1526
+ lineFrequency: number;
1527
+ rangeStartFrequency: number;
1528
+ rangeEndFrequency: number;
1529
+ variant: "tx" | "rx" | "window";
1530
+ draggable: boolean;
1531
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1532
+ }[];
426
1533
  canDragVoiceOverlay: boolean;
427
1534
  showVoiceOverlay: boolean;
428
1535
  canLocalViewportZoom: boolean;
@@ -437,7 +1544,7 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
437
1544
  canRightClickSetFrequency: boolean;
438
1545
  canDoubleClickSetFrequency: boolean;
439
1546
  canDragFrequency: boolean;
440
- frequencyGestureTarget: "operator-tx" | "radio-frequency" | null;
1547
+ frequencyGestureTarget: "radio-frequency" | "operator-tx" | null;
441
1548
  frequencyStepHz: number | null;
442
1549
  presetMarkers: {
443
1550
  id: string;
@@ -446,6 +1553,16 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
446
1553
  label: string;
447
1554
  clickable: boolean;
448
1555
  }[];
1556
+ frequencyOverlays: {
1557
+ id: string;
1558
+ label: string;
1559
+ lineFrequency: number;
1560
+ rangeStartFrequency: number;
1561
+ rangeEndFrequency: number;
1562
+ variant: "tx" | "rx" | "window";
1563
+ draggable: boolean;
1564
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1565
+ }[];
449
1566
  canDragVoiceOverlay: boolean;
450
1567
  showVoiceOverlay: boolean;
451
1568
  canLocalViewportZoom: boolean;
@@ -453,6 +1570,17 @@ export declare const SpectrumSessionInteractionStateSchema: z.ZodObject<{
453
1570
  supportsManualRange: boolean;
454
1571
  supportsAutoRange: boolean;
455
1572
  defaultRangeMode: "manual" | "auto" | null;
1573
+ viewMode?: "wide" | "radio-center" | undefined;
1574
+ viewport?: {
1575
+ enabled: boolean;
1576
+ canZoom: boolean;
1577
+ canPan: boolean;
1578
+ canTuneAtEdge: boolean;
1579
+ bounds: {
1580
+ min: number;
1581
+ max: number;
1582
+ } | null;
1583
+ } | undefined;
456
1584
  }>;
457
1585
  export type SpectrumSessionInteractionState = z.infer<typeof SpectrumSessionInteractionStateSchema>;
458
1586
  export declare const SpectrumSessionStateSchema: z.ZodObject<{
@@ -492,6 +1620,41 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
492
1620
  offsetModel: "upper" | "lower" | "symmetric" | null;
493
1621
  }>;
494
1622
  interaction: z.ZodObject<{
1623
+ viewMode: z.ZodDefault<z.ZodEnum<["wide", "radio-center"]>>;
1624
+ viewport: z.ZodDefault<z.ZodObject<{
1625
+ enabled: z.ZodBoolean;
1626
+ canZoom: z.ZodBoolean;
1627
+ canPan: z.ZodBoolean;
1628
+ canTuneAtEdge: z.ZodBoolean;
1629
+ bounds: z.ZodNullable<z.ZodObject<{
1630
+ min: z.ZodNumber;
1631
+ max: z.ZodNumber;
1632
+ }, "strip", z.ZodTypeAny, {
1633
+ min: number;
1634
+ max: number;
1635
+ }, {
1636
+ min: number;
1637
+ max: number;
1638
+ }>>;
1639
+ }, "strip", z.ZodTypeAny, {
1640
+ enabled: boolean;
1641
+ canZoom: boolean;
1642
+ canPan: boolean;
1643
+ canTuneAtEdge: boolean;
1644
+ bounds: {
1645
+ min: number;
1646
+ max: number;
1647
+ } | null;
1648
+ }, {
1649
+ enabled: boolean;
1650
+ canZoom: boolean;
1651
+ canPan: boolean;
1652
+ canTuneAtEdge: boolean;
1653
+ bounds: {
1654
+ min: number;
1655
+ max: number;
1656
+ } | null;
1657
+ }>>;
495
1658
  showTxMarkers: z.ZodBoolean;
496
1659
  showRxMarkers: z.ZodBoolean;
497
1660
  canDragTx: z.ZodBoolean;
@@ -519,6 +1682,52 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
519
1682
  label: string;
520
1683
  clickable: boolean;
521
1684
  }>, "many">;
1685
+ frequencyOverlays: z.ZodArray<z.ZodEffects<z.ZodObject<{
1686
+ id: z.ZodString;
1687
+ label: z.ZodString;
1688
+ lineFrequency: z.ZodNumber;
1689
+ rangeStartFrequency: z.ZodNumber;
1690
+ rangeEndFrequency: z.ZodNumber;
1691
+ variant: z.ZodEnum<["tx", "rx", "window"]>;
1692
+ draggable: z.ZodBoolean;
1693
+ frequencyTarget: z.ZodNullable<z.ZodEnum<["radio-frequency", "operator-tx", "split-frequency"]>>;
1694
+ }, "strip", z.ZodTypeAny, {
1695
+ id: string;
1696
+ label: string;
1697
+ lineFrequency: number;
1698
+ rangeStartFrequency: number;
1699
+ rangeEndFrequency: number;
1700
+ variant: "tx" | "rx" | "window";
1701
+ draggable: boolean;
1702
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1703
+ }, {
1704
+ id: string;
1705
+ label: string;
1706
+ lineFrequency: number;
1707
+ rangeStartFrequency: number;
1708
+ rangeEndFrequency: number;
1709
+ variant: "tx" | "rx" | "window";
1710
+ draggable: boolean;
1711
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1712
+ }>, {
1713
+ id: string;
1714
+ label: string;
1715
+ lineFrequency: number;
1716
+ rangeStartFrequency: number;
1717
+ rangeEndFrequency: number;
1718
+ variant: "tx" | "rx" | "window";
1719
+ draggable: boolean;
1720
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1721
+ }, {
1722
+ id: string;
1723
+ label: string;
1724
+ lineFrequency: number;
1725
+ rangeStartFrequency: number;
1726
+ rangeEndFrequency: number;
1727
+ variant: "tx" | "rx" | "window";
1728
+ draggable: boolean;
1729
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1730
+ }>, "many">;
522
1731
  canDragVoiceOverlay: z.ZodBoolean;
523
1732
  showVoiceOverlay: z.ZodBoolean;
524
1733
  canLocalViewportZoom: z.ZodBoolean;
@@ -527,13 +1736,24 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
527
1736
  supportsAutoRange: z.ZodBoolean;
528
1737
  defaultRangeMode: z.ZodNullable<z.ZodEnum<["auto", "manual"]>>;
529
1738
  }, "strip", z.ZodTypeAny, {
1739
+ viewMode: "wide" | "radio-center";
1740
+ viewport: {
1741
+ enabled: boolean;
1742
+ canZoom: boolean;
1743
+ canPan: boolean;
1744
+ canTuneAtEdge: boolean;
1745
+ bounds: {
1746
+ min: number;
1747
+ max: number;
1748
+ } | null;
1749
+ };
530
1750
  showTxMarkers: boolean;
531
1751
  showRxMarkers: boolean;
532
1752
  canDragTx: boolean;
533
1753
  canRightClickSetFrequency: boolean;
534
1754
  canDoubleClickSetFrequency: boolean;
535
1755
  canDragFrequency: boolean;
536
- frequencyGestureTarget: "operator-tx" | "radio-frequency" | null;
1756
+ frequencyGestureTarget: "radio-frequency" | "operator-tx" | null;
537
1757
  frequencyStepHz: number | null;
538
1758
  presetMarkers: {
539
1759
  id: string;
@@ -542,6 +1762,16 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
542
1762
  label: string;
543
1763
  clickable: boolean;
544
1764
  }[];
1765
+ frequencyOverlays: {
1766
+ id: string;
1767
+ label: string;
1768
+ lineFrequency: number;
1769
+ rangeStartFrequency: number;
1770
+ rangeEndFrequency: number;
1771
+ variant: "tx" | "rx" | "window";
1772
+ draggable: boolean;
1773
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1774
+ }[];
545
1775
  canDragVoiceOverlay: boolean;
546
1776
  showVoiceOverlay: boolean;
547
1777
  canLocalViewportZoom: boolean;
@@ -556,7 +1786,7 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
556
1786
  canRightClickSetFrequency: boolean;
557
1787
  canDoubleClickSetFrequency: boolean;
558
1788
  canDragFrequency: boolean;
559
- frequencyGestureTarget: "operator-tx" | "radio-frequency" | null;
1789
+ frequencyGestureTarget: "radio-frequency" | "operator-tx" | null;
560
1790
  frequencyStepHz: number | null;
561
1791
  presetMarkers: {
562
1792
  id: string;
@@ -565,6 +1795,16 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
565
1795
  label: string;
566
1796
  clickable: boolean;
567
1797
  }[];
1798
+ frequencyOverlays: {
1799
+ id: string;
1800
+ label: string;
1801
+ lineFrequency: number;
1802
+ rangeStartFrequency: number;
1803
+ rangeEndFrequency: number;
1804
+ variant: "tx" | "rx" | "window";
1805
+ draggable: boolean;
1806
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1807
+ }[];
568
1808
  canDragVoiceOverlay: boolean;
569
1809
  showVoiceOverlay: boolean;
570
1810
  canLocalViewportZoom: boolean;
@@ -572,6 +1812,17 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
572
1812
  supportsManualRange: boolean;
573
1813
  supportsAutoRange: boolean;
574
1814
  defaultRangeMode: "manual" | "auto" | null;
1815
+ viewMode?: "wide" | "radio-center" | undefined;
1816
+ viewport?: {
1817
+ enabled: boolean;
1818
+ canZoom: boolean;
1819
+ canPan: boolean;
1820
+ canTuneAtEdge: boolean;
1821
+ bounds: {
1822
+ min: number;
1823
+ max: number;
1824
+ } | null;
1825
+ } | undefined;
575
1826
  }>;
576
1827
  controls: z.ZodArray<z.ZodObject<{
577
1828
  id: z.ZodEnum<["zoom-step", "digital-window-toggle", "openwebrx-detail-toggle", "viewport-zoom"]>;
@@ -585,25 +1836,25 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
585
1836
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
586
1837
  active: boolean;
587
1838
  kind: "server" | "local";
1839
+ enabled: boolean;
588
1840
  action: "in" | "out" | "toggle";
589
1841
  visible: boolean;
590
- enabled: boolean;
591
1842
  pending: boolean;
592
1843
  }, {
593
1844
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
594
1845
  active: boolean;
595
1846
  kind: "server" | "local";
1847
+ enabled: boolean;
596
1848
  action: "in" | "out" | "toggle";
597
1849
  visible: boolean;
598
- enabled: boolean;
599
1850
  pending: boolean;
600
1851
  }>, "many">;
601
1852
  }, "strip", z.ZodTypeAny, {
1853
+ kind: "audio" | "radio-sdr" | "openwebrx-sdr" | null;
602
1854
  centerFrequency: number | null;
603
1855
  spanHz: number | null;
604
- kind: "audio" | "radio-sdr" | "openwebrx-sdr" | null;
605
1856
  frequencyRangeMode: "baseband" | "absolute-center" | "absolute-fixed" | "absolute-windowed";
606
- sourceMode: "unknown" | "center" | "fixed" | "scroll-center" | "scroll-fixed" | "baseband" | "full" | "detail";
1857
+ sourceMode: "unknown" | "detail" | "fixed" | "center" | "scroll-center" | "scroll-fixed" | "baseband" | "full";
607
1858
  displayRange: {
608
1859
  min: number;
609
1860
  max: number;
@@ -619,13 +1870,24 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
619
1870
  offsetModel: "upper" | "lower" | "symmetric" | null;
620
1871
  };
621
1872
  interaction: {
1873
+ viewMode: "wide" | "radio-center";
1874
+ viewport: {
1875
+ enabled: boolean;
1876
+ canZoom: boolean;
1877
+ canPan: boolean;
1878
+ canTuneAtEdge: boolean;
1879
+ bounds: {
1880
+ min: number;
1881
+ max: number;
1882
+ } | null;
1883
+ };
622
1884
  showTxMarkers: boolean;
623
1885
  showRxMarkers: boolean;
624
1886
  canDragTx: boolean;
625
1887
  canRightClickSetFrequency: boolean;
626
1888
  canDoubleClickSetFrequency: boolean;
627
1889
  canDragFrequency: boolean;
628
- frequencyGestureTarget: "operator-tx" | "radio-frequency" | null;
1890
+ frequencyGestureTarget: "radio-frequency" | "operator-tx" | null;
629
1891
  frequencyStepHz: number | null;
630
1892
  presetMarkers: {
631
1893
  id: string;
@@ -634,6 +1896,16 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
634
1896
  label: string;
635
1897
  clickable: boolean;
636
1898
  }[];
1899
+ frequencyOverlays: {
1900
+ id: string;
1901
+ label: string;
1902
+ lineFrequency: number;
1903
+ rangeStartFrequency: number;
1904
+ rangeEndFrequency: number;
1905
+ variant: "tx" | "rx" | "window";
1906
+ draggable: boolean;
1907
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1908
+ }[];
637
1909
  canDragVoiceOverlay: boolean;
638
1910
  showVoiceOverlay: boolean;
639
1911
  canLocalViewportZoom: boolean;
@@ -646,17 +1918,17 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
646
1918
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
647
1919
  active: boolean;
648
1920
  kind: "server" | "local";
1921
+ enabled: boolean;
649
1922
  action: "in" | "out" | "toggle";
650
1923
  visible: boolean;
651
- enabled: boolean;
652
1924
  pending: boolean;
653
1925
  }[];
654
1926
  }, {
1927
+ kind: "audio" | "radio-sdr" | "openwebrx-sdr" | null;
655
1928
  centerFrequency: number | null;
656
1929
  spanHz: number | null;
657
- kind: "audio" | "radio-sdr" | "openwebrx-sdr" | null;
658
1930
  frequencyRangeMode: "baseband" | "absolute-center" | "absolute-fixed" | "absolute-windowed";
659
- sourceMode: "unknown" | "center" | "fixed" | "scroll-center" | "scroll-fixed" | "baseband" | "full" | "detail";
1931
+ sourceMode: "unknown" | "detail" | "fixed" | "center" | "scroll-center" | "scroll-fixed" | "baseband" | "full";
660
1932
  displayRange: {
661
1933
  min: number;
662
1934
  max: number;
@@ -678,7 +1950,7 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
678
1950
  canRightClickSetFrequency: boolean;
679
1951
  canDoubleClickSetFrequency: boolean;
680
1952
  canDragFrequency: boolean;
681
- frequencyGestureTarget: "operator-tx" | "radio-frequency" | null;
1953
+ frequencyGestureTarget: "radio-frequency" | "operator-tx" | null;
682
1954
  frequencyStepHz: number | null;
683
1955
  presetMarkers: {
684
1956
  id: string;
@@ -687,6 +1959,16 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
687
1959
  label: string;
688
1960
  clickable: boolean;
689
1961
  }[];
1962
+ frequencyOverlays: {
1963
+ id: string;
1964
+ label: string;
1965
+ lineFrequency: number;
1966
+ rangeStartFrequency: number;
1967
+ rangeEndFrequency: number;
1968
+ variant: "tx" | "rx" | "window";
1969
+ draggable: boolean;
1970
+ frequencyTarget: "radio-frequency" | "operator-tx" | "split-frequency" | null;
1971
+ }[];
690
1972
  canDragVoiceOverlay: boolean;
691
1973
  showVoiceOverlay: boolean;
692
1974
  canLocalViewportZoom: boolean;
@@ -694,14 +1976,25 @@ export declare const SpectrumSessionStateSchema: z.ZodObject<{
694
1976
  supportsManualRange: boolean;
695
1977
  supportsAutoRange: boolean;
696
1978
  defaultRangeMode: "manual" | "auto" | null;
1979
+ viewMode?: "wide" | "radio-center" | undefined;
1980
+ viewport?: {
1981
+ enabled: boolean;
1982
+ canZoom: boolean;
1983
+ canPan: boolean;
1984
+ canTuneAtEdge: boolean;
1985
+ bounds: {
1986
+ min: number;
1987
+ max: number;
1988
+ } | null;
1989
+ } | undefined;
697
1990
  };
698
1991
  controls: {
699
1992
  id: "zoom-step" | "digital-window-toggle" | "openwebrx-detail-toggle" | "viewport-zoom";
700
1993
  active: boolean;
701
1994
  kind: "server" | "local";
1995
+ enabled: boolean;
702
1996
  action: "in" | "out" | "toggle";
703
1997
  visible: boolean;
704
- enabled: boolean;
705
1998
  pending: boolean;
706
1999
  }[];
707
2000
  }>;