@naviedu/room-platform-react 0.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 (88) hide show
  1. package/assets/ATTRIBUTION.md +46 -0
  2. package/assets/presets/alpine-lake-mirror.jpg +0 -0
  3. package/assets/presets/alpine-lake.jpg +0 -0
  4. package/assets/presets/canyon-view-mirror.jpg +0 -0
  5. package/assets/presets/canyon-view.jpg +0 -0
  6. package/assets/presets/desert-dunes-mirror.jpg +0 -0
  7. package/assets/presets/desert-dunes.jpg +0 -0
  8. package/assets/presets/flower-meadow-mirror.jpg +0 -0
  9. package/assets/presets/flower-meadow.jpg +0 -0
  10. package/assets/presets/forest-road-mirror.jpg +0 -0
  11. package/assets/presets/forest-road.jpg +0 -0
  12. package/assets/presets/naviedu-mirror.jpg +0 -0
  13. package/assets/presets/naviedu.jpg +0 -0
  14. package/assets/presets/ocean-cliffs-mirror.jpg +0 -0
  15. package/assets/presets/ocean-cliffs.jpg +0 -0
  16. package/assets/presets/tropical-beach-mirror.jpg +0 -0
  17. package/assets/presets/tropical-beach.jpg +0 -0
  18. package/assets/presets/waterfall-mist-mirror.jpg +0 -0
  19. package/assets/presets/waterfall-mist.jpg +0 -0
  20. package/assets/room-backgrounds/ATTRIBUTION.md +46 -0
  21. package/assets/room-backgrounds/presets/alpine-lake-mirror.jpg +0 -0
  22. package/assets/room-backgrounds/presets/alpine-lake.jpg +0 -0
  23. package/assets/room-backgrounds/presets/canyon-view-mirror.jpg +0 -0
  24. package/assets/room-backgrounds/presets/canyon-view.jpg +0 -0
  25. package/assets/room-backgrounds/presets/desert-dunes-mirror.jpg +0 -0
  26. package/assets/room-backgrounds/presets/desert-dunes.jpg +0 -0
  27. package/assets/room-backgrounds/presets/flower-meadow-mirror.jpg +0 -0
  28. package/assets/room-backgrounds/presets/flower-meadow.jpg +0 -0
  29. package/assets/room-backgrounds/presets/forest-road-mirror.jpg +0 -0
  30. package/assets/room-backgrounds/presets/forest-road.jpg +0 -0
  31. package/assets/room-backgrounds/presets/naviedu-mirror.jpg +0 -0
  32. package/assets/room-backgrounds/presets/naviedu.jpg +0 -0
  33. package/assets/room-backgrounds/presets/ocean-cliffs-mirror.jpg +0 -0
  34. package/assets/room-backgrounds/presets/ocean-cliffs.jpg +0 -0
  35. package/assets/room-backgrounds/presets/tropical-beach-mirror.jpg +0 -0
  36. package/assets/room-backgrounds/presets/tropical-beach.jpg +0 -0
  37. package/assets/room-backgrounds/presets/waterfall-mist-mirror.jpg +0 -0
  38. package/assets/room-backgrounds/presets/waterfall-mist.jpg +0 -0
  39. package/extensions/room-platform-extensions.d.ts +8 -0
  40. package/index.d.ts +32 -0
  41. package/index.esm.js +17790 -0
  42. package/package.json +42 -0
  43. package/room-action-button.d.ts +11 -0
  44. package/room-participant-actions.d.ts +9 -0
  45. package/room-participant-list.d.ts +7 -0
  46. package/room-participant-tab.d.ts +6 -0
  47. package/room-platform-active-speaker.d.ts +4 -0
  48. package/room-platform-background-settings.d.ts +15 -0
  49. package/room-platform-camera-background-presets.d.ts +8 -0
  50. package/room-platform-camera-background-storage.d.ts +38 -0
  51. package/room-platform-control-anchor.d.ts +10 -0
  52. package/room-platform-control-bar.d.ts +11 -0
  53. package/room-platform-control-state.d.ts +12 -0
  54. package/room-platform-current-operation-strip.d.ts +13 -0
  55. package/room-platform-device-selection.d.ts +7 -0
  56. package/room-platform-device-settings.d.ts +8 -0
  57. package/room-platform-local-preview.d.ts +6 -0
  58. package/room-platform-media-controls.d.ts +1 -0
  59. package/room-platform-media-runtime.d.ts +2 -0
  60. package/room-platform-monitor-stage.d.ts +7 -0
  61. package/room-platform-monitor-video-tile.d.ts +20 -0
  62. package/room-platform-monitor-viewer.d.ts +8 -0
  63. package/room-platform-private-room-connection.d.ts +11 -0
  64. package/room-platform-private-room-context.d.ts +8 -0
  65. package/room-platform-private-room-control-bar.d.ts +12 -0
  66. package/room-platform-private-room-experience.d.ts +14 -0
  67. package/room-platform-private-room-overlay.d.ts +7 -0
  68. package/room-platform-private-room-stage.d.ts +9 -0
  69. package/room-platform-private-room-status-banner.d.ts +8 -0
  70. package/room-platform-provider.d.ts +35 -0
  71. package/room-platform-room.d.ts +2 -0
  72. package/room-platform-screen-share-whiteboard-frame.d.ts +11 -0
  73. package/room-platform-shell.d.ts +17 -0
  74. package/room-platform-speak-queue.d.ts +16 -0
  75. package/room-platform-stage-selection.d.ts +14 -0
  76. package/room-platform-stage.d.ts +13 -0
  77. package/room-platform-surface-boundary.d.ts +13 -0
  78. package/room-platform-top-bar.d.ts +7 -0
  79. package/room-platform-types.d.ts +154 -0
  80. package/room-platform-ui-primitives.d.ts +60 -0
  81. package/room-platform-video-tile.d.ts +13 -0
  82. package/room-platform-video-tracks.d.ts +6 -0
  83. package/styles.css +598 -0
  84. package/use-room-platform-camera-background.d.ts +34 -0
  85. package/use-room-platform-private-room-control-actions.d.ts +21 -0
  86. package/use-room-platform-private-room.d.ts +43 -0
  87. package/use-room-platform-stage.d.ts +2 -0
  88. package/use-room-presence.d.ts +2 -0
