Props for the async-media + live-collaboration family: the recorder (VeltRecorderControlPanel, VeltRecorderPlayer, and the VeltRecorderTool / VeltRecorderNotes siblings), the media surfaces (VeltVideoPlayer, VeltVideoEditor), and the live surfaces (VeltHuddle, VeltUserInviteTool). For each component below you get what every prop does at runtime, its default, and how it combines with the others, plus the default behaviors you get with no prop at all. For the cross-component default table and prop-interaction matrix that spans the whole SDK, see Behaviors.
These components share two recurring mechanics, documented once here:
- Boolean → string attribute conversion. The React wrappers convert a boolean prop to the string
'true'/'false'only when the value is literallytrueorfalse([true, false].includes(value) ? (value ? 'true' : 'false') : undefined); any other value (includingundefined) leaves the attribute unset, so the element keeps its own default. The underlying element setters thenJSON.parsethe string back to a boolean. Net effect: omitting a boolean prop = “use the element/service default”, not “false”. - Feature-service backing. Recorder and huddle boolean props don’t hold local state: they flip a process-wide
BehaviorSubjecton a feature service (e.g.enableRecordingCountdown()/disableRecordingCountdown()). That subject carries the real default, and because it is shared, the last component to set it wins if you mount two control panels with different values. Those service defaults are the “Default” column below.
Per-prop behavior (exhaustive)
The exhaustive per-prop behavior for the async-media + live-collaboration family is organized per component below: each## Velt… subsection carries that component’s full prop table (default + runtime behavior + interactions) and its own ### Default behaviors (no prop needed) block (sibling tools are folded into their parent’s subsection). Every prop in Props for these components is covered; see Provable coverage.
VeltRecorderControlPanel
The control panel is the recording UI: it drives device selection, the countdown, the live recording session, pause/resume, and the post-recording hand-off (preview, editor, transcription). Its layout is chosen bymode; every other prop toggles a recorder feature-service flag.
Default behaviors (no prop needed)
- Layout: floating control panel (
modedefaults to'floating'). - Countdown + transcription on: the pre-record countdown and speech-to-text transcription are both enabled by default (their service subjects default
true). This is the one place the recorder defaults are “on, opt out” rather than “off, opt in”. - Editor off: no video editor, no auto-open, no retake, no timeline preview, no PiP: all default
false. Settings open as a modal (settingsEmbeddedfalse). - No duration cap: recording continues until the user stops it (
maxRecordingLengthisnull). - No completion callback: with no
onRecordedData, the recording completes and is stored, but nothing is handed back to your code.
VeltRecorderPlayer
The player renders a finished recording (the one identified byrecorderId): preview thumbnail, playback, transcription/summary, optional edit + delete. Several of its booleans share the same recorder feature-service flags as the control panel.
Default behaviors (no prop needed)
- Needs a
recorderId: with none, the player is an empty shell and logs that the id is required. - Summary shown: both summary gates default
'true', so a summary renders: provided the recording has a transcript (which requiresrecordingTranscriptionto have been on at record time). No transcript → nothing to summarize. - Shadow-DOM isolated (
shadowDomtrue) and click-to-play preview on (playbackOnPreviewClicktrue). - Editor / retake / fullscreen off unless enabled (the editor follows the shared recorder-service flag, default off).
- Delete control present but inert until you supply
onDelete.
VeltRecorderTool & VeltRecorderNotes (siblings)
VeltRecorderTool: the button that starts a recording, bound to a panel viapanelId. ItsrecordingCountdown,retakeOnVideoEditor,pictureInPicture, andmaxLengthflip the same recorder/PiP service flags documented above (same defaults).shadowDomdefaultstrue;darkModedefaults off (the string"false"is treated as off).variantpicks the named tool wireframe (...-wireframe---<variant>, falling back to base).buttonLabelsets the button text.type(RecorderMode, default'video') selects the capture mode:'audio'/'video'/'screen'start that mode directly;'all'shows a dropdown of all three; a comma-separated string (e.g.'audio, video') is split into atypesarray and rendered as a dropdown limited to those options (internally the type is set to'all').VeltRecorderNotes: a notes-oriented recorder surface; itsshadowDom,videoEditor,recordingCountdown,recordingTranscription,playVideoInFullScreen, andvideoEditorTimelinePreviewprops behave identically to the control-panel props of the same name (same shared service flags and defaults).
VeltVideoPlayer
A collaborative video player for an arbitrarysrc (not a Velt recording): playback controls plus an optional timestamped comment tool and an optional cross-collaborator playback sync. Comment markers render on the timeline (VeltCommentPlayerTimeline).
Default behaviors (no prop needed)
- Plays the
srcwith full controls (play/pause, scrub, volume, speed, fullscreen) in light theme. - Comment tool on: users can drop timestamped comments by default; markers show on the timeline. Sync is off: playback is local to each viewer.
- Timeline shadow-DOM isolated (
shadowDomtrue).
VeltVideoEditor
A standalone/embedded editor for a recording supplied as ablob or url (or resolved from an annotation): trim, zoom (scale), split/cut, optional retake, then Apply to write the edit back.
Default behaviors (no prop needed)
- Needs a source: a standalone editor renders nothing useful without
bloborurl; an embedded editor needsannotationId/recorderId. - Mode:
'standalone'unlessannotationId/recorderIdis set (then'embed'). - Editing tools: trim and zoom (scale) are available, split/cut is enabled, Apply and Delete controls render. Default zoom factor is 1.5×, max 3×, with preset steps
[1, 1.25, 1.5, 1.75, 2, 2.5, 3]. This reference documents the discrete tools, but not the exact default-active section composition in the empty toolbar; the section arrays start empty and are populated at runtime. - Retake hidden unless the bound recorder enables it (
showRetakeButtondefaultsfalse). - Light theme and base wireframe (no
variant).
VeltHuddle
The live audio/video huddle surface: renders participant streams and screen share, with optional in-huddle chat and follow (“flock”) mode. Huddle booleans flip shared huddle-service flags.Default behaviors (no prop needed)
- Chat on, server fallback on, flock off: note the asymmetry:
chatandserverFallbackdefaulttrue, onlyflockModeOnAvatarClickdefaultsfalse. (This corrects the intuitive “all flags off” assumption.) - No active media until joined: the huddle renders participant slots, but audio/video transmission begins only after a user joins via the huddle tool. Screen share renders when active.
- Re-join on refresh: the tool re-joins a prior session automatically if the user was in a huddle before reload.
VeltHuddleTool (sibling)
The button that starts/joins a huddle.type (default 'audio'; allowed 'audio' | 'video' | 'presentation' | 'all') sets what the first click starts: 'audio' audio-only, 'video' audio+video, 'presentation' audio+screenshare, 'all' everything; if a huddle is already running, clicking joins the existing huddle with its type instead. Screen-share modes require navigator.mediaDevices.getDisplayMedia support. darkMode (default off; "false" parses to off) toggles the dark theme by adding/removing the dark attribute.
VeltUserInviteTool
The button + dialog for inviting/sharing access to a document: an email autocomplete input, an optional role (access-control) dropdown, an optional list of people already on the document, and a copy-link affordance.Default behaviors (no prop needed)
typeis'share': share icon, share-style dialog.- Both dialog sections on: the access-control dropdown and the document-user list both default
true, so the dialog shows role selection and existing members (the member list still requires the document to have users). - Dialog text defaults come from the dialog component (
'Share project'title,'Add email address'placeholder) when the props are omitted. - Copy-link uses the current page (
window.location.href) wheninviteUrlis unset. - Light theme, and the tool is enabled (
disableddefaultsfalse).
Default behaviors (no prop needed)
Each component’s zero-prop baseline is documented in its### Default behaviors (no prop needed) block above. In brief:
- Control panel: opens as a floating layout with the pre-record countdown and transcription on (the one “on, opt out” corner); editor/auto-open/retake/timeline-preview/PiP all off; no duration cap; no completion callback.
- Player: needs a
recorderId, shows the summary when a transcript exists, click-to-play, shadow-DOM isolated; editor/retake/fullscreen off. VeltVideoPlayer: plays itssrcwith the comment tool on and sync off.VeltVideoEditor:'standalone'(needsblob/url) unless anannotationId/recorderIdflips it to'embed'; light theme; retake hidden unless the recorder enables it.VeltHuddle: chat on and server-fallback on by default, flock off.VeltUserInviteTool: defaultstype: 'share'with both the access-control dropdown and document-user list on; copy-link uses the current page.
Prop-interaction matrix
No separate multi-prop matrix for this group: pairwise effects live in each prop’s Interactions & gotchas column above. The cross-prop rules to restate: recorder/huddle boolean props flip shared feature-serviceBehaviorSubjects, so if two panels/tools set the same flag the last setter wins; videoEditor gates autoOpenVideoEditor / retakeOnVideoEditor / videoEditorTimelinePreview (they no-op without it); on the player, the summary renders only when showSummary AND summary are both truthy; VeltRecorderTool/VeltRecorderNotes share the same service flags (and defaults) as the control panel; and a recording’s summary depends on recordingTranscription having been on at record time.
Positioning & composition
These surfaces are statically placed: you mount the players, editor, huddle, and invite/recorder tools in your own layout and control their position. The two anchored notes: the recorder control panel’smode: 'floating' renders an expandable floating control panel (Velt-managed chrome, still mounted in your tree), and reactions/comments produced on a video timeline are anchored to media-timeline position rather than the page. See the anchored-vs-static classification in Component definitions and Behaviors → Positioning ownership.
Provable coverage
Counted againstProps ### VeltRecorderControlPanel / ### VeltRecorderPlayer / ### VeltVideoPlayer / ### VeltVideoEditor / ### VeltHuddle / ### VeltUserInviteTool:
- VeltRecorderControlPanel: 13/13: mode, panelId, onRecordedData, recordingCountdown, recordingTranscription, videoEditor, settingsEmbedded, autoOpenVideoEditor, playVideoInFullScreen, retakeOnVideoEditor, pictureInPicture, maxLength, videoEditorTimelinePreview. (props.md lists 13 rows; “~14” estimate included.)
- VeltRecorderPlayer: 9/9: recorderId, onDelete, showSummary (deprecated, counted inline), summary, shadowDom, videoEditor, playVideoInFullScreen, retakeOnVideoEditor, playbackOnPreviewClick. (props.md lists 9 rows; “~10” estimate included.) Plus the
VeltRecorderTool/VeltRecorderNotessibling props from the props.md note, covered in the sibling subsection. - VeltVideoPlayer: 5/5: src, darkMode, sync, commentTool, shadowDom. (props.md lists 5 rows; “~6” estimate included.)
- VeltVideoEditor: 6/6: darkMode, variant, blob, url, annotationId, recorderId. (props.md lists 6 rows; “~7” estimate included.)
- VeltHuddle: 3/3: chat, flockModeOnAvatarClick, serverFallback. (props.md lists 3 rows; “~4” estimate included.) Plus
VeltHuddleTool(type,darkMode) in the sibling subsection. - VeltUserInviteTool: 8/8: type, source, title, placeholder, inviteUrl, accessControlDropdown, documentUserAccessList, darkMode (the deprecated
hideAccessControlDropdownis documented inline underaccessControlDropdown). (props.md lists 8 rows; “~9” estimate included.)
VeltVideoEditor toolbar sections enabled in the empty default toolbar is not documented here; the section arrays initialize empty and are populated at runtime. The discrete tools: trim, zoom/scale, split, apply, delete: are covered.
