@genai-fi/base 3.0.1

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 (99) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +18 -0
  3. package/dist/Button-DQwRVw4a.js +1918 -0
  4. package/dist/DefaultPropsProvider-C0Ib4Mye.js +520 -0
  5. package/dist/DialogQR-BU45QB3i.js +1625 -0
  6. package/dist/FileSaver.min-DhePf63e.js +2397 -0
  7. package/dist/FlashWifi-CaAOKd3g.js +33 -0
  8. package/dist/_commonjsHelpers-DaMA6jEr.js +8 -0
  9. package/dist/assets/AlertPara.css +1 -0
  10. package/dist/assets/ConnectionStatus.css +1 -0
  11. package/dist/assets/DialogQR.css +1 -0
  12. package/dist/assets/Motd.css +1 -0
  13. package/dist/assets/Privacy.css +1 -0
  14. package/dist/assets/Spinner.css +1 -0
  15. package/dist/assets/Webcam.css +1 -0
  16. package/dist/assets/style.css +1 -0
  17. package/dist/assets/theme.css +1 -0
  18. package/dist/colours.module.css +19 -0
  19. package/dist/components/AlertPara/AlertPara.d.ts +8 -0
  20. package/dist/components/AlertPara/AlertPara.js +19 -0
  21. package/dist/components/BusyButton/BusyButton.d.ts +7 -0
  22. package/dist/components/BusyButton/BusyButton.js +25 -0
  23. package/dist/components/Button/Button.d.ts +6 -0
  24. package/dist/components/Button/Button.js +6 -0
  25. package/dist/components/ConnectionStatus/ConnectionStatus.d.ts +12 -0
  26. package/dist/components/ConnectionStatus/ConnectionStatus.js +82 -0
  27. package/dist/components/ConnectionStatus/FlashWifi.d.ts +1 -0
  28. package/dist/components/ConnectionStatus/FlashWifi.js +6 -0
  29. package/dist/components/ConnectionStatus/check.d.ts +1 -0
  30. package/dist/components/ConnectionStatus/check.js +10 -0
  31. package/dist/components/ConnectionStatus/ice.d.ts +13 -0
  32. package/dist/components/ConnectionStatus/ice.js +12 -0
  33. package/dist/components/ContentLoader/ContentError.d.ts +5 -0
  34. package/dist/components/ContentLoader/ContentError.js +21 -0
  35. package/dist/components/ContentLoader/ContentLoader.d.ts +8 -0
  36. package/dist/components/ContentLoader/ContentLoader.js +51 -0
  37. package/dist/components/ContentLoader/ContentProgress.d.ts +6 -0
  38. package/dist/components/ContentLoader/ContentProgress.js +31 -0
  39. package/dist/components/Motd/Motd.d.ts +5 -0
  40. package/dist/components/Motd/Motd.js +48 -0
  41. package/dist/components/Privacy/Privacy.d.ts +7 -0
  42. package/dist/components/Privacy/Privacy.js +57 -0
  43. package/dist/components/QRCode/DialogQR.d.ts +7 -0
  44. package/dist/components/QRCode/DialogQR.js +14 -0
  45. package/dist/components/QRCode/QRCode.d.ts +9 -0
  46. package/dist/components/QRCode/QRCode.js +61 -0
  47. package/dist/components/Spinner/Spinner.d.ts +6 -0
  48. package/dist/components/Spinner/Spinner.js +33 -0
  49. package/dist/components/Webcam/Webcam.d.ts +15 -0
  50. package/dist/components/Webcam/Webcam.js +397 -0
  51. package/dist/components/Webcam/webcamClass.d.ts +32 -0
  52. package/dist/components/Webcam/webcamClass.js +76 -0
  53. package/dist/createSvgIcon-BfF8yuCp.js +249 -0
  54. package/dist/createTheme-BIcG8YPQ.js +2895 -0
  55. package/dist/hooks/id.d.ts +1 -0
  56. package/dist/hooks/id.js +16 -0
  57. package/dist/hooks/onlyOnce.d.ts +1 -0
  58. package/dist/hooks/onlyOnce.js +7 -0
  59. package/dist/hooks/peer.d.ts +25 -0
  60. package/dist/hooks/peer.js +70 -0
  61. package/dist/hooks/random.d.ts +1 -0
  62. package/dist/hooks/random.js +9 -0
  63. package/dist/hooks/useTabActive.d.ts +1 -0
  64. package/dist/hooks/useTabActive.js +17 -0
  65. package/dist/index-SOhdqzHq.js +113 -0
  66. package/dist/main.d.ts +21 -0
  67. package/dist/main.js +49 -0
  68. package/dist/react-D-b-Xrzv.js +98 -0
  69. package/dist/services/peer2peer/Incoming.d.ts +13 -0
  70. package/dist/services/peer2peer/Incoming.js +39 -0
  71. package/dist/services/peer2peer/Outgoing.d.ts +25 -0
  72. package/dist/services/peer2peer/Outgoing.js +65 -0
  73. package/dist/services/peer2peer/Peer2Peer.d.ts +80 -0
  74. package/dist/services/peer2peer/Peer2Peer.js +3367 -0
  75. package/dist/services/peer2peer/PeerConnection.d.ts +40 -0
  76. package/dist/services/peer2peer/PeerConnection.js +155 -0
  77. package/dist/services/peer2peer/error.d.ts +2 -0
  78. package/dist/services/peer2peer/error.js +5 -0
  79. package/dist/services/peer2peer/types.d.ts +38 -0
  80. package/dist/services/peer2peer/types.js +1 -0
  81. package/dist/state/webrtcState.d.ts +12 -0
  82. package/dist/state/webrtcState.js +6 -0
  83. package/dist/style/theme.d.ts +1 -0
  84. package/dist/style/theme.js +33 -0
  85. package/dist/style.module-DSFm2eLD.js +9 -0
  86. package/dist/util/backoff.d.ts +1 -0
  87. package/dist/util/backoff.js +6 -0
  88. package/dist/util/base64.d.ts +2 -0
  89. package/dist/util/base64.js +19 -0
  90. package/dist/util/canvas.d.ts +7 -0
  91. package/dist/util/canvas.js +92 -0
  92. package/dist/util/crypto.d.ts +7 -0
  93. package/dist/util/crypto.js +50 -0
  94. package/dist/util/randomId.d.ts +1 -0
  95. package/dist/util/randomId.js +8 -0
  96. package/dist/util/zip.d.ts +13 -0
  97. package/dist/util/zip.js +94 -0
  98. package/dist/webrtcState-D0nJpE9Z.js +406 -0
  99. package/package.json +88 -0