package/styles.css ADDED
@@ -0,0 +1,598 @@
1
+ .room-platform-room {
2
+ --room-platform-navy: #242f62;
3
+ --room-platform-orange: #eb6619;
4
+ --room-platform-border: #dbe3ef;
5
+ --room-platform-surface: #ffffff;
6
+ --room-platform-muted: #f8fafc;
7
+ background: var(--room-platform-muted);
8
+ color: #172033;
9
+ display: flex;
10
+ flex-direction: column;
11
+ height: 100dvh;
12
+ min-height: 100dvh;
13
+ min-width: 0;
14
+ overflow: hidden;
15
+ width: 100%;
16
+ }
17
+
18
+ .room-platform-surface {
19
+ box-sizing: border-box;
20
+ }
21
+
22
+ .room-platform-panel {
23
+ background: var(--room-platform-surface);
24
+ border: 1px solid var(--room-platform-border);
25
+ border-radius: 8px;
26
+ }
27
+
28
+ .room-platform-button {
29
+ align-items: center;
30
+ border: 1px solid transparent;
31
+ border-radius: 8px;
32
+ cursor: pointer;
33
+ display: inline-flex;
34
+ font: inherit;
35
+ gap: 0.375rem;
36
+ justify-content: center;
37
+ min-height: 2rem;
38
+ padding: 0.375rem 0.75rem;
39
+ }
40
+
41
+ .room-platform-button:focus-visible,
42
+ .room-platform-tab:focus-visible {
43
+ outline: 3px solid color-mix(in srgb, var(--room-platform-orange), transparent 65%);
44
+ outline-offset: 2px;
45
+ }
46
+
47
+ .room-platform-button:disabled {
48
+ cursor: not-allowed;
49
+ opacity: 0.55;
50
+ }
51
+
52
+ .room-platform-button--default {
53
+ background: var(--room-platform-navy);
54
+ color: #fff;
55
+ }
56
+
57
+ .room-platform-button--quiet {
58
+ background: #edf2f7;
59
+ color: var(--room-platform-navy);
60
+ }
61
+
62
+ .room-platform-button--danger {
63
+ background: #fff1f2;
64
+ color: #b42318;
65
+ }
66
+
67
+ .room-platform-shell {
68
+ background: #020617;
69
+ color: #fff;
70
+ display: flex;
71
+ flex: 1;
72
+ flex-direction: column;
73
+ min-height: 0;
74
+ min-width: 0;
75
+ overflow: hidden;
76
+ }
77
+
78
+ .room-platform-shell-top-bar--hidden {
79
+ display: none;
80
+ }
81
+
82
+ .room-platform-shell-body {
83
+ display: grid;
84
+ flex: 1;
85
+ grid-template-columns: minmax(0, 1fr);
86
+ min-height: 0;
87
+ position: relative;
88
+ }
89
+
90
+ .room-platform-shell-body--sidebar {
91
+ grid-template-columns: minmax(0, 1fr) minmax(16.25rem, 18.75rem);
92
+ }
93
+
94
+ .room-platform-shell-main {
95
+ display: flex;
96
+ min-height: 0;
97
+ min-width: 0;
98
+ overflow: hidden;
99
+ position: relative;
100
+ }
101
+
102
+ .room-platform-shell-sidebar {
103
+ display: flex;
104
+ min-height: 0;
105
+ position: relative;
106
+ width: 100%;
107
+ }
108
+
109
+ .room-platform-shell-sidebar-content {
110
+ flex: 1;
111
+ min-height: 0;
112
+ overflow: hidden;
113
+ }
114
+
115
+ .room-platform-shell-sidebar-open,
116
+ .room-platform-shell-sidebar-close {
117
+ position: absolute;
118
+ z-index: 40;
119
+ }
120
+
121
+ .room-platform-shell-sidebar-open {
122
+ right: 1rem;
123
+ top: 1rem;
124
+ }
125
+
126
+ .room-platform-shell-sidebar-close {
127
+ left: 0;
128
+ top: 0.75rem;
129
+ transform: translateX(-100%);
130
+ }
131
+
132
+ .room-platform-top-bar {
133
+ align-items: center;
134
+ background: #0f172a;
135
+ border-bottom: 1px solid rgb(255 255 255 / 10%);
136
+ color: #fff;
137
+ display: flex;
138
+ flex-wrap: wrap;
139
+ gap: 0.75rem;
140
+ justify-content: space-between;
141
+ min-height: 4.5rem;
142
+ padding: 0.75rem 1rem;
143
+ }
144
+
145
+ .room-platform-top-bar h1,
146
+ .room-platform-top-bar p {
147
+ margin: 0;
148
+ }
149
+
150
+ .room-platform-top-bar h1 {
151
+ color: #fff;
152
+ font-size: 1.125rem;
153
+ }
154
+
155
+ .room-platform-eyebrow {
156
+ color: #cbd5e1;
157
+ font-size: 0.75rem;
158
+ font-weight: 600;
159
+ text-transform: uppercase;
160
+ }
161
+
162
+ .room-platform-top-bar-heading,
163
+ .room-platform-top-bar-trailing {
164
+ align-items: center;
165
+ display: flex;
166
+ flex-wrap: wrap;
167
+ gap: 0.5rem;
168
+ }
169
+
170
+ .room-platform-top-bar-trailing {
171
+ justify-content: flex-end;
172
+ }
173
+
174
+ .room-platform-media-controls {
175
+ align-items: center;
176
+ display: flex;
177
+ flex-wrap: wrap;
178
+ gap: 0.375rem;
179
+ }
180
+
181
+ .room-platform-media-controls .room-platform-button {
182
+ font-size: 0.8125rem;
183
+ }
184
+
185
+ .room-platform-status {
186
+ border-radius: 999px;
187
+ font-size: 0.8rem;
188
+ font-weight: 600;
189
+ padding: 0.25rem 0.625rem;
190
+ }
191
+
192
+ .room-platform-status[data-status='connected'] {
193
+ background: #dcfae6;
194
+ color: #166534;
195
+ }
196
+
197
+ .room-platform-status[data-status='error'] {
198
+ background: #fee2e2;
199
+ color: #b42318;
200
+ }
201
+
202
+ .room-platform-status[data-status='connecting'],
203
+ .room-platform-status[data-status='reconnecting'] {
204
+ background: #fff3d6;
205
+ color: #9a4f00;
206
+ }
207
+
208
+ .room-platform-main {
209
+ display: flex;
210
+ flex: 1;
211
+ gap: 1rem;
212
+ min-height: 0;
213
+ min-width: 0;
214
+ padding: 1rem;
215
+ position: relative;
216
+ }
217
+
218
+ .room-platform-stage-area {
219
+ flex: 1;
220
+ min-height: 26rem;
221
+ min-width: 0;
222
+ position: relative;
223
+ }
224
+
225
+ .room-platform-stage {
226
+ align-items: center;
227
+ background: linear-gradient(135deg, #1e2a5b, #3c4b89);
228
+ color: #fff;
229
+ display: flex;
230
+ height: 100%;
231
+ justify-content: center;
232
+ overflow: hidden;
233
+ padding: 1rem;
234
+ position: relative;
235
+ }
236
+
237
+ .room-platform-stage-title {
238
+ font-size: 1.125rem;
239
+ font-weight: 700;
240
+ }
241
+
242
+ .room-platform-workspace-overlay {
243
+ align-items: center;
244
+ display: flex;
245
+ height: 100%;
246
+ justify-content: center;
247
+ overflow: auto;
248
+ width: 100%;
249
+ }
250
+
251
+ .room-platform-workspace-alongside {
252
+ min-width: 18rem;
253
+ width: 35%;
254
+ }
255
+
256
+ .room-platform-sidebar {
257
+ background: var(--room-platform-surface);
258
+ border: 1px solid var(--room-platform-border);
259
+ border-radius: 8px;
260
+ min-width: 0;
261
+ overflow: hidden;
262
+ width: 100%;
263
+ }
264
+
265
+ .room-platform-control-anchor {
266
+ align-items: stretch;
267
+ display: flex;
268
+ flex: 1;
269
+ justify-content: center;
270
+ min-height: 0;
271
+ min-width: 0;
272
+ overflow: hidden;
273
+ position: relative;
274
+ }
275
+
276
+ .room-platform-control-bar {
277
+ bottom: 0;
278
+ display: flex;
279
+ justify-content: center;
280
+ left: 0;
281
+ margin: auto;
282
+ padding: 0 0.75rem 0.75rem;
283
+ position: absolute;
284
+ right: 0;
285
+ transition: transform 200ms ease;
286
+ width: fit-content;
287
+ z-index: 40;
288
+ }
289
+
290
+ .room-platform-control-bar--hidden {
291
+ transform: translateY(calc(100% - 0.75rem));
292
+ }
293
+
294
+ .room-platform-control-reveal {
295
+ bottom: 0.25rem;
296
+ left: 50%;
297
+ position: absolute;
298
+ transform: translateX(-50%);
299
+ z-index: 30;
300
+ }
301
+
302
+ .room-platform-side-media {
303
+ display: grid;
304
+ gap: 0.75rem;
305
+ padding: 0.75rem;
306
+ }
307
+
308
+ .room-platform-video-tile {
309
+ background: #0f172a;
310
+ border-radius: 8px;
311
+ color: #fff;
312
+ min-height: 0;
313
+ overflow: hidden;
314
+ position: relative;
315
+ width: 100%;
316
+ }
317
+
318
+ .room-platform-video-tile--preview,
319
+ .room-platform-video-tile--active-speaker {
320
+ aspect-ratio: 16 / 9;
321
+ }
322
+
323
+ .room-platform-video-tile--stage,
324
+ .room-platform-video-tile--overlay {
325
+ height: 100%;
326
+ }
327
+
328
+ .room-platform-video-tile-media {
329
+ display: block;
330
+ height: 100%;
331
+ object-fit: cover;
332
+ width: 100%;
333
+ }
334
+
335
+ .room-platform-video-tile--stage .room-platform-video-tile-media {
336
+ object-fit: contain;
337
+ }
338
+
339
+ .room-platform-video-tile-media--mirrored {
340
+ transform: scaleX(-1);
341
+ }
342
+
343
+ .room-platform-video-tile-label {
344
+ background: rgb(15 23 42 / 75%);
345
+ border-radius: 999px;
346
+ bottom: 0.5rem;
347
+ font-size: 0.75rem;
348
+ font-weight: 700;
349
+ left: 0.5rem;
350
+ max-width: calc(100% - 1rem);
351
+ overflow: hidden;
352
+ padding: 0.25rem 0.5rem;
353
+ position: absolute;
354
+ text-overflow: ellipsis;
355
+ white-space: nowrap;
356
+ z-index: 15;
357
+ }
358
+
359
+ .room-platform-video-tile-empty {
360
+ align-items: center;
361
+ display: flex;
362
+ font-size: 0.8125rem;
363
+ height: 100%;
364
+ justify-content: center;
365
+ margin: 0;
366
+ min-height: 8rem;
367
+ padding: 1rem;
368
+ text-align: center;
369
+ }
370
+
371
+ .room-platform-tabs {
372
+ border-bottom: 1px solid var(--room-platform-border);
373
+ display: flex;
374
+ gap: 0.25rem;
375
+ overflow-x: auto;
376
+ padding: 0.5rem;
377
+ }
378
+
379
+ .room-platform-tab {
380
+ background: transparent;
381
+ border: 0;
382
+ border-radius: 6px;
383
+ color: #475569;
384
+ cursor: pointer;
385
+ font: inherit;
386
+ font-size: 0.875rem;
387
+ padding: 0.4rem 0.6rem;
388
+ white-space: nowrap;
389
+ }
390
+
391
+ .room-platform-tab[aria-selected='true'] {
392
+ background: #e9edf9;
393
+ color: var(--room-platform-navy);
394
+ font-weight: 700;
395
+ }
396
+
397
+ .room-platform-tab-panel {
398
+ padding: 0.75rem;
399
+ }
400
+
401
+ .room-platform-participant-list {
402
+ display: grid;
403
+ gap: 0.5rem;
404
+ }
405
+
406
+ .room-platform-participant-row {
407
+ align-items: center;
408
+ display: flex;
409
+ gap: 0.5rem;
410
+ justify-content: space-between;
411
+ padding: 0.625rem;
412
+ }
413
+
414
+ .room-platform-participant-name,
415
+ .room-platform-participant-subtitle {
416
+ margin: 0;
417
+ }
418
+
419
+ .room-platform-participant-name {
420
+ font-size: 0.875rem;
421
+ font-weight: 700;
422
+ }
423
+
424
+ .room-platform-participant-subtitle {
425
+ color: #64748b;
426
+ font-size: 0.75rem;
427
+ }
428
+
429
+ .room-platform-participant-row-trailing,
430
+ .room-platform-participant-actions {
431
+ align-items: center;
432
+ display: flex;
433
+ flex-wrap: wrap;
434
+ gap: 0.375rem;
435
+ justify-content: flex-end;
436
+ }
437
+
438
+ .room-platform-participant-actions .room-platform-button {
439
+ font-size: 0.75rem;
440
+ min-height: 1.75rem;
441
+ padding: 0.25rem 0.5rem;
442
+ }
443
+
444
+ .room-platform-action-error {
445
+ color: #b42318;
446
+ font-size: 0.8125rem;
447
+ margin: 0.5rem 0 0;
448
+ }
449
+
450
+ .room-platform-error {
451
+ color: #fca5a5;
452
+ font-size: 0.8125rem;
453
+ margin: 0.5rem 0 0;
454
+ }
455
+
456
+ .room-platform-empty {
457
+ color: #64748b;
458
+ font-size: 0.875rem;
459
+ margin: 0;
460
+ padding: 1rem 0;
461
+ text-align: center;
462
+ }
463
+
464
+ .room-platform-whiteboard {
465
+ height: 100%;
466
+ width: 100%;
467
+ }
468
+
469
+ .room-platform-surface-error {
470
+ align-items: center;
471
+ background: rgb(15 23 42 / 88%);
472
+ color: #fff;
473
+ display: flex;
474
+ height: 100%;
475
+ justify-content: center;
476
+ margin: 0;
477
+ padding: 1rem;
478
+ text-align: center;
479
+ width: 100%;
480
+ }
481
+
482
+ .room-platform-start-audio {
483
+ background: #242f62;
484
+ border: 0;
485
+ border-radius: 8px;
486
+ color: #fff;
487
+ cursor: pointer;
488
+ left: 50%;
489
+ padding: 0.625rem 1rem;
490
+ position: fixed;
491
+ top: 1rem;
492
+ transform: translateX(-50%);
493
+ z-index: 50;
494
+ }
495
+
496
+ .room-platform-start-audio:focus-visible {
497
+ outline: 3px solid #eb6619;
498
+ outline-offset: 2px;
499
+ }
500
+
501
+ .room-platform-stage-frame {
502
+ align-items: center;
503
+ background: #0f172a;
504
+ border-radius: 8px;
505
+ display: flex;
506
+ justify-content: center;
507
+ max-height: 100%;
508
+ max-width: 100%;
509
+ overflow: hidden;
510
+ position: relative;
511
+ width: 100%;
512
+ }
513
+
514
+ .room-platform-stage-frame > video {
515
+ display: block;
516
+ height: 100%;
517
+ object-fit: contain;
518
+ width: 100%;
519
+ }
520
+
521
+ .room-platform-stage-content {
522
+ inset: 0;
523
+ position: absolute;
524
+ z-index: 10;
525
+ }
526
+
527
+ .room-platform-stage-camera-overlay {
528
+ aspect-ratio: 16 / 9;
529
+ left: 1rem;
530
+ max-width: 40%;
531
+ overflow: hidden;
532
+ position: absolute;
533
+ top: 1rem;
534
+ width: 12rem;
535
+ z-index: 20;
536
+ }
537
+
538
+ .room-platform-stage-camera-overlay video {
539
+ height: 100%;
540
+ object-fit: cover;
541
+ width: 100%;
542
+ }
543
+
544
+ .room-platform-stage-status {
545
+ background: rgb(15 23 42 / 80%);
546
+ border-radius: 999px;
547
+ color: #dbeafe;
548
+ left: 50%;
549
+ margin: 0;
550
+ padding: 0.375rem 0.75rem;
551
+ position: absolute;
552
+ top: 1.5rem;
553
+ transform: translateX(-50%);
554
+ z-index: 30;
555
+ }
556
+
557
+ @media (max-width: 900px) {
558
+ .room-platform-stage-area {
559
+ min-height: 20rem;
560
+ }
561
+ }
562
+
563
+ @media (max-width: 767px) {
564
+ .room-platform-shell-body {
565
+ grid-template-columns: 1fr;
566
+ grid-template-rows: minmax(15rem, 45dvh) minmax(0, 1fr);
567
+ }
568
+
569
+ .room-platform-shell-body > .room-platform-shell-main:only-child {
570
+ grid-row: 1 / -1;
571
+ }
572
+
573
+ .room-platform-shell-sidebar {
574
+ max-width: none;
575
+ }
576
+
577
+ .room-platform-top-bar {
578
+ align-items: flex-start;
579
+ flex-direction: column;
580
+ gap: 0.75rem;
581
+ }
582
+
583
+ .room-platform-top-bar-heading,
584
+ .room-platform-top-bar-trailing {
585
+ justify-content: flex-start;
586
+ width: 100%;
587
+ }
588
+
589
+ .room-platform-main {
590
+ flex-direction: column;
591
+ padding: 0.5rem;
592
+ }
593
+
594
+ .room-platform-workspace-alongside {
595
+ min-width: 0;
596
+ width: 100%;
597
+ }
598
+ }
@@ -0,0 +1,34 @@
1
+ import type { LocalVideoTrack } from 'livekit-client';
2
+ export type RoomPlatformCameraBackgroundUploadPreview = {
3
+ id: string;
4
+ name: string;
5
+ createdAt: string;
6
+ previewUrl: string;
7
+ };
8
+ export type RoomPlatformCameraBackgroundState = {
9
+ mode: 'none' | 'blur' | 'preset' | 'upload';
10
+ blurLevel: 'light' | 'strong';
11
+ presetId?: string;
12
+ uploadAssetId?: string;
13
+ isSupported: boolean;
14
+ isApplying: boolean;
15
+ error: string | null;
16
+ };
17
+ export type UseRoomPlatformCameraBackgroundInput = {
18
+ localVideoTrack: LocalVideoTrack | null;
19
+ };
20
+ export declare function useRoomPlatformCameraBackground({ localVideoTrack }: UseRoomPlatformCameraBackgroundInput): {
21
+ state: RoomPlatformCameraBackgroundState;
22
+ uploadItems: RoomPlatformCameraBackgroundUploadPreview[];
23
+ uploadPreviewUrl: string;
24
+ setBackgroundOff: () => Promise<void>;
25
+ setBlurLevel: (blurLevel: "light" | "strong") => Promise<void>;
26
+ setBlur: () => Promise<void>;
27
+ setPreset: (presetId: string) => Promise<void>;
28
+ selectUploaded: (uploadAssetId: string) => Promise<void>;
29
+ setUploaded: () => Promise<void>;
30
+ setUpload: (file: File) => Promise<void>;
31
+ removeUploaded: (uploadAssetId: string) => Promise<void>;
32
+ clearError: () => void;
33
+ };
34
+ export type RoomPlatformCameraBackgroundRuntime = ReturnType<typeof useRoomPlatformCameraBackground>;
@@ -0,0 +1,21 @@
1
+ export type UseRoomPlatformPrivateRoomControlActionsInput = {
2
+ canShareScreen: boolean;
3
+ isScreenSharing: boolean;
4
+ onStartScreenShare: () => Promise<void>;
5
+ onStopScreenShare: () => Promise<void>;
6
+ onEnd: () => Promise<void> | void;
7
+ onScreenSharingChange?: (isScreenSharing: boolean) => void;
8
+ setLocalScreenShareEnabled?: (enabled: boolean) => Promise<void>;
9
+ onEndingChange?: (isEnding: boolean) => void;
10
+ onEnded?: () => void;
11
+ };
12
+ export type UseRoomPlatformPrivateRoomControlActionsResult = {
13
+ isScreenSharing: boolean;
14
+ isScreenSharePending: boolean;
15
+ isEnding: boolean;
16
+ canToggleScreenShare: boolean;
17
+ startScreenShare: () => Promise<void>;
18
+ stopScreenShare: () => Promise<void>;
19
+ endPrivateRoom: () => Promise<void>;
20
+ };
21
+ export declare function useRoomPlatformPrivateRoomControlActions({ canShareScreen, isScreenSharing, onStartScreenShare, onStopScreenShare, onEnd, onScreenSharingChange, setLocalScreenShareEnabled, onEndingChange, onEnded, }: UseRoomPlatformPrivateRoomControlActionsInput): UseRoomPlatformPrivateRoomControlActionsResult;
@@ -0,0 +1,43 @@
1
+ import { type RoomPrivateRoomConnection, type RoomPrivateRoomState } from '@navi/feature-room-platform';
2
+ import type { RoomPlatformPrivateRoomStatusBannerProps, RoomPlatformPrivateRoomStatusBannerTone } from './room-platform-private-room-status-banner';
3
+ export type RoomPlatformPrivateRoomBannerState = Omit<RoomPlatformPrivateRoomStatusBannerProps, 'message'> & {
4
+ message: string;
5
+ tone?: RoomPlatformPrivateRoomStatusBannerTone;
6
+ };
7
+ export declare function getRoomPlatformPrivateRoomStatusBanner({ privateRoom, isCaller, canMountPrivateRoom, isAcceptingPrivateRoom, isEndingPrivateRoom, privateRoomReturnedNoticeId, }: {
8
+ privateRoom?: RoomPrivateRoomState;
9
+ isCaller: boolean;
10
+ canMountPrivateRoom: boolean;
11
+ isAcceptingPrivateRoom: boolean;
12
+ isEndingPrivateRoom: boolean;
13
+ privateRoomReturnedNoticeId?: string;
14
+ }): RoomPlatformPrivateRoomBannerState | undefined;
15
+ export type RoomPlatformPrivateRoomRuntimeState = {
16
+ actorExternalId?: string;
17
+ canMountPrivateRoom: boolean;
18
+ currentPrivateRoomOperation?: {
19
+ status: 'ringing' | 'active';
20
+ studentExternalActorId: string;
21
+ };
22
+ hasIncomingPrivateRoom: boolean;
23
+ isAcceptingPrivateRoom: boolean;
24
+ isCaller: boolean;
25
+ privateRoom?: RoomPrivateRoomState;
26
+ privateRoomConnection?: RoomPrivateRoomConnection;
27
+ privateRoomReturnedNoticeId?: string;
28
+ privateRoomStatusBanner?: RoomPlatformPrivateRoomBannerState;
29
+ acceptPrivateRoom: () => Promise<void>;
30
+ declinePrivateRoom: () => Promise<void>;
31
+ cancelPrivateRoom: () => Promise<void>;
32
+ endPrivateRoom: () => Promise<void>;
33
+ startPrivateScreenShare: () => Promise<void>;
34
+ stopPrivateScreenShare: () => Promise<void>;
35
+ markPrivateRoomEnded: () => void;
36
+ setIsAcceptingPrivateRoom: (value: boolean) => void;
37
+ };
38
+ export declare function useRoomPlatformPrivateRoom(): RoomPlatformPrivateRoomRuntimeState;
39
+ export declare function useRoomPlatformPrivateRoomPendingState(): {
40
+ acceptPending: boolean;
41
+ declinePending: boolean;
42
+ endPending: boolean;
43
+ };
@@ -0,0 +1,2 @@
1
+ import type { RoomPlatformPrimaryCameraSelector } from './room-platform-stage-selection';
2
+ export declare function useRoomPlatformStage(primaryCameraSelector?: RoomPlatformPrimaryCameraSelector): import("./room-platform-stage-selection").RoomPlatformStageModel;
@@ -0,0 +1,2 @@
1
+ import type { RoomParticipantPresence } from './room-platform-types';
2
+ export declare function useRoomPresence(): RoomParticipantPresence[];