UNPKG

@livelike/react-native

Version:

LiveLike React Native package

1,427 lines (1,322 loc) 101 kB
/// <reference types="react" /> import * as React from 'react'; import React__default, { RefObject, PropsWithChildren, ComponentType, ReactNode } from 'react'; import * as react_native from 'react-native'; import { ImageSourcePropType, ViewStyle, ImageStyle, TextStyle, ColorSchemeName, StyleProp, FlatList, TextInput, ImageProps, Animated, TextProps } from 'react-native'; import * as _livelike_javascript from '@livelike/javascript'; import { IChatMessageResponsePayload as IChatMessageResponsePayload$1, IChatUserMessageResponsePayload as IChatUserMessageResponsePayload$1, IWidgetOptionItem as IWidgetOptionItem$1, IReactionEmoji as IReactionEmoji$1, ICoreInitApiArgs, IUserProfile, IMessageListIteratorResult, ISendMessageArgs, IChatRoomPayload, IUserReaction, IWidgetChoiceItem as IWidgetChoiceItem$1, IWidgetPayload as IWidgetPayload$1, IWidgetInteraction as IWidgetInteraction$1, IWidgetEarnableReward as IWidgetEarnableReward$1, INumberPredictionItemOption, WidgetKind as WidgetKind$1, IGif, IUserReactionCountDetail, INumberPredictionItem, ISliderInteractionItem, ITextAskInteractionItem, IWidgetKindInteractionsMap, IRewardTransaction } from '@livelike/javascript'; import { SliderProps } from '@miblanchard/react-native-slider'; import { ComponentStyleProp as ComponentStyleProp$1 } from '@livelike/react-native'; type IChatMessage = IChatMessageResponsePayload$1 & { isDeleted?: boolean; }; type IChatUserMessage = IChatUserMessageResponsePayload$1 & { isDeleted?: boolean; }; declare enum LLThemeType { DARK = "dark", LIGHT = "light" } type LLTheme = { text: string; secondaryText: string; background: string; secondaryBackground: string; popoverBackground: string; primaryButtonBackground: string; primaryPressedButtonBackground: string; primaryButtonText: string; border: string; info: string; error: string; widgetBackground: string; widgetOption: string; widgetSelectedOption: string; disabledButtonBackground: string; disabledButtonText: string; correct: string; incorrect: string; correctIncorrectText: string; }; type LLThemes = Record<LLThemeType, LLTheme>; type LLThemeAssets = { avatar: ImageSourcePropType; send: ImageSourcePropType; gif: ImageSourcePropType; sticker: ImageSourcePropType; close: ImageSourcePropType; bin: ImageSourcePropType; blockUser: ImageSourcePropType; flag: ImageSourcePropType; reaction: ImageSourcePropType; themeSwitch: ImageSourcePropType; }; declare enum PopoverType { Menu = "menu", Reactions = "reactions" } type PopoverDetail = { messageId: string; popoverType: PopoverType | undefined; }; declare enum BannerType { INFO = "info", ERROR = "ERROR" } type Banner = { type: BannerType; id: string; message: string; }; declare enum WidgetResultState { SHOWN = "shown", HIDDEN = "hidden" } declare enum WidgetUIPhase { INTERACTIVE = "interactive", SUBMITTING = "submitting", SUBMITTED = "submitted", INTERACTIVE_TIMED_OUT = "interactive-timed-out", EXPIRED = "expired", FOLLOW_UP_PUBLISHED = "follow-up-published" } declare enum WidgetMode { POPUP = "popup", INTERACTIVE_TIMELINE = "interactive-timeline" } type LLFonts = { /** for fontWeight: 400 (or normal) */ regular?: string; /** for fontStyle: "italic" */ italic?: string; /** for fontWeight: 100 */ thin?: string; /** for fontWeight: 100 & fontStyle: "italic" */ thinItalic?: string; /** for fontWeight: 200 */ extraLight?: string; /** for fontWeight: 200 & fontStyle: "italic" */ extraLightItalic?: string; /** for fontWeight: 300 */ light?: string; /** for fontWeight: 300 & fontStyle: "italic" */ lightItalic?: string; /** for fontWeight: 500 */ medium?: string; /** for fontWeight: 500 & fontStyle: "italic" */ mediumItalic?: string; /** for fontWeight: 600 */ semiBold?: string; /** for fontWeight: 600 & fontStyle: "italic" */ semiBoldItalic?: string; /** for fontWeight: 700 */ bold?: string; /** for fontWeight: 700 & fontStyle: "italic" */ boldItalic?: string; /** for fontWeight: 800 */ extraBold?: string; /** for fontWeight: 800 & fontStyle: "italic" */ extraBoldItalic?: string; /** for fontWeight: 900 */ black?: string; /** for fontWeight: 900 & fontStyle: "italic" */ blackItalic?: string; }; type FontWeightType = 'thin' | 'extraLight' | 'light' | 'regular' | 'bold' | 'semiBold' | 'extraBold' | 'black'; type FontFamilyType = FontWeightType | `${FontWeightType}Italic` | 'italic'; type LLComponentStyleFn<TStyles> = (arg: { theme: LLTheme; fonts: LLFonts; }) => TStyles; type ComponentStyleProp<TStyles> = { styles?: Partial<TStyles>; }; type createStylesArg<TStyles> = { componentStyles: TStyles; stylesProp?: Partial<TStyles>; }; type TrackNumberPredictionWidgetInteractedArgs = { value: number; widgetOption: IWidgetOptionItem$1; }; type LLChatMessageItemHeaderStyles = { headerContainer: ViewStyle; avatarImage: ImageStyle; titleContainer: ViewStyle; username: TextStyle; ownUsername: TextStyle; timestamp: TextStyle; ownTimestamp: TextStyle; }; type LLChatMessageItemHeaderProps = ComponentStyleProp<LLChatMessageItemHeaderStyles> & { message: IChatUserMessage; isSelfMessage: boolean; formatMessageTimestamp?: (date: string) => string; }; declare function LLChatMessageItemHeader({ message: messageDetails, isSelfMessage, styles: stylesProp, formatMessageTimestamp, }: LLChatMessageItemHeaderProps): React__default.JSX.Element; type LLChatMessageItemBodyTextStyles = { text: TextStyle; deletedMessageText: TextStyle; selfMessageText: TextStyle; stickerImage: ImageStyle; }; type LLChatMessageItemBodyTextProps = ComponentStyleProp<LLChatMessageItemBodyTextStyles> & { message: string; isDeleted: boolean; isSelfMessage: boolean; }; declare const LLChatMessageItemBodyText: React__default.MemoExoticComponent<({ message, styles: stylesProp, isDeleted, isSelfMessage, }: LLChatMessageItemBodyTextProps) => React__default.JSX.Element>; type LLChatMessageItemBodyStyles = { textContainer: ViewStyle; selfMessageTextContainer: ViewStyle; textContent: ViewStyle; }; type LLChatMessageItemBodyProps = ComponentStyleProp<LLChatMessageItemBodyStyles> & { message: IChatUserMessage; isSelfMessage: boolean; ChatMessageItemBodyText?: typeof LLChatMessageItemBodyText; ChatMessageItemBodyTextStyles?: LLChatMessageItemBodyTextProps['styles']; }; declare function LLChatMessageItemBody({ message: messageDetails, isSelfMessage, styles: stylesProp, ChatMessageItemBodyTextStyles, ChatMessageItemBodyText, }: LLChatMessageItemBodyProps): React__default.JSX.Element; type LLReactionPickerItemStyles = { reactionIcon: ImageStyle; }; type LLReactionPickerItemProps = ComponentStyleProp<LLReactionPickerItemStyles> & { reaction: IReactionEmoji$1; onPress: (id: string) => void; }; declare const LLReactionPickerItem: ({ reaction, styles: stylesProp, onPress, }: LLReactionPickerItemProps) => React__default.JSX.Element; type LLReactionPickerStyles = { pickerContainer: ViewStyle; }; type LLReactionPickerProps = ComponentStyleProp<LLReactionPickerStyles> & { visible?: boolean; reactionSpaceId?: string; onPress: (reactionId: string) => void; ReactionItemComponentStyles?: LLReactionPickerItemProps['styles']; ReactionItemComponent?: typeof LLReactionPickerItem; onReactionPanelOpen?: () => void; onReactionPanelClose?: () => void; }; /** * @description Provides stock UI for the Reaction picker component. * @param {Function} onPanelOpen - A callback function to be called when the panel opens. It is used for tracking analytics events when the component becomes visible. * @param {Function} onPanelClose - A callback function to be called when the panel closes. It is used for tracking analytics events when the component is unmounted as it becomes invisible. * @returns {JSX.Element} - Stock UI for the Reaction picker. */ declare function LLReactionPicker({ visible, styles: stylesProp, reactionSpaceId, onPress, ReactionItemComponentStyles, ReactionItemComponent, onReactionPanelOpen, onReactionPanelClose, }: LLReactionPickerProps): React__default.JSX.Element; declare function useInit(initArg: ICoreInitApiArgs): { profile: IUserProfile; loaded: boolean; }; type LLStoreUnsubscriber = () => void; type LLStoreListener<TValue> = (value: TValue) => void; type LLStore<TValue> = { value: TValue; get: () => TValue; set: (value: TValue) => void; notify: () => void; listeners: LLStoreListener<TValue>[]; subscribe: (cb: LLStoreListener<TValue>) => LLStoreUnsubscriber; }; type ChatMessagesState = { chatMessagesLoaded?: boolean; chatMessages: IChatMessage[]; messageListIterator?: () => IMessageListIteratorResult; userAvatarUrl?: string; }; type UpdateChatConfigActionArg = { roomId: string; userAvatarUrl?: string; }; type UseChatMessageArg = { roomId: string; }; declare function useChatRoomState({ roomId }: UseChatMessageArg): ChatMessagesState; /** * @deprecated Use useChatRoomState hook instead */ declare function useChatMessages({ roomId }: UseChatMessageArg): ChatMessagesState; declare function useChatMessagesEffect({ roomId }: { roomId: any; }): void; declare function useChatMessageActions({ roomId }: { roomId: any; }): { sendChatMessage: (messageArgs: ISendMessageArgs) => Promise<any>; deleteChatMessage: ({ roomId, chatMessage }: { roomId: any; chatMessage: any; }) => void; }; type UseChatRoomArg = { roomId: string; }; declare function useChatRoom({ roomId }: UseChatRoomArg): { chatRoom: IChatRoomPayload; }; declare function useStickerPicker(): { selectedStickerPackId: string; setSelectedStickerPackId: React.Dispatch<React.SetStateAction<string>>; }; interface IAttribute { key: string; value: string; } declare enum ChatMessageEvent { MESSAGE_CREATED = "message-created", IMAGE_CREATED = "image-created", CUSTOM_MESSAGE_CREATED = "custom-message-created", MESSAGE_DELETED = "message-deleted", IMAGE_DELETED = "image-deleted", CHATROOM_UPDATED = "chatroom-updated" } declare const ChatUserMessageEventType: readonly [ChatMessageEvent.MESSAGE_CREATED, ChatMessageEvent.IMAGE_CREATED, ChatMessageEvent.MESSAGE_DELETED, ChatMessageEvent.IMAGE_DELETED, ChatMessageEvent.CHATROOM_UPDATED]; declare enum WidgetKind { ALERT = "alert", EMOJI_SLIDER = "emoji-slider", SOCIAL_EMBED = "social-embed", RICH_POST = "rich-post", CHEER_METER = "cheer-meter", TEXT_POLL = "text-poll", IMAGE_POLL = "image-poll", TEXT_QUIZ = "text-quiz", IMAGE_QUIZ = "image-quiz", TEXT_PREDICTION = "text-prediction", TEXT_PREDICTION_FOLLOW_UP = "text-prediction-follow-up", IMAGE_PREDICTION = "image-prediction", IMAGE_PREDICTION_FOLLOW_UP = "image-prediction-follow-up", TEXT_ASK = "text-ask", VIDEO_ALERT = "video-alert", TEXT_NUMBER_PREDICTION = "text-number-prediction", TEXT_NUMBER_PREDICTION_FOLLOW_UP = "text-number-prediction-follow-up", IMAGE_NUMBER_PREDICTION = "image-number-prediction", IMAGE_NUMBER_PREDICTION_FOLLOW_UP = "image-number-prediction-follow-up" } interface ISponsorPayload { /** sponsor resource id */ id: string; /** sponsor resource url */ url: string; /** application id */ client_id: string; /** name of the sponsor */ name: string; /** logo of the sponsor */ logo_url: string; /** brand color of the sponsor */ brand_color: string | null; /** sponsor click url */ clickthrough_url: string | null; } interface IWidgetEarnableReward { reward_action_key: string; reward_item_amount: number; reward_item_id: string; reward_item_name: string; } interface IWidgetOptionItem { id: string; url: string; description?: string; image_url?: string; vote_count?: number; vote_url?: string; number?: number; /** for prediction widget if option is correct */ is_correct?: boolean; /** for number prediction widget */ correct_number?: number; earnable_rewards: IWidgetEarnableReward[]; /** The ID of the reward item to give when this option is correct */ reward_item_id?: string | null; /** The amount of the reward item to give when this option is correct */ reward_item_amount?: number; } interface IWidgetChoiceItem { id: string; description?: string; image_url?: string; /** Total number of answers */ answer_count: number; answer_url: string; /** If answer is correct */ is_correct: boolean; translatable_fields: string[]; } interface IWidgetAttribute extends IAttribute { } interface IWidgetPayload { id: string; kind: WidgetKind; /** application Id */ client_id: string; /** Id of program the widget was created in */ program_id: string; /** When widget was created */ created_at: string; /** Widget duration */ timeout: string; /** Sync time */ program_date_time: string | null; /** Delay for when widget is published */ publish_delay: string; /** User that created the widget */ created_by: { id: string; name: string | null; image_url: string | null; }; /** Widget reactions */ reactions: IWidgetReaction[] | null; /** Widget custom data */ custom_data?: string; /** Time widget was published */ published_at?: string | null; /** Time widget was scheduled */ scheduled_at?: string | null; /** Follow up widget payload for prediction widgets */ follow_ups?: IWidgetPayload[]; /** follow up url used to create followUp widget */ follow_up_url?: string; /** Widget question */ question?: string; /** Widget options array */ options?: IWidgetOptionItem[]; /** Widget choice array */ choices?: IWidgetChoiceItem[]; /** Follow Up Widget Text Prediction Id */ text_prediction_id?: string; /** Follow Up Widget Image Prediction Id */ image_prediction_id?: string; /** Follow Up Widget Text Number Prediction Id */ text_number_prediction_id?: string; /** Follow Up Widget Image Number Prediction Id */ image_number_prediction_id?: string; sponsors: ISponsorPayload[]; url: string; subscribe_channel: string; interaction_url: string; impression_url: string; impression_count: number; unique_impression_count: number; /** total users engaged on the widget */ engagement_count: number; engagement_percent: string; status: 'pending' | 'published' | 'in-flight'; /** url to be used to schedule a widget for publishing */ schedule_url: string; rewards_url: string | null; timetoken?: string; /** claim url that could be invoked to claim prediction rewards */ claim_url?: string; reply_url?: string; /** vote_url used in the case of emoji slider and number prediction widget */ vote_url?: string; earnable_rewards: IWidgetEarnableReward[]; /** dateTime in UTC where after this dateTime, widget is not interactable */ interactive_until: string | null; widget_attributes: IWidgetAttribute[]; pubnub_enabled: boolean; widget_interactions_url_template: string; /** ask widget or alert widget title */ title?: string; /** ask widget prompt */ prompt?: string; /** ask widget confirmation message */ confirmation_message?: string; /** emoji slider attribute */ average_magnitude?: string; /** emoji slider attribute */ initial_magnitude?: string; /** alert widget widget text if present */ text?: string; /** alert widget image url if present */ image_url?: string; /** alert widget link label if present */ link_label?: string; /** alert widget link url if present */ link_url?: string; /** video on demand playback time in milliseconds */ playback_time_ms?: number; /** correct option id for prediction widget */ correct_option_id?: string; /** url to get text prediction widget details */ text_prediction_url?: string; /** url to get image prediction widget details */ image_prediction_url?: string; /** url to get image number prediction widget details */ image_number_prediction_url?: string; items?: SocialEmbedItem[]; comment?: string; } interface SocialEmbedItem { url: string; id: string; oembed: Oembed; } interface Oembed { provider_url: string; version: string; author_name: string; author_url: string; html: string; width: number; height?: number | null; url: string; cache_age: string; type: string; provider_name: string; title: string; } interface IWidgetReaction { /** Total reaction count */ count: number; /** Reaction image url */ file: string; /** Reaction id */ id: string; /** Reaction file mimetype */ mimetype: string; /** Reaction name */ name: string; react_url: string; sequence: number; } interface IWidgetInteraction { id?: string; created_at: string; widget_kind: WidgetKind; url: string; option_id?: string; choice_id?: string; profile_id: string; widget_id: string; text?: string; votes?: IWidgetInteractionVoteArgs[]; /** claim token present for prediction interaction */ claim_token?: string; /** magnitude present for emoji slider */ magnitude?: number; /** vote_count present for cheer meter widget */ vote_count?: number; } interface IWidgetInteractionVoteArgs { id: string; created_at: string; number: number; option_id: string; url: string; } interface IMessageReaction { actionTimetoken: string; uuid: string; user_reaction_id: string; } interface IMessageReactions { [reactionId: string]: IMessageReaction[]; } type DateTime = Date | string | number; interface IBaseMessageResponsePayload { id: string; chat_room_id: string; sender_id: string; sender_nickname: string; sender_image_url?: string | null; sender_profile_url: string; badge_image_url?: string | null; created_at: string; program_date_time: DateTime | null; timetoken?: string; reactions?: IMessageReactions; } interface IMessageRequestPayload { client_message_id: string; message_event: ChatMessageEvent.IMAGE_CREATED | ChatMessageEvent.MESSAGE_CREATED; chat_room_id: string; sender_id: string; sender_nickname: string; sender_image_url?: string | null; sender_profile_url: string; badge_image_url?: string | null; program_date_time: DateTime | null; image_url?: string; image_width?: number; image_height?: number; message?: string; message_metadata: Record<string, unknown> | null; } interface IMessageResponsePayload extends Omit<IMessageRequestPayload, 'message_event'>, IBaseMessageResponsePayload { content_filter: string[]; reactions?: IMessageReactions; filtered_message: string | null; filtered_sender_nickname: string | null; timetoken?: string; isFiltered?: boolean; message_event: (typeof ChatUserMessageEventType)[number]; } type IQuoteMessagePropType = IMessageResponsePayload | Omit<IQuoteMessageResponsePayload, 'quote_message' | 'reactions'>; interface IQuoteMessagePayload { quote_message: IQuoteMessagePropType; quote_message_id: string; } type IQuoteMessageResponsePayload = IQuoteMessagePayload & IMessageResponsePayload; type IChatUserMessageResponsePayload = IMessageResponsePayload | IQuoteMessageResponsePayload; type IChatMessageResponsePayload = IChatUserMessageResponsePayload | ICustomMessageResponsePayload; interface ICustomMessageRequestPayload { program_date_time: DateTime | null; custom_data: string; } interface ICustomMessageResponsePayload extends ICustomMessageRequestPayload, IBaseMessageResponsePayload { message_event: ChatMessageEvent.CUSTOM_MESSAGE_CREATED; } interface IReactionEmoji { file: string; id: string; mimetype: string; name: string; } interface IReactionPack { id: string; name: string; url: string; emojis: IReactionEmoji[]; } interface IStickerEmoji { file: string; id: string; mimetype: string; pack_id: string; pack_name: string; pack_url: string; shortcode: string; url: string; } interface IStickerPack { client_id: string; file: string; id: string; mimetype: string; name: string; stickers: IStickerEmoji[]; stickers_url: string; url: string; } declare global { interface Window { PTEST: any; } } declare function useStickerPacks(): { stickerPacks: IStickerPack[]; }; declare function useLoadStickerPacksEffect(): void; type UseThemeArg = { themeType?: ColorSchemeName; }; declare function useTheme({ themeType: themeTypeArg }?: UseThemeArg): { themeType: LLThemeType | ColorSchemeName; themes: LLThemes; themeAssets: LLThemeAssets; theme: LLTheme; setThemeType: (newThemeType: LLThemeType) => void; setThemes: (_themes: LLThemes) => void; }; type SetThemeFontsActionArg = { fonts: LLFonts; }; type UpdateUserReactionActionArg = { reactionSpaceId: string; userReaction: Pick<IUserReaction, 'id' | 'reacted_by_id' | 'reaction_id' | 'target_id'>; profileId: string; }; type WidgetState = { widgetPayload: IWidgetPayload$1; widgetUIPhase?: WidgetUIPhase; widgetInteractions?: IWidgetInteraction$1[]; selectedOptionIndex?: number; widgetResultState?: WidgetResultState; widgetRewards?: IWidgetEarnableReward$1[]; isTimelineWidget?: boolean; }; type BaseWidgetActionArgs = { widgetId: string; }; type UpdateWidgetPhaseActionArgs = BaseWidgetActionArgs & { widgetUIPhase: WidgetUIPhase; }; type UpdateWidgetChoicesActionArgs = BaseWidgetActionArgs & { widgetChoices: Pick<IWidgetChoiceItem$1, 'id' | 'answer_count'>[]; }; type UpdateWidgetOptionsActionArgs = BaseWidgetActionArgs & { widgetOptions: Pick<IWidgetOptionItem$1, 'id' | 'vote_count'>[]; }; type UpdateSelectedOptionIndexActionArgs = BaseWidgetActionArgs & { selectedOptionIndex: number; }; type UpdateWidgetResultStateActionArgs = BaseWidgetActionArgs & { widgetResultState: WidgetResultState; }; type UpdateWidgetStateActionArgs = BaseWidgetActionArgs & { widgetState: Partial<WidgetState>; }; type UpdateWidgetAverageMagnitudeArgs = BaseWidgetActionArgs & { averageMagnitude: string; }; type IUpdateNumberPredictionOptionActionArg = { widgetId: string; numberOption: INumberPredictionItemOption; optionIndex: number; }; type IUpdateSliderMagnitudeAction = { widgetId: string; magnitude: number; }; type TimelineWidgetState = { widgetId: string; widgetKind: WidgetKind$1; }; type TimelineWidgetsState = { widgets: TimelineWidgetState[]; }; type BaseTimelineWidgetsActionArgs = { programId: string; }; type updateTimelineWidgetStateActionArgs = BaseTimelineWidgetsActionArgs & { widgetTimelineState: TimelineWidgetsState; }; type UpdateTimelineWidgetsActionArgs = BaseTimelineWidgetsActionArgs & { widgets: TimelineWidgetState[]; prepend?: boolean; }; type IUpdateTextAskInputTextAction = { widgetId: string; inputText: string; }; declare function useFonts(): { fonts: LLFonts; setFonts: ({ fonts }: SetThemeFontsActionArg) => void; }; type UseFontFamilyArgs = { style: StyleProp<TextStyle>; }; /** * @description useFontFamily hook returns an evaluated fontFamily based on fontWeight and fontStyle * This is useful in case of custom fonts. * @returns fontFamily and fontFamilyType */ declare function useFontFamily({ style }: UseFontFamilyArgs): { fontFamily: FontWeightType; fontFamilyType: FontFamilyType; }; type UseStylesArg<TStyles> = { componentStylesFn: LLComponentStyleFn<TStyles>; stylesProp?: Partial<TStyles>; }; declare function useStyles<TStyles>({ componentStylesFn, stylesProp, }: UseStylesArg<TStyles>): TStyles; declare function useApi<ApiResponse = unknown>(apiFunction: () => Promise<ApiResponse>): { data: ApiResponse; error: string; isLoading: boolean; onApi: () => Promise<ApiResponse>; }; type GifPickerState = { gifImages: IGif[]; isLoading: boolean; error: null; }; declare function useGifPicker(): { isLoading: boolean; gifImages: IGif[]; loadNextGifImages: () => Promise<void>; onGifSearchInputChange: (gifSearchInput: any, { debounce }?: { debounce: boolean; }) => void; error: null; }; declare function useBanner(): { banners: Banner[]; }; declare function useBannerActions(): { addBannerItem: ({ bannerType, bannerMessage }: { bannerType: any; bannerMessage: any; }) => void; }; type UseAutoHideBannerEffectArg = { bannerAutoHideTimeout?: number; }; declare const DEFAULT_BANNER_AUTO_HIDE_TIMEOUT = 4000; declare function useAutoHideBannerEffect({ bannerAutoHideTimeout, }: { bannerAutoHideTimeout?: number; }): void; type UseReactionPackArg = { reactionSpaceId: string; }; declare function useReactionPacks({ reactionSpaceId }: UseReactionPackArg): { reactionPacks: IReactionPack[]; }; type UserReactionState = IUserReactionCountDetail & { imageSrc: string; }; type UserReactionsForTargetIdState = { [key: string]: UserReactionState; }; type UseUserReactionsArg = { reactionSpaceId: string; targetId: string; }; declare function useUserReactions({ reactionSpaceId, targetId, }: UseUserReactionsArg): { userReactions: UserReactionsForTargetIdState; }; type UseMessageItemPopoverArg = { messageId?: string; }; declare function useMessageItemPopover(arg?: UseMessageItemPopoverArg): { popoverDetail: PopoverDetail; showPopover: (args: PopoverDetail) => void; hidePopover: () => void; }; declare function useAutoScroll({ ref }: { ref: RefObject<FlatList>; }): { onScrollEndDrag: () => void; onContentSizeChangeHandler: (width: number, height: number) => void; }; type UseLoadReactionPackArg = { reactionSpaceId: string; }; declare function useLoadReactionPacksEffect({ reactionSpaceId, }: UseLoadReactionPackArg): void; type UseReactionSpaceArg = { targetGroupId: string; }; declare function useReactionSpace({ targetGroupId }: UseReactionSpaceArg): { reactionSpace: _livelike_javascript.IReactionSpace; }; type UseLoadUserReactionsArg = { reactionSpaceId: string; }; declare function useLoadUserReactions({ reactionSpaceId, }: UseLoadUserReactionsArg): { loadUserReactions: ({ targetIds }: { targetIds: string[]; }) => void; }; declare function useUserReactionsEffect({ reactionSpaceId }: { reactionSpaceId: any; }): void; declare function useSelectedFieldStore<Store extends LLStore<unknown>, SelectedValue>(store: Store, selectorFn?: () => SelectedValue): SelectedValue; type UseLoadWidgetEffectArg = { widgetId: string; widgetKind: WidgetKind$1; programId: string; }; declare function useLoadWidgetEffect({ widgetId, widgetKind, programId, }: UseLoadWidgetEffectArg): { isLoading: boolean; data: readonly [_livelike_javascript.IWidgetPayload, _livelike_javascript.IWidgetInteraction[], _livelike_javascript.IWidgetEarnableReward[]]; onApi?: undefined; error?: undefined; } | { onApi: () => Promise<readonly [_livelike_javascript.IWidgetPayload, _livelike_javascript.IWidgetInteraction[], _livelike_javascript.IRewardTransaction[]]>; isLoading: boolean; error: string; data: readonly [_livelike_javascript.IWidgetPayload, _livelike_javascript.IWidgetInteraction[], _livelike_javascript.IRewardTransaction[]]; }; type UseWidgetArg = { widgetId: string; }; declare function useWidget({ widgetId }: UseWidgetArg): IWidgetPayload; type UseWidgetInteractionsArg = { widgetId: string; }; declare function useWidgetInteractions({ widgetId }: UseWidgetInteractionsArg): IWidgetInteraction[]; type UseWidgetActionsArg = { widgetId: string; }; declare function useWidgetActions({ widgetId }: UseWidgetActionsArg): { updateWidgetUIPhaseAction: ({ widgetId, widgetUIPhase, }: UpdateWidgetPhaseActionArgs) => void; updateWidgetChoicesAction: ({ widgetId, widgetChoices, }: UpdateWidgetChoicesActionArgs) => void; updateWidgetOptionsAction: ({ widgetId, widgetOptions, }: UpdateWidgetOptionsActionArgs) => void; updateSelectedOptionIndexAction: ({ widgetId, selectedOptionIndex, }: UpdateSelectedOptionIndexActionArgs) => void; updateWidgetResultStateAction: ({ widgetId, widgetResultState, }: UpdateWidgetResultStateActionArgs) => void; updateWidgetStateAction: ({ widgetId, widgetState, }: UpdateWidgetStateActionArgs) => void; updateWidgetAverageMagnitude: ({ widgetId, averageMagnitude, }: UpdateWidgetAverageMagnitudeArgs) => void; updateNumberPredictionOptionAction: ({ widgetId, numberOption, optionIndex, }: IUpdateNumberPredictionOptionActionArg) => void; updateEmojiSliderMagnitudeAction: ({ widgetId, magnitude, }: IUpdateSliderMagnitudeAction) => void; updateTextAskInputTextAction: ({ widgetId, inputText, }: IUpdateTextAskInputTextAction) => void; }; type UseWidgetOptionsArg = { widgetId: string; }; declare function useWidgetOptions({ widgetId, }: UseWidgetOptionsArg): IWidgetOptionItem$1[]; type UseSelectedWidgetOption = { widgetId: string; }; declare function useInteractedWidgetOption({ widgetId }: { widgetId: any; }): _livelike_javascript.IWidgetOptionItem | _livelike_javascript.IWidgetChoiceItem; type UseWidgetSelectedOptionIndexArg = { widgetId: string; }; declare function useWidgetSelectedOptionIndex({ widgetId, }: UseWidgetSelectedOptionIndexArg): number; type UseWidgetResultStateArg = { widgetId: string; }; declare function useWidgetResultState({ widgetId }: UseWidgetResultStateArg): WidgetResultState; type UseWidgetUIPhaseArg = { widgetId: string; }; declare const useWidgetUIPhase: ({ widgetId }: UseWidgetUIPhaseArg) => WidgetUIPhase; type UseIsWidgetDisabledArg = { widgetId: string; }; declare const useIsWidgetDisabled: ({ widgetId }: UseIsWidgetDisabledArg) => boolean; type UseIsWidgetOptionDisabledArg = { widgetId: string; optionIndex: number; }; declare const useIsWidgetOptionDisabled: ({ widgetId, optionIndex, }: UseIsWidgetOptionDisabledArg) => boolean; type UseWidgetInteractionActionsArg = { widgetId: string; }; type WidgetUpdateInteractionActionArg = { interactionItem: IWidgetOptionItem$1; }; type WidgetCreateInteractionActionArg = { interactionItem: IWidgetChoiceItem$1 | IWidgetOptionItem$1 | INumberPredictionItem | ISliderInteractionItem | ITextAskInteractionItem; }; declare function useWidgetInteractionActions({ widgetId, }: UseWidgetInteractionActionsArg): { updateWidgetInteractionAction: ({ interactionItem }: WidgetUpdateInteractionActionArg) => Promise<void | _livelike_javascript.IWidgetInteraction>; createWidgetInteractionAction: ({ interactionItem }: WidgetCreateInteractionActionArg) => Promise<void | _livelike_javascript.IWidgetInteraction>; }; type UseWidgetInteractiveTimeoutArg = { widgetId: string; /** custom interactiveTimeout, defaults to the timeout value set when creating widget in producer suite */ interactiveTimeout?: number | null; /** function to be called when widget timeouts */ onInteractiveTimeout?: () => void; }; type UseWidgetInteractiveTimeoutResult = { /** resulted timeout value to be used by LLWidgetHeader */ interactiveTimeout: number | null; /** resulted timeout handler function to be used by LLWidgetHeader */ onInteractiveTimeout: () => void; }; /** * @description useWidgetInteractiveTimeout hook is to derive resulted interactiveTimeout based on * the passed interactiveTimeout value that in turns drives widget UI phases. * For example, once the widget timeouts, widget UI phase would transition from INTERACTIVE to TIMED_OUT * which would turn the widget into a non interact-able widget. * Resulted interactiveTimeout value is used by `LLWidgetHeader` component. * @since 0.1.0 */ declare const useWidgetInteractiveTimeout: ({ widgetId, interactiveTimeout: interactiveTimeoutProp, onInteractiveTimeout: onInteractiveTimeoutProp, }: UseWidgetInteractiveTimeoutArg) => UseWidgetInteractiveTimeoutResult; type UseWidgetExpiryEffectArg = { widgetId: string; }; /** * @description useWidgetExpiryEffect hook runs a timer to update widget UI phase to EXPIRED * once the expiry time has passed. Expiry time is set when creating widget from producer suite * @since 0.1.0 */ declare function useWidgetExpiryEffect({ widgetId }: UseWidgetExpiryEffectArg): void; type UseWidgetSponsorsArg = { widgetId: string; }; declare function useWidgetSponsors({ widgetId }: UseWidgetSponsorsArg): ISponsorPayload[]; type UseWidgetKindArg = { widgetId: string; }; declare function useWidgetKind({ widgetId }: UseWidgetKindArg): WidgetKind; type UseWidgetChoicesArg = { widgetId: string; }; declare function useWidgetChoices({ widgetId, }: UseWidgetChoicesArg): IWidgetChoiceItem$1[]; type UseWidgetRewardsArg = { widgetId: string; }; declare function useWidgetRewards({ widgetId }: UseWidgetRewardsArg): IWidgetEarnableReward[]; type UseIsEndWidgetUIPhaseArg = { widgetId: string; }; declare const useIsEndWidgetUIPhase: ({ widgetId, }: UseIsEndWidgetUIPhaseArg) => boolean; type UseWidgetRewardsEffectArg = { widgetId: string; }; declare const useWidgetRewardsEffect: ({ widgetId, }: UseWidgetRewardsEffectArg) => { slideInOutStyles: { translateY: any; }[]; }; type UseWidgetDismissArg = { widgetId: string; onDismiss?: () => void; }; declare function useWidgetDismiss({ widgetId, onDismiss }: UseWidgetDismissArg): { dismiss: boolean; onDismissHandler: () => void; }; type UsePredictionWidgetEffectArg = { widgetId: string; programId: string; inlineFollowUp?: boolean; }; /** * @description Listens to prediction follow up updates, and updates widget state and return followup widget details * @param UsePredictionWidgetEffectArg * @returns object with "followUpWidget" prop */ declare const usePredictionWidgetEffect: ({ widgetId, programId, inlineFollowUp, }: UsePredictionWidgetEffectArg) => { followUpWidget: IWidgetPayload$1; }; type UsePredictionClaimRewardEffectArg = { widgetId: string; widgetKind: WidgetKind$1; }; /** * @description `usePredictionClaimRewardEffect` hook claims the prediction reward * whenever a prediction follow up based UI is rendered. * Internally it calls claimPredictionWidgetRewards JS API. */ declare function usePredictionClaimRewardEffect({ widgetId, widgetKind }: { widgetId: any; widgetKind: any; }): void; type UseUserNumberOptionsArg = { widgetId: string; }; declare function useUserNumberOptions({ widgetId, }: UseUserNumberOptionsArg): INumberPredictionItemOption[]; type UseNumberPredictionWidgetOptionArg = { widgetId: string; optionIndex: number; numberOption: INumberPredictionItemOption; }; type NumberPredictionWidgetOptionDetails = { widgetOption: IWidgetOptionItem$1; interactedNumberOption: INumberPredictionItemOption; showWidgetResult: boolean; isCorrect: boolean; isWidgetOptionDisabled: boolean; }; declare function useNumberPredictionWidgetOption({ widgetId, optionIndex, numberOption, }: UseNumberPredictionWidgetOptionArg): NumberPredictionWidgetOptionDetails; type UseUserSliderMagnitudeArg = { widgetId: string; }; declare function useUserSliderMagnitude({ widgetId, }: UseUserSliderMagnitudeArg): number | undefined; type UseEmojiSliderArg = { thumbImages: { min: number; imageUrl: string; }[]; onSlidingComplete: (value: number) => void; onValueChange?: (value: number) => void; value: number; initialValue?: number; }; /** * @description useEmojiSlider hook provides state logic and effects for LLEmojiSlider component */ declare const useEmojiSlider: ({ thumbImages, onValueChange, onSlidingComplete, initialValue, value, }: UseEmojiSliderArg) => { sliderInput: number; thumbImg: string; onSlidingCompleteHandler: ([value]: [any]) => void; onValueChangeHandler: ([value]: [any]) => void; }; type UseLoadWidgetRewardsEffectArg = { widgetId: string; }; declare function useLoadWidgetRewardsEffect({ widgetId }: { widgetId: any; }): void; type UseCheerMeterOnOptionPressArg = { widgetId: string; optionIndex: number; throttleTime: number; }; declare const useCheerMeterOnOptionPress: ({ widgetId, optionIndex, throttleTime, }: UseCheerMeterOnOptionPressArg) => () => void; type UseTimelineWidgetsArg = { programId: string; }; declare function useTimelineWidgets({ programId }: UseTimelineWidgetsArg): TimelineWidgetState[]; type UseLoadTimelineWidgetEffectArg = { programId: string; mode: WidgetMode; }; declare function useLoadTimelineWidgetEffect({ programId, mode, }: UseLoadTimelineWidgetEffectArg): { onApi: () => Promise<IWidgetDetails>; isLoading: boolean; error: string; data: IWidgetDetails; onLoadMore: () => Promise<void>; }; type IWidgetDetails = [ IWidgetPayload$1[], IWidgetKindInteractionsMap, IRewardTransaction[] ]; type useTimelineWidgetActionsArg = { programId: string; }; declare function useTimelineWidgetActions({ programId, }: useTimelineWidgetActionsArg): { onWidgetInteractiveTimeout: (timedOutWidgetId: string) => void; updateTimelineWidgetStateAction: ({ programId, widgetTimelineState, }: updateTimelineWidgetStateActionArgs) => void; updateTimelineWidgetsAction: ({ programId, widgets, prepend, }: UpdateTimelineWidgetsActionArgs) => void; }; type UseIsTimelineWidgetArg = { widgetId: string; }; declare const useIsTimelineWidget: ({ widgetId }: UseIsTimelineWidgetArg) => boolean; type UseTextAskInputTextArg = { widgetId: string; }; declare function useTextAskInputText({ widgetId, }: UseTextAskInputTextArg): string | undefined; type UseChatRoomActionsArg = { roomId: string; }; declare function useChatRoomActions({ roomId }: UseChatRoomActionsArg): { updateChatConfig: (arg: UpdateChatConfigActionArg) => void; loadPrevMessages: () => Promise<IteratorResult<{ messages: IChatMessageResponsePayload[]; }, { messages: IChatMessageResponsePayload[]; }>>; }; declare function useAnalytics(): { getAnalyticsProvider: () => _livelike_javascript.IAnalyticsProvider; setAnalyticsProvider: (provider: _livelike_javascript.IAnalyticsProvider) => void; trackEvent: (event: string, trackObj: unknown) => void; }; type UseChatMessageMenuItemActionsArg = { messageDetails: IChatMessage; }; declare const useChatMessageMenuItemActions: ({ messageDetails, }: UseChatMessageMenuItemActionsArg) => { blockId: string; deleteMessageApiFn: () => Promise<any>; reportMessageApiFn: () => Promise<any>; blockUserApiFn: () => Promise<any>; unblockUserApiFn: () => Promise<any>; blockUnblockApiFn: () => Promise<any>; }; type UseUserReactionActionsArg = { targetGroupId: string; targetId: string; }; declare function useUserReactionActions({ targetGroupId, targetId, }: UseUserReactionActionsArg): { addReaction: (actionArgs: UpdateUserReactionActionArg) => void; removeReaction: (actionArgs: UpdateUserReactionActionArg, selfReactionId: string) => void; }; type UseWidgetSubmitActionArg = { widgetId: string; }; declare function useWidgetSubmitAction({ widgetId }: UseWidgetSubmitActionArg): { onInteractionSubmit: ({ interactionItem }: WidgetCreateInteractionActionArg) => Promise<void | IWidgetInteraction>; }; type UseWidgetInteractedAnalyticsArgs = { widgetId: string; }; declare function useWidgetInteractedAnalytics({ widgetId, }: UseWidgetInteractedAnalyticsArgs): { trackWidgetInteractedAction: <T>({ interactionItem }: { interactionItem: T; }) => void; }; declare function useTrackKeyboardEffect(): void; type useDebounceArgs = { callback: (...args: any[]) => void; timer: number; }; declare function useDebounce({ callback, timer }: useDebounceArgs): (...args: any[]) => void; type UseCustomFontStyleArgs = { style: StyleProp<TextStyle>; }; /** * @description useCustomFontStyle hook returns an evaluated styles for Text based Component * based on fontWeight and fontStyle, these tweaked style are needed because of platform (IOS & Android) * limitation for custom fonts * @returns styles */ declare function useCustomFontStyle({ style }: UseCustomFontStyleArgs): { color?: react_native.ColorValue; fontFamily?: string; fontSize?: number; letterSpacing?: number; lineHeight?: number; textAlign?: "center" | "auto" | "left" | "right" | "justify"; textDecorationLine?: "none" | "underline" | "line-through" | "underline line-through"; textDecorationStyle?: "solid" | "double" | "dotted" | "dashed"; textDecorationColor?: react_native.ColorValue; textShadowColor?: react_native.ColorValue; textShadowOffset?: { width: number; height: number; }; textShadowRadius?: number; textTransform?: "none" | "capitalize" | "uppercase" | "lowercase"; testID?: string; fontVariant?: react_native.FontVariant[]; writingDirection?: "auto" | "ltr" | "rtl"; backfaceVisibility?: "hidden" | "visible"; backgroundColor?: react_native.ColorValue; borderBlockColor?: react_native.ColorValue; borderBlockEndColor?: react_native.ColorValue; borderBlockStartColor?: react_native.ColorValue; borderBottomColor?: react_native.ColorValue; borderBottomEndRadius?: react_native.AnimatableNumericValue; borderBottomLeftRadius?: react_native.AnimatableNumericValue; borderBottomRightRadius?: react_native.AnimatableNumericValue; borderBottomStartRadius?: react_native.AnimatableNumericValue; borderColor?: react_native.ColorValue; borderCurve?: "circular" | "continuous"; borderEndColor?: react_native.ColorValue; borderEndEndRadius?: react_native.AnimatableNumericValue; borderEndStartRadius?: react_native.AnimatableNumericValue; borderLeftColor?: react_native.ColorValue; borderRadius?: react_native.AnimatableNumericValue; borderRightColor?: react_native.ColorValue; borderStartColor?: react_native.ColorValue; borderStartEndRadius?: react_native.AnimatableNumericValue; borderStartStartRadius?: react_native.AnimatableNumericValue; borderStyle?: "solid" | "dotted" | "dashed"; borderTopColor?: react_native.ColorValue; borderTopEndRadius?: react_native.AnimatableNumericValue; borderTopLeftRadius?: react_native.AnimatableNumericValue; borderTopRightRadius?: react_native.AnimatableNumericValue; borderTopStartRadius?: react_native.AnimatableNumericValue; opacity?: react_native.AnimatableNumericValue; elevation?: number; pointerEvents?: "none" | "auto" | "box-none" | "box-only"; alignContent?: "center" | "flex-start" | "flex-end" | "stretch" | "space-between" | "space-around"; alignItems?: react_native.FlexAlignType; alignSelf?: "auto" | react_native.FlexAlignType; aspectRatio?: string | number; borderBottomWidth?: number; borderEndWidth?: number; borderLeftWidth?: number; borderRightWidth?: number; borderStartWidth?: number; borderTopWidth?: number; borderWidth?: number; bottom?: react_native.DimensionValue; display?: "none" | "flex"; end?: react_native.DimensionValue; flex?: number; flexBasis?: react_native.DimensionValue; flexDirection?: "row" | "column" | "row-reverse" | "column-reverse"; rowGap?: number; gap?: number; columnGap?: number; flexGrow?: number; flexShrink?: number; flexWrap?: "wrap" | "nowrap" | "wrap-reverse"; height?: react_native.DimensionValue; justifyContent?: "center" | "flex-start" | "flex-end" | "space-between" | "space-around" | "space-evenly"; left?: react_native.DimensionValue; margin?: react_native.DimensionValue; marginBottom?: react_native.DimensionValue; marginEnd?: react_native.DimensionValue; marginHorizontal?: react_native.DimensionValue; marginLeft?: react_native.DimensionValue; marginRight?: react_native.DimensionValue; marginStart?: react_native.DimensionValue; marginTop?: react_native.DimensionValue; marginVertical?: react_native.DimensionValue; maxHeight?: react_native.DimensionValue; maxWidth?: react_native.DimensionValue; minHeight?: react_native.DimensionValue; minWidth?: react_native.DimensionValue; overflow?: "scroll" | "hidden" | "visible"; padding?: react_native.DimensionValue; paddingBottom?: react_native.DimensionValue; paddingEnd?: react_native.DimensionValue; paddingHorizontal?: react_native.DimensionValue; paddingLeft?: react_native.DimensionValue; paddingRight?: react_native.DimensionValue; paddingStart?: react_native.DimensionValue; paddingTop?: react_native.DimensionValue; paddingVertical?: react_native.DimensionValue; position?: "absolute" | "relative"; right?: react_native.DimensionValue; start?: react_native.DimensionValue; top?: react_native.DimensionValue; width?: react_native.DimensionValue; zIndex?: number; direction?: "inherit" | "ltr" | "rtl"; shadowColor?: react_native.ColorValue; shadowOffset?: Readonly<{ width: number; height: number; }>; shadowOpacity?: react_native.AnimatableNumericValue; shadowRadius?: number; transform?: string | (react_native.PerpectiveTransform | react_native.RotateTransform | react_native.RotateXTransform | react_native.RotateYTransform | react_native.RotateZTransform | react_native.ScaleTransform | react_native.ScaleXTransform | react_native.ScaleYTransform | react_native.TranslateXTransform | react_native.TranslateYTransform | react_native.SkewXTransform | react_native.SkewYTransform | react_native.MatrixTransform)[]; transformMatrix?: number[]; rotation?: react_native.AnimatableNumericValue; scaleX?: react_native.AnimatableNumericValue; scaleY?: react_native.AnimatableNumericValue; translateX?: react_native.AnimatableNumericValue; translateY?: react_native.AnimatableNumericValue; textAlignVertical?: "center" | "auto" | "top" | "bottom"; verticalAlign?: "auto" | "top" | "bottom" | "middle"; includeFontPadding?: boolean; }; type LLUserReactionCountDetailStyles = { container: ViewStyle; reactionIcon: ImageStyle; reactionCountText: TextStyle; selfReactionContainer: ViewStyle; selfReactionCountText: TextStyle; }; type LLUserReactionCountDetailProps = ComponentStyleProp<LLUserReactionCountDetailStyles> & { reaction: UserReactionState; onPress: (reactionId: string) => void; }; declare const LLUserReactionCountDetail: ({ reaction, styles: stylesProp, onPress, }: LLUserReactionCountDetailProps) => React__default.JSX.Element; type LLUserReactionCountsStyles = { reactionCountsContainer: ViewStyle; moreReactionsView: ViewStyle; moreReactionsText: TextStyle; }; type LLUserReactionCountsProps = ComponentStyleProp<LLUserReactionCountsStyles> & { targetGroupId: string; targetId: string; showReactionPicker?: boolean; reactionsLimit?: number; onReactionItemPress?: () => void; UserReactionCountDetailComponent?: typeof LLUserReactionCountDetail; UserReactionCountDetailComponentStyles?: LLUserReactionCountDetailProps['styles']; MessageReactionPickerComponent?: typeof LLReactionPicker; MessageReactionPickerComponentStyles?: LLReactionPickerProps['styles']; }; declare function LLUserReactionCounts({ targetGroupId, targetId, showReactionPicker, onReactionItemPress, styles: stylesProp, MessageReactionPickerComponentStyles, UserReactionCountDetailComponentStyles, reactionsLimit, UserReactionCountDetailComponent, MessageReactionPickerComponent, }: LLUserReactionCountsProps): React__default.JSX.Element; type LLChatMessageItemFooterStyles = { footerContainer: ViewStyle; addReactionIcon: ImageStyle; }; type LLChatMessageItemFooterProps = ComponentStyleProp<LLChatMessageItemFooterStyles> & { message: IChatUserMessage; UserReactionsCountComponent?: typeof LLUserReactionCounts; UserReactionsCountComponentStyles?: LLUserReactionCountsProps['styles']; }; declare function LLChatMessageItemFooter({ message: messageDetails, styles: stylesProp, UserReactionsCountComponentStyles, UserReactionsCountComponent, }: LLChatMessageItemFooterProps): React__default.JSX.Element; type LLChatMessageMenuStyles = { menuContainer: ViewStyle; }; type LLChatMessageMenuProps = ComponentStyleProp<LLChatMessageMenuStyles> & PropsWithChildren<{ visible: boolean; }>; declare function LLChatMessageMenu({ visible, styles: stylesProp, children, }: LLChatMessageMenuProps): React__default.JSX.Element; type LLChatMessageMenuOptionStyles = { menuItem: ViewStyle; menuItemText: TextStyle; menuItemIcon: ImageStyle; menuItemTopDivider: ViewStyle; menuItemBottomDivider: ViewStyle; }; type LLChatMessageMenuOptionProps<OnClickApiFnResponseData extends Promise<any>> = ComponentStyleProp<LLChatMessageMenuOptionStyles> & { icon: ImageSourcePropType; textDesc: string; divider?: Partial<{ top: boolean; bottom: boolean; }>; onClickApiFn: () => OnClickApiFnResponseData; }; declare function LLChatMessageMenuOption<OnClickApiFnResponseData extends Promise<any>>({ icon, textDesc, divider, onClickApiFn, styles: stylesProp, }: LLChatMessageMenuOptionProps<OnClickApiFnRe