@ai-matrx/meet 0.7.84 → 0.7.85

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.
@@ -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 };