@arbidocs/blocks 0.4.109 → 0.4.111

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 (167) hide show
  1. package/dist/{NativeDocxEditor-WODZAURG.cjs → NativeDocxEditor-AQKRZBIU.cjs} +7 -7
  2. package/dist/{NativeDocxEditor-WODZAURG.cjs.map → NativeDocxEditor-AQKRZBIU.cjs.map} +1 -1
  3. package/dist/{NativeDocxEditor-4PY4YZYC.js → NativeDocxEditor-IN2HEO5I.js} +3 -3
  4. package/dist/{NativeDocxEditor-4PY4YZYC.js.map → NativeDocxEditor-IN2HEO5I.js.map} +1 -1
  5. package/dist/agents/index.cjs +286 -286
  6. package/dist/agents/index.js +10 -10
  7. package/dist/agents/tasks/ConversationListView.d.ts +5 -1
  8. package/dist/agents/tasks/TaskActivityTimeline.d.ts +5 -1
  9. package/dist/calendar/EventDetails.d.ts +1 -1
  10. package/dist/calendar/EventEditor.d.ts +1 -1
  11. package/dist/calendar/draft.d.ts +7 -1
  12. package/dist/calendar/index.cjs +71 -10
  13. package/dist/calendar/index.cjs.map +1 -1
  14. package/dist/calendar/index.d.ts +1 -1
  15. package/dist/calendar/index.js +69 -11
  16. package/dist/calendar/index.js.map +1 -1
  17. package/dist/calendar/types.d.ts +23 -0
  18. package/dist/calls/CallSidePanel.d.ts +32 -0
  19. package/dist/calls/CallStage.d.ts +57 -0
  20. package/dist/calls/ControlBar.d.ts +113 -0
  21. package/dist/calls/ControlButton.d.ts +44 -0
  22. package/dist/calls/PreJoin.d.ts +35 -0
  23. package/dist/calls/cards.d.ts +58 -0
  24. package/dist/calls/hooks.d.ts +20 -0
  25. package/dist/calls/index.cjs +2884 -0
  26. package/dist/calls/index.cjs.map +1 -0
  27. package/dist/calls/index.d.ts +21 -0
  28. package/dist/calls/index.js +2753 -0
  29. package/dist/calls/index.js.map +1 -0
  30. package/dist/calls/join-choices.d.ts +11 -0
  31. package/dist/calls/layout.d.ts +106 -0
  32. package/dist/calls/panels.d.ts +66 -0
  33. package/dist/calls/status.d.ts +69 -0
  34. package/dist/calls/tiles.d.ts +59 -0
  35. package/dist/calls/webinar/ChatPermissionSetting.d.ts +18 -0
  36. package/dist/calls/webinar/OnStageCheck.d.ts +23 -0
  37. package/dist/calls/webinar/QAPanel.d.ts +56 -0
  38. package/dist/calls/webinar/RaiseHandButton.d.ts +14 -0
  39. package/dist/calls/webinar/WebinarAudiencePanel.d.ts +23 -0
  40. package/dist/calls/webinar/WebinarViewer.d.ts +39 -0
  41. package/dist/calls/webinar/WebinarWaiting.d.ts +19 -0
  42. package/dist/calls/webinar/hooks.d.ts +13 -0
  43. package/dist/calls/webinar/index.d.ts +14 -0
  44. package/dist/calls/webinar/live.d.ts +43 -0
  45. package/dist/calls/webinar/types.d.ts +49 -0
  46. package/dist/chat/Message.d.ts +17 -2
  47. package/dist/chat/TranscriptLine.d.ts +50 -0
  48. package/dist/chat/index.cjs +147 -126
  49. package/dist/chat/index.d.ts +3 -1
  50. package/dist/chat/index.js +5 -4
  51. package/dist/chat/transcript-runs.d.ts +6 -0
  52. package/dist/{chunk-GKDWQLVU.js → chunk-2C7TCVQZ.js} +172 -121
  53. package/dist/chunk-2C7TCVQZ.js.map +1 -0
  54. package/dist/{chunk-QKWQMOHN.cjs → chunk-2UAJVK3C.cjs} +4 -4
  55. package/dist/{chunk-QKWQMOHN.cjs.map → chunk-2UAJVK3C.cjs.map} +1 -1
  56. package/dist/{chunk-54WBIVHV.cjs → chunk-2WO5L7YT.cjs} +5 -5
  57. package/dist/{chunk-54WBIVHV.cjs.map → chunk-2WO5L7YT.cjs.map} +1 -1
  58. package/dist/{chunk-7C35WXYB.js → chunk-5HFPRI3W.js} +5 -5
  59. package/dist/chunk-5HFPRI3W.js.map +1 -0
  60. package/dist/{chunk-ZSV2NQQP.js → chunk-6RHHMBZ5.js} +158 -5
  61. package/dist/chunk-6RHHMBZ5.js.map +1 -0
  62. package/dist/{chunk-FQX6N5G6.js → chunk-6Z7DLJU2.js} +35 -18
  63. package/dist/chunk-6Z7DLJU2.js.map +1 -0
  64. package/dist/{chunk-PGDL26TQ.js → chunk-AY32GGKU.js} +10 -4
  65. package/dist/{chunk-PGDL26TQ.js.map → chunk-AY32GGKU.js.map} +1 -1
  66. package/dist/{chunk-S55VDTX3.js → chunk-CECWAIHL.js} +3 -3
  67. package/dist/{chunk-S55VDTX3.js.map → chunk-CECWAIHL.js.map} +1 -1
  68. package/dist/{chunk-UABPHZWZ.js → chunk-CXZ7FPTQ.js} +3 -3
  69. package/dist/{chunk-UABPHZWZ.js.map → chunk-CXZ7FPTQ.js.map} +1 -1
  70. package/dist/{chunk-C2HRZSAT.cjs → chunk-DJM7DLCT.cjs} +5 -5
  71. package/dist/chunk-DJM7DLCT.cjs.map +1 -0
  72. package/dist/{chunk-GBYY3PIC.cjs → chunk-FXUQZFAN.cjs} +79 -62
  73. package/dist/chunk-FXUQZFAN.cjs.map +1 -0
  74. package/dist/{chunk-W7NZRZ54.js → chunk-GFYGYME3.js} +3 -3
  75. package/dist/{chunk-W7NZRZ54.js.map → chunk-GFYGYME3.js.map} +1 -1
  76. package/dist/chunk-GICUGQNN.cjs +76 -0
  77. package/dist/chunk-GICUGQNN.cjs.map +1 -0
  78. package/dist/{chunk-I4XQCE6U.cjs → chunk-HBBJYRGI.cjs} +162 -5
  79. package/dist/{chunk-ZSV2NQQP.js.map → chunk-HBBJYRGI.cjs.map} +1 -1
  80. package/dist/chunk-JJLMCV3T.js +73 -0
  81. package/dist/chunk-JJLMCV3T.js.map +1 -0
  82. package/dist/chunk-MWDW5UBW.cjs +199 -0
  83. package/dist/chunk-MWDW5UBW.cjs.map +1 -0
  84. package/dist/{chunk-NUTLXVPX.js → chunk-NRUPUDWB.js} +16 -7
  85. package/dist/chunk-NRUPUDWB.js.map +1 -0
  86. package/dist/{chunk-5YXG342J.cjs → chunk-OR4CO743.cjs} +3 -3
  87. package/dist/{chunk-5YXG342J.cjs.map → chunk-OR4CO743.cjs.map} +1 -1
  88. package/dist/{chunk-DDF5GPIJ.js → chunk-P5ST47VY.js} +3 -3
  89. package/dist/{chunk-DDF5GPIJ.js.map → chunk-P5ST47VY.js.map} +1 -1
  90. package/dist/{chunk-PEHLUB52.js → chunk-Q6B77ZWZ.js} +3 -3
  91. package/dist/{chunk-PEHLUB52.js.map → chunk-Q6B77ZWZ.js.map} +1 -1
  92. package/dist/{chunk-ELDUWTRR.cjs → chunk-TF47ATYS.cjs} +4 -4
  93. package/dist/{chunk-ELDUWTRR.cjs.map → chunk-TF47ATYS.cjs.map} +1 -1
  94. package/dist/{chunk-PDRYGPZB.cjs → chunk-VP4KJ4LK.cjs} +16 -6
  95. package/dist/chunk-VP4KJ4LK.cjs.map +1 -0
  96. package/dist/{chunk-SKSE4OT6.cjs → chunk-WPVIOGDG.cjs} +5 -5
  97. package/dist/{chunk-SKSE4OT6.cjs.map → chunk-WPVIOGDG.cjs.map} +1 -1
  98. package/dist/{chunk-JB32KYAH.js → chunk-WTM65ZNG.js} +3 -3
  99. package/dist/{chunk-JB32KYAH.js.map → chunk-WTM65ZNG.js.map} +1 -1
  100. package/dist/{chunk-2NIL2ASF.cjs → chunk-XIGWUDOD.cjs} +170 -119
  101. package/dist/chunk-XIGWUDOD.cjs.map +1 -0
  102. package/dist/{chunk-3US5OIDQ.cjs → chunk-XSUOEJB3.cjs} +9 -3
  103. package/dist/chunk-XSUOEJB3.cjs.map +1 -0
  104. package/dist/chunk-Z3AZ7Q5X.js +177 -0
  105. package/dist/chunk-Z3AZ7Q5X.js.map +1 -0
  106. package/dist/{chunk-Z5VUZ6YD.cjs → chunk-ZV3BKLFY.cjs} +3 -3
  107. package/dist/{chunk-Z5VUZ6YD.cjs.map → chunk-ZV3BKLFY.cjs.map} +1 -1
  108. package/dist/collaboration/index.cjs +42 -42
  109. package/dist/collaboration/index.js +2 -2
  110. package/dist/connect/docx.cjs +6 -6
  111. package/dist/connect/docx.js +4 -4
  112. package/dist/connect/index.cjs +72 -72
  113. package/dist/connect/index.js +18 -18
  114. package/dist/docx/AgentUndo.d.ts +4 -0
  115. package/dist/docx/index.cjs +46 -46
  116. package/dist/docx/index.js +3 -3
  117. package/dist/facts/index.cjs +4 -4
  118. package/dist/facts/index.js +4 -4
  119. package/dist/files/index.cjs +6 -6
  120. package/dist/files/index.js +6 -6
  121. package/dist/home/index.cjs +17 -17
  122. package/dist/home/index.js +3 -3
  123. package/dist/index.cjs +958 -937
  124. package/dist/index.cjs.map +1 -1
  125. package/dist/index.js +24 -23
  126. package/dist/index.js.map +1 -1
  127. package/dist/retrieval/index.cjs +1 -1
  128. package/dist/retrieval/index.js +1 -1
  129. package/dist/settings/index.cjs +50 -104
  130. package/dist/settings/index.cjs.map +1 -1
  131. package/dist/settings/index.js +12 -72
  132. package/dist/settings/index.js.map +1 -1
  133. package/dist/shell/index.cjs +12 -12
  134. package/dist/shell/index.js +4 -4
  135. package/dist/site/index.cjs +5 -5
  136. package/dist/site/index.js +1 -1
  137. package/dist/studio/index.cjs +5 -5
  138. package/dist/studio/index.js +4 -4
  139. package/dist/workflow-canvas/index.cjs +53 -53
  140. package/dist/workflow-canvas/index.js +10 -10
  141. package/dist/workspaces/index.cjs +2 -2
  142. package/dist/workspaces/index.js +2 -2
  143. package/node_modules/@arbidocs/coedit/dist/commands.cjs +179 -9
  144. package/node_modules/@arbidocs/coedit/dist/commands.cjs.map +1 -1
  145. package/node_modules/@arbidocs/coedit/dist/commands.d.cts +81 -1
  146. package/node_modules/@arbidocs/coedit/dist/commands.d.ts +81 -1
  147. package/node_modules/@arbidocs/coedit/dist/commands.js +173 -11
  148. package/node_modules/@arbidocs/coedit/dist/commands.js.map +1 -1
  149. package/node_modules/@arbidocs/coedit/dist/server.cjs +58 -2
  150. package/node_modules/@arbidocs/coedit/dist/server.cjs.map +1 -1
  151. package/node_modules/@arbidocs/coedit/dist/server.d.cts +29 -1
  152. package/node_modules/@arbidocs/coedit/dist/server.d.ts +29 -1
  153. package/node_modules/@arbidocs/coedit/dist/server.js +58 -3
  154. package/node_modules/@arbidocs/coedit/dist/server.js.map +1 -1
  155. package/node_modules/@arbidocs/coedit/package.json +1 -1
  156. package/package.json +15 -5
  157. package/src/calls/calls.css +157 -0
  158. package/dist/chunk-2NIL2ASF.cjs.map +0 -1
  159. package/dist/chunk-3US5OIDQ.cjs.map +0 -1
  160. package/dist/chunk-7C35WXYB.js.map +0 -1
  161. package/dist/chunk-C2HRZSAT.cjs.map +0 -1
  162. package/dist/chunk-FQX6N5G6.js.map +0 -1
  163. package/dist/chunk-GBYY3PIC.cjs.map +0 -1
  164. package/dist/chunk-GKDWQLVU.js.map +0 -1
  165. package/dist/chunk-I4XQCE6U.cjs.map +0 -1
  166. package/dist/chunk-NUTLXVPX.js.map +0 -1
  167. package/dist/chunk-PDRYGPZB.cjs.map +0 -1
