@ai-matrx/meet 0.7.84 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/README.md +13 -7
- package/dist/collab-Bss-_Jfp.d.cts +805 -0
- package/dist/collab-Bss-_Jfp.d.ts +805 -0
- package/dist/components-BOUmOiPj.d.cts +240 -0
- package/dist/components-BmgstFx_.d.ts +240 -0
- package/dist/core.cjs +6724 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +3048 -0
- package/dist/core.d.ts +3048 -0
- package/dist/core.js +6691 -0
- package/dist/core.js.map +1 -0
- package/dist/index.cjs +81 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -3780
- package/dist/index.d.ts +5 -3780
- package/dist/index.js +81 -15
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +468 -674
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +77 -365
- package/dist/react.d.ts +77 -365
- package/dist/react.js +412 -629
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +4636 -0
- package/dist/skins/meet.cjs.map +1 -0
- package/dist/skins/meet.d.cts +113 -0
- package/dist/skins/meet.d.ts +113 -0
- package/dist/skins/meet.js +4617 -0
- package/dist/skins/meet.js.map +1 -0
- package/package.json +28 -6
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { M as MeetingRecord, P as ParticipantIdentity, R as RoomName, a as MeetParticipant } from './collab-Bss-_Jfp.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* THE PRODUCT UI (R6/R7). Not a headless kernel with a note telling the host to
|
|
6
|
+
* build the rest — the whole meeting surface ships here, because per THE
|
|
7
|
+
* ALL-INCLUSIVE LAW a package that withholds its components withholds its
|
|
8
|
+
* product.
|
|
9
|
+
*
|
|
10
|
+
* The bar: FaceTime and Zoom raised by Apple's design team. Concretely, and
|
|
11
|
+
* every one of these is enforced by the stylesheet or the canary:
|
|
12
|
+
*
|
|
13
|
+
* - `dvh`, never `vh` — iOS Safari's `vh` includes the collapsing toolbar, so a
|
|
14
|
+
* `100vh` stage puts the control bar under the browser chrome.
|
|
15
|
+
* - Safe-area insets on the control bar, so the hang-up button is not under the
|
|
16
|
+
* home indicator.
|
|
17
|
+
* - 44px touch targets, and 16px input text (anything smaller zooms iOS Safari
|
|
18
|
+
* on focus, which in a meeting looks like the app broke).
|
|
19
|
+
* - Semantic tokens only. There is not one hardcoded color in the package.
|
|
20
|
+
* - Real loading states and no dead ends: a control the actor cannot use is
|
|
21
|
+
* ABSENT, never disabled-looking, and never a button that will be refused.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
declare function Avatar({ name, url, size, }: {
|
|
25
|
+
name: string;
|
|
26
|
+
url?: string | null;
|
|
27
|
+
size?: number;
|
|
28
|
+
}): ReactNode;
|
|
29
|
+
declare function ControlButton({ label, active, danger, onClick, children, }: {
|
|
30
|
+
label: string;
|
|
31
|
+
active?: boolean;
|
|
32
|
+
danger?: boolean;
|
|
33
|
+
onClick: () => void;
|
|
34
|
+
children: ReactNode;
|
|
35
|
+
}): ReactNode;
|
|
36
|
+
/**
|
|
37
|
+
* The recording indicator. Rendered for EVERY participant, guests included —
|
|
38
|
+
* there is no prop that hides it (R5). Consent is a property of the package.
|
|
39
|
+
*/
|
|
40
|
+
declare function RecordingIndicator(): ReactNode;
|
|
41
|
+
declare function ConnectionDot({ quality }: {
|
|
42
|
+
quality: string;
|
|
43
|
+
}): ReactNode;
|
|
44
|
+
declare function ParticipantTile({ participant, featured, }: {
|
|
45
|
+
participant: MeetParticipant;
|
|
46
|
+
featured?: boolean;
|
|
47
|
+
}): ReactNode;
|
|
48
|
+
/**
|
|
49
|
+
* CONNECTION QUALITY, always legible (Meet wave 2). Four bars, like every phone:
|
|
50
|
+
* a stable good connection is quiet (the bars are there, faint), and a poor or
|
|
51
|
+
* lost one is loud. `unknown` draws nothing — a guess is not a reading.
|
|
52
|
+
*/
|
|
53
|
+
declare function QualityBars({ quality }: {
|
|
54
|
+
quality: string;
|
|
55
|
+
}): ReactNode;
|
|
56
|
+
declare function Stage({ pageSize }: {
|
|
57
|
+
pageSize?: number;
|
|
58
|
+
}): ReactNode;
|
|
59
|
+
/**
|
|
60
|
+
* THE CONTROL BAR — one row, the same in the package's room and in any host
|
|
61
|
+
* layout that composes it (the Board). Everything a person does in a meeting is
|
|
62
|
+
* reachable from here or from the panels it opens, and every keyboard shortcut
|
|
63
|
+
* is bound here, so a layout that renders this bar has all of it.
|
|
64
|
+
*/
|
|
65
|
+
declare function ControlBar({ onLeave }: {
|
|
66
|
+
onLeave?: () => void;
|
|
67
|
+
}): ReactNode;
|
|
68
|
+
/**
|
|
69
|
+
* A small floating surface anchored to its control. Escape and an outside click
|
|
70
|
+
* close it. It is FIXED-positioned from the anchor's rectangle, because the
|
|
71
|
+
* controls it hangs off live inside tiles that clip (`overflow: hidden`) and
|
|
72
|
+
* inside a Board that pans — an absolutely positioned menu would be cut in half.
|
|
73
|
+
*/
|
|
74
|
+
declare function Popover({ label, onClose, children, placement, }: {
|
|
75
|
+
label: string;
|
|
76
|
+
onClose: () => void;
|
|
77
|
+
children: ReactNode;
|
|
78
|
+
placement?: "up" | "down";
|
|
79
|
+
}): ReactNode;
|
|
80
|
+
declare function MenuItem({ onSelect, danger, children, }: {
|
|
81
|
+
onSelect: () => void;
|
|
82
|
+
danger?: boolean;
|
|
83
|
+
children: ReactNode;
|
|
84
|
+
}): ReactNode;
|
|
85
|
+
/** A transient sentence above the control bar. Stays 4 s, or until dismissed. */
|
|
86
|
+
declare function Toast({ text, failed, onDone }: {
|
|
87
|
+
text: string;
|
|
88
|
+
failed: boolean;
|
|
89
|
+
onDone: () => void;
|
|
90
|
+
}): ReactNode;
|
|
91
|
+
/**
|
|
92
|
+
* WHAT FLOATS OVER THE MEETING, in every layout (Meet wave 2): the reactions
|
|
93
|
+
* everyone sends, and what a host just did to THIS person — "the host is asking
|
|
94
|
+
* you to unmute" with the Unmute button right there, which is the whole point.
|
|
95
|
+
*/
|
|
96
|
+
declare function MeetingOverlays(): ReactNode;
|
|
97
|
+
/** Every shortcut, on one sheet. Opened by Shift+? or from More options. */
|
|
98
|
+
declare function ShortcutsSheet({ onClose }: {
|
|
99
|
+
onClose: () => void;
|
|
100
|
+
}): ReactNode;
|
|
101
|
+
declare function PanelShell({ title, onClose, children, }: {
|
|
102
|
+
title: string;
|
|
103
|
+
onClose: () => void;
|
|
104
|
+
children: ReactNode;
|
|
105
|
+
}): ReactNode;
|
|
106
|
+
/**
|
|
107
|
+
* IN-MEETING CHAT (Meet wave 2). A message to everyone is SAVED with the
|
|
108
|
+
* meeting — a late joiner scrolls up and reads it, and it is part of the record.
|
|
109
|
+
* A private message goes to one person only and is never saved; the composer
|
|
110
|
+
* says which of the two you are about to send.
|
|
111
|
+
*/
|
|
112
|
+
declare function ChatPanel({ onClose, to, onTo, }: {
|
|
113
|
+
onClose: () => void;
|
|
114
|
+
to?: ParticipantIdentity | null;
|
|
115
|
+
onTo?: (identity: ParticipantIdentity | null) => void;
|
|
116
|
+
}): ReactNode;
|
|
117
|
+
declare function PeoplePanel({ onClose, onMessage, }: {
|
|
118
|
+
onClose: () => void;
|
|
119
|
+
onMessage?: (identity: ParticipantIdentity) => void;
|
|
120
|
+
}): ReactNode;
|
|
121
|
+
/**
|
|
122
|
+
* EVERYTHING YOU CAN DO ABOUT ONE PERSON (Meet wave 2), in one menu — on their
|
|
123
|
+
* tile and on their People row. An item appears only when it would be honoured:
|
|
124
|
+
* the rank ladder decides moderation (a co-host never sees "Remove" on the host),
|
|
125
|
+
* only the host sees "Make host", and nobody sees a control that the server
|
|
126
|
+
* would refuse. Removing someone and handing the meeting over NAME THEIR
|
|
127
|
+
* CONSEQUENCE first, inline — never a browser dialog.
|
|
128
|
+
*/
|
|
129
|
+
declare function PersonMenu({ participant, onClose, onMessage, placement, }: {
|
|
130
|
+
participant: MeetParticipant;
|
|
131
|
+
onClose: () => void;
|
|
132
|
+
onMessage?: (identity: ParticipantIdentity) => void;
|
|
133
|
+
placement?: "up" | "down";
|
|
134
|
+
}): ReactNode;
|
|
135
|
+
/**
|
|
136
|
+
* AUDIO, VIDEO AND EFFECTS (Meet wave 2) — the devices in use, a live
|
|
137
|
+
* microphone level, a speaker test, noise suppression and the camera
|
|
138
|
+
* background. Every change applies to the live meeting at once and is
|
|
139
|
+
* remembered in this browser.
|
|
140
|
+
*/
|
|
141
|
+
declare function SettingsPanel({ onClose }: {
|
|
142
|
+
onClose: () => void;
|
|
143
|
+
}): ReactNode;
|
|
144
|
+
/** The waiting room. Rendered for hosts only — a participant sees nothing. */
|
|
145
|
+
declare function LobbyPanel(): ReactNode;
|
|
146
|
+
/**
|
|
147
|
+
* THE MEETING ASSISTANT (R4). The note-taker's state, what the meeting has
|
|
148
|
+
* decided so far, the wrap-up, and a question box whose answer arrives token by
|
|
149
|
+
* token.
|
|
150
|
+
*
|
|
151
|
+
* Nothing on this panel is computed here: notes, decisions and action items are
|
|
152
|
+
* durable rows delivered by Postgres Changes, and the answer is streamed from
|
|
153
|
+
* `/intelligence/ask`, which builds it from those same rows. The captions this
|
|
154
|
+
* client can see are never sent anywhere (D16).
|
|
155
|
+
*/
|
|
156
|
+
declare function AiPanel({ onClose }: {
|
|
157
|
+
onClose: () => void;
|
|
158
|
+
}): ReactNode;
|
|
159
|
+
/**
|
|
160
|
+
* LIVE CAPTIONS. The last few lines, over the stage, for anyone who reads
|
|
161
|
+
* faster than they hear.
|
|
162
|
+
*
|
|
163
|
+
* They are HINTS (D16) — the durable segment replaces the line it captioned as
|
|
164
|
+
* soon as the row lands — so an unsettled line renders differently from a
|
|
165
|
+
* settled one and nothing downstream ever reads this list.
|
|
166
|
+
*/
|
|
167
|
+
declare function Captions({ lines }: {
|
|
168
|
+
lines?: number;
|
|
169
|
+
}): ReactNode;
|
|
170
|
+
/**
|
|
171
|
+
* CONSENT IS NOT A PROP (README rule 8, D10).
|
|
172
|
+
*
|
|
173
|
+
* Whenever an agent participant is in the room, EVERY participant sees this —
|
|
174
|
+
* host, member and guest alike. There is no prop that hides it and no host code
|
|
175
|
+
* involved: through 0.2.1 the first real consumer had to write this banner
|
|
176
|
+
* itself by reading `isAgent` off the roster, which is exactly the massage C22
|
|
177
|
+
* forbids.
|
|
178
|
+
*/
|
|
179
|
+
declare function ConsentNotice(): ReactNode;
|
|
180
|
+
/**
|
|
181
|
+
* LISTEN-ONLY ATTENDANCE, said out loud. Shown whenever the local participant
|
|
182
|
+
* is in the room publishing no microphone — whether they chose that or the
|
|
183
|
+
* browser refused. When it was refused, the browser's own reason and the remedy
|
|
184
|
+
* are shown too, because "others can't hear you" without "and here is why"
|
|
185
|
+
* leaves someone clicking a mute button that cannot work.
|
|
186
|
+
*/
|
|
187
|
+
declare function AttendanceNotice(): ReactNode;
|
|
188
|
+
declare function PreJoin(props: {
|
|
189
|
+
roomName: RoomName;
|
|
190
|
+
meetingId?: string;
|
|
191
|
+
slug?: string;
|
|
192
|
+
onJoined?: () => void;
|
|
193
|
+
}): ReactNode;
|
|
194
|
+
/**
|
|
195
|
+
* THE MEET SKIN'S ROOM (v0) — today's pre-join, waiting room and live room,
|
|
196
|
+
* chosen by the store's phase. `<MeetingSkinRoot>` (in `@ai-matrx/meet/react`)
|
|
197
|
+
* owns everything that is not a look: the inert guard, the observation root,
|
|
198
|
+
* watching the room and the meeting, the resolved-row seed and the ended
|
|
199
|
+
* meeting's record. This renders only once a runtime exists and the meeting
|
|
200
|
+
* is live or joinable.
|
|
201
|
+
*/
|
|
202
|
+
declare function MeetSkinRoom({ roomName, meetingId, slug, onLeave, headerControls, }: {
|
|
203
|
+
roomName: RoomName;
|
|
204
|
+
meetingId?: string;
|
|
205
|
+
slug?: string;
|
|
206
|
+
onLeave?: () => void;
|
|
207
|
+
/**
|
|
208
|
+
* A HOST-PROVIDED control for the in-meeting header — rendered in the header
|
|
209
|
+
* row of the live room only. The package never inspects it.
|
|
210
|
+
*/
|
|
211
|
+
headerControls?: ReactNode;
|
|
212
|
+
}): ReactNode;
|
|
213
|
+
declare function HostMenu(): ReactNode;
|
|
214
|
+
/** Reactions floating over the stage. Expired by the store, not by hope. */
|
|
215
|
+
declare function ReactionOverlay({ reactions, }: {
|
|
216
|
+
reactions: readonly {
|
|
217
|
+
id: string;
|
|
218
|
+
emoji: string;
|
|
219
|
+
}[];
|
|
220
|
+
}): ReactNode;
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* WHAT GUESTS MAY READ OF THIS MEETING — the host's control (MRF-1).
|
|
224
|
+
*
|
|
225
|
+
* 🚨 **HOST-ONLY, AND ABSENT FOR EVERYONE ELSE.** Not greyed out, not present
|
|
226
|
+
* with a tooltip: a participant has no control here at all, because a control
|
|
227
|
+
* that exists only to be refused is the dead-end class this package does not
|
|
228
|
+
* ship (D11-style honesty, same posture as `PersonHostActions`).
|
|
229
|
+
*
|
|
230
|
+
* It is the third rung of the ladder Arman ruled on 2026-09-12 — the system's
|
|
231
|
+
* default, the organization's setting, and this meeting's. "Use my
|
|
232
|
+
* organization's setting" is shown WITH what that resolves to, because a label
|
|
233
|
+
* that does not say what the organization chose makes the host guess about
|
|
234
|
+
* other people's words.
|
|
235
|
+
*/
|
|
236
|
+
declare function GuestRecordAccessControl({ meeting, }: {
|
|
237
|
+
meeting: MeetingRecord;
|
|
238
|
+
}): ReactNode;
|
|
239
|
+
|
|
240
|
+
export { AiPanel as A, Captions as C, GuestRecordAccessControl as G, HostMenu as H, LobbyPanel as L, MeetSkinRoom as M, PanelShell as P, QualityBars as Q, ReactionOverlay as R, SettingsPanel as S, Toast as T, AttendanceNotice as a, Avatar as b, ChatPanel as c, ConnectionDot as d, ConsentNotice as e, ControlBar as f, ControlButton as g, MeetingOverlays as h, MenuItem as i, ParticipantTile as j, PeoplePanel as k, PersonMenu as l, Popover as m, PreJoin as n, RecordingIndicator as o, ShortcutsSheet as p, Stage as q };
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { M as MeetingRecord, P as ParticipantIdentity, R as RoomName, a as MeetParticipant } from './collab-Bss-_Jfp.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* THE PRODUCT UI (R6/R7). Not a headless kernel with a note telling the host to
|
|
6
|
+
* build the rest — the whole meeting surface ships here, because per THE
|
|
7
|
+
* ALL-INCLUSIVE LAW a package that withholds its components withholds its
|
|
8
|
+
* product.
|
|
9
|
+
*
|
|
10
|
+
* The bar: FaceTime and Zoom raised by Apple's design team. Concretely, and
|
|
11
|
+
* every one of these is enforced by the stylesheet or the canary:
|
|
12
|
+
*
|
|
13
|
+
* - `dvh`, never `vh` — iOS Safari's `vh` includes the collapsing toolbar, so a
|
|
14
|
+
* `100vh` stage puts the control bar under the browser chrome.
|
|
15
|
+
* - Safe-area insets on the control bar, so the hang-up button is not under the
|
|
16
|
+
* home indicator.
|
|
17
|
+
* - 44px touch targets, and 16px input text (anything smaller zooms iOS Safari
|
|
18
|
+
* on focus, which in a meeting looks like the app broke).
|
|
19
|
+
* - Semantic tokens only. There is not one hardcoded color in the package.
|
|
20
|
+
* - Real loading states and no dead ends: a control the actor cannot use is
|
|
21
|
+
* ABSENT, never disabled-looking, and never a button that will be refused.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
declare function Avatar({ name, url, size, }: {
|
|
25
|
+
name: string;
|
|
26
|
+
url?: string | null;
|
|
27
|
+
size?: number;
|
|
28
|
+
}): ReactNode;
|
|
29
|
+
declare function ControlButton({ label, active, danger, onClick, children, }: {
|
|
30
|
+
label: string;
|
|
31
|
+
active?: boolean;
|
|
32
|
+
danger?: boolean;
|
|
33
|
+
onClick: () => void;
|
|
34
|
+
children: ReactNode;
|
|
35
|
+
}): ReactNode;
|
|
36
|
+
/**
|
|
37
|
+
* The recording indicator. Rendered for EVERY participant, guests included —
|
|
38
|
+
* there is no prop that hides it (R5). Consent is a property of the package.
|
|
39
|
+
*/
|
|
40
|
+
declare function RecordingIndicator(): ReactNode;
|
|
41
|
+
declare function ConnectionDot({ quality }: {
|
|
42
|
+
quality: string;
|
|
43
|
+
}): ReactNode;
|
|
44
|
+
declare function ParticipantTile({ participant, featured, }: {
|
|
45
|
+
participant: MeetParticipant;
|
|
46
|
+
featured?: boolean;
|
|
47
|
+
}): ReactNode;
|
|
48
|
+
/**
|
|
49
|
+
* CONNECTION QUALITY, always legible (Meet wave 2). Four bars, like every phone:
|
|
50
|
+
* a stable good connection is quiet (the bars are there, faint), and a poor or
|
|
51
|
+
* lost one is loud. `unknown` draws nothing — a guess is not a reading.
|
|
52
|
+
*/
|
|
53
|
+
declare function QualityBars({ quality }: {
|
|
54
|
+
quality: string;
|
|
55
|
+
}): ReactNode;
|
|
56
|
+
declare function Stage({ pageSize }: {
|
|
57
|
+
pageSize?: number;
|
|
58
|
+
}): ReactNode;
|
|
59
|
+
/**
|
|
60
|
+
* THE CONTROL BAR — one row, the same in the package's room and in any host
|
|
61
|
+
* layout that composes it (the Board). Everything a person does in a meeting is
|
|
62
|
+
* reachable from here or from the panels it opens, and every keyboard shortcut
|
|
63
|
+
* is bound here, so a layout that renders this bar has all of it.
|
|
64
|
+
*/
|
|
65
|
+
declare function ControlBar({ onLeave }: {
|
|
66
|
+
onLeave?: () => void;
|
|
67
|
+
}): ReactNode;
|
|
68
|
+
/**
|
|
69
|
+
* A small floating surface anchored to its control. Escape and an outside click
|
|
70
|
+
* close it. It is FIXED-positioned from the anchor's rectangle, because the
|
|
71
|
+
* controls it hangs off live inside tiles that clip (`overflow: hidden`) and
|
|
72
|
+
* inside a Board that pans — an absolutely positioned menu would be cut in half.
|
|
73
|
+
*/
|
|
74
|
+
declare function Popover({ label, onClose, children, placement, }: {
|
|
75
|
+
label: string;
|
|
76
|
+
onClose: () => void;
|
|
77
|
+
children: ReactNode;
|
|
78
|
+
placement?: "up" | "down";
|
|
79
|
+
}): ReactNode;
|
|
80
|
+
declare function MenuItem({ onSelect, danger, children, }: {
|
|
81
|
+
onSelect: () => void;
|
|
82
|
+
danger?: boolean;
|
|
83
|
+
children: ReactNode;
|
|
84
|
+
}): ReactNode;
|
|
85
|
+
/** A transient sentence above the control bar. Stays 4 s, or until dismissed. */
|
|
86
|
+
declare function Toast({ text, failed, onDone }: {
|
|
87
|
+
text: string;
|
|
88
|
+
failed: boolean;
|
|
89
|
+
onDone: () => void;
|
|
90
|
+
}): ReactNode;
|
|
91
|
+
/**
|
|
92
|
+
* WHAT FLOATS OVER THE MEETING, in every layout (Meet wave 2): the reactions
|
|
93
|
+
* everyone sends, and what a host just did to THIS person — "the host is asking
|
|
94
|
+
* you to unmute" with the Unmute button right there, which is the whole point.
|
|
95
|
+
*/
|
|
96
|
+
declare function MeetingOverlays(): ReactNode;
|
|
97
|
+
/** Every shortcut, on one sheet. Opened by Shift+? or from More options. */
|
|
98
|
+
declare function ShortcutsSheet({ onClose }: {
|
|
99
|
+
onClose: () => void;
|
|
100
|
+
}): ReactNode;
|
|
101
|
+
declare function PanelShell({ title, onClose, children, }: {
|
|
102
|
+
title: string;
|
|
103
|
+
onClose: () => void;
|
|
104
|
+
children: ReactNode;
|
|
105
|
+
}): ReactNode;
|
|
106
|
+
/**
|
|
107
|
+
* IN-MEETING CHAT (Meet wave 2). A message to everyone is SAVED with the
|
|
108
|
+
* meeting — a late joiner scrolls up and reads it, and it is part of the record.
|
|
109
|
+
* A private message goes to one person only and is never saved; the composer
|
|
110
|
+
* says which of the two you are about to send.
|
|
111
|
+
*/
|
|
112
|
+
declare function ChatPanel({ onClose, to, onTo, }: {
|
|
113
|
+
onClose: () => void;
|
|
114
|
+
to?: ParticipantIdentity | null;
|
|
115
|
+
onTo?: (identity: ParticipantIdentity | null) => void;
|
|
116
|
+
}): ReactNode;
|
|
117
|
+
declare function PeoplePanel({ onClose, onMessage, }: {
|
|
118
|
+
onClose: () => void;
|
|
119
|
+
onMessage?: (identity: ParticipantIdentity) => void;
|
|
120
|
+
}): ReactNode;
|
|
121
|
+
/**
|
|
122
|
+
* EVERYTHING YOU CAN DO ABOUT ONE PERSON (Meet wave 2), in one menu — on their
|
|
123
|
+
* tile and on their People row. An item appears only when it would be honoured:
|
|
124
|
+
* the rank ladder decides moderation (a co-host never sees "Remove" on the host),
|
|
125
|
+
* only the host sees "Make host", and nobody sees a control that the server
|
|
126
|
+
* would refuse. Removing someone and handing the meeting over NAME THEIR
|
|
127
|
+
* CONSEQUENCE first, inline — never a browser dialog.
|
|
128
|
+
*/
|
|
129
|
+
declare function PersonMenu({ participant, onClose, onMessage, placement, }: {
|
|
130
|
+
participant: MeetParticipant;
|
|
131
|
+
onClose: () => void;
|
|
132
|
+
onMessage?: (identity: ParticipantIdentity) => void;
|
|
133
|
+
placement?: "up" | "down";
|
|
134
|
+
}): ReactNode;
|
|
135
|
+
/**
|
|
136
|
+
* AUDIO, VIDEO AND EFFECTS (Meet wave 2) — the devices in use, a live
|
|
137
|
+
* microphone level, a speaker test, noise suppression and the camera
|
|
138
|
+
* background. Every change applies to the live meeting at once and is
|
|
139
|
+
* remembered in this browser.
|
|
140
|
+
*/
|
|
141
|
+
declare function SettingsPanel({ onClose }: {
|
|
142
|
+
onClose: () => void;
|
|
143
|
+
}): ReactNode;
|
|
144
|
+
/** The waiting room. Rendered for hosts only — a participant sees nothing. */
|
|
145
|
+
declare function LobbyPanel(): ReactNode;
|
|
146
|
+
/**
|
|
147
|
+
* THE MEETING ASSISTANT (R4). The note-taker's state, what the meeting has
|
|
148
|
+
* decided so far, the wrap-up, and a question box whose answer arrives token by
|
|
149
|
+
* token.
|
|
150
|
+
*
|
|
151
|
+
* Nothing on this panel is computed here: notes, decisions and action items are
|
|
152
|
+
* durable rows delivered by Postgres Changes, and the answer is streamed from
|
|
153
|
+
* `/intelligence/ask`, which builds it from those same rows. The captions this
|
|
154
|
+
* client can see are never sent anywhere (D16).
|
|
155
|
+
*/
|
|
156
|
+
declare function AiPanel({ onClose }: {
|
|
157
|
+
onClose: () => void;
|
|
158
|
+
}): ReactNode;
|
|
159
|
+
/**
|
|
160
|
+
* LIVE CAPTIONS. The last few lines, over the stage, for anyone who reads
|
|
161
|
+
* faster than they hear.
|
|
162
|
+
*
|
|
163
|
+
* They are HINTS (D16) — the durable segment replaces the line it captioned as
|
|
164
|
+
* soon as the row lands — so an unsettled line renders differently from a
|
|
165
|
+
* settled one and nothing downstream ever reads this list.
|
|
166
|
+
*/
|
|
167
|
+
declare function Captions({ lines }: {
|
|
168
|
+
lines?: number;
|
|
169
|
+
}): ReactNode;
|
|
170
|
+
/**
|
|
171
|
+
* CONSENT IS NOT A PROP (README rule 8, D10).
|
|
172
|
+
*
|
|
173
|
+
* Whenever an agent participant is in the room, EVERY participant sees this —
|
|
174
|
+
* host, member and guest alike. There is no prop that hides it and no host code
|
|
175
|
+
* involved: through 0.2.1 the first real consumer had to write this banner
|
|
176
|
+
* itself by reading `isAgent` off the roster, which is exactly the massage C22
|
|
177
|
+
* forbids.
|
|
178
|
+
*/
|
|
179
|
+
declare function ConsentNotice(): ReactNode;
|
|
180
|
+
/**
|
|
181
|
+
* LISTEN-ONLY ATTENDANCE, said out loud. Shown whenever the local participant
|
|
182
|
+
* is in the room publishing no microphone — whether they chose that or the
|
|
183
|
+
* browser refused. When it was refused, the browser's own reason and the remedy
|
|
184
|
+
* are shown too, because "others can't hear you" without "and here is why"
|
|
185
|
+
* leaves someone clicking a mute button that cannot work.
|
|
186
|
+
*/
|
|
187
|
+
declare function AttendanceNotice(): ReactNode;
|
|
188
|
+
declare function PreJoin(props: {
|
|
189
|
+
roomName: RoomName;
|
|
190
|
+
meetingId?: string;
|
|
191
|
+
slug?: string;
|
|
192
|
+
onJoined?: () => void;
|
|
193
|
+
}): ReactNode;
|
|
194
|
+
/**
|
|
195
|
+
* THE MEET SKIN'S ROOM (v0) — today's pre-join, waiting room and live room,
|
|
196
|
+
* chosen by the store's phase. `<MeetingSkinRoot>` (in `@ai-matrx/meet/react`)
|
|
197
|
+
* owns everything that is not a look: the inert guard, the observation root,
|
|
198
|
+
* watching the room and the meeting, the resolved-row seed and the ended
|
|
199
|
+
* meeting's record. This renders only once a runtime exists and the meeting
|
|
200
|
+
* is live or joinable.
|
|
201
|
+
*/
|
|
202
|
+
declare function MeetSkinRoom({ roomName, meetingId, slug, onLeave, headerControls, }: {
|
|
203
|
+
roomName: RoomName;
|
|
204
|
+
meetingId?: string;
|
|
205
|
+
slug?: string;
|
|
206
|
+
onLeave?: () => void;
|
|
207
|
+
/**
|
|
208
|
+
* A HOST-PROVIDED control for the in-meeting header — rendered in the header
|
|
209
|
+
* row of the live room only. The package never inspects it.
|
|
210
|
+
*/
|
|
211
|
+
headerControls?: ReactNode;
|
|
212
|
+
}): ReactNode;
|
|
213
|
+
declare function HostMenu(): ReactNode;
|
|
214
|
+
/** Reactions floating over the stage. Expired by the store, not by hope. */
|
|
215
|
+
declare function ReactionOverlay({ reactions, }: {
|
|
216
|
+
reactions: readonly {
|
|
217
|
+
id: string;
|
|
218
|
+
emoji: string;
|
|
219
|
+
}[];
|
|
220
|
+
}): ReactNode;
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* WHAT GUESTS MAY READ OF THIS MEETING — the host's control (MRF-1).
|
|
224
|
+
*
|
|
225
|
+
* 🚨 **HOST-ONLY, AND ABSENT FOR EVERYONE ELSE.** Not greyed out, not present
|
|
226
|
+
* with a tooltip: a participant has no control here at all, because a control
|
|
227
|
+
* that exists only to be refused is the dead-end class this package does not
|
|
228
|
+
* ship (D11-style honesty, same posture as `PersonHostActions`).
|
|
229
|
+
*
|
|
230
|
+
* It is the third rung of the ladder Arman ruled on 2026-09-12 — the system's
|
|
231
|
+
* default, the organization's setting, and this meeting's. "Use my
|
|
232
|
+
* organization's setting" is shown WITH what that resolves to, because a label
|
|
233
|
+
* that does not say what the organization chose makes the host guess about
|
|
234
|
+
* other people's words.
|
|
235
|
+
*/
|
|
236
|
+
declare function GuestRecordAccessControl({ meeting, }: {
|
|
237
|
+
meeting: MeetingRecord;
|
|
238
|
+
}): ReactNode;
|
|
239
|
+
|
|
240
|
+
export { AiPanel as A, Captions as C, GuestRecordAccessControl as G, HostMenu as H, LobbyPanel as L, MeetSkinRoom as M, PanelShell as P, QualityBars as Q, ReactionOverlay as R, SettingsPanel as S, Toast as T, AttendanceNotice as a, Avatar as b, ChatPanel as c, ConnectionDot as d, ConsentNotice as e, ControlBar as f, ControlButton as g, MeetingOverlays as h, MenuItem as i, ParticipantTile as j, PeoplePanel as k, PersonMenu as l, Popover as m, PreJoin as n, RecordingIndicator as o, ShortcutsSheet as p, Stage as q };
|