import type React from 'react'; /** Wire-shape data for the widget. Kept as the shared contract the hub DAL * re-exports as `PublicWalkthroughVideo & { id }`. `mainVideoUrl`/`youtubeUrl` * stay SEPARATE — YouTube wins when both are set (card matches theater). */ export interface WalkthroughVideoData { /** Row id — used for id-match cookie dismissal (a new video re-shows the * card even after an old one was dismissed). */ id?: string | number; mainVideoUrl?: string | null; youtubeUrl?: string | null; posterUrl?: string | null; /** RELATIVE VTT path (/api/captions/...); embedders prefix their proxy base. */ captionsUrl?: string | null; title?: string | null; presenterAvatarUrl?: string | null; /** Which bottom corner the collapsed card pins to. Admin-controlled per * video; anything other than 'right' (including absent) means left. */ position?: 'left' | 'right' | null; } /** Everything the two placements share — the widget's actual contract. */ interface WalkthroughVideoBaseProps { video: WalkthroughVideoData | null | undefined; open?: boolean; onOpenChange?: (open: boolean) => void; defaultOpen?: boolean; /** With `defaultOpen`: the initial theater starts PAUSED instead of * autoplaying — for deep links (`?walkthrough=1`), where the open has no * user gesture and unrequested audio/motion would be hostile. Applies to * the initial `defaultOpen` session only: it ends when the NEXT open — * gesture-driven (card click) or host-driven (`open` flipping true) — * mounts a fresh theater, which autoplays as usual. */ defaultOpenPaused?: boolean; /** Query-param NAME that deep-links into the theater: when present in * `window.location.search` at first client render, the theater opens * immediately and PAUSED — `defaultOpen + defaultOpenPaused` decided * inside the component, so hosts don't defer their first render to read * the URL. Defaults to `WALKTHROUGH_OPEN_QUERY_PARAM` ('walkthrough'); * pass '' to disable. Presence-based (any value counts), read ONCE at * mount (deep links arrive by full page load, not client navigation). * SSR-safe: the server renders closed, and the theater lives in a portal, * so the hydrated (non-portal) markup is identical either way. */ deepLinkParam?: string; label?: string; className?: string; } /** * : the shared contract plus the knobs that only mean * something for an OVERLAY. Each of these is inert inline — the appear delay * staggers against a page the visitor hasn't seen yet, dismissal is an overlay * affordance, and the footer fade (with the `pathname` that re-queries its * target) exists to keep a pinned card off the page chrome. So they live here, * not in the base. */ export interface FloatingWalkthroughVideoProps extends WalkthroughVideoBaseProps { appearDelayMs?: number; /** Cookie-based dismissal (id-match, mirrors the announcement bar). `false` * disables the X entirely. `storageKey` is the per-platform cookie name. */ dismissal?: { storageKey?: string; } | false; /** Fades the card out while `hideNearSelector` is in view. */ hideNearSelector?: string; /** Route identity from the host (the lib can't observe navigation). Changing * it re-queries the footer IO target. */ pathname?: string; } /** : the shared contract and nothing else — see above. */ export type InlineWalkthroughVideoProps = WalkthroughVideoBaseProps; /** * The widget pinned into a bottom corner over the page — the app-shell / site * placement. Every host that wants "a demo video somewhere on the page, out of * the way" mounts this. */ export declare function FloatingWalkthroughVideo(props: FloatingWalkthroughVideoProps): React.ReactElement; /** * The same widget as an in-flow block, sized by whatever the host puts it in — * for a page that gives the video a slot of its own rather than a corner. * * The two overlay defaults are fixed here rather than left to the caller: an * in-page block has nothing to stagger against (`appearDelayMs={0}`), and a * dismissable one would leave the host's layout with a hole while sharing the * floating card's per-platform cookie (`dismissal={false}`). Both are stated * once here instead of at every call site, where forgetting either is silent. */ export declare function InlineWalkthroughVideo(props: InlineWalkthroughVideoProps): React.ReactElement; export {}; //# sourceMappingURL=walkthrough-video.d.ts.map