///
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