@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.
- package/dist/components/ButtonLink.d.ts +8 -0
- package/dist/components/ButtonLink.d.ts.map +1 -0
- package/dist/components/ButtonLink.js +8 -0
- package/dist/components/ButtonLink.js.map +1 -0
- package/dist/components/CTASubLabel.d.ts +2 -0
- package/dist/components/CTASubLabel.d.ts.map +1 -0
- package/dist/components/CTASubLabel.js +17 -0
- package/dist/components/CTASubLabel.js.map +1 -0
- package/dist/components/Link.d.ts +5 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/Link.js +8 -0
- package/dist/components/Link.js.map +1 -0
- package/dist/components/Pipeline.d.ts +3 -0
- package/dist/components/Pipeline.d.ts.map +1 -0
- package/dist/components/Pipeline.js +22 -0
- package/dist/components/Pipeline.js.map +1 -0
- package/dist/components/Resizable.d.ts +10 -0
- package/dist/components/Resizable.d.ts.map +1 -0
- package/dist/components/Resizable.js +12 -0
- package/dist/components/Resizable.js.map +1 -0
- package/dist/components/Streams.d.ts +10 -0
- package/dist/components/Streams.d.ts.map +1 -0
- package/dist/components/Streams.js +80 -0
- package/dist/components/Streams.js.map +1 -0
- package/dist/constants/connection.d.ts +36 -0
- package/dist/constants/connection.d.ts.map +1 -0
- package/dist/constants/connection.js +35 -0
- package/dist/constants/connection.js.map +1 -0
- package/dist/constants/streams.d.ts +13 -0
- package/dist/constants/streams.d.ts.map +1 -0
- package/dist/constants/streams.js +13 -0
- package/dist/constants/streams.js.map +1 -0
- package/dist/constants/url.d.ts +4 -0
- package/dist/constants/url.d.ts.map +1 -0
- package/dist/constants/url.js +4 -0
- package/dist/constants/url.js.map +1 -0
- package/dist/dai-connection/connection.d.ts +55 -0
- package/dist/dai-connection/connection.d.ts.map +1 -0
- package/dist/dai-connection/connection.js +291 -0
- package/dist/dai-connection/connection.js.map +1 -0
- package/dist/dai-connection/decoder.worker.d.ts +16 -0
- package/dist/dai-connection/decoder.worker.d.ts.map +1 -0
- package/dist/dai-connection/decoder.worker.js +24 -0
- package/dist/dai-connection/decoder.worker.js.map +1 -0
- package/dist/hooks/connection.d.ts +30 -0
- package/dist/hooks/connection.d.ts.map +1 -0
- package/dist/hooks/connection.js +145 -0
- package/dist/hooks/connection.js.map +1 -0
- package/dist/hooks/navigation.d.ts +12 -0
- package/dist/hooks/navigation.d.ts.map +1 -0
- package/dist/hooks/navigation.js +15 -0
- package/dist/hooks/navigation.js.map +1 -0
- package/dist/hooks/search.d.ts +11 -0
- package/dist/hooks/search.d.ts.map +1 -0
- package/dist/hooks/search.js +31 -0
- package/dist/hooks/search.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +2 -6
- package/dist/index.js.map +1 -0
- package/dist/models/device-configuration.d.ts +106 -0
- package/dist/models/device-configuration.d.ts.map +1 -0
- package/dist/models/device-configuration.js +22 -0
- package/dist/models/device-configuration.js.map +1 -0
- package/dist/providers/ConnectionProvider.d.ts +9 -0
- package/dist/providers/ConnectionProvider.d.ts.map +1 -0
- package/dist/providers/ConnectionProvider.js +29 -0
- package/dist/providers/ConnectionProvider.js.map +1 -0
- package/dist/providers/DataProvider.d.ts +13 -0
- package/dist/providers/DataProvider.d.ts.map +1 -0
- package/dist/providers/DataProvider.js +43 -0
- package/dist/providers/DataProvider.js.map +1 -0
- package/dist/utils/arrays.d.ts +2 -0
- package/dist/utils/arrays.d.ts.map +1 -0
- package/dist/utils/arrays.js +11 -0
- package/dist/utils/arrays.js.map +1 -0
- package/dist/utils/dynamic-base-worker.d.ts +8 -0
- package/dist/utils/dynamic-base-worker.d.ts.map +1 -0
- package/dist/utils/dynamic-base-worker.js +19 -0
- package/dist/utils/dynamic-base-worker.js.map +1 -0
- package/dist/utils/functions.d.ts +2 -0
- package/dist/utils/functions.d.ts.map +1 -0
- package/dist/utils/functions.js +4 -0
- package/dist/utils/functions.js.map +1 -0
- package/dist/utils/sorting.d.ts +3 -0
- package/dist/utils/sorting.d.ts.map +1 -0
- package/dist/utils/sorting.js +34 -0
- package/dist/utils/sorting.js.map +1 -0
- package/dist/utils/url.d.ts +5 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +7 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +14 -2
- package/src/components/ButtonLink.tsx +0 -12
- package/src/components/CTASubLabel.tsx +0 -39
- package/src/components/Link.tsx +0 -10
- package/src/components/Pipeline.tsx +0 -35
- package/src/components/Resizable.tsx +0 -56
- package/src/components/Streams.tsx +0 -256
- package/src/constants/connection.ts +0 -45
- package/src/constants/streams.ts +0 -11
- package/src/constants/url.ts +0 -6
- package/src/dai-connection/connection.ts +0 -402
- package/src/dai-connection/decoder.worker.ts +0 -50
- package/src/hooks/connection.ts +0 -191
- package/src/hooks/navigation.ts +0 -25
- package/src/hooks/search.ts +0 -45
- package/src/providers/ConnectionProvider.tsx +0 -39
- package/src/providers/DataProvider.tsx +0 -71
- package/src/utils/arrays.ts +0 -10
- package/src/utils/dynamic-base-worker.ts +0 -21
- package/src/utils/functions.ts +0 -3
- package/src/utils/sorting.ts +0 -42
- package/src/utils/url.ts +0 -8
- package/src/window.d.ts +0 -7
- 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"}
|