@luxonis/depthai-viewer-common 0.0.1 → 0.0.3

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 (116) hide show
  1. package/dist/components/ButtonLink.d.ts +8 -0
  2. package/dist/components/ButtonLink.d.ts.map +1 -0
  3. package/dist/components/ButtonLink.js +8 -0
  4. package/dist/components/ButtonLink.js.map +1 -0
  5. package/dist/components/CTASubLabel.d.ts +2 -0
  6. package/dist/components/CTASubLabel.d.ts.map +1 -0
  7. package/dist/components/CTASubLabel.js +17 -0
  8. package/dist/components/CTASubLabel.js.map +1 -0
  9. package/dist/components/Link.d.ts +5 -0
  10. package/dist/components/Link.d.ts.map +1 -0
  11. package/dist/components/Link.js +8 -0
  12. package/dist/components/Link.js.map +1 -0
  13. package/dist/components/Pipeline.d.ts +3 -0
  14. package/dist/components/Pipeline.d.ts.map +1 -0
  15. package/dist/components/Pipeline.js +22 -0
  16. package/dist/components/Pipeline.js.map +1 -0
  17. package/dist/components/Resizable.d.ts +10 -0
  18. package/dist/components/Resizable.d.ts.map +1 -0
  19. package/dist/components/Resizable.js +12 -0
  20. package/dist/components/Resizable.js.map +1 -0
  21. package/dist/components/Streams.d.ts +10 -0
  22. package/dist/components/Streams.d.ts.map +1 -0
  23. package/dist/components/Streams.js +80 -0
  24. package/dist/components/Streams.js.map +1 -0
  25. package/dist/constants/connection.d.ts +36 -0
  26. package/dist/constants/connection.d.ts.map +1 -0
  27. package/dist/constants/connection.js +35 -0
  28. package/dist/constants/connection.js.map +1 -0
  29. package/dist/constants/streams.d.ts +13 -0
  30. package/dist/constants/streams.d.ts.map +1 -0
  31. package/dist/constants/streams.js +13 -0
  32. package/dist/constants/streams.js.map +1 -0
  33. package/dist/constants/url.d.ts +4 -0
  34. package/dist/constants/url.d.ts.map +1 -0
  35. package/dist/constants/url.js +4 -0
  36. package/dist/constants/url.js.map +1 -0
  37. package/dist/dai-connection/connection.d.ts +55 -0
  38. package/dist/dai-connection/connection.d.ts.map +1 -0
  39. package/dist/dai-connection/connection.js +291 -0
  40. package/dist/dai-connection/connection.js.map +1 -0
  41. package/dist/dai-connection/decoder.worker.d.ts +16 -0
  42. package/dist/dai-connection/decoder.worker.d.ts.map +1 -0
  43. package/dist/dai-connection/decoder.worker.js +24 -0
  44. package/dist/dai-connection/decoder.worker.js.map +1 -0
  45. package/dist/hooks/connection.d.ts +30 -0
  46. package/dist/hooks/connection.d.ts.map +1 -0
  47. package/dist/hooks/connection.js +145 -0
  48. package/dist/hooks/connection.js.map +1 -0
  49. package/dist/hooks/navigation.d.ts +12 -0
  50. package/dist/hooks/navigation.d.ts.map +1 -0
  51. package/dist/hooks/navigation.js +15 -0
  52. package/dist/hooks/navigation.js.map +1 -0
  53. package/dist/hooks/search.d.ts +11 -0
  54. package/dist/hooks/search.d.ts.map +1 -0
  55. package/dist/hooks/search.js +31 -0
  56. package/dist/hooks/search.js.map +1 -0
  57. package/dist/index.d.ts +23 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/{src/index.ts → dist/index.js} +2 -6
  60. package/dist/index.js.map +1 -0
  61. package/dist/models/device-configuration.d.ts +106 -0
  62. package/dist/models/device-configuration.d.ts.map +1 -0
  63. package/dist/models/device-configuration.js +22 -0
  64. package/dist/models/device-configuration.js.map +1 -0
  65. package/dist/providers/ConnectionProvider.d.ts +9 -0
  66. package/dist/providers/ConnectionProvider.d.ts.map +1 -0
  67. package/dist/providers/ConnectionProvider.js +29 -0
  68. package/dist/providers/ConnectionProvider.js.map +1 -0
  69. package/dist/providers/DataProvider.d.ts +13 -0
  70. package/dist/providers/DataProvider.d.ts.map +1 -0
  71. package/dist/providers/DataProvider.js +43 -0
  72. package/dist/providers/DataProvider.js.map +1 -0
  73. package/dist/utils/arrays.d.ts +2 -0
  74. package/dist/utils/arrays.d.ts.map +1 -0
  75. package/dist/utils/arrays.js +11 -0
  76. package/dist/utils/arrays.js.map +1 -0
  77. package/dist/utils/dynamic-base-worker.d.ts +8 -0
  78. package/dist/utils/dynamic-base-worker.d.ts.map +1 -0
  79. package/dist/utils/dynamic-base-worker.js +19 -0
  80. package/dist/utils/dynamic-base-worker.js.map +1 -0
  81. package/dist/utils/functions.d.ts +2 -0
  82. package/dist/utils/functions.d.ts.map +1 -0
  83. package/dist/utils/functions.js +4 -0
  84. package/dist/utils/functions.js.map +1 -0
  85. package/dist/utils/sorting.d.ts +3 -0
  86. package/dist/utils/sorting.d.ts.map +1 -0
  87. package/dist/utils/sorting.js +34 -0
  88. package/dist/utils/sorting.js.map +1 -0
  89. package/dist/utils/url.d.ts +5 -0
  90. package/dist/utils/url.d.ts.map +1 -0
  91. package/dist/utils/url.js +7 -0
  92. package/dist/utils/url.js.map +1 -0
  93. package/package.json +14 -2
  94. package/src/components/ButtonLink.tsx +0 -12
  95. package/src/components/CTASubLabel.tsx +0 -39
  96. package/src/components/Link.tsx +0 -10
  97. package/src/components/Pipeline.tsx +0 -35
  98. package/src/components/Resizable.tsx +0 -56
  99. package/src/components/Streams.tsx +0 -256
  100. package/src/constants/connection.ts +0 -45
  101. package/src/constants/streams.ts +0 -11
  102. package/src/constants/url.ts +0 -6
  103. package/src/dai-connection/connection.ts +0 -402
  104. package/src/dai-connection/decoder.worker.ts +0 -50
  105. package/src/hooks/connection.ts +0 -191
  106. package/src/hooks/navigation.ts +0 -25
  107. package/src/hooks/search.ts +0 -45
  108. package/src/providers/ConnectionProvider.tsx +0 -39
  109. package/src/providers/DataProvider.tsx +0 -71
  110. package/src/utils/arrays.ts +0 -10
  111. package/src/utils/dynamic-base-worker.ts +0 -21
  112. package/src/utils/functions.ts +0 -3
  113. package/src/utils/sorting.ts +0 -42
  114. package/src/utils/url.ts +0 -8
  115. package/src/window.d.ts +0 -7
  116. package/tsconfig.json +0 -37
