quala-widget
Version:
Smart feedback widget for SaaS trial optimization
178 lines • 5.1 kB
TypeScript
import { AntiSpamConfig } from './sdk/AntiSpamManager';
export interface QualaUser {
userId: string;
email?: string;
trialStartDate?: string;
}
export interface InitResponse {
configLastUpdated: string | undefined;
cacheUntil: string | undefined;
sessionToken: string;
questionGroupId?: string;
microWidgetConfig?: MicroWidgetConfig;
regularWidgetConfig?: {
enabled: boolean;
};
triggerId?: string;
delayMs?: number;
projectName?: string;
antiSpamConfig?: AntiSpamConfig;
}
export interface QuestionsResponse {
questions: Array<{
id: string;
text: string;
required: boolean;
type: 'text' | 'textarea' | 'rating' | 'multiple_choice' | 'boolean';
options?: string[];
placeholder?: string;
}>;
}
export interface SubmitResponse {
success: boolean;
message?: string;
}
export interface MicroWidgetConfig {
enabled: boolean;
triggers: Array<{
enabled: boolean;
type: 'time' | 'exit_intent' | 'form_failure' | 'console_error' | 'api_failure';
delay?: number;
threshold?: number;
cooldown: number;
}>;
position: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'bottom-center' | 'modal';
emojiSet: 'default' | 'simple' | 'detailed' | 'exit-focused' | 'technical';
question: string;
autoHide: boolean;
hideDelay: number;
theme: 'light' | 'dark' | 'auto';
questions?: {
time?: string;
exit_intent?: string;
console_error?: string;
form_failure?: string;
api_failure?: string;
manual?: string;
};
triggerStyles?: {
time?: 'default' | 'simple' | 'detailed' | 'exit-focused' | 'technical';
exit_intent?: 'default' | 'simple' | 'detailed' | 'exit-focused' | 'technical';
console_error?: 'default' | 'simple' | 'detailed' | 'exit-focused' | 'technical';
form_failure?: 'default' | 'simple' | 'detailed' | 'exit-focused' | 'technical';
api_failure?: 'default' | 'simple' | 'detailed' | 'exit-focused' | 'technical';
manual?: 'default' | 'simple' | 'detailed' | 'exit-focused' | 'technical';
};
}
export interface EmojiOption {
emoji: string;
label: string;
value: string;
isPositive: boolean;
color?: string;
}
export interface FeedbackData {
emoji: string;
label: string;
value: string;
isPositive: boolean;
detail?: string;
timestamp?: string;
question?: string;
}
export interface TechnicalContext {
consoleErrors: Array<{
message: string;
stack?: string;
timestamp: string;
level: 'error' | 'warn';
}>;
failedRequests: Array<{
url: string;
status: number;
method: string;
timestamp: string;
}>;
performanceMetrics: {
pageLoadTime?: number;
firstContentfulPaint?: number;
largestContentfulPaint?: number;
cumulativeLayoutShift?: number;
};
deviceInfo: {
userAgent: string;
viewport: string;
screenResolution: string;
devicePixelRatio: number;
connectionType?: string;
};
pageContext: {
url: string;
referrer: string;
timestamp: string;
scrollPosition: number;
timeOnPage: number;
};
userActions: Array<{
type: 'click' | 'scroll' | 'focus' | 'error' | 'navigation';
element?: string;
timestamp: string;
data?: any;
}>;
}
export interface MicroFeedbackSubmission {
sessionToken: string;
feedback: FeedbackData;
triggerType: string;
technicalContext?: TechnicalContext;
timestamp: string;
}
export interface TriggerCheckResponse {
shouldShow: boolean;
questionGroupId?: string;
triggerId?: string;
delayMs?: number;
microWidgetConfig?: MicroWidgetConfig;
}
export interface SdkOptions {
apiBaseUrl?: string;
debug?: boolean;
captureConsoleErrors?: boolean;
captureNetworkFailures?: boolean;
capturePerformanceMetrics?: boolean;
behavioralTracking?: boolean;
}
export interface SessionInfo {
sessionToken: string | null;
questionGroupId: string | null;
triggerId: string | null;
isInitialized: boolean;
apiBaseUrl: string;
debug: boolean;
microWidgetEnabled: boolean;
}
export type EventType = 'page_visit' | 'feature_used' | 'time_update' | 'milestone_reached';
export interface TrackEventRequest {
sessionToken: string;
event: EventType;
data: Record<string, any>;
}
export interface ModalStyle {
modalColor?: string;
modalBoxColor?: string;
triggerColor?: string;
progressBarColor?: string;
progressTrackColor?: string;
buttonColor?: string;
backButtonColor?: string;
inputFocusColor?: string;
}
export interface Question {
id: string;
text: string;
required: boolean;
type?: 'text' | 'textarea' | 'rating' | 'multiple_choice' | 'boolean';
options?: string[];
placeholder?: string;
}
//# sourceMappingURL=types.d.ts.map