import type { ListDetail } from "@swishapp/api-client/2026-04"; import type { UnsaveItemSuccessResponse, EditItemListsSuccessResponse, EditItemVariantSuccessResponse, EditListSuccessResponse } from "../intents/types"; import { Ref, SwishUiElement } from "../swish"; type ExtractSuccessData = T extends { code: "ok"; data: infer D; } ? D : never; export interface UiResponseBase { code: "ok" | "closed"; } export interface ClosedUiResponse extends UiResponseBase { code: "closed"; } export interface SuccessUiResponse extends UiResponseBase { code: "ok"; data: T; } export type UiResponse = T extends void ? ClosedUiResponse | SuccessUiResponse : ClosedUiResponse | SuccessUiResponse; export interface ToastManager { show(toast: Toast, id?: number): void; hide(id: string): void; clear(): void; } export interface Toast { title?: string; text: string; image?: string; action?: { label: string; }; variant?: "compact" | "full"; icon?: string; } export interface SignInOptions { returnTo?: string; } export interface UnsaveAlertOptions { itemId: string; } export type UnsaveAlertSubmitData = ExtractSuccessData; export interface DeleteListAlertOptions { listId: string; } export interface ConfirmDialogOptions { titleKey?: string; descriptionKey?: string; confirmLabelKey?: string; cancelLabelKey?: string; danger?: boolean; } export interface DrawerOptions { view?: "home" | "list" | "lists" | "saves" | "order" | "orders" | "notifications" | "profile" | "product"; listId?: string; listType?: ListDetail["type"]; productId?: string; variantId?: string; orderId?: string; } export interface ListMenuOptions { listId: string; } export interface OrderMenuOptions { orderId: string; } export type ListEditorSubmitData = ExtractSuccessData; export interface ListMenuEditAccessData { currentListAccess: "public" | "private"; } export type ListMenuResponse = UiResponse<{ action: "edit"; data: ListEditorSubmitData; } | { action: "delete"; } | { action: "edit-access"; data?: ListMenuEditAccessData; } | { action: "add-items"; } | { action: "share"; }>; export type OrderMenuResponse = UiResponse; export interface ListDetailPageMenuOptions { listId: string; } export interface ListDetailPageOptions { listId?: string; } export interface ListSelectOptions { itemId: string; } export type ListSelectSubmitData = ExtractSuccessData; export type ListSelectResponse = UiResponse<{ action: "submit"; data: ListSelectSubmitData; } | { action: "unsave"; data: UnsaveAlertSubmitData; }>; export interface VariantSelectOptions { itemId?: string; productId?: number; productHandle?: string; variantId?: number; } export type VariantSelectSubmitData = ExtractSuccessData; export interface QuickBuyOptions { productId?: number; productHandle?: string; variantId?: number; } export interface QuickBuySubmitData { product: VariantSelectSubmitData["product"]; variant: VariantSelectSubmitData["variant"]; } export interface ListEditorOptions { listId?: string; } export interface RequireUiComponentOptions { singleInstance?: boolean; onHydrated?: (ref: Ref) => void; refElement?: HTMLElement; } export {};