import type { ViewProps } from 'react-native'; import type { DirectEventHandler, Double } from 'react-native/Libraries/Types/CodegenTypes'; import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; type PayloadEvent = Readonly<{ payload: string }>; type EmptyEvent = Readonly<{}>; /** * Fabric codegen spec for BBPlayerView. * * `interfaceOnly: true` — generates JS-side Fabric component descriptor while * keeping existing RCTViewManager on the native side (no C++ ViewManager needed). * Falls back to requireNativeComponent on old architecture. * * The `options` prop is intentionally omitted here: codegen only supports * primitive/struct types, not arbitrary dictionaries. The native side still * accepts `options` via the existing ViewManager @objc/@ReactProp declarations; * it just isn't part of the codegen type surface. * * Event payload types match the intersection of what iOS and Android actually * send. Fields present on only one platform are omitted for type safety. */ export interface BBPlayerViewNativeProps extends ViewProps { jsonUrl?: string; // Events onDidFailWithError?: DirectEventHandler; onDidRequestCollapse?: DirectEventHandler; onDidRequestExpand?: DirectEventHandler; onDidRequestOpenUrl?: DirectEventHandler; onDidSetupWithJsonUrl?: DirectEventHandler; onDidTriggerAdError?: DirectEventHandler; onDidTriggerAdFinished?: DirectEventHandler; onDidTriggerAdLoaded?: DirectEventHandler; onDidTriggerAdLoadStart?: DirectEventHandler; onDidTriggerAdNotFound?: DirectEventHandler; onDidTriggerAdQuartile1?: DirectEventHandler; onDidTriggerAdQuartile2?: DirectEventHandler; onDidTriggerAdQuartile3?: DirectEventHandler; onDidTriggerAdStarted?: DirectEventHandler; onDidTriggerAllAdsCompleted?: DirectEventHandler; onDidTriggerApiReady?: DirectEventHandler; // iOS sends empty dict, Android sends { why: string } — use string for superset onDidTriggerAutoPause?: DirectEventHandler>; onDidTriggerAutoPausePlay?: DirectEventHandler>; onDidTriggerCanPlay?: DirectEventHandler; // Both platforms send { ident, ev } (not action/category/label/value) onDidTriggerCustomStatistics?: DirectEventHandler>; onDidTriggerDurationChange?: DirectEventHandler>; onDidTriggerEnded?: DirectEventHandler; onDidTriggerFullscreen?: DirectEventHandler; onDidTriggerMediaClipFailed?: DirectEventHandler; // Both platforms send id + title; Android also sends width/height onDidTriggerMediaClipLoaded?: DirectEventHandler>; onDidTriggerModeChange?: DirectEventHandler>; onDidTriggerPause?: DirectEventHandler; onDidTriggerPhaseChange?: DirectEventHandler>; onDidTriggerPlay?: DirectEventHandler; onDidTriggerPlaying?: DirectEventHandler; // iOS sends full Project dict, Android sends only { id } onDidTriggerProjectLoaded?: DirectEventHandler>; onDidTriggerRetractFullscreen?: DirectEventHandler; onDidTriggerSeeked?: DirectEventHandler>; onDidTriggerSeeking?: DirectEventHandler; onDidTriggerStall?: DirectEventHandler; onDidTriggerStateChange?: DirectEventHandler>; onDidTriggerViewFinished?: DirectEventHandler; onDidTriggerViewStarted?: DirectEventHandler; onDidTriggerVolumeChange?: DirectEventHandler>; } export default codegenNativeComponent('BBPlayerView', { interfaceOnly: true, });