@ai-matrx/meet 0.7.83 → 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.
- package/CHANGELOG.md +40 -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 +6737 -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 +6704 -0
- package/dist/core.js.map +1 -0
- package/dist/index.cjs +219 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -3720
- package/dist/index.d.ts +5 -3720
- package/dist/index.js +219 -0
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +1430 -1354
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +108 -365
- package/dist/react.d.ts +108 -365
- package/dist/react.js +1102 -1039
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +4647 -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 +4628 -0
- package/dist/skins/meet.js.map +1 -0
- package/package.json +40 -6
package/dist/react.d.ts
CHANGED
|
@@ -1,51 +1,13 @@
|
|
|
1
|
-
import { ReactNode
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
2
|
import { MessagingSupabaseClient } from '@ai-matrx/messaging';
|
|
3
|
-
import { MeetStore, RoomEngine, CallCenter, MeetingSession, InRoomClient, RecordingController, DeviceManager, MeetRepository, TokenClient, MeetAi,
|
|
4
|
-
export { ATTENDANCE_CSV_HEADER,
|
|
3
|
+
import { MeetStore, RoomEngine, CallCenter, MeetingSession, InRoomClient, RecordingController, DeviceManager, MeetRepository, TokenClient, MeetAi, RoomDriverFactory, DeviceSnapshot, MeetSnapshot, ObservedPhase, MeetObservation, GuestRecordAccessSetting, GuestRecordAccessResolution, ModerationRequest, ModerationResult, MediaEffects, NoteTakerStatus, MeetAnswerCoverage, MeetingRecordBundle, JoinRequest, MeetingRecordCache, LocalMediaState, ModerationNotice, Stage, CollabRequest } from './core.js';
|
|
4
|
+
export { ATTENDANCE_CSV_HEADER, AnnounceResult, ApplyRoomEventArgs, AskArgs, AttendanceKind, AttendanceRow, AudioProcessing, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, CallCenterOptions, CallInviteHandlerOptions, CallInvitePayload, CollabAction, CollabResult, CollabRuntime, CollabStoreLike, CreateCallInviteInput, CreateMeetingInput, DATA_TOPICS, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, DataTopic, DeviceKind, DeviceManagerOptions, DeviceStorage, DriverConnectionState, DriverParticipant, DriverTrackKind, DriverTranscription, END_MEETING_NOT_SERVED, EffectsStorage, EndMeetingResult, FollowUpDraft, FollowUpRecipient, FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, GuestRecordAccess, IDLE_MEDIA, IDLE_TRACK, InRoomClientOptions, LISTEN_ONLY_NOTICE, LibraryRecording, LiveKitDriverOptions, LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, MediaDevicesLike, MediaUnavailable, MeetAiAnswer, MeetAiOptions, MeetDevice, MeetError, MeetErrorCode, MeetEvent, MeetGrants, MeetRoomDriver, MeetingChatHistory, MeetingInviteHandlerOptions, MeetingInvitePayload, MeetingRecordAnswer, MeetingRecordChange, MeetingRecordFailure, MeetingRecordParts, MeetingRecordRestriction, MeetingRecordRestrictionNotice, MeetingRecordState, MeetingSearchHit, MeetingSearchSource, MeetingSessionOptions, ModerationAction, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NameBook, NoteTakerDispatch, NoteTakerRefusal, ObserveInput, ObservedConnection, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, REACTION_TTL_MS, REFUSED_ABSENCE, ROOM_EVENTS, ROOM_EVENT_PREFIX, ROOM_TOKEN_HEADER, RPCS, RecordingControllerOptions, RepositoryOptions, RoomChatMessage, RoomDriverHandlers, RoomEngineOptions, RoomEventOutcome, RoomEventTopic, RoomReaction, RoomToken, RoomTokenStorage, ScheduleMeetingInput, StageArgs, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, TokenClientOptions, TokenRequest, TranscriptBlock, TranscriptFormat, TranscriptMatch, VideoEffect, WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, clockPosition, computeStage, countLabel, createCallCenter, createCallInviteHandler, createDeviceManager, createInRoomClient, createLiveKitDriver, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebRoomTokenStorage, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, invalidResponse, isGuestIdentity, isListenOnly, isNoteTaker, isRealName, isRoomEventTopic, learnName, learnNames, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeRecord, microphoneNoticeCode, moveToRoom, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, recordingLabel, recordingNotice, recordingOffsetMs, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, wrapUpStatus } from './core.js';
|
|
5
|
+
import { b as MeetApi, c as MeetIdentity, A as AccessTokenSource, d as CallInvite, U as UserId, e as ParticipantRole, M as MeetingRecord, P as ParticipantIdentity, T as TranscriptSource, f as CallMode, a as MeetParticipant, L as LobbyEntry, R as RoomName, g as MeetingNote, W as WrapUpAnnouncement, S as StageLayout, h as MeetingId, O as OrganizationId, i as CollabSnapshot, C as CollabPanel } from './collab-Bss-_Jfp.js';
|
|
6
|
+
export { j as AdmissionState, k as CAPTION_LANGUAGES, l as CallId, m as CallState, n as CallablePerson, o as ConnectionQuality, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, I as InviteeInput, p as InviteeRole, J as JsonObject, q as JsonValue, r as MeetApiOptions, s as MeetApiRequest, t as MeetBreakoutBroadcast, u as MeetBreakoutPlan, v as MeetBreakoutRoom, w as MeetCollabSettings, x as MeetFileMedia, y as MeetPoll, z as MeetPollOption, B as MeetPollState, D as MeetQuestion, G as MeetQuestionState, H as MeetStroke, K as MeetingActivities, N as MeetingAttendee, Q as MeetingChanges, V as MeetingInvitee, X as MeetingKind, Y as MeetingNoteKind, Z as MeetingOccurrence, _ as MeetingSettings, $ as NoteTakerState, a0 as ORGANIZATION_HEADER, a1 as OccurrenceOverride, a2 as OccurrenceState, a3 as ROLE_RANK, a4 as RecordingPolicy, a5 as RecordingRecord, a6 as RecordingState, a7 as RoomPhase, a8 as RsvpAnswer, a9 as RsvpInvitation, aa as RsvpState, ab as TranscriptSegment, ac as UpcomingOccurrence, ad as applyCollabPacket, ae as asCallId, af as asMeetingId, ag as asOrganizationId, ah as asParticipantIdentity, ai as asRoomName, aj as asUserId, ak as assignedRoom, al as autoAssign, am as breakoutRemainingMs, an as collabFromState, ao as createMeetApi, ap as defaultCaptionLanguage, aq as fileDownloadPath, ar as isGuest, as as isHostRole, at as loadMeetingActivities, au as withItem } from './collab-Bss-_Jfp.js';
|
|
7
|
+
export { G as GuestRecordAccessControl } from './components-BmgstFx_.js';
|
|
5
8
|
import '@ai-matrx/realtime';
|
|
6
9
|
import 'livekit-client';
|
|
7
10
|
|
|
8
|
-
/**
|
|
9
|
-
* `<MeetProvider>` — the one place an app wires calls and meetings (R7).
|
|
10
|
-
*
|
|
11
|
-
* THE ONE-HOUR INTEGRATION CONTRACT is this component's job: a host passes a
|
|
12
|
-
* Supabase client, who they are, their org, and aidream's base URL. Everything
|
|
13
|
-
* else — the repository, the realtime manager and its three channels, the token
|
|
14
|
-
* client, the room engine, the call center, the meeting session, the recording
|
|
15
|
-
* controller, the device manager, the AI surface — is constructed and owned
|
|
16
|
-
* here.
|
|
17
|
-
*
|
|
18
|
-
* What a host may inject is IDENTITY and app chrome: session source, a
|
|
19
|
-
* navigator, a notification sink. It may NOT inject an agent id — as of 0.3.0
|
|
20
|
-
* there is no prop for one, because which agent answers is a Mandate binding
|
|
21
|
-
* the SERVER resolves (D2). What a host must NEVER have to inject is
|
|
22
|
-
* behavior — if you find yourself catching a package error, retrying a package
|
|
23
|
-
* call, or branching on a package quirk in host code, that logic belongs in
|
|
24
|
-
* here (C22).
|
|
25
|
-
*
|
|
26
|
-
* 🚨 THE PROVIDER'S LIFETIME IS `client` + the SESSION'S user (or `guestName`)
|
|
27
|
-
* + `organizationId` + `baseUrl`, AND NOTHING ELSE. Hosts pass fresh function
|
|
28
|
-
* literals for `onDiagnostic` and `accessToken` on every render; keying the
|
|
29
|
-
* runtime on those identities would tear down and rebuild every channel — and
|
|
30
|
-
* drop the call in progress — on every parent re-render.
|
|
31
|
-
*
|
|
32
|
-
* 🚨 THERE IS NO `userId` PROP, AND THERE NEVER WILL BE AGAIN (DD-240, 0.6.0).
|
|
33
|
-
* The acting user is read from `client`'s own session — the same client that
|
|
34
|
-
* mints the JWT on every request — so the id in a `p_user_id` argument and the
|
|
35
|
-
* id in the token cannot disagree. Through 0.5.x this was a prop, every host
|
|
36
|
-
* filled it from a copy in its own state, and a rotated auth cookie left that
|
|
37
|
-
* copy naming an account the tab could no longer prove it was:
|
|
38
|
-
* `meet_pending_call_invites` refused it at 403 with "the acting user … is not
|
|
39
|
-
* the authenticated user", 8.8 h and 32.9 h into two tabs' lives. The whole
|
|
40
|
-
* story is in `../core/session-identity.ts`.
|
|
41
|
-
*
|
|
42
|
-
* 🚨 A GUEST IS A FIRST-CLASS IDENTITY (D6), not a degraded user. Pass
|
|
43
|
-
* `guestName` and the provider builds a runtime with no calling surface and no
|
|
44
|
-
* host powers, which is exactly what a link-follower needs — and, because a
|
|
45
|
-
* guest has no account at all, the guest lane never reads the session. Nothing
|
|
46
|
-
* downstream branches on "is this a real user".
|
|
47
|
-
*/
|
|
48
|
-
|
|
49
11
|
interface MeetDiagnostic {
|
|
50
12
|
readonly level: "info" | "warn" | "error";
|
|
51
13
|
readonly message: string;
|
|
@@ -162,6 +124,37 @@ declare function useIsHost(): boolean;
|
|
|
162
124
|
declare function useCanRecord(): boolean;
|
|
163
125
|
declare function useLocalUserId(): UserId | null;
|
|
164
126
|
|
|
127
|
+
/**
|
|
128
|
+
* THE OBSERVATION ROOT (CORE-DESIGN §5.6, step S0).
|
|
129
|
+
*
|
|
130
|
+
* Exactly one `[data-meet-root]` per tab on a meeting page, carrying the
|
|
131
|
+
* HARNESS-CONTRACT's attributes derived from the store (`core/observation.ts`).
|
|
132
|
+
* The package renders it once — `<MeetingRoom>` wraps every screen in it, and a
|
|
133
|
+
* consumer that draws its own screen around the room (link resolution, the
|
|
134
|
+
* guest-name step, a Board layout) wraps that screen in `<MeetRoot>` too, with
|
|
135
|
+
* a `phase` when there is no store yet.
|
|
136
|
+
*
|
|
137
|
+
* The wrapper is `display: contents`: it generates no box, so no layout, size
|
|
138
|
+
* or stacking changes; it exists only to carry the attributes. It also
|
|
139
|
+
* publishes `window.__matrxMeet` — diagnostics only, never a verdict.
|
|
140
|
+
*/
|
|
141
|
+
|
|
142
|
+
interface CoreRootOptions {
|
|
143
|
+
/** The row the consumer resolved (the guest lane has no other copy). */
|
|
144
|
+
readonly meeting?: MeetingRecord | null | undefined;
|
|
145
|
+
/** A screen the consumer renders before any store exists (resolving, a dead link). */
|
|
146
|
+
readonly phase?: ObservedPhase | undefined;
|
|
147
|
+
readonly reason?: string | null | undefined;
|
|
148
|
+
}
|
|
149
|
+
/** The observation for this tab, one stable object per change. */
|
|
150
|
+
declare function useCoreObservation(options?: CoreRootOptions): MeetObservation;
|
|
151
|
+
/** The root element's `data-meet-*` attributes. Spread onto ONE element per tab. */
|
|
152
|
+
declare function useCoreRootProps(options?: CoreRootOptions): Record<string, string>;
|
|
153
|
+
/** `<MeetRoot>` — the one observation root. Generates no box. */
|
|
154
|
+
declare function MeetRoot({ children, ...options }: CoreRootOptions & {
|
|
155
|
+
children?: ReactNode;
|
|
156
|
+
}): ReactNode;
|
|
157
|
+
|
|
165
158
|
interface UseRoomResult {
|
|
166
159
|
readonly phase: string;
|
|
167
160
|
readonly participants: readonly MeetParticipant[];
|
|
@@ -188,7 +181,7 @@ interface UseRoomResult {
|
|
|
188
181
|
}
|
|
189
182
|
declare function useRoom(): UseRoomResult;
|
|
190
183
|
/** The stage, recomputed only when the roster or the layout actually changes. */
|
|
191
|
-
declare function useStage(pageSize?: number): Stage
|
|
184
|
+
declare function useStage(pageSize?: number): Stage;
|
|
192
185
|
/**
|
|
193
186
|
* Attach a participant's media to an element. The returned ref callback's
|
|
194
187
|
* CLEANUP is the detach — there is nothing a consumer can forget to call.
|
|
@@ -486,170 +479,16 @@ interface UseGuestRecordAccessResult {
|
|
|
486
479
|
declare function useGuestRecordAccess(meeting: MeetingRecord | null): UseGuestRecordAccessResult;
|
|
487
480
|
|
|
488
481
|
/**
|
|
489
|
-
*
|
|
490
|
-
* build the rest — the whole meeting surface ships here, because per THE
|
|
491
|
-
* ALL-INCLUSIVE LAW a package that withholds its components withholds its
|
|
492
|
-
* product.
|
|
493
|
-
*
|
|
494
|
-
* The bar: FaceTime and Zoom raised by Apple's design team. Concretely, and
|
|
495
|
-
* every one of these is enforced by the stylesheet or the canary:
|
|
482
|
+
* `<MeetingSkinRoot>` — the meeting page's one entry (CORE-DESIGN §5.3, S1).
|
|
496
483
|
*
|
|
497
|
-
*
|
|
498
|
-
*
|
|
499
|
-
*
|
|
500
|
-
*
|
|
501
|
-
*
|
|
502
|
-
* on focus, which in a meeting looks like the app broke).
|
|
503
|
-
* - Semantic tokens only. There is not one hardcoded color in the package.
|
|
504
|
-
* - Real loading states and no dead ends: a control the actor cannot use is
|
|
505
|
-
* ABSENT, never disabled-looking, and never a button that will be refused.
|
|
484
|
+
* Everything that is not a look lives here, once, for every skin: the inert
|
|
485
|
+
* guard, the observation root (S0), watching the room and the meeting's durable
|
|
486
|
+
* feed, seeding the store with the row the consumer resolved, and the ended
|
|
487
|
+
* meeting's record (a skin-external surface). It then renders the viewer's
|
|
488
|
+
* skin — only `meet` until S9 adds the switcher.
|
|
506
489
|
*/
|
|
507
490
|
|
|
508
|
-
|
|
509
|
-
name: string;
|
|
510
|
-
url?: string | null;
|
|
511
|
-
size?: number;
|
|
512
|
-
}): ReactNode;
|
|
513
|
-
declare function ControlButton({ label, active, danger, onClick, children, }: {
|
|
514
|
-
label: string;
|
|
515
|
-
active?: boolean;
|
|
516
|
-
danger?: boolean;
|
|
517
|
-
onClick: () => void;
|
|
518
|
-
children: ReactNode;
|
|
519
|
-
}): ReactNode;
|
|
520
|
-
/**
|
|
521
|
-
* The recording indicator. Rendered for EVERY participant, guests included —
|
|
522
|
-
* there is no prop that hides it (R5). Consent is a property of the package.
|
|
523
|
-
*/
|
|
524
|
-
declare function RecordingIndicator(): ReactNode;
|
|
525
|
-
declare function ConnectionDot({ quality }: {
|
|
526
|
-
quality: string;
|
|
527
|
-
}): ReactNode;
|
|
528
|
-
declare function ParticipantTile({ participant, featured, }: {
|
|
529
|
-
participant: MeetParticipant;
|
|
530
|
-
featured?: boolean;
|
|
531
|
-
}): ReactNode;
|
|
532
|
-
/**
|
|
533
|
-
* CONNECTION QUALITY, always legible (Meet wave 2). Four bars, like every phone:
|
|
534
|
-
* a stable good connection is quiet (the bars are there, faint), and a poor or
|
|
535
|
-
* lost one is loud. `unknown` draws nothing — a guess is not a reading.
|
|
536
|
-
*/
|
|
537
|
-
declare function QualityBars({ quality }: {
|
|
538
|
-
quality: string;
|
|
539
|
-
}): ReactNode;
|
|
540
|
-
declare function Stage({ pageSize }: {
|
|
541
|
-
pageSize?: number;
|
|
542
|
-
}): ReactNode;
|
|
543
|
-
/** Meet's own reaction set, in its order. */
|
|
544
|
-
declare const MEET_REACTIONS: readonly string[];
|
|
545
|
-
/**
|
|
546
|
-
* THE CONTROL BAR — one row, the same in the package's room and in any host
|
|
547
|
-
* layout that composes it (the Board). Everything a person does in a meeting is
|
|
548
|
-
* reachable from here or from the panels it opens, and every keyboard shortcut
|
|
549
|
-
* is bound here, so a layout that renders this bar has all of it.
|
|
550
|
-
*/
|
|
551
|
-
declare function ControlBar({ onLeave }: {
|
|
552
|
-
onLeave?: () => void;
|
|
553
|
-
}): ReactNode;
|
|
554
|
-
/**
|
|
555
|
-
* WHAT FLOATS OVER THE MEETING, in every layout (Meet wave 2): the reactions
|
|
556
|
-
* everyone sends, and what a host just did to THIS person — "the host is asking
|
|
557
|
-
* you to unmute" with the Unmute button right there, which is the whole point.
|
|
558
|
-
*/
|
|
559
|
-
declare function MeetingOverlays(): ReactNode;
|
|
560
|
-
/** Every shortcut, on one sheet. Opened by Shift+? or from More options. */
|
|
561
|
-
declare function ShortcutsSheet({ onClose }: {
|
|
562
|
-
onClose: () => void;
|
|
563
|
-
}): ReactNode;
|
|
564
|
-
/**
|
|
565
|
-
* IN-MEETING CHAT (Meet wave 2). A message to everyone is SAVED with the
|
|
566
|
-
* meeting — a late joiner scrolls up and reads it, and it is part of the record.
|
|
567
|
-
* A private message goes to one person only and is never saved; the composer
|
|
568
|
-
* says which of the two you are about to send.
|
|
569
|
-
*/
|
|
570
|
-
declare function ChatPanel({ onClose, to, onTo, }: {
|
|
571
|
-
onClose: () => void;
|
|
572
|
-
to?: ParticipantIdentity | null;
|
|
573
|
-
onTo?: (identity: ParticipantIdentity | null) => void;
|
|
574
|
-
}): ReactNode;
|
|
575
|
-
declare function PeoplePanel({ onClose, onMessage, }: {
|
|
576
|
-
onClose: () => void;
|
|
577
|
-
onMessage?: (identity: ParticipantIdentity) => void;
|
|
578
|
-
}): ReactNode;
|
|
579
|
-
/**
|
|
580
|
-
* EVERYTHING YOU CAN DO ABOUT ONE PERSON (Meet wave 2), in one menu — on their
|
|
581
|
-
* tile and on their People row. An item appears only when it would be honoured:
|
|
582
|
-
* the rank ladder decides moderation (a co-host never sees "Remove" on the host),
|
|
583
|
-
* only the host sees "Make host", and nobody sees a control that the server
|
|
584
|
-
* would refuse. Removing someone and handing the meeting over NAME THEIR
|
|
585
|
-
* CONSEQUENCE first, inline — never a browser dialog.
|
|
586
|
-
*/
|
|
587
|
-
declare function PersonMenu({ participant, onClose, onMessage, placement, }: {
|
|
588
|
-
participant: MeetParticipant;
|
|
589
|
-
onClose: () => void;
|
|
590
|
-
onMessage?: (identity: ParticipantIdentity) => void;
|
|
591
|
-
placement?: "up" | "down";
|
|
592
|
-
}): ReactNode;
|
|
593
|
-
/**
|
|
594
|
-
* AUDIO, VIDEO AND EFFECTS (Meet wave 2) — the devices in use, a live
|
|
595
|
-
* microphone level, a speaker test, noise suppression and the camera
|
|
596
|
-
* background. Every change applies to the live meeting at once and is
|
|
597
|
-
* remembered in this browser.
|
|
598
|
-
*/
|
|
599
|
-
declare function SettingsPanel({ onClose }: {
|
|
600
|
-
onClose: () => void;
|
|
601
|
-
}): ReactNode;
|
|
602
|
-
/** The waiting room. Rendered for hosts only — a participant sees nothing. */
|
|
603
|
-
declare function LobbyPanel(): ReactNode;
|
|
604
|
-
/**
|
|
605
|
-
* THE MEETING ASSISTANT (R4). The note-taker's state, what the meeting has
|
|
606
|
-
* decided so far, the wrap-up, and a question box whose answer arrives token by
|
|
607
|
-
* token.
|
|
608
|
-
*
|
|
609
|
-
* Nothing on this panel is computed here: notes, decisions and action items are
|
|
610
|
-
* durable rows delivered by Postgres Changes, and the answer is streamed from
|
|
611
|
-
* `/intelligence/ask`, which builds it from those same rows. The captions this
|
|
612
|
-
* client can see are never sent anywhere (D16).
|
|
613
|
-
*/
|
|
614
|
-
declare function AiPanel({ onClose }: {
|
|
615
|
-
onClose: () => void;
|
|
616
|
-
}): ReactNode;
|
|
617
|
-
/**
|
|
618
|
-
* LIVE CAPTIONS. The last few lines, over the stage, for anyone who reads
|
|
619
|
-
* faster than they hear.
|
|
620
|
-
*
|
|
621
|
-
* They are HINTS (D16) — the durable segment replaces the line it captioned as
|
|
622
|
-
* soon as the row lands — so an unsettled line renders differently from a
|
|
623
|
-
* settled one and nothing downstream ever reads this list.
|
|
624
|
-
*/
|
|
625
|
-
declare function Captions({ lines }: {
|
|
626
|
-
lines?: number;
|
|
627
|
-
}): ReactNode;
|
|
628
|
-
/**
|
|
629
|
-
* CONSENT IS NOT A PROP (README rule 8, D10).
|
|
630
|
-
*
|
|
631
|
-
* Whenever an agent participant is in the room, EVERY participant sees this —
|
|
632
|
-
* host, member and guest alike. There is no prop that hides it and no host code
|
|
633
|
-
* involved: through 0.2.1 the first real consumer had to write this banner
|
|
634
|
-
* itself by reading `isAgent` off the roster, which is exactly the massage C22
|
|
635
|
-
* forbids.
|
|
636
|
-
*/
|
|
637
|
-
declare function ConsentNotice(): ReactNode;
|
|
638
|
-
/**
|
|
639
|
-
* LISTEN-ONLY ATTENDANCE, said out loud. Shown whenever the local participant
|
|
640
|
-
* is in the room publishing no microphone — whether they chose that or the
|
|
641
|
-
* browser refused. When it was refused, the browser's own reason and the remedy
|
|
642
|
-
* are shown too, because "others can't hear you" without "and here is why"
|
|
643
|
-
* leaves someone clicking a mute button that cannot work.
|
|
644
|
-
*/
|
|
645
|
-
declare function AttendanceNotice(): ReactNode;
|
|
646
|
-
declare function PreJoin(props: {
|
|
647
|
-
roomName: RoomName;
|
|
648
|
-
meetingId?: string;
|
|
649
|
-
slug?: string;
|
|
650
|
-
onJoined?: () => void;
|
|
651
|
-
}): ReactNode;
|
|
652
|
-
declare function MeetingRoom(props: {
|
|
491
|
+
interface MeetingSkinRootProps {
|
|
653
492
|
roomName: RoomName;
|
|
654
493
|
meetingId?: string;
|
|
655
494
|
slug?: string;
|
|
@@ -660,48 +499,29 @@ declare function MeetingRoom(props: {
|
|
|
660
499
|
* `meet_meeting_by_slug` is granted to `anon`; the `meet_meetings` TABLE is
|
|
661
500
|
* not, so the durable-feed backfill — a table read — is refused for a
|
|
662
501
|
* link-follower and `snapshot.meeting` stays null for them forever. A
|
|
663
|
-
* consumer that resolved the slug through the RPC
|
|
664
|
-
*
|
|
665
|
-
* the reader who has nothing else.
|
|
502
|
+
* consumer that resolved the slug through the RPC passes the row here, and
|
|
503
|
+
* the record renders for exactly the reader who has nothing else.
|
|
666
504
|
*/
|
|
667
505
|
meeting?: MeetingRecord;
|
|
668
506
|
onLeave?: () => void;
|
|
669
507
|
/**
|
|
670
|
-
* A HOST-PROVIDED control for the in-meeting header
|
|
671
|
-
* affordances that belong to the meeting (matrx-frontend puts its
|
|
508
|
+
* A HOST-PROVIDED control for the in-meeting header (matrx-frontend puts its
|
|
672
509
|
* Intelligence icon for the meeting's AI jobs here). Rendered in the header
|
|
673
|
-
* row of the live room only
|
|
674
|
-
* none. The package never inspects it, and styles nothing inside it.
|
|
510
|
+
* row of the live room only. The package never inspects it.
|
|
675
511
|
*/
|
|
676
512
|
headerControls?: ReactNode;
|
|
677
|
-
}
|
|
678
|
-
declare function
|
|
679
|
-
|
|
680
|
-
declare function CallButton({ person, mode, children, }: {
|
|
681
|
-
person: CallablePerson;
|
|
682
|
-
mode?: CallMode;
|
|
683
|
-
children?: ReactNode;
|
|
684
|
-
}): ReactNode;
|
|
513
|
+
}
|
|
514
|
+
declare function MeetingSkinRoot(props: MeetingSkinRootProps): ReactNode;
|
|
515
|
+
|
|
685
516
|
/**
|
|
686
|
-
*
|
|
687
|
-
*
|
|
517
|
+
* THE MEETING RECORD — a skin-EXTERNAL surface (CORE-DESIGN §5.3).
|
|
518
|
+
*
|
|
519
|
+
* What a meeting is once the room is gone: the record view, the recording
|
|
520
|
+
* player and the host's guest-access control. Outside the skin boundary — every
|
|
521
|
+
* skin links to the same record — so it lives in `@ai-matrx/meet/react`.
|
|
522
|
+
* It draws with the Meet skin's v0 primitives until the record gets its own
|
|
523
|
+
* look (S9 is the pixel pass).
|
|
688
524
|
*/
|
|
689
|
-
declare function IncomingCallHost(): ReactNode;
|
|
690
|
-
declare function IncomingCallCard({ invite }: {
|
|
691
|
-
invite: CallInvite;
|
|
692
|
-
}): ReactNode;
|
|
693
|
-
declare function ScheduleMeeting(props: {
|
|
694
|
-
/** Where meeting links point. `meetingLink` is the ONE link shape. */
|
|
695
|
-
appBaseUrl: string;
|
|
696
|
-
onScheduled?: (slug: string) => void;
|
|
697
|
-
}): ReactNode;
|
|
698
|
-
/** Reactions floating over the stage. Expired by the store, not by hope. */
|
|
699
|
-
declare function ReactionOverlay({ reactions, }: {
|
|
700
|
-
reactions: readonly {
|
|
701
|
-
id: string;
|
|
702
|
-
emoji: string;
|
|
703
|
-
}[];
|
|
704
|
-
}): ReactNode;
|
|
705
525
|
|
|
706
526
|
/**
|
|
707
527
|
* THE MEETING, AFTER THE MEETING (MRI-D2).
|
|
@@ -721,23 +541,6 @@ declare function ReactionOverlay({ reactions, }: {
|
|
|
721
541
|
* rows server-side. A part the reader is not allowed to see says so IN WORDS —
|
|
722
542
|
* an empty section is indistinguishable from a meeting where nothing happened.
|
|
723
543
|
*/
|
|
724
|
-
/**
|
|
725
|
-
* WHAT GUESTS MAY READ OF THIS MEETING — the host's control (MRF-1).
|
|
726
|
-
*
|
|
727
|
-
* 🚨 **HOST-ONLY, AND ABSENT FOR EVERYONE ELSE.** Not greyed out, not present
|
|
728
|
-
* with a tooltip: a participant has no control here at all, because a control
|
|
729
|
-
* that exists only to be refused is the dead-end class this package does not
|
|
730
|
-
* ship (D11-style honesty, same posture as `PersonHostActions`).
|
|
731
|
-
*
|
|
732
|
-
* It is the third rung of the ladder Arman ruled on 2026-09-12 — the system's
|
|
733
|
-
* default, the organization's setting, and this meeting's. "Use my
|
|
734
|
-
* organization's setting" is shown WITH what that resolves to, because a label
|
|
735
|
-
* that does not say what the organization chose makes the host guess about
|
|
736
|
-
* other people's words.
|
|
737
|
-
*/
|
|
738
|
-
declare function GuestRecordAccessControl({ meeting, }: {
|
|
739
|
-
meeting: MeetingRecord;
|
|
740
|
-
}): ReactNode;
|
|
741
544
|
declare function MeetingRecordView({ meeting, onRejoin, }: {
|
|
742
545
|
meeting: MeetingRecord;
|
|
743
546
|
/** Optional: a recurring link can be re-opened. Absent for a one-off. */
|
|
@@ -746,85 +549,11 @@ declare function MeetingRecordView({ meeting, onRejoin, }: {
|
|
|
746
549
|
declare function RecordingPlayer(props: {
|
|
747
550
|
fileId: string;
|
|
748
551
|
}): ReactNode;
|
|
749
|
-
/**
|
|
750
|
-
* THE MEETINGS LIST — live meetings AND the records of finished ones (MRI-D2).
|
|
751
|
-
*
|
|
752
|
-
* A finished meeting is not gone: it is the summary, the decisions, the action
|
|
753
|
-
* items and the transcript behind the same durable link (R3). A list that
|
|
754
|
-
* silently dropped ended meetings is what made every wrap-up unreachable from
|
|
755
|
-
* the product, so an ended row is a first-class row here and its action says
|
|
756
|
-
* what it opens.
|
|
757
|
-
*/
|
|
758
|
-
declare function MeetingList({ baseUrl }: {
|
|
759
|
-
baseUrl?: string;
|
|
760
|
-
}): ReactNode;
|
|
761
|
-
|
|
762
|
-
/**
|
|
763
|
-
* INLINED SVGs — no icon-library dependency, ever (C19).
|
|
764
|
-
*
|
|
765
|
-
* The tap-target precedent: ~60 buttons, all inlined, a fraction of a percent
|
|
766
|
-
* of bloat and zero version-skew risk. These are Lucide-shaped paths, adapted;
|
|
767
|
-
* they inherit `currentColor` so the token contract, not an icon prop, decides
|
|
768
|
-
* every color.
|
|
769
|
-
*/
|
|
770
|
-
|
|
771
|
-
type IconProps = SVGProps<SVGSVGElement>;
|
|
772
|
-
declare function MicIcon(props: IconProps): React.ReactElement;
|
|
773
|
-
declare function MicOffIcon(props: IconProps): React.ReactElement;
|
|
774
|
-
declare function CameraIcon(props: IconProps): React.ReactElement;
|
|
775
|
-
declare function CameraOffIcon(props: IconProps): React.ReactElement;
|
|
776
|
-
declare function ScreenShareIcon(props: IconProps): React.ReactElement;
|
|
777
|
-
declare function PhoneIcon(props: IconProps): React.ReactElement;
|
|
778
|
-
/**
|
|
779
|
-
* "Call end" — the downward handset on the red leave button (the glyph Meet
|
|
780
|
-
* users recognise). A FILLED shape, so it overrides the line-icon defaults.
|
|
781
|
-
*/
|
|
782
|
-
declare function PhoneOffIcon(props: IconProps): React.ReactElement;
|
|
783
|
-
declare function HandIcon(props: IconProps): React.ReactElement;
|
|
784
|
-
declare function ChatIcon(props: IconProps): React.ReactElement;
|
|
785
|
-
declare function PeopleIcon(props: IconProps): React.ReactElement;
|
|
786
|
-
declare function RecordIcon(props: IconProps): React.ReactElement;
|
|
787
|
-
declare function SparklesIcon(props: IconProps): React.ReactElement;
|
|
788
|
-
declare function LockIcon(props: IconProps): React.ReactElement;
|
|
789
|
-
declare function LayoutIcon(props: IconProps): React.ReactElement;
|
|
790
|
-
declare function SettingsIcon(props: IconProps): React.ReactElement;
|
|
791
|
-
declare function CheckIcon(props: IconProps): React.ReactElement;
|
|
792
|
-
declare function CloseIcon(props: IconProps): React.ReactElement;
|
|
793
|
-
declare function PinIcon(props: IconProps): React.ReactElement;
|
|
794
|
-
declare function WifiLowIcon(props: IconProps): React.ReactElement;
|
|
795
|
-
declare function SmileIcon(props: IconProps): React.ReactElement;
|
|
796
|
-
declare function MoreIcon(props: IconProps): React.ReactElement;
|
|
797
|
-
declare function SearchIcon(props: IconProps): React.ReactElement;
|
|
798
|
-
declare function KeyboardIcon(props: IconProps): React.ReactElement;
|
|
799
|
-
declare function SpotlightIcon(props: IconProps): React.ReactElement;
|
|
800
|
-
declare function SignalIcon({ bars, ...props }: IconProps & {
|
|
801
|
-
bars: 0 | 1 | 2 | 3;
|
|
802
|
-
}): React.ReactElement;
|
|
803
|
-
declare function SpeakerIcon(props: IconProps): React.ReactElement;
|
|
804
|
-
declare function FlagIcon(props: IconProps): React.ReactElement;
|
|
805
|
-
declare function PencilIcon(props: IconProps): React.ReactElement;
|
|
806
|
-
/** Lucide `shapes` — the Activities menu (polls, Q&A, whiteboard, breakout rooms). */
|
|
807
|
-
declare function ActivitiesIcon(props: IconProps): React.ReactElement;
|
|
808
|
-
/** Lucide `chart-no-axes-column` — polls. */
|
|
809
|
-
declare function PollIcon(props: IconProps): React.ReactElement;
|
|
810
|
-
/** Lucide `message-circle-question` — Q&A. */
|
|
811
|
-
declare function QuestionIcon(props: IconProps): React.ReactElement;
|
|
812
|
-
/** Lucide `presentation` — the shared whiteboard. */
|
|
813
|
-
declare function WhiteboardIcon(props: IconProps): React.ReactElement;
|
|
814
|
-
/** Lucide `layout-panel-left`-like split — breakout rooms. */
|
|
815
|
-
declare function BreakoutIcon(props: IconProps): React.ReactElement;
|
|
816
552
|
|
|
817
553
|
/**
|
|
818
|
-
*
|
|
819
|
-
*
|
|
820
|
-
*
|
|
821
|
-
* what each person sees; these components render what the store holds and say the
|
|
822
|
-
* server's sentence when it refuses. A control exists only when the organization's knob
|
|
823
|
-
* turns it on (`collab.settings`) — absent, never dead.
|
|
824
|
-
*
|
|
825
|
-
* The champions: Google Meet's Activities panel (one door to polls, Q&A, whiteboard and
|
|
826
|
-
* breakouts) and Zoom's breakout-room controls (automatic / manual / let people choose,
|
|
827
|
-
* timer, broadcast, move, bring everyone back).
|
|
554
|
+
* THE COLLAB AND CAPTION HOOKS — thin selectors over the core (CORE-DESIGN
|
|
555
|
+
* §5.3, step S1). The logic lives in `core/collab-state.ts`; these only bind it
|
|
556
|
+
* to the provider's store so every skin gets the same answers.
|
|
828
557
|
*/
|
|
829
558
|
|
|
830
559
|
interface UseCollabResult {
|
|
@@ -847,35 +576,8 @@ interface UseCollabResult {
|
|
|
847
576
|
declare function useCollab(): UseCollabResult;
|
|
848
577
|
/** The activities this person has, in the order Meet lists them. */
|
|
849
578
|
declare function useAvailableActivities(): CollabPanel[];
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
onOpen: (panel: CollabPanel) => void;
|
|
853
|
-
}): ReactNode;
|
|
854
|
-
declare function PollsPanel({ onClose }: {
|
|
855
|
-
onClose: () => void;
|
|
856
|
-
}): ReactNode;
|
|
857
|
-
declare function QaPanel({ onClose }: {
|
|
858
|
-
onClose: () => void;
|
|
859
|
-
}): ReactNode;
|
|
860
|
-
/**
|
|
861
|
-
* THE SHARED WHITEBOARD — one board per meeting, everyone draws, it is saved with the
|
|
862
|
-
* meeting (every stroke is a room item). Replaces the stage while open, the way Zoom's
|
|
863
|
-
* whiteboard does; the control bar stays.
|
|
864
|
-
*/
|
|
865
|
-
declare function WhiteboardPanel({ onClose }: {
|
|
866
|
-
onClose: () => void;
|
|
867
|
-
}): ReactNode;
|
|
868
|
-
declare function BreakoutsPanel({ onClose }: {
|
|
869
|
-
onClose: () => void;
|
|
870
|
-
}): ReactNode;
|
|
871
|
-
/**
|
|
872
|
-
* WHAT A PERSON IN A MEETING WITH BREAKOUTS SEES WITHOUT OPENING ANYTHING: the room they
|
|
873
|
-
* were assigned to (with Join), the room they are in and its countdown (with Return),
|
|
874
|
-
* a host's broadcast — and the moves: a host moving them, and everyone coming back.
|
|
875
|
-
* Also asks the server to close the plan when the countdown reaches zero (the server's
|
|
876
|
-
* clock decides; no schedule).
|
|
877
|
-
*/
|
|
878
|
-
declare function BreakoutBanner(): ReactNode;
|
|
579
|
+
/** Something worth a dot on the Activities button. */
|
|
580
|
+
declare function useActivityAttention(): boolean;
|
|
879
581
|
/**
|
|
880
582
|
* The viewer's caption-translation choice and the translator's work queue. Finished
|
|
881
583
|
* lines without a translation are sent in small batches; each line is translated once
|
|
@@ -890,9 +592,50 @@ declare function useCaptionTranslation(lines: readonly {
|
|
|
890
592
|
translations: Readonly<Record<string, string>>;
|
|
891
593
|
error: string | null;
|
|
892
594
|
};
|
|
893
|
-
/** The Settings panel's captions section: translate captions into a language, or not. */
|
|
894
|
-
declare function CaptionLanguageSettings(): ReactNode;
|
|
895
595
|
/** Which collab panel the bar should open, asked by something else (a poll launched). */
|
|
896
596
|
declare function useCollabPanelRequest(onRequest: (panel: CollabPanel) => void): void;
|
|
897
597
|
|
|
898
|
-
|
|
598
|
+
/**
|
|
599
|
+
* THE SKIN FACADE — the ONLY module a skin may import (CORE-DESIGN §5.1, §5.4;
|
|
600
|
+
* step S1). Guard: `scripts/check-skin-imports.mjs` (in `check:package` and
|
|
601
|
+
* `pnpm test`): a file under `src/skins/` may import React, the design system,
|
|
602
|
+
* files inside its own skin folder, and THIS module — nothing else.
|
|
603
|
+
*
|
|
604
|
+
* `useMeetCore()` is the facade over today's store: the runtime, the room
|
|
605
|
+
* snapshot, devices, the server's role and the observation-contract reading,
|
|
606
|
+
* as one object that changes only when one of them does. The re-exports below
|
|
607
|
+
* are the headless hooks, pure helpers and types Meet skin v0 (today's in-call
|
|
608
|
+
* UI, moved here unchanged) reads. Later steps (S6a+) replace the re-exports
|
|
609
|
+
* with the `CoreSnapshot` slices and typed actions; a skin then reads
|
|
610
|
+
* `useMeetCore()` alone.
|
|
611
|
+
*/
|
|
612
|
+
|
|
613
|
+
interface MeetCore {
|
|
614
|
+
/** The runtime, or null while auth/organization resolve (render nothing). */
|
|
615
|
+
readonly host: MeetHost | null;
|
|
616
|
+
readonly snapshot: MeetSnapshot | null;
|
|
617
|
+
readonly devices: DeviceSnapshot | null;
|
|
618
|
+
/** The server's word on this person's role (both carriers, MRI-A11). */
|
|
619
|
+
readonly role: ParticipantRole;
|
|
620
|
+
readonly isHost: boolean;
|
|
621
|
+
/** What the observation contract reads for this tab (S0). */
|
|
622
|
+
readonly observation: MeetObservation;
|
|
623
|
+
}
|
|
624
|
+
/** The one headless read a skin starts from. Stable until something moves. */
|
|
625
|
+
declare function useMeetCore(): MeetCore;
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* THE RINGING SURFACE — skin-EXTERNAL (CORE-DESIGN §5.3): an incoming call
|
|
629
|
+
* rings on whatever page the person is on, outside any meeting skin.
|
|
630
|
+
*/
|
|
631
|
+
|
|
632
|
+
/**
|
|
633
|
+
* Mount ONCE, high in the tree. Every incoming call rings here, on whatever
|
|
634
|
+
* surface the user is on (R2).
|
|
635
|
+
*/
|
|
636
|
+
declare function IncomingCallHost(): ReactNode;
|
|
637
|
+
declare function IncomingCallCard({ invite }: {
|
|
638
|
+
invite: CallInvite;
|
|
639
|
+
}): ReactNode;
|
|
640
|
+
|
|
641
|
+
export { AccessTokenSource, CallCenter, CallInvite, CallMode, CollabPanel, CollabRequest, CollabSnapshot, type CoreRootOptions, DeviceManager, DeviceSnapshot, GuestRecordAccessResolution, GuestRecordAccessSetting, InRoomClient, IncomingCallCard, IncomingCallHost, JoinRequest, LobbyEntry, LocalMediaState, MEET_SHORTCUTS, MediaEffects, MeetAi, MeetAnswerCoverage, MeetApi, type MeetCore, type MeetDiagnostic, type MeetHost, MeetIdentity, MeetObservation, MeetParticipant, MeetProvider, type MeetProviderProps, MeetRepository, MeetRoot, MeetSnapshot, MeetStore, MeetingId, MeetingNote, MeetingRecord, MeetingRecordBundle, MeetingRecordCache, MeetingRecordView, MeetingSession, MeetingSkinRoot, type MeetingSkinRootProps, ModerationNotice, ModerationRequest, ModerationResult, NoteTakerStatus, ObservedPhase, OrganizationId, ParticipantIdentity, ParticipantRole, RecordingController, RecordingPlayer, RoomDriverFactory, RoomEngine, RoomName, Stage, StageLayout, TokenClient, type TranscriptLine, TranscriptSource, type UseCallsResult, type UseCollabResult, type UseEndMeetingResult, type UseGuestRecordAccessResult, type UseHostControlsResult, type UseLobbyResult, type UseMediaEffectsResult, type UseMeetAiResult, type UseMeetingRecordResult, type UseMeetingsResult, type UseRecordingResult, type UseRoomResult, UserId, WrapUpAnnouncement, meetingRecordCache, useActivityAttention, useAudioLevel, useAvailableActivities, useCalls, useCanModerate, useCanRecord, useCaptionTranslation, useCollab, useCollabPanelRequest, useConsentNotice, useCoreObservation, useCoreRootProps, useDeviceSnapshot, useElapsed, useEndMeeting, useGuestRecordAccess, useHandQueue, useHostControls, useIsHost, useListenOnlyNotice, useLobby, useLocalMedia, useLocalUserId, useMediaEffects, useMeetAi, useMeetCore, useMeetHost, useMeetShortcuts, useMeetSnapshot, useMeeting, useMeetingId, useMeetingRecord, useMeetings, useModerationNotice, useReactions, useRecording, useRequiredMeetHost, useRole, useRoom, useStage, useTrack };
|