react-roast
Version:
A React widget to get feedback
101 lines (96 loc) • 2.91 kB
TypeScript
import { ReactNode } from 'react';
import * as react_jsx_runtime from 'react/jsx-runtime';
type ScreenshotType = "full-screenshot" | "selected-screenshot";
type ScreenshotBlobs = Array<{
blob: Blob;
type: ScreenshotType;
}>;
interface User {
id?: string;
name?: string;
email: string;
customData?: Record<string, any>;
}
interface FormDataProps {
email?: string;
message: string;
screenshotBlobs: ScreenshotBlobs;
}
interface NotificationMessage {
message: string;
type: "info" | "hint" | "offer" | "reward" | "social" | "urgent";
}
type IslandPlacement = "left-center" | "left-bottom" | "right-center" | "right-bottom" | "bottom-left" | "bottom-right";
type IslandMode = "default" | "icon";
type FormSubmitHandler = (data: FormDataProps) => Promise<boolean>;
interface WidgetCustomizeProps {
form?: {
className?: string;
errorMessage?: string;
successMessage?: string;
submitButton?: {
label?: string;
className?: string;
};
cancelButton?: {
label?: string;
className?: string;
};
messageInput?: {
placeholder?: string;
className?: string;
};
output?: {
excludeFullPageScreenshot?: boolean;
excludeSelectedElementScreenshot?: boolean;
};
};
island?: {
mode?: IslandMode;
placement?: IslandPlacement;
className?: string;
label?: string;
switchButton?: {
className?: string;
thumb?: {
className?: string;
};
};
};
notifications?: {
enable?: boolean;
repeatDelay?: number;
displayDuration?: number;
repeatAllowed?: boolean;
allowDismissal?: boolean;
allowParmanentDismissal?: boolean;
paramanentDismissalExpiryDays?: number;
messages?: NotificationMessage[];
};
}
interface BaseWidgetProviderProps {
customize?: WidgetCustomizeProps;
hideIsland?: boolean;
children: ReactNode;
}
interface LocalWidgetProviderProps extends BaseWidgetProviderProps {
mode: "local";
siteId?: never;
onFormSubmit: FormSubmitHandler;
}
interface RemoteWidgetProviderProps extends BaseWidgetProviderProps {
siteId: string;
mode?: "remote";
onFormSubmit?: never;
}
type WidgetProviderProps = LocalWidgetProviderProps | RemoteWidgetProviderProps;
declare const WidgetProvider: ({ children, ...props }: WidgetProviderProps) => react_jsx_runtime.JSX.Element;
declare const useReactRoast: () => {
isWidgetActive: boolean;
toggleWidget: () => void;
avoidElementClassName: string;
setIslandVisiblity: (visible: boolean) => void;
setUser: (user: User) => void;
};
export { WidgetProvider as default, useReactRoast };
export type { FormDataProps, WidgetProviderProps };