/// import type { ExtensionType, ReactNativeCompatibleType, TargetConfig } from '../plugin/src/config'; import type { LiveActivityAttributesName, MultiProductWidgetFolderName, TargetName, WidgetKindName } from './generatedNames'; import { type SharedData } from './modules/extension/index'; import { type LiveActivityHandle } from './modules/liveActivity/index'; import { type ConversationInfo, type MessageLayout, type PresentationStyle } from './modules/messages/index'; import { AppGroupStorage } from './modules/storage/index'; export type SetDataOptions = { /** * Widget product handles default to `true` (reload after write). * Share/action/clip default to `false`. Pass `refresh: false` to batch widget writes. */ refresh?: boolean; }; /** Dated timeline entry for expo-ui widgets (maps to expo-widgets updateTimeline). */ export type TimelineEntry = Record> = { date: Date; props: T; }; export interface WidgetProductTarget extends BaseTarget { widget: (kindName: WidgetKindName, layout?: React.ComponentType) => BaseTarget; liveActivity: (attributesName?: LiveActivityAttributesName) => LiveActivityHandle; } export interface WidgetFolderTarget { name: string; type: 'widget' | 'watch-widget'; appGroup: string; config: TargetConfig; /** Gallery kind or Android provider handle. */ widget: (kindName: WidgetKindName, layout?: React.ComponentType) => BaseTarget; /** Live Activity handle from this folder's ios.liveActivity / ios.liveActivities config. */ liveActivity: (attributesName?: LiveActivityAttributesName) => LiveActivityHandle; /** Write the same payload to every gallery kind / provider in this folder. */ setData: (data: Record, options?: SetDataOptions) => void; /** Reload every gallery kind / provider in this folder. */ refresh: () => void; } export interface BaseTarget { name: string; type: ExtensionType; appGroup: string; storage: AppGroupStorage; config: TargetConfig; setData: (data: Record, options?: SetDataOptions) => void; getData: >() => T; refresh: () => void; /** Schedule dated props for an expo-ui widget (iOS sandbox). */ setTimeline: (entries: TimelineEntry[]) => void; /** Read back the expo-ui widget timeline (iOS). */ getTimeline: = Record>() => Promise[]>; } export interface ExtensionTarget extends BaseTarget { type: ReactNativeCompatibleType; close: () => void; openHostApp: (path?: string) => void; getSharedData: () => SharedData | null; } export interface MessagesExtensionTarget extends Omit { type: 'messages'; getPresentationStyle: () => PresentationStyle | null; requestPresentationStyle: (style: PresentationStyle) => void; sendMessage: (layout: MessageLayout) => void; sendUpdate: (layout: MessageLayout, sessionId: string) => void; createSession: () => string | null; insertAttachment: (payload?: { filename?: string; contents?: string; }) => Promise; getConversationInfo: () => ConversationInfo | null; addEventListener: (eventName: 'onPresentationStyleChange', listener: (style: PresentationStyle) => void) => { remove: () => void; }; } export interface NonExtensionTarget extends BaseTarget { close?: undefined; openHostApp?: undefined; getSharedData?: undefined; } export interface SafariExtensionTarget extends BaseTarget { type: 'safari'; closePopup: () => void; openTab: (url: string) => Promise; copyToClipboard: (text: string) => Promise; } export type Target = ExtensionTarget | MessagesExtensionTarget | NonExtensionTarget | SafariExtensionTarget | WidgetFolderTarget | WidgetProductTarget; export declare function createTarget(targetName: MultiProductWidgetFolderName, componentFunc?: undefined): WidgetFolderTarget; export declare function createTarget<_T extends 'messages'>(targetName: TargetName | WidgetKindName, componentFunc?: React.ComponentType): MessagesExtensionTarget; export declare function createTarget<_T extends 'safari'>(targetName: TargetName | WidgetKindName, componentFunc?: React.ComponentType): SafariExtensionTarget; export declare function createTarget<_T extends Exclude>(targetName: TargetName | WidgetKindName, componentFunc?: React.ComponentType): ExtensionTarget; export declare function createTarget<_T extends Exclude>(targetName: TargetName | WidgetKindName, componentFunc?: React.ComponentType): NonExtensionTarget | WidgetFolderTarget; export declare function createTarget(targetName: TargetName | WidgetKindName, componentFunc?: React.ComponentType): Target; //# sourceMappingURL=Target.d.ts.map