/** * @sharpee/platform-browser/channels — public surface. * * Owner context: browser default. Exposes per-channel renderer * builders, the default layout helper, and the * `registerDefaultBrowserRenderers` convenience that wires all * platform-default `ChannelRenderer`s onto a `Renderer` instance in * one call. * * Stories that override individual renderers re-register against the * same channel id after this helper runs (last-write-wins per ADR-165 * §3). Stories that replace the entire layout skip * `mountDefaultLayout` and `registerDefaultBrowserRenderers` and * instead call `Renderer.registerSlot(name, handle)` + their own * channel-renderer registrations. * * @see ADR-165 — Renderer Architecture — §7, §8 */ import type { IRenderer } from '@sharpee/channel-service'; import { createMainChannelRenderer } from './main'; import { createPromptChannelRenderer } from './prompt'; import { createLocationChannelRenderer, createScoreChannelRenderer, createTurnChannelRenderer } from './status'; import { createInfoChannelRenderer, createIfidChannelRenderer } from './info'; import { createDeathChannelRenderer, createEndgameChannelRenderer, createScoreNotifyChannelRenderer } from './notify'; import { createImageChannelRenderer, createImagePreloadChannelRenderer } from './image'; import { createSoundChannelRenderer, createMusicChannelRenderer, type AudioManagerLike } from './audio'; import { createAnimationChannelRenderer, createAnimateChannelRenderer, createTransitionChannelRenderer, createLayoutChannelRenderer, createClearChannelRenderer } from './animation'; import { createLifecycleChannelRenderer, type LifecycleChannelRendererOptions } from './lifecycle'; import { mountDefaultLayout, type BrowserDefaultLayout } from './layout'; export { createMainChannelRenderer, createPromptChannelRenderer, createLocationChannelRenderer, createScoreChannelRenderer, createTurnChannelRenderer, createInfoChannelRenderer, createIfidChannelRenderer, createDeathChannelRenderer, createEndgameChannelRenderer, createScoreNotifyChannelRenderer, createImageChannelRenderer, createImagePreloadChannelRenderer, createSoundChannelRenderer, createMusicChannelRenderer, createAnimationChannelRenderer, createAnimateChannelRenderer, createTransitionChannelRenderer, createLayoutChannelRenderer, createClearChannelRenderer, createLifecycleChannelRenderer, mountDefaultLayout, }; export type { BrowserDefaultLayout, AudioManagerLike, LifecycleChannelRendererOptions }; export { createAmbientChannelRenderer } from './audio'; export { renderTextContent, flattenTextContent } from './text-content'; /** * Options for {@link registerDefaultBrowserRenderers}. */ export interface RegisterDefaultBrowserRenderersOptions { /** * `AudioManager`-shaped instance the audio renderers delegate to. * Pass the same instance the rest of the browser client uses so * legacy `audio.*` events and channel-driven sound/music share * one playback context. */ audio: AudioManagerLike; /** * Optional callback invoked after every entry the main channel * renderer appends. The browser client uses it to scroll the prose * window to the bottom. */ onMainAfterAppend?(slot: HTMLElement): void; /** * Optional hotspot-click handler for image channels. When a * hotspot is clicked the renderer calls this with the hotspot's * `command` field — the browser client routes it through * `Renderer.emitCommand` so the engine sees a typed command. */ onHotspotCommand?(command: string): void; /** * Wiring for the `lifecycle` channel renderer. Pass the browser * client's `appendSystemMessage` and a refresh callback (typically * `renderCombinedStatus`) so save/restore signals project to the * same DOM regions the legacy raw-event path used. Omit to skip * registering a lifecycle renderer (CLI / test scenarios). */ lifecycle?: LifecycleChannelRendererOptions; } /** * Register every platform-default browser channel renderer against * the supplied `Renderer`. Slots from `layout` are also registered * via `Renderer.registerSlot(name, handle)` so stories can resolve * platform-default slot names by `getSlot`. * * Standard channels: `main`, `prompt`, `location`, `score`, `turn`, * `info`, `ifid`, `death`, `endgame`, `score_notify`. * * Media channels: `image:background`, `image:main`, `image:overlay`, * `image:preload`, `sound`, `music`, `animation`, `animate`, * `transition`, `layout`, `clear`. * * Stories override any of these by calling * `renderer.registerRenderer(channelId, ...)` AFTER this helper * (last-write-wins per ADR-165 §3). */ export declare function registerDefaultBrowserRenderers(renderer: IRenderer, layout: BrowserDefaultLayout, opts: RegisterDefaultBrowserRenderersOptions): void; //# sourceMappingURL=index.d.ts.map