@@ -0,0 +1,406 @@
1
+ const P = {}, Y = (e, n) => e.unstable_is ? e.unstable_is(n) : n === e, Z = (e) => "init" in e, $ = (e) => !!e.write, C = (e) => "v" in e || "e" in e, U = (e) => {
2
+ if ("e" in e)
3
+ throw e.e;
4
+ if ((P ? "production" : void 0) !== "production" && !("v" in e))
5
+ throw new Error("[Bug] atom state is not initialized");
6
+ return e.v;
7
+ }, V = /* @__PURE__ */ new WeakMap(), B = (e) => {
8
+ var n;
9
+ return j(e) && !!((n = V.get(e)) != null && n[0]);
10
+ }, te = (e) => {
11
+ const n = V.get(e);
12
+ n != null && n[0] && (n[0] = !1, n[1].forEach((r) => r()));
13
+ }, F = (e, n) => {
14
+ let r = V.get(e);
15
+ if (!r) {
16
+ r = [!0, /* @__PURE__ */ new Set()], V.set(e, r);
17
+ const l = () => {
18
+ r[0] = !1;
19
+ };
20
+ e.then(l, l);
21
+ }
22
+ r[1].add(n);
23
+ }, j = (e) => typeof (e == null ? void 0 : e.then) == "function", H = (e, n, r) => {
24
+ r.p.has(e) || (r.p.add(e), n.then(
25
+ () => {
26
+ r.p.delete(e);
27
+ },
28
+ () => {
29
+ r.p.delete(e);
30
+ }
31
+ ));
32
+ }, G = (e, n, r) => {
33
+ const l = r(e), _ = "v" in l, f = l.v;
34
+ if (j(n))
35
+ for (const u of l.d.keys())
36
+ H(e, n, r(u));
37
+ l.v = n, delete l.e, (!_ || !Object.is(f, l.v)) && (++l.n, j(f) && te(f));
38
+ }, k = (e, n, r) => {
39
+ var l;
40
+ const _ = /* @__PURE__ */ new Set();
41
+ for (const f of ((l = r.get(e)) == null ? void 0 : l.t) || [])
42
+ r.has(f) && _.add(f);
43
+ for (const f of n.p)
44
+ _.add(f);
45
+ return _;
46
+ }, ne = () => {
47
+ const e = /* @__PURE__ */ new Set(), n = () => {
48
+ e.forEach((r) => r());
49
+ };
50
+ return n.add = (r) => (e.add(r), () => {
51
+ e.delete(r);
52
+ }), n;
53
+ }, K = () => {
54
+ const e = {}, n = /* @__PURE__ */ new WeakMap(), r = (l) => {
55
+ var _, f;
56
+ (_ = n.get(e)) == null || _.forEach((u) => u(l)), (f = n.get(l)) == null || f.forEach((u) => u());
57
+ };
58
+ return r.add = (l, _) => {
59
+ const f = l || e, u = (n.has(f) ? n : n.set(f, /* @__PURE__ */ new Set())).get(f);
60
+ return u.add(_), () => {
61
+ u == null || u.delete(_), u.size || n.delete(f);
62
+ };
63
+ }, r;
64
+ }, re = (e) => (e.c || (e.c = K()), e.m || (e.m = K()), e.u || (e.u = K()), e.f || (e.f = ne()), e), ie = Symbol(), oe = (e = /* @__PURE__ */ new WeakMap(), n = /* @__PURE__ */ new WeakMap(), r = /* @__PURE__ */ new WeakMap(), l = /* @__PURE__ */ new Set(), _ = /* @__PURE__ */ new Set(), f = /* @__PURE__ */ new Set(), u = {}, p = (a, ...w) => a.read(...w), b = (a, ...w) => a.write(...w), E = (a, w) => {
65
+ var y;
66
+ return (y = a.unstable_onInit) == null ? void 0 : y.call(a, w);
67
+ }, A = (a, w) => {
68
+ var y;
69
+ return (y = a.onMount) == null ? void 0 : y.call(a, w);
70
+ }, ...g) => {
71
+ const a = g[0] || ((t) => {
72
+ if ((P ? "production" : void 0) !== "production" && !t)
73
+ throw new Error("Atom is undefined or null");
74
+ let d = e.get(t);
75
+ return d || (d = { d: /* @__PURE__ */ new Map(), p: /* @__PURE__ */ new Set(), n: 0 }, e.set(t, d), E == null || E(t, M)), d;
76
+ }), w = g[1] || (() => {
77
+ const t = [], d = (c) => {
78
+ try {
79
+ c();
80
+ } catch (o) {
81
+ t.push(o);
82
+ }
83
+ };
84
+ do {
85
+ u.f && d(u.f);
86
+ const c = /* @__PURE__ */ new Set(), o = c.add.bind(c);
87
+ l.forEach((i) => {
88
+ var s;
89
+ return (s = n.get(i)) == null ? void 0 : s.l.forEach(o);
90
+ }), l.clear(), f.forEach(o), f.clear(), _.forEach(o), _.clear(), c.forEach(d), l.size && y();
91
+ } while (l.size || f.size || _.size);
92
+ if (t.length)
93
+ throw new AggregateError(t);
94
+ }), y = g[2] || (() => {
95
+ const t = [], d = /* @__PURE__ */ new WeakSet(), c = /* @__PURE__ */ new WeakSet(), o = Array.from(l);
96
+ for (; o.length; ) {
97
+ const i = o[o.length - 1], s = a(i);
98
+ if (c.has(i)) {
99
+ o.pop();
100
+ continue;
101
+ }
102
+ if (d.has(i)) {
103
+ if (r.get(i) === s.n)
104
+ t.push([i, s]);
105
+ else if ((P ? "production" : void 0) !== "production" && r.has(i))
106
+ throw new Error("[Bug] invalidated atom exists");
107
+ c.add(i), o.pop();
108
+ continue;
109
+ }
110
+ d.add(i);
111
+ for (const h of k(i, s, n))
112
+ d.has(h) || o.push(h);
113
+ }
114
+ for (let i = t.length - 1; i >= 0; --i) {
115
+ const [s, h] = t[i];
116
+ let S = !1;
117
+ for (const D of h.d.keys())
118
+ if (D !== s && l.has(D)) {
119
+ S = !0;
120
+ break;
121
+ }
122
+ S && (T(s), W(s)), r.delete(s);
123
+ }
124
+ }), T = g[3] || ((t) => {
125
+ var d;
126
+ const c = a(t);
127
+ if (C(c) && (n.has(t) && r.get(t) !== c.n || Array.from(c.d).every(
128
+ ([v, O]) => (
129
+ // Recursively, read the atom state of the dependency, and
130
+ // check if the atom epoch number is unchanged
131
+ T(v).n === O
132
+ )
133
+ )))
134
+ return c;
135
+ c.d.clear();
136
+ let o = !0;
137
+ const i = () => {
138
+ n.has(t) && (W(t), y(), w());
139
+ }, s = (v) => {
140
+ var O;
141
+ if (Y(t, v)) {
142
+ const X = a(v);
143
+ if (!C(X))
144
+ if (Z(v))
145
+ G(v, v.init, a);
146
+ else
147
+ throw new Error("no atom init");
148
+ return U(X);
149
+ }
150
+ const x = T(v);
151
+ try {
152
+ return U(x);
153
+ } finally {
154
+ c.d.set(v, x.n), B(c.v) && H(t, c.v, x), (O = n.get(v)) == null || O.t.add(t), o || i();
155
+ }
156
+ };
157
+ let h, S;
158
+ const D = {
159
+ get signal() {
160
+ return h || (h = new AbortController()), h.signal;
161
+ },
162
+ get setSelf() {
163
+ return (P ? "production" : void 0) !== "production" && !$(t) && console.warn("setSelf function cannot be used with read-only atom"), !S && $(t) && (S = (...v) => {
164
+ if ((P ? "production" : void 0) !== "production" && o && console.warn("setSelf function cannot be called in sync"), !o)
165
+ try {
166
+ return I(t, ...v);
167
+ } finally {
168
+ y(), w();
169
+ }
170
+ }), S;
171
+ }
172
+ }, N = c.n;
173
+ try {
174
+ const v = p(t, s, D);
175
+ return G(t, v, a), j(v) && (F(v, () => h == null ? void 0 : h.abort()), v.then(
176
+ i,
177
+ i
178
+ )), c;
179
+ } catch (v) {
180
+ return delete c.v, c.e = v, ++c.n, c;
181
+ } finally {
182
+ o = !1, N !== c.n && r.get(t) === N && (r.set(t, c.n), l.add(t), (d = u.c) == null || d.call(u, t));
183
+ }
184
+ }), J = g[4] || ((t) => {
185
+ const d = [t];
186
+ for (; d.length; ) {
187
+ const c = d.pop(), o = a(c);
188
+ for (const i of k(c, o, n)) {
189
+ const s = a(i);
190
+ r.set(i, s.n), d.push(i);
191
+ }
192
+ }
193
+ }), I = g[5] || ((t, ...d) => {
194
+ let c = !0;
195
+ const o = (s) => U(T(s)), i = (s, ...h) => {
196
+ var S;
197
+ const D = a(s);
198
+ try {
199
+ if (Y(t, s)) {
200
+ if (!Z(s))
201
+ throw new Error("atom not writable");
202
+ const N = D.n, v = h[0];
203
+ G(s, v, a), W(s), N !== D.n && (l.add(s), (S = u.c) == null || S.call(u, s), J(s));
204
+ return;
205
+ } else
206
+ return I(s, ...h);
207
+ } finally {
208
+ c || (y(), w());
209
+ }
210
+ };
211
+ try {
212
+ return b(t, o, i, ...d);
213
+ } finally {
214
+ c = !1;
215
+ }
216
+ }), W = g[6] || ((t) => {
217
+ var d;
218
+ const c = a(t), o = n.get(t);
219
+ if (o && !B(c.v)) {
220
+ for (const [i, s] of c.d)
221
+ if (!o.d.has(i)) {
222
+ const h = a(i);
223
+ z(i).t.add(t), o.d.add(i), s !== h.n && (l.add(i), (d = u.c) == null || d.call(u, i), J(i));
224
+ }
225
+ for (const i of o.d || [])
226
+ if (!c.d.has(i)) {
227
+ o.d.delete(i);
228
+ const s = R(i);
229
+ s == null || s.t.delete(t);
230
+ }
231
+ }
232
+ }), z = g[7] || ((t) => {
233
+ var d;
234
+ const c = a(t);
235
+ let o = n.get(t);
236
+ if (!o) {
237
+ T(t);
238
+ for (const i of c.d.keys())
239
+ z(i).t.add(t);
240
+ if (o = {
241
+ l: /* @__PURE__ */ new Set(),
242
+ d: new Set(c.d.keys()),
243
+ t: /* @__PURE__ */ new Set()
244
+ }, n.set(t, o), (d = u.m) == null || d.call(u, t), $(t)) {
245
+ const i = () => {
246
+ let s = !0;
247
+ const h = (...S) => {
248
+ try {
249
+ return I(t, ...S);
250
+ } finally {
251
+ s || (y(), w());
252
+ }
253
+ };
254
+ try {
255
+ const S = A(t, h);
256
+ S && (o.u = () => {
257
+ s = !0;
258
+ try {
259
+ S();
260
+ } finally {
261
+ s = !1;
262
+ }
263
+ });
264
+ } finally {
265
+ s = !1;
266
+ }
267
+ };
268
+ _.add(i);
269
+ }
270
+ }
271
+ return o;
272
+ }), R = g[8] || ((t) => {
273
+ var d;
274
+ const c = a(t);
275
+ let o = n.get(t);
276
+ if (o && !o.l.size && !Array.from(o.t).some((i) => {
277
+ var s;
278
+ return (s = n.get(i)) == null ? void 0 : s.d.has(t);
279
+ })) {
280
+ o.u && f.add(o.u), o = void 0, n.delete(t), (d = u.u) == null || d.call(u, t);
281
+ for (const i of c.d.keys()) {
282
+ const s = R(i);
283
+ s == null || s.t.delete(t);
284
+ }
285
+ return;
286
+ }
287
+ return o;
288
+ }), ee = [
289
+ // store state
290
+ e,
291
+ n,
292
+ r,
293
+ l,
294
+ _,
295
+ f,
296
+ u,
297
+ // atom interceptors
298
+ p,
299
+ b,
300
+ E,
301
+ A,
302
+ // building-block functions
303
+ a,
304
+ w,
305
+ y,
306
+ T,
307
+ J,
308
+ I,
309
+ W,
310
+ z,
311
+ R
312
+ ], M = {
313
+ get: (t) => U(T(t)),
314
+ set: (t, ...d) => {
315
+ try {
316
+ return I(t, ...d);
317
+ } finally {
318
+ y(), w();
319
+ }
320
+ },
321
+ sub: (t, d) => {
322
+ const o = z(t).l;
323
+ return o.add(d), w(), () => {
324
+ o.delete(d), R(t), w();
325
+ };
326
+ }
327
+ };
328
+ return Object.defineProperty(M, ie, { value: ee }), M;
329
+ }, m = oe, se = re, ue = F, q = {};
330
+ let ce = 0;
331
+ function Q(e, n) {
332
+ const r = `atom${++ce}`, l = {
333
+ toString() {
334
+ return (q ? "production" : void 0) !== "production" && this.debugLabel ? r + ":" + this.debugLabel : r;
335
+ }
336
+ };
337
+ return typeof e == "function" ? l.read = e : (l.init = e, l.read = le, l.write = de), l;
338
+ }
339
+ function le(e) {
340
+ return e(this);
341
+ }
342
+ function de(e, n, r) {
343
+ return n(
344
+ this,
345
+ typeof r == "function" ? r(e(this)) : r
346
+ );
347
+ }
348
+ const fe = () => {
349
+ let e = 0;
350
+ const n = se({}), r = /* @__PURE__ */ new WeakMap(), l = /* @__PURE__ */ new WeakMap(), _ = m(
351
+ r,
352
+ l,
353
+ void 0,
354
+ void 0,
355
+ void 0,
356
+ void 0,
357
+ n,
358
+ void 0,
359
+ (p, b, E, ...A) => e ? E(p, ...A) : p.write(b, E, ...A)
360
+ ), f = /* @__PURE__ */ new Set();
361
+ return n.m.add(void 0, (p) => {
362
+ f.add(p);
363
+ const b = r.get(p);
364
+ b.m = l.get(p);
365
+ }), n.u.add(void 0, (p) => {
366
+ f.delete(p);
367
+ const b = r.get(p);
368
+ delete b.m;
369
+ }), Object.assign(_, {
370
+ // store dev methods (these are tentative and subject to change without notice)
371
+ dev4_get_internal_weak_map: () => (console.log("Deprecated: Use devstore from the devtools library"), r),
372
+ dev4_get_mounted_atoms: () => f,
373
+ dev4_restore_atoms: (p) => {
374
+ const b = {
375
+ read: () => null,
376
+ write: (E, A) => {
377
+ ++e;
378
+ try {
379
+ for (const [g, a] of p)
380
+ "init" in g && A(g, a);
381
+ } finally {
382
+ --e;
383
+ }
384
+ }
385
+ };
386
+ _.set(b);
387
+ }
388
+ });
389
+ };
390
+ function ae() {
391
+ return (q ? "production" : void 0) !== "production" ? fe() : m();
392
+ }
393
+ let L;
394
+ function ve() {
395
+ return L || (L = ae(), (q ? "production" : void 0) !== "production" && (globalThis.__JOTAI_DEFAULT_STORE__ || (globalThis.__JOTAI_DEFAULT_STORE__ = L), globalThis.__JOTAI_DEFAULT_STORE__ !== L && console.warn(
396
+ "Detected multiple Jotai instances. It may cause unexpected behavior with the default store. https://github.com/pmndrs/jotai/discussions/2044"
397
+ ))), L;
398
+ }
399
+ const _e = Q("disabled"), he = Q(void 0), we = Q("unset");
400
+ export {
401
+ ue as I,
402
+ we as a,
403
+ ve as g,
404
+ he as i,
405
+ _e as w
406
+ };
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "@genai-fi/base",
3
+ "version": "3.0.1",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "main": "dist/main.js",
7
+ "types": "dist/main.d.ts",
8
+ "repository": {
9
+ "url": "https://github.com/knicos/genai-base.git",
10
+ "type": "git"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "sideEffects": [
16
+ "**/*.css"
17
+ ],
18
+ "exports": {
19
+ ".": "./dist/main.js",
20
+ "./components/*": "./dist/components/*/*.js",
21
+ "./hooks/*": "./dist/hooks/*.js",
22
+ "./style/*": "./dist/style/*.js",
23
+ "./util/*": "./dist/util/*.js",
24
+ "./assets/*": "./dist/assets/*",
25
+ "./main/*": "./dist/*.js",
26
+ "./css/*": "./dist/*"
27
+ },
28
+ "scripts": {
29
+ "dev": "vite",
30
+ "build": "tsc --build ./tsconfig.build.json && vite build",
31
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
32
+ "preview": "vite preview",
33
+ "test": "vitest",
34
+ "ladle": "npx ladle serve",
35
+ "ci:test": "vitest --coverage --reporter=junit --outputFile=junit.xml",
36
+ "coverage": "vitest run --coverage"
37
+ },
38
+ "peerDependencies": {
39
+ "@emotion/react": "^11.14.0",
40
+ "@emotion/styled": "^11.14.0",
41
+ "@mui/icons-material": "^7.1.0",
42
+ "@mui/material": "^7.1.0",
43
+ "react": "^19.1.0",
44
+ "react-dom": "^19.1.0",
45
+ "react-i18next": "^15.5.1"
46
+ },
47
+ "devDependencies": {
48
+ "@emotion/react": "^11.14.0",
49
+ "@emotion/styled": "^11.14.0",
50
+ "@ladle/react": "^5.0.3",
51
+ "@mui/icons-material": "^7.1.0",
52
+ "@mui/material": "^7.1.0",
53
+ "@testing-library/jest-dom": "^6.6.3",
54
+ "@testing-library/react": "^16.3.0",
55
+ "@testing-library/user-event": "^14.6.1",
56
+ "@types/file-saver": "^2.0.7",
57
+ "@types/node": "^20.14.10",
58
+ "@types/qrcode": "^1.5.5",
59
+ "@types/react": "^18.3.3",
60
+ "@types/react-dom": "^18.3.0",
61
+ "@typescript-eslint/eslint-plugin": "^7.13.1",
62
+ "@typescript-eslint/parser": "^7.13.1",
63
+ "@vitejs/plugin-react-swc": "^3.5.0",
64
+ "@vitest/coverage-v8": "^3.0.4",
65
+ "eslint": "^8.57.0",
66
+ "eslint-plugin-react": "^7.34.3",
67
+ "eslint-plugin-react-hooks": "^4.6.2",
68
+ "eslint-plugin-react-refresh": "^0.4.7",
69
+ "glob": "^11.0.0",
70
+ "jsdom": "^26.1.0",
71
+ "react": "^19.1.0",
72
+ "react-dom": "^19.1.0",
73
+ "react-i18next": "^15.5.1",
74
+ "typescript": "^5.8.3",
75
+ "vite": "^6.3.5",
76
+ "vite-plugin-dts": "^4.5.0",
77
+ "vite-plugin-lib-inject-css": "^2.1.1",
78
+ "vitest": "^3.0.4"
79
+ },
80
+ "dependencies": {
81
+ "eventemitter3": "^5.0.1",
82
+ "file-saver": "^2.0.5",
83
+ "jotai": "^2.12.4",
84
+ "jszip": "^3.10.1",
85
+ "peerjs": "^1.5.4",
86
+ "qrcode": "^1.5.3"
87
+ }
88
+ }