@@ -117,6 +117,7 @@ export interface CalendarLabels {
117
117
  startTime: string;
118
118
  endTime: string;
119
119
  arbiCall: string;
120
+ arbiWebinar: string;
120
121
  startTimeZone: string;
121
122
  endTimeZone: string;
122
123
  separateTimeZones: string;
@@ -138,6 +139,14 @@ export interface CalendarLabels {
138
139
  useDefaultReminders: string;
139
140
  conference: string;
140
141
  addArbiCall: string;
142
+ addArbiWebinar: string;
143
+ webinar: string;
144
+ webinarLinkOnSave: string;
145
+ webinarRole: string;
146
+ cohost: string;
147
+ panelist: string;
148
+ webinarAttendee: string;
149
+ joinWebinar: string;
141
150
  addMeetingLink: string;
142
151
  meetingLinkPlaceholder: string;
143
152
  removeConference: string;
@@ -172,6 +181,7 @@ export interface CalendarLabels {
172
181
  confirmed: string;
173
182
  cancelled: string;
174
183
  join: string;
184
+ openMeetingChat: string;
175
185
  accept: string;
176
186
  decline: string;
177
187
  maybe: string;
@@ -303,11 +313,18 @@ export interface AttendeeDraft {
303
313
  role?: AttendeeRole;
304
314
  kind?: AttendeeKind;
305
315
  }
316
+ /** A webinar invitee's role (the organiser is the host). */
317
+ export type WebinarRole = 'cohost' | 'panelist' | 'attendee';
306
318
  export interface ConferenceDraft {
307
319
  type: 'arbi' | 'external';
320
+ /** Empty for an ARBI webinar not saved yet: its call is made on save, with its roles. */
308
321
  url: string;
309
322
  call_id?: string | null;
310
323
  label?: string | null;
324
+ /** An ARBI conference's kind (editor-only, never sent to the calendar); a call when missing. */
325
+ kind?: 'call' | 'webinar';
326
+ /** A webinar's role per attendee (keyed by `attendeeKey`); missing = attendee. */
327
+ roles?: Record<string, WebinarRole>;
311
328
  }
312
329
  export interface AttachmentDraft {
313
330
  url: string;
@@ -400,6 +417,10 @@ export interface EventEditorProps {
400
417
  call_id: string;
401
418
  url: string;
402
419
  } | null>;
420
+ /** Offer "Webinar" next to "Add ARBI call" (its call is made on save, with the roles picked here). */
421
+ canAddWebinar?: boolean;
422
+ /** Which attendees of a webinar get a role select (the ARBI people it is sealed to); all by default. */
423
+ isWebinarAttendee?: (attendee: AttendeeDraft) => boolean;
403
424
  defaultTimeZone: string;
404
425
  /** Extra section rendered under the guests (the host's scheduling assistant / room finder). */
405
426
  schedulingSlot?: ReactNode;
@@ -471,6 +492,8 @@ export interface EventDetailsProps {
471
492
  /** "Propose new time" for an invitation (shown next to the RSVP buttons). */
472
493
  onProposeTime?: () => void;
473
494
  onJoin?: () => void;
495
+ /** An ARBI call's meeting chat (shown next to Join). */
496
+ onOpenMeetingChat?: () => void;
474
497
  onClose?: () => void;
475
498
  /** Render the Join button as enabled (the host decides the join window). */
476
499
  canJoin?: boolean;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * A side panel inside the call (chat, participants): the same header as the app's docked panels
3
+ * (FloatingPanel: title in the brand colour, hairline below, a ghost close button), on the normal
4
+ * background, beside the tiles rather than over them.
5
+ *
6
+ * With `tabs` the one panel carries several views (People | Q&A | Audience in a webinar): the tabs
7
+ * take the title's place in the header, and `children` is the active tab's content.
8
+ */
9
+ import type { ReactElement, ReactNode } from 'react';
10
+ export interface CallSidePanelTab {
11
+ id: string;
12
+ label: string;
13
+ /** A count after the label (questions, people); hidden when undefined. */
14
+ count?: number;
15
+ testId?: string;
16
+ }
17
+ export declare function CallSidePanel({ title, icon, actions, onClose, closeLabel, closeTestId, tabs, activeTab, onTabChange, children, className, ...rest }: {
18
+ /** The panel's name (its accessible name; shown when there are no tabs). */
19
+ title: string;
20
+ icon?: ReactNode;
21
+ /** Extra header actions, left of the close button. */
22
+ actions?: ReactNode;
23
+ onClose(): void;
24
+ closeLabel: string;
25
+ closeTestId?: string;
26
+ /** Views of the panel, shown as tabs in the header instead of the title. */
27
+ tabs?: CallSidePanelTab[];
28
+ activeTab?: string;
29
+ onTabChange?(id: string): void;
30
+ children: ReactNode;
31
+ className?: string;
32
+ } & React.HTMLAttributes<HTMLElement>): ReactElement;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The call panel, docked beside the call's conversation like the document viewer: the app's
3
+ * header (`TabHeader`: one tab with the call's title; status chips, the view switch and
4
+ * "Minimise" on the right), a "Speaking: …" line, the stage (tiles, or a side panel over them)
5
+ * and the control bar. Normal app surfaces in both themes; only the tiles are dark.
6
+ */
7
+ import type { ReactElement, ReactNode } from 'react';
8
+ export type CallView = 'speaker' | 'gallery';
9
+ export declare function CallHeader({ title, icon, status, view, onViewChange, onMinimise, minimiseLabel, }: {
10
+ title: string;
11
+ icon?: ReactNode;
12
+ /** The status chips; given `compact` on a narrow header. */
13
+ status?: ReactNode | ((compact: boolean) => ReactNode);
14
+ /** Speaker (the talker large) or gallery (everyone equal): one switch. */
15
+ view?: CallView;
16
+ onViewChange?(view: CallView): void;
17
+ onMinimise?(): void;
18
+ minimiseLabel?: string;
19
+ }): ReactElement;
20
+ /**
21
+ * "Speaking: Ada, Bo" — who is talking right now, in words (the tile rings say it in colour and
22
+ * motion). Polite live region, so a screen reader hears changes without being flooded.
23
+ */
24
+ export declare function SpeakingNow({ names, idleText, className, }: {
25
+ /** Who is talking (person pills, or plain names). */
26
+ names: ReactNode[];
27
+ idleText?: string;
28
+ className?: string;
29
+ }): ReactElement;
30
+ /**
31
+ * A short-lived line under the header ("Transcription on — started by Ada"): the notice gets its
32
+ * own line, so it never takes the title's room; the header keeps only the short chip.
33
+ */
34
+ export declare function CallNotice({ children }: {
35
+ children: ReactNode;
36
+ }): ReactElement;
37
+ /**
38
+ * The panel frame: header, a slim line under it ("Speaking: …", notices), the video stage, the
39
+ * participant list under the video, and the control bar. `stageHeight` sizes the video to its
40
+ * tiles (they keep 16:9 at the top) so the rest of the panel goes to the list rather than to blank
41
+ * space; without it, or with a `compact` list, the stage takes the room.
42
+ */
43
+ export declare function CallStageFrame({ header, subheader, stage, stageRef, stageOverlay, people, stageHeight, controls, className, }: {
44
+ header: ReactNode;
45
+ /** A slim line under the header ("Speaking: …"). */
46
+ subheader?: ReactNode;
47
+ stage: ReactNode;
48
+ stageRef?: React.Ref<HTMLDivElement>;
49
+ /** Floating over the tiles' top-left corner (lobby requests, connection state). */
50
+ stageOverlay?: ReactNode;
51
+ /** The participant list, under the video. */
52
+ people?: ReactNode;
53
+ /** The video's natural height for a stage `width` wide and at most `maxHeight` tall. */
54
+ stageHeight?(width: number, maxHeight: number): number;
55
+ controls: ReactNode;
56
+ className?: string;
57
+ }): ReactElement;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * The call's control bar: one row, three columns. Left, the elapsed time (and any warning);
3
+ * centre, the controls in groups; right, Leave. Controls are `CallControlButton`s; Record carries
4
+ * its label, so its state is never a guess.
5
+ * Press-shortcuts: a control marked `data-call-shortcut="m"` is clicked by the M key while
6
+ * `shortcuts` is on and nobody is typing.
7
+ */
8
+ import { type ReactElement, type ReactNode } from 'react';
9
+ export declare function CallControlBar({ left, right, children, shortcuts, className, }: {
10
+ left?: ReactNode;
11
+ right?: ReactNode;
12
+ /** The centre controls (use `ControlGroup` / `ControlDivider`). */
13
+ children: ReactNode;
14
+ /** Single-key shortcuts on (the call is on screen). */
15
+ shortcuts?: boolean;
16
+ className?: string;
17
+ }): ReactElement;
18
+ export declare function ControlGroup({ children }: {
19
+ children: ReactNode;
20
+ }): ReactElement;
21
+ export declare function ControlDivider(): ReactElement;
22
+ /** `m:ss` since `since`, ticking every second. */
23
+ export declare function ElapsedTime({ since, title }: {
24
+ since: number;
25
+ title?: string;
26
+ }): ReactElement;
27
+ export interface MediaDevice {
28
+ deviceId: string;
29
+ label: string;
30
+ }
31
+ /** Microphone or camera: one toggle with an attached caret that opens the device list. */
32
+ export declare function MediaControl({ kind, enabled, pending, onToggle, devices, activeDeviceId, onSelectDevice, shortcut, testId, options, }: {
33
+ kind: 'microphone' | 'camera';
34
+ enabled: boolean;
35
+ pending?: boolean;
36
+ onToggle(): void;
37
+ devices: MediaDevice[];
38
+ activeDeviceId?: string;
39
+ onSelectDevice(deviceId: string): void;
40
+ shortcut?: string;
41
+ testId: string;
42
+ /** On/off settings under the device list (e.g. "Mirror my video"). */
43
+ options?: {
44
+ label: string;
45
+ checked: boolean;
46
+ onChange(checked: boolean): void;
47
+ testId?: string;
48
+ }[];
49
+ }): ReactElement;
50
+ export interface RecordMode<M extends string = string> {
51
+ mode: M;
52
+ label: string;
53
+ description: string;
54
+ testId?: string;
55
+ }
56
+ /**
57
+ * The host's record button: off, it opens the mode choice; on, it stops (red). A plain menu
58
+ * rather than a portal so the choice stays next to its button.
59
+ */
60
+ export declare function RecordControl<M extends string>({ on, busy, modes, note, onStart, onStop, }: {
61
+ on: boolean;
62
+ busy?: boolean;
63
+ modes: RecordMode<M>[];
64
+ /** One line above the modes (how recording works). */
65
+ note?: string;
66
+ onStart(mode: M): void;
67
+ onStop(): void;
68
+ }): ReactElement;
69
+ /** Leave: the one filled red control, at the right end. */
70
+ /** A further way out offered by Leave (e.g. a webinar's "End webinar for everyone"). */
71
+ export interface LeaveOption {
72
+ key: string;
73
+ label: string;
74
+ onSelect(): void;
75
+ testId?: string;
76
+ }
77
+ /**
78
+ * Leave: one red button. With `options` it opens a menu instead — Leave itself first, then the
79
+ * options (a host ending the webinar for everyone) — so leaving and ending share one control.
80
+ */
81
+ export declare function LeaveButton({ onLeave, compact, label, title, options, }: {
82
+ onLeave(): void;
83
+ compact?: boolean;
84
+ label?: string;
85
+ title?: string;
86
+ options?: LeaveOption[];
87
+ }): ReactElement;
88
+ export interface MoreMenuItem {
89
+ key: string;
90
+ label: ReactNode;
91
+ icon?: ReactNode;
92
+ onSelect(): void;
93
+ disabled?: boolean;
94
+ /** Right-aligned extra (a count). */
95
+ trailing?: ReactNode;
96
+ testId?: string;
97
+ }
98
+ /**
99
+ * A group of More that is a setting rather than actions (e.g. the webinar's "Who can chat"): its
100
+ * own menu content (a `DropdownMenuLabel` and radio items), between the same hairlines.
101
+ */
102
+ export interface MoreMenuSection {
103
+ key: string;
104
+ content: ReactNode;
105
+ }
106
+ type MoreMenuGroup = MoreMenuItem[] | MoreMenuSection;
107
+ /** "More": a details header, then groups of items (or settings) separated by hairlines. */
108
+ export declare function MoreMenu({ details, groups, label, }: {
109
+ details?: ReactNode;
110
+ groups: MoreMenuGroup[];
111
+ label?: string;
112
+ }): ReactElement;
113
+ export {};
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The one button style of the call controls: an ARBI `Button` (36 px, 44 px on touch) with a
3
+ * tooltip naming the action and its shortcut. Three tones:
4
+ * neutral — a plain control (share, chat, more);
5
+ * active — a control whose thing is on or open (captions on, chat open);
6
+ * off — a device the user turned off (mic / camera), red-tinted, not a giant block.
7
+ * The status chips of the header (`CallStatusChip`) live here too, so all call chrome shares
8
+ * one source of sizes and colours.
9
+ */
10
+ import { type ReactElement, type ReactNode } from 'react';
11
+ import { type ButtonProps } from '@arbidocs/react/ui';
12
+ export type ControlTone = 'neutral' | 'active' | 'off' | 'danger';
13
+ export interface CallControlButtonProps extends Omit<ButtonProps, 'variant'> {
14
+ /** What the button does now ("Turn off microphone"). Also its accessible name. */
15
+ label: string;
16
+ /** Shown in the tooltip after the label, e.g. "M". */
17
+ shortcut?: string;
18
+ tone?: ControlTone;
19
+ /** Tooltip side (default above: the bar sits at the bottom). */
20
+ side?: 'top' | 'bottom';
21
+ /** False for a menu trigger: the open menu says it all, and a tip would sit on top of it. */
22
+ tooltip?: boolean;
23
+ }
24
+ export declare const CallControlButton: import("react").ForwardRefExoticComponent<CallControlButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
25
+ /** A count on a control's corner: unread messages (red, top) or how many people (quiet, bottom). */
26
+ export declare function ControlBadge({ count, tone, testId, }: {
27
+ count: number;
28
+ tone?: 'alert' | 'quiet';
29
+ testId?: string;
30
+ }): ReactElement;
31
+ /** A small quiet status chip for the call header (recording, transcription, encryption). */
32
+ export declare function CallStatusChip({ tone, icon, label, compact, pulse, title, children, className, testId, ...rest }: {
33
+ tone: 'red' | 'green' | 'yellow' | 'neutral';
34
+ icon?: ReactNode;
35
+ /** Visible text (hidden when compact; the accessible text stays). */
36
+ label: ReactNode;
37
+ compact?: boolean;
38
+ /** A pulsing dot in front (live capture). */
39
+ pulse?: boolean;
40
+ title?: string;
41
+ children?: ReactNode;
42
+ className?: string;
43
+ testId?: string;
44
+ } & Omit<React.HTMLAttributes<HTMLSpanElement>, 'title'>): ReactElement;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * PreJoin — device check before entering a call: camera preview, microphone level meter, camera /
3
+ * microphone pickers and on/off toggles. Used when starting a call, joining a scheduled call or a
4
+ * call link. (Answering a ring skips it and joins straight away, microphone on.)
5
+ *
6
+ * Plain getUserMedia — no media library — so it is cheap to show. The preview tracks are stopped on
7
+ * join / unmount; the call opens its own with the chosen devices. Wide: preview left, choices
8
+ * right; narrow: stacked.
9
+ */
10
+ import { type ElementType, type ReactElement, type ReactNode } from 'react';
11
+ import { type JoinChoices, type MediaKind } from './join-choices';
12
+ export interface PreJoinProps {
13
+ /** The call's name, shown above the choices. */
14
+ title?: string | null;
15
+ /** Heading of the choices (default "Ready to join?"). */
16
+ heading?: string;
17
+ /** The heading's element (default `h2`); a dialog passes its `DialogTitle`. */
18
+ headingAs?: ElementType;
19
+ /** Extra fields above the join button (optional). */
20
+ children?: ReactNode;
21
+ joinLabel?: string;
22
+ /** The cancel button's text (default "Cancel"). */
23
+ cancelLabel?: string;
24
+ busy?: boolean;
25
+ /** Shown under the controls (e.g. a join error). */
26
+ error?: string | null;
27
+ onJoin(choices: JoinChoices): void;
28
+ onCancel?(): void;
29
+ /** Mirror the camera preview (a selfie view, the default; only the <video> flips). */
30
+ mirror?: boolean;
31
+ /** Turns a device error into a sentence (defaults to {@link describeMediaError}). */
32
+ describeError?(err: unknown, kind: MediaKind): string;
33
+ className?: string;
34
+ }
35
+ export declare function PreJoin({ title, heading, headingAs: Heading, children, joinLabel, cancelLabel, busy, error, onJoin, onCancel, describeError, mirror, className, }: PreJoinProps): ReactElement;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * The call's small cards: the minimised call (picture-in-picture, so the user keeps working),
3
+ * the incoming-call card, and the waiting / connecting states. Same surfaces as the app's popovers.
4
+ */
5
+ import { type ReactElement, type ReactNode } from 'react';
6
+ /**
7
+ * The minimised call: the current speaker (their tile, with its voice ring), "Speaking: …", the
8
+ * status chips, and my microphone and camera, back to the call, leave.
9
+ */
10
+ export declare function MinimisedCall({ title, video, status, speaking, micEnabled, onToggleMic, cameraEnabled, onToggleCamera, onRestore, onLeave, restoreLabel, shortcuts, className, }: {
11
+ title: string;
12
+ /** M / V work on the card too. */
13
+ shortcuts?: boolean;
14
+ /** The current speaker's tile; omitted (before the call connects), a phone placeholder. */
15
+ video?: ReactNode;
16
+ status?: ReactNode;
17
+ /** "Speaking: …" (a `SpeakingNow`), shown instead of the title while someone talks. */
18
+ speaking?: ReactNode;
19
+ /** Omit (with the toggle) before the call connects. */
20
+ micEnabled?: boolean;
21
+ onToggleMic?(): void;
22
+ cameraEnabled?: boolean;
23
+ onToggleCamera?(): void;
24
+ onRestore(): void;
25
+ onLeave(): void;
26
+ restoreLabel?: string;
27
+ className?: string;
28
+ }): ReactElement;
29
+ /** A ring: who calls, in what context, accept / decline, and the ringtone switch. */
30
+ export declare function IncomingCallCard({ callerName, caller, context, busy, muted, onMutedChange, onAccept, onDecline, className, }: {
31
+ callerName: string;
32
+ /** The caller as the app shows people (a pill); else `callerName`. */
33
+ caller?: ReactNode;
34
+ /** "is calling you", "invites you to a group call", … */
35
+ context: string;
36
+ busy?: boolean;
37
+ muted: boolean;
38
+ onMutedChange(muted: boolean): void;
39
+ onAccept(): void;
40
+ onDecline(): void;
41
+ className?: string;
42
+ }): ReactElement;
43
+ /** A centred state on the stage (waiting in the lobby, connecting, a webinar starting soon). */
44
+ export declare function CallStateMessage({ title, description, spinner, icon, action, children, testId, }: {
45
+ title: string;
46
+ description?: string;
47
+ spinner?: boolean;
48
+ /** Shown instead of the spinner (a calm state that is not loading). */
49
+ icon?: ReactNode;
50
+ action?: ReactNode;
51
+ /** Extra lines between the description and the action (when, who hosts). */
52
+ children?: ReactNode;
53
+ testId?: string;
54
+ }): ReactElement;
55
+ /** Covers the tiles while (re)connecting. */
56
+ export declare function ConnectionOverlay({ label }: {
57
+ label: string;
58
+ }): ReactElement;
@@ -0,0 +1,20 @@
1
+ /** Small hooks of the call blocks. */
2
+ import { type RefObject } from 'react';
3
+ /** Size of an element, kept current with a ResizeObserver. */
4
+ export declare function useElementSize<T extends HTMLElement>(): [
5
+ (el: T | null) => void,
6
+ {
7
+ width: number;
8
+ height: number;
9
+ }
10
+ ];
11
+ /**
12
+ * A notice that is spelled out on mount (when `announce`) and folds after `ms`; `onFolded` runs
13
+ * once it folds, so the app can avoid spelling it out again on the next mount.
14
+ */
15
+ export declare function useBriefNotice(announce?: boolean, onFolded?: () => void, ms?: number): boolean;
16
+ /**
17
+ * Single-key shortcuts inside `ref`: a control marked `data-call-shortcut="m"` is clicked by the M
18
+ * key while `enabled` and nobody is typing (or holding a modifier).
19
+ */
20
+ export declare function useShortcutKeys(ref: RefObject<HTMLElement | null>, enabled: boolean): void;