@usersnap/browser
Version:
[](https://www.usersnap.com?utm_medium=referral&utm_source=npm&utm_campaign=npm_package)
108 lines (107 loc) • 4.41 kB
TypeScript
export interface InitOptions {
collectGeoLocation?: 'all' | 'none';
enableScreenshot?: boolean;
custom?: Record<string, any>;
locale?: string;
nativeScreenshot?: boolean | {
target: string;
};
useLocalStorage?: boolean;
useSystemFonts?: boolean;
user?: {
email?: string;
userId?: string;
} & ReporterData;
}
type ReporterPropertyValue = string | number | boolean | null;
type ReporterData = Record<string, ReporterPropertyValue>;
export interface EmbedInitOptions extends InitOptions {
mountNode: HTMLElement;
}
export type WidgetEventName = 'load' | 'destroy' | 'open' | 'close' | 'closing' | 'beforeSubmit' | 'submit';
export type SpaceEventName = 'open' | 'close' | 'closing' | 'beforeSubmit' | 'submit';
export type EmbedEventName = 'open' | 'beforeSubmit' | 'submit';
type WidgetValues = {
assignee?: string;
custom?: object;
labels?: Array<string>;
visitor?: string;
rating?: string;
};
type WidgetEventApi = {
setValue: <K extends keyof WidgetValues>(key: K, value: WidgetValues[K]) => void;
};
type WidgetBeforeSubmitEvent = {
api: WidgetEventApi;
values: WidgetValues;
type: 'beforeSubmit';
};
type WidgetSubmitEvent = {
type: 'submit';
values: WidgetValues;
};
type WidgetOpenEvent = {
api: WidgetEventApi;
type: 'open';
};
type WidgetCloseEvent = {
type: 'close';
isCancel: boolean;
};
type WidgetClosingEvent = {
type: 'closing';
isCancel: boolean;
};
type WidgetEventCallback = (event: WidgetOpenEvent | WidgetBeforeSubmitEvent | WidgetCloseEvent | WidgetClosingEvent | WidgetSubmitEvent) => void;
export interface WidgetApi {
init: () => Promise<WidgetApi>;
destroy: () => Promise<void>;
open: () => Promise<void>;
close: () => Promise<void>;
on: (eventName: WidgetEventName, callback: WidgetEventCallback) => void;
off: (eventName: WidgetEventName, callback: WidgetEventCallback) => void;
}
export type SpaceOpenEventCallback = (event: WidgetOpenEvent & {
apiKey: string;
}) => void;
export type SpaceBeforeSubmitEventCallback = (event: WidgetBeforeSubmitEvent & {
apiKey: string;
}) => void;
export type SpaceCloseEventCallback = (event: WidgetCloseEvent & {
apiKey: string;
}) => void;
export type SpaceClosingEventCallback = (event: WidgetClosingEvent & {
apiKey: string;
}) => void;
export type SpaceSubmitEventCallback = (event: WidgetSubmitEvent & {
apiKey: string;
}) => void;
export type SpaceEventCallback = SpaceOpenEventCallback | SpaceBeforeSubmitEventCallback | SpaceCloseEventCallback | SpaceClosingEventCallback | SpaceSubmitEventCallback;
type SpaceOpen = (eventName: 'open', callback: SpaceOpenEventCallback) => void;
type SpaceBeforeSubmit = (eventName: 'beforeSubmit', callback: SpaceBeforeSubmitEventCallback) => void;
type SpaceClose = (eventName: 'close', callback: SpaceCloseEventCallback) => void;
type SpaceClosing = (eventName: 'closing', callback: SpaceClosingEventCallback) => void;
type SpaceSubmit = (eventName: 'submit', callback: SpaceSubmitEventCallback) => void;
export interface SpaceApi {
init: (options?: InitOptions) => Promise<void>;
destroy: () => Promise<void>;
logEvent: (eventName: string) => Promise<void>;
show: (apiKey: string) => Promise<WidgetApi>;
hide: (apiKey: string) => Promise<void>;
on: SpaceOpen & SpaceBeforeSubmit & SpaceClose & SpaceClosing & SpaceSubmit;
off: SpaceOpen & SpaceBeforeSubmit & SpaceClose & SpaceClosing & SpaceSubmit;
}
export type EmbedOpenEventCallback = (event: WidgetOpenEvent) => void;
export type EmbedBeforeSubmitEventCallback = (event: WidgetBeforeSubmitEvent) => void;
export type EmbedSubmitEventCallback = (event: WidgetSubmitEvent) => void;
export type EmbedEventCallback = EmbedOpenEventCallback | EmbedBeforeSubmitEventCallback | EmbedSubmitEventCallback;
export type EmbedOpen = (eventName: 'open', callback: EmbedOpenEventCallback) => void;
export type EmbedBeforeSubmit = (eventName: 'beforeSubmit', callback: EmbedBeforeSubmitEventCallback) => void;
export type EmbedSubmit = (eventName: 'submit', callback: EmbedSubmitEventCallback) => void;
export interface EmbedWidgetApi {
init: (config: EmbedInitOptions) => Promise<void>;
on: EmbedOpen & EmbedBeforeSubmit & EmbedSubmit;
off: EmbedOpen & EmbedBeforeSubmit & EmbedSubmit;
}
export type SnippetType = 'global' | 'embed';
export {};