@@ -0,0 +1,291 @@
1
+ import { VisualizerConnection } from '@luxonis/visualizer-protobuf';
2
+ import { DAI_SERVICE_NAME } from '../constants/connection.js';
3
+ import _ from 'lodash';
4
+ import { StreamTypes } from '../constants/streams.js';
5
+ export class DAIConnection {
6
+ alive = true;
7
+ connection;
8
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
9
+ listeners = {};
10
+ // biome-ignore lint/suspicious/noExplicitAny: Typed only on a usage level
11
+ serviceListeners = {};
12
+ enabledTopics = [];
13
+ previouslyEnabledTopics = [];
14
+ decoderWorker;
15
+ allowedServices = new Set();
16
+ activeServices = new Set([]);
17
+ serviceInterval = null;
18
+ topicsTouched = false;
19
+ channels = [];
20
+ groups = {};
21
+ topics = [];
22
+ pipeline = null;
23
+ recreateDecoderWorker() {
24
+ this.decoderWorker?.terminate();
25
+ this.decoderWorker = new Worker(new URL('./decoder.worker.js', import.meta.url), {
26
+ type: 'module',
27
+ /* @vite-ignore */
28
+ basePath: window.__basePath,
29
+ });
30
+ this.decoderWorker.addEventListener('error', (event) => console.error('Decoder Worker Error:', event.message, event));
31
+ this.decoderWorker.addEventListener('messageerror', (event) => console.error('Decoder Worker Error (message):', event.data, event));
32
+ this.decoderWorker.addEventListener('message', ({ data: { kind, data, name } }) => {
33
+ if (kind === 'pipeline') {
34
+ if (JSON.stringify(this.pipeline) !== JSON.stringify(data)) {
35
+ this.pipeline = data;
36
+ for (const listener of this.listeners.pipeline ?? []) {
37
+ listener(data);
38
+ }
39
+ }
40
+ }
41
+ else if (name) {
42
+ this.serviceListeners[name]?.(data);
43
+ }
44
+ else {
45
+ this.serviceListeners[data.name]?.(data);
46
+ }
47
+ });
48
+ }
49
+ reportTopics(type) {
50
+ if (!this.groups || !this.channels || !this.alive) {
51
+ return;
52
+ }
53
+ const topicList = [];
54
+ const annotationGroups = {};
55
+ const annotations = [];
56
+ for (const channel of this.channels) {
57
+ const group = this.groups[channel.topic];
58
+ if (channel.kind === 'annotations') {
59
+ annotations.push(channel.topic);
60
+ if (group) {
61
+ annotationGroups[group] ??= [];
62
+ annotationGroups[group].push(channel.topic);
63
+ }
64
+ continue;
65
+ }
66
+ const shouldOpenDefaultStream = (this.enabledTopics.length === 0 ||
67
+ (this.enabledTopics.length !== 0 &&
68
+ this.enabledTopics.includes(StreamTypes.NeuralNetwork))) &&
69
+ !this.topicsTouched;
70
+ if (shouldOpenDefaultStream) {
71
+ // If the connection is over WebSockets we want to open RAW stream as default stream
72
+ if (type === 'ws' &&
73
+ _.isEqual(channel.topic.toLowerCase(), StreamTypes.Raw.toLowerCase())) {
74
+ this.topicsTouched = true;
75
+ this.enabledTopics.push(channel.topic);
76
+ if (!this.enabledTopics.includes(StreamTypes.NeuralNetwork)) {
77
+ this.enabledTopics.push(StreamTypes.NeuralNetwork);
78
+ }
79
+ // If the connection is over WebRTC we want to open ENCODED stream as default stream
80
+ }
81
+ else if (type === 'webrtc' &&
82
+ _.isEqual(channel.topic.toLowerCase(), StreamTypes.Encoded.toLowerCase())) {
83
+ this.topicsTouched = true;
84
+ this.enabledTopics.push(channel.topic);
85
+ if (!this.enabledTopics.includes(StreamTypes.NeuralNetwork)) {
86
+ this.enabledTopics.push(StreamTypes.NeuralNetwork);
87
+ }
88
+ }
89
+ }
90
+ topicList.push({
91
+ name: channel.topic,
92
+ kind: channel.kind,
93
+ enabled: this.enabledTopics.includes(channel.topic),
94
+ group: this.groups[channel.topic] ?? null,
95
+ });
96
+ }
97
+ const fullAnnotationGroups = Object.fromEntries(Object.entries(annotationGroups).map(([group, topics]) => [
98
+ group,
99
+ {
100
+ topics,
101
+ extra: annotations.filter((annotation) => !topics.includes(annotation)),
102
+ },
103
+ ]));
104
+ const updatedTopics = topicList.map((topic) => ({
105
+ ...topic,
106
+ annotations: fullAnnotationGroups[topic.group ?? '']?.topics ?? annotations,
107
+ extraAnnotations: fullAnnotationGroups[topic.group ?? '']?.extra ?? [],
108
+ }));
109
+ if (JSON.stringify(this.topics) !== JSON.stringify(updatedTopics)) {
110
+ const [oldTopics, newTopics] = updatedTopics.reduce((sets, topic) => {
111
+ const set = sets[Number(topic.enabled)];
112
+ for (const name of [topic.name, ...topic.annotations, ...topic.extraAnnotations]) {
113
+ set.add(name);
114
+ }
115
+ return sets;
116
+ }, [new Set(), new Set()]);
117
+ for (const annotation of newTopics) {
118
+ oldTopics.delete(annotation);
119
+ }
120
+ // TODO: Rewrite lib to control enabled annotations
121
+ // This setup subscribes to all annotations regardless of the enabled state
122
+ if (oldTopics.size !== 0) {
123
+ this.connection?.unsubscribe({ topics: [...oldTopics] });
124
+ }
125
+ if (newTopics.size !== 0) {
126
+ this.connection?.subscribe({ topics: [...newTopics] });
127
+ }
128
+ this.topics = updatedTopics;
129
+ for (const listener of this.listeners.topics ?? []) {
130
+ listener(updatedTopics);
131
+ }
132
+ }
133
+ }
134
+ pollServices() {
135
+ if (this.serviceInterval) {
136
+ clearInterval(this.serviceInterval);
137
+ }
138
+ this.serviceInterval = setInterval(() => {
139
+ for (const service of this.activeServices) {
140
+ this.fetchService(service);
141
+ }
142
+ }, 3_000);
143
+ }
144
+ init({ enabledStreams, ...args }) {
145
+ if (enabledStreams && enabledStreams.length > 0) {
146
+ console.debug('Initializing connection with predefined streams', enabledStreams);
147
+ this.enabledTopics = enabledStreams;
148
+ }
149
+ this.recreateDecoderWorker();
150
+ this.setupConnection(args);
151
+ }
152
+ setupConnection({ type, connectionUrl, clientId, token, automaticTokenRefresh, }) {
153
+ // TODO: Enable Luxonis ICE Servers
154
+ this.connection = new VisualizerConnection({
155
+ type: type,
156
+ data: (type === 'ws'
157
+ ? { connectionUrl }
158
+ : {
159
+ config: {
160
+ clientId,
161
+ applicationIdentifier: '', // TODO:
162
+ authPayload: token,
163
+ signalingConnectionRetries: 5,
164
+ useLuxonisIceServers: true,
165
+ },
166
+ automaticTokenRefresh,
167
+ }),
168
+ });
169
+ this.connection.on('open', () => {
170
+ if (!this.alive)
171
+ return;
172
+ for (const listener of this.listeners.open ?? []) {
173
+ listener();
174
+ }
175
+ });
176
+ this.connection.on('close', () => {
177
+ if (!this.alive)
178
+ return;
179
+ this.dispose();
180
+ });
181
+ this.connection.on('disconnect', (error) => {
182
+ for (const listener of this.listeners.disconnect ?? []) {
183
+ listener(error);
184
+ }
185
+ });
186
+ this.connection.on('services', (message) => {
187
+ if (!this.alive)
188
+ return;
189
+ this.allowedServices.clear();
190
+ for (const service of message.data) {
191
+ this.allowedServices.add(service);
192
+ if (service === DAI_SERVICE_NAME.getDevices ||
193
+ service === DAI_SERVICE_NAME.pipelineSchema ||
194
+ service === DAI_SERVICE_NAME.topicGroups) {
195
+ this.fetchService(service);
196
+ }
197
+ }
198
+ this.pollServices();
199
+ });
200
+ this.connection.on('channels', (message) => {
201
+ if (!this.alive)
202
+ return;
203
+ this.channels = message.data;
204
+ this.reportTopics(type);
205
+ // If no default topic is enabled we want to enable at least one topic
206
+ if (this.enabledTopics.length === 0 && this.channels.at(0)?.topic) {
207
+ console.warn(`No default topic is enabled - using ${this.channels.at(0)?.topic} as default topic.`);
208
+ this.toggleTopic(this.channels.at(0).topic);
209
+ }
210
+ });
211
+ }
212
+ async fetchService(service,
213
+ // biome-ignore lint/suspicious/noExplicitAny: Can't possibly be typed, we don't know request specifics
214
+ body) {
215
+ if (!this.alive) {
216
+ console.warn(`DAI: fetchService called while not alive for service "${service}"`);
217
+ return;
218
+ }
219
+ const canPoll = this.allowedServices.has(service);
220
+ if (canPoll) {
221
+ const data = await this.connection?.request({
222
+ name: DAI_SERVICE_NAME[service],
223
+ timeout: 60_000,
224
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
225
+ body: body,
226
+ });
227
+ if (data) {
228
+ this.decoderWorker.postMessage({
229
+ kind: service === 'pipelineSchema' ? 'pipeline' : 'json',
230
+ name: service,
231
+ data,
232
+ }, [data.buffer]);
233
+ }
234
+ }
235
+ else {
236
+ console.warn(`DAI: fetchService called for service "${service}" while it's not allowed to poll`);
237
+ }
238
+ }
239
+ setActiveServices(services) {
240
+ this.activeServices = new Set(services);
241
+ }
242
+ dispose() {
243
+ this.alive = false;
244
+ this.decoderWorker.terminate();
245
+ if (this.serviceInterval) {
246
+ clearInterval(this.serviceInterval);
247
+ }
248
+ this.connection?.close();
249
+ for (const listener of this.listeners.close ?? []) {
250
+ listener();
251
+ }
252
+ }
253
+ handleKeyPress(key) {
254
+ void this.connection?.request({
255
+ name: DAI_SERVICE_NAME.keyPressed,
256
+ body: { key },
257
+ ignoreResponse: true,
258
+ });
259
+ }
260
+ toggleTopic(topic) {
261
+ this.topicsTouched = true;
262
+ const enabledIndex = this.enabledTopics.indexOf(topic);
263
+ if (enabledIndex === -1) {
264
+ this.enabledTopics.push(topic);
265
+ }
266
+ else {
267
+ this.enabledTopics.splice(enabledIndex, 1);
268
+ }
269
+ this.reportTopics();
270
+ }
271
+ stopTopics() {
272
+ this.topicsTouched = false;
273
+ this.previouslyEnabledTopics = this.enabledTopics;
274
+ this.enabledTopics = [];
275
+ this.reportTopics();
276
+ }
277
+ restartTopics() {
278
+ this.topicsTouched = true;
279
+ this.enabledTopics = this.previouslyEnabledTopics;
280
+ this.previouslyEnabledTopics = [];
281
+ this.reportTopics();
282
+ }
283
+ on(event, callback) {
284
+ this.listeners[event] ??= [];
285
+ this.listeners[event].push(callback);
286
+ }
287
+ setOnService(service, callback) {
288
+ this.serviceListeners[service] = callback;
289
+ }
290
+ }
291
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/dai-connection/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type Pipeline } from '@luxonis/depthai-pipeline-lib';
2
+ export type DecoderWorkerInput = {
3
+ kind: 'pipeline' | 'json';
4
+ name?: string;
5
+ data: DataView;
6
+ };
7
+ export type DecoderWorkerOutput = {
8
+ name?: string;
9
+ } & ({
10
+ kind: 'pipeline';
11
+ data: Pipeline;
12
+ } | {
13
+ kind: 'json';
14
+ data: Record<string, string>;
15
+ });
16
+ //# sourceMappingURL=decoder.worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decoder.worker.d.ts","sourceRoot":"","sources":["../../src/dai-connection/decoder.worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAuB7E,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,CACnD;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;CACd,GACD;IACA,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B,CACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { parsePipeline } from '@luxonis/depthai-pipeline-lib';
2
+ function decodeService(kind, response) {
3
+ if (!response) {
4
+ return null;
5
+ }
6
+ try {
7
+ const decoder = new TextDecoder('utf-8');
8
+ const decodedPayload = decoder.decode(response);
9
+ let parsed = JSON.parse(decodedPayload);
10
+ if (kind === 'pipeline') {
11
+ parsed = parsePipeline(parsed);
12
+ }
13
+ return parsed;
14
+ }
15
+ catch (error) {
16
+ console.error('Error decoding JSON:', error);
17
+ return null;
18
+ }
19
+ }
20
+ self.addEventListener('message', ({ data: { kind, data, name } }) => {
21
+ const decoded = decodeService(kind, data);
22
+ self.postMessage({ kind, name, data: decoded });
23
+ });
24
+ //# sourceMappingURL=decoder.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decoder.worker.js","sourceRoot":"","sources":["../../src/dai-connection/decoder.worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiB,MAAM,+BAA+B,CAAC;AAE7E,SAAS,aAAa,CAAC,IAAyB,EAAE,QAAyB;IAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAExC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACzB,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAmBD,IAAI,CAAC,gBAAgB,CACpB,SAAS,EACT,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAoC,EAAE,EAAE;IACpE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAyB,CAAC,CAAC;AACxE,CAAC,CACD,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { Pipeline } from '@luxonis/depthai-pipeline-lib';
2
+ import type { VisualizerConnection } from '@luxonis/visualizer-protobuf';
3
+ import { DAIConnection, type DAIService } from '../dai-connection/connection.js';
4
+ export type Topic = {
5
+ name: string;
6
+ enabled: boolean;
7
+ kind: 'pointCloud' | 'image';
8
+ annotations: string[];
9
+ extraAnnotations: string[];
10
+ };
11
+ export type ConnectionData = {
12
+ connected: boolean;
13
+ daiConnection: DAIConnection | null;
14
+ connections: VisualizerConnection[];
15
+ pipeline: Pipeline | null | undefined;
16
+ isPipelineLoading: boolean;
17
+ setIsPipelineLoading: (isLoading: boolean) => void;
18
+ topics: Topic[];
19
+ toggleTopic: (topic: string) => void;
20
+ };
21
+ export type UseCreateConnectionArgs = {
22
+ type: 'webrtc' | 'ws';
23
+ connectionUrl: string;
24
+ token: string;
25
+ clientId: string;
26
+ activeServices: DAIService[];
27
+ onNewConnection?: (connection: DAIConnection) => void;
28
+ };
29
+ export declare function useCreateConnection({ type, activeServices, onNewConnection, ...params }: UseCreateConnectionArgs): ConnectionData;
30
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/hooks/connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGjF,MAAM,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EACnC,IAAI,EACJ,cAAc,EACd,eAAe,EACf,GAAG,MAAM,EACT,EAAE,uBAAuB,GAAG,cAAc,CAkK1C"}
@@ -0,0 +1,145 @@
1
+ import { useToast } from '@luxonis/common-fe-components';
2
+ import React from 'react';
3
+ import { StreamTypes } from '../constants/streams.js';
4
+ import { DAIConnection } from '../dai-connection/connection.js';
5
+ import { useFlatSearch } from './search.js';
6
+ export function useCreateConnection({ type, activeServices, onNewConnection, ...params }) {
7
+ const { updateSearch, search } = useFlatSearch({
8
+ defaultInit: { streams: [], cid: '', t: '' },
9
+ arrayFields: ['streams'],
10
+ });
11
+ const [connected, setConnected] = React.useState(false);
12
+ const [topics, setTopics] = React.useState([]);
13
+ const [pipeline, setPipeline] = React.useState(undefined);
14
+ const [isPipelineLoading, setIsPipelineLoading] = React.useState(false);
15
+ const [connection, setConnection] = React.useState(null);
16
+ const { toast } = useToast();
17
+ const handleGetCameraIntrinsics = () => {
18
+ if (connection) {
19
+ const getCameraIntrinsics = localStorage.getItem('neuralCameraIntrinsics');
20
+ if (!getCameraIntrinsics) {
21
+ connection.setOnService('getCameraIntrinsics', (data) => {
22
+ // @ts-ignore - The responce is not typed
23
+ localStorage.setItem('neuralCameraIntrinsics', JSON.stringify(data.data));
24
+ });
25
+ connection.fetchService('getCameraIntrinsics');
26
+ }
27
+ }
28
+ else {
29
+ console.warn('Failed to get camera intrinsics, no connection');
30
+ }
31
+ };
32
+ handleGetCameraIntrinsics();
33
+ const refreshConnection = () => {
34
+ const newConnection = new DAIConnection();
35
+ newConnection.on('error', console.error);
36
+ newConnection.on('open', () => {
37
+ setConnected(true);
38
+ handleGetCameraIntrinsics();
39
+ setIsPipelineLoading(true);
40
+ });
41
+ newConnection.on('close', () => {
42
+ setConnected(false);
43
+ setTopics([]);
44
+ setPipeline(undefined);
45
+ setIsPipelineLoading(false);
46
+ });
47
+ newConnection.on('topics', setTopics);
48
+ newConnection.on('pipeline', (pipeline) => {
49
+ setPipeline(pipeline);
50
+ setIsPipelineLoading(false);
51
+ });
52
+ newConnection.on('disconnect', (_error) => {
53
+ toast({
54
+ description: 'The link to the application frontend is not valid. You need to open the frontend from Luxonis Hub again.',
55
+ colorVariant: 'error',
56
+ duration: 'long',
57
+ name: 'connection-error',
58
+ });
59
+ setConnected(false);
60
+ setTopics([]);
61
+ setPipeline(undefined);
62
+ });
63
+ onNewConnection?.(newConnection);
64
+ if (newConnection.alive) {
65
+ newConnection.init({
66
+ type,
67
+ ...params,
68
+ automaticTokenRefresh: (token) => {
69
+ updateSearch('t', token);
70
+ },
71
+ enabledStreams: search.streams,
72
+ });
73
+ setConnection(newConnection);
74
+ }
75
+ };
76
+ // biome-ignore lint/correctness/useExhaustiveDependencies: `params` will always change on re-renders
77
+ React.useEffect(() => {
78
+ if (!connected) {
79
+ refreshConnection();
80
+ }
81
+ else {
82
+ handleGetCameraIntrinsics();
83
+ }
84
+ }, [params.clientId, params.connectionUrl, params.token, onNewConnection, connected]);
85
+ React.useEffect(() => {
86
+ connection?.setActiveServices(activeServices);
87
+ }, [connection, activeServices]);
88
+ const connections = React.useMemo(() => (connection?.connection ? [connection.connection] : []), [connection]);
89
+ React.useEffect(() => {
90
+ if (connected) {
91
+ const callback = (event) => connection?.handleKeyPress(event.key);
92
+ window.addEventListener('keydown', callback);
93
+ return () => window.removeEventListener('keydown', callback);
94
+ }
95
+ }, [connected, connection]);
96
+ React.useEffect(() => {
97
+ if (topics.length > 0) {
98
+ if (topics.find((topic) => topic.name === StreamTypes.PointCloud)?.enabled) {
99
+ const pcColor = topics.find((t) => t.name === StreamTypes._PointCloudColor);
100
+ if (pcColor?.enabled === false) {
101
+ connection?.toggleTopic(StreamTypes._PointCloudColor);
102
+ }
103
+ else if (!pcColor &&
104
+ topics.find((t) => t.name === StreamTypes.Encoded)?.enabled === false) {
105
+ connection?.toggleTopic(StreamTypes.Encoded);
106
+ }
107
+ }
108
+ updateSearch('streams', topics.filter((topic) => topic.enabled).map((topic) => topic.name));
109
+ }
110
+ }, [topics, updateSearch]);
111
+ const toggleTopic = React.useCallback((topicName, isRawSteamEnabledManually) => {
112
+ if (topicName === StreamTypes.PointCloud &&
113
+ topics.find((topic) => topic.name === topicName)?.enabled === false) {
114
+ const pcColor = topics.find((t) => t.name === StreamTypes._PointCloudColor);
115
+ if (!pcColor?.enabled) {
116
+ connection?.toggleTopic(StreamTypes._PointCloudColor);
117
+ }
118
+ else if (!pcColor && topics.find((t) => t.name === StreamTypes.Encoded)) {
119
+ connection?.toggleTopic(StreamTypes.Encoded);
120
+ }
121
+ }
122
+ if (topicName === StreamTypes.PointCloud &&
123
+ isRawSteamEnabledManually === false &&
124
+ topics.find((n) => n.name === 'Point Cloud')?.enabled) {
125
+ if (topics.find((n) => n.name === StreamTypes._PointCloudColor)) {
126
+ connection?.toggleTopic(StreamTypes._PointCloudColor);
127
+ }
128
+ else if (topics.find((n) => n.name === StreamTypes.Encoded)) {
129
+ connection?.toggleTopic(StreamTypes.Encoded);
130
+ }
131
+ }
132
+ connection?.toggleTopic(topicName);
133
+ }, [connection]);
134
+ return {
135
+ connected,
136
+ daiConnection: connection,
137
+ connections,
138
+ pipeline,
139
+ isPipelineLoading,
140
+ setIsPipelineLoading,
141
+ topics,
142
+ toggleTopic,
143
+ };
144
+ }
145
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/hooks/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare function useNavigation(parseUrl?: (pathname: string) => {
2
+ basePath: string;
3
+ page: string;
4
+ }): {
5
+ basePath: string;
6
+ page: string;
7
+ makePath: (page: string, options?: {
8
+ noSearch?: boolean;
9
+ rootPage?: string;
10
+ }) => string;
11
+ };
12
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/hooks/navigation.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;;;qBAUxF,MAAM,YAAW;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;EAUlE"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { useLocation } from 'react-router-dom';
3
+ import { parseUrl as defaultParseUrl } from '../utils/url.js';
4
+ export function useNavigation(parseUrl) {
5
+ const location = useLocation();
6
+ // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
7
+ const { page, basePath } = React.useMemo(() => (parseUrl ?? defaultParseUrl)(location.pathname), [location.pathname]);
8
+ const makePath = React.useCallback((page, options = {}) => {
9
+ const { noSearch = false, rootPage = 'streams' } = options;
10
+ const target = page === rootPage ? '' : page;
11
+ return `/${basePath}${basePath ? '/' : ''}${target}${noSearch ? '' : location.search}`;
12
+ }, [basePath, location.search]);
13
+ return { basePath, page, makePath };
14
+ }
15
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/hooks/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,UAAU,aAAa,CAAC,QAAmE;IAChG,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,yEAAyE;IACzE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,OAAO,CACvC,GAAG,EAAE,CAAC,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACtD,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACnB,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CACjC,CAAC,IAAY,EAAE,UAAqD,EAAE,EAAE,EAAE;QACzE,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7C,OAAO,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACxF,CAAC,EACD,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAC3B,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type UseFlatSearchArgs = {
2
+ defaultInit?: Record<string, string | string[]>;
3
+ arrayFields?: string[];
4
+ };
5
+ export declare function useFlatSearch({ defaultInit, arrayFields }: UseFlatSearchArgs): {
6
+ search: {
7
+ [x: string]: string | string[];
8
+ };
9
+ updateSearch: (key: string, value: string | number | string[] | number[] | null) => void;
10
+ };
11
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/hooks/search.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,WAAgB,EAAE,WAAW,EAAE,EAAE,iBAAiB;;;;wBAiB1E,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI;EAmBlE"}
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { useSearchParams } from 'react-router-dom';
3
+ export function useFlatSearch({ defaultInit = {}, arrayFields }) {
4
+ const [search, setSearch] = useSearchParams(defaultInit);
5
+ const flatSearch = React.useMemo(() => ({
6
+ ...defaultInit,
7
+ ...Object.fromEntries([...search.entries()].map(([key, value]) => [
8
+ key,
9
+ arrayFields?.includes(key) ? (value.length === 0 ? [] : value.split(',')) : value,
10
+ ])),
11
+ }), [arrayFields, defaultInit, search]);
12
+ const updateSearch = React.useCallback((key, value) => {
13
+ setSearch((current) => {
14
+ if (Array.isArray(value)) {
15
+ current.set(key, value.join(','));
16
+ }
17
+ else if (value !== null) {
18
+ current.set(key, value.toString());
19
+ }
20
+ else {
21
+ current.delete(key);
22
+ }
23
+ return current;
24
+ });
25
+ }, [setSearch]);
26
+ return {
27
+ search: flatSearch,
28
+ updateSearch: updateSearch,
29
+ };
30
+ }
31
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/hooks/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOnD,MAAM,UAAU,aAAa,CAAC,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,EAAqB;IACjF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC/B,GAAG,EAAE,CAAC,CAAC;QACN,GAAG,WAAW;QACd,GAAG,MAAM,CAAC,WAAW,CACpB,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC3C,GAAG;YACH,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;SACjF,CAAC,CACF;KACD,CAAC,EACF,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAClC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACrC,CAAC,GAAW,EAAE,KAAmD,EAAE,EAAE;QACpE,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC,CAAC,CAAC;IACJ,CAAC,EACD,CAAC,SAAS,CAAC,CACX,CAAC;IAEF,OAAO;QACN,MAAM,EAAE,UAAU;QAClB,YAAY,EAAE,YAAY;KAC1B,CAAC;AACH,CAAC"}