UNPKG

quala-widget

Version:

Smart feedback widget for SaaS trial optimization

178 lines 5.1 kB
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