UNPKG

feedbacker-react

Version:

A drop-in React feedback system for component-level feedback capture during development and design review

167 lines 4.47 kB
/** * TypeScript type definitions for Feedbacker * Core interfaces and types for the feedback system */ import type { ReactNode } from 'react'; export interface Feedback { id: string; componentName: string; componentPath: string[]; comment: string; screenshot?: string | undefined; url: string; timestamp: string; browserInfo: BrowserInfo; htmlSnippet?: string | undefined; metadata?: Record<string, unknown> | undefined; } export interface Draft { componentInfo: ComponentInfo; comment: string; screenshot?: string | undefined; createdAt: string; updatedAt: string; } export interface ComponentInfo { name: string; path: string[]; element: HTMLElement; htmlSnippet?: string | undefined; props?: Record<string, unknown> | undefined; fiber?: unknown | undefined; } export interface BrowserInfo { userAgent: string; viewport: { width: number; height: number; }; screen?: { width: number; height: number; }; platform?: string; } export interface FeedbackProviderProps { position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; primaryColor?: string; enabled?: boolean; storageKey?: string; onFeedbackSubmit?: (feedback: Feedback) => void; autoCopy?: boolean; autoDownload?: boolean | 'markdown' | 'zip'; captureLibrary?: 'html2canvas' | 'snapdom' | string; captureAdapter?: unknown; children?: ReactNode; } export interface ExportOptions { format: 'markdown' | 'zip'; includeImages: boolean; includeMetadata: boolean; } export interface FeedbackStore { version: string; feedbacks: Feedback[]; draft?: Draft | undefined; settings?: UserSettings | undefined; lastCleanup?: string | undefined; } export interface UserSettings { position?: string; primaryColor?: string; lastExport?: string; autoCopy?: boolean; autoDownload?: boolean | 'markdown' | 'zip'; } export interface StorageInfo { used: number; limit: number; available: number; percentage: number; } export interface StorageManager { save(feedback: Feedback): Promise<void>; saveDraft(draft: Draft): Promise<void>; getAll(): Promise<Feedback[]>; getDraft(): Promise<Draft | null>; delete(id: string): Promise<void>; clear(): Promise<void>; getStorageInfo(): StorageInfo; cleanup(): Promise<void>; } export interface ValidationResult { valid: boolean; errors: string[]; } export interface DetectionStrategy { detect(element: HTMLElement): ComponentInfo | null; setNext?(strategy: DetectionStrategy): DetectionStrategy; handle?(element: HTMLElement): ComponentInfo | null; } export interface FABState { expanded: boolean; hasDraft: boolean; position: { x: number; y: number; }; } export interface FABAction { id: string; label: string; icon: unknown; onClick: () => void; } export interface ModalState { isOpen: boolean; isMinimized: boolean; isDirty: boolean; component: ComponentInfo | null; screenshot: string | null; comment: string; } export interface ModalActions { minimize(): void; restore(): void; submit(): void; cancel(): void; } export interface ExportManager { exportAsMarkdown(feedbacks: Feedback[]): string; exportAsZip(feedbacks: Feedback[]): Promise<Blob>; } export declare enum ErrorType { STORAGE_FULL = "STORAGE_FULL", STORAGE_CORRUPT = "STORAGE_CORRUPT", SCREENSHOT_FAILED = "SCREENSHOT_FAILED", EXPORT_FAILED = "EXPORT_FAILED", DETECTION_FAILED = "DETECTION_FAILED" } export interface FeedbackError { type: ErrorType; message: string; originalError?: Error; timestamp: string; } export interface UseFeedbackResult { feedbacks: Feedback[]; draft: Draft | null; addFeedback: (feedback: Feedback) => void; deleteFeedback: (id: string) => void; clearAll: () => void; exportFeedback: (options: ExportOptions) => Promise<void>; } export interface UseComponentDetectionResult { isActive: boolean; activate: () => void; deactivate: () => void; selectedComponent: ComponentInfo | null; hoveredComponent: ComponentInfo | null; } export interface UseFeedbackStorageResult { feedbacks: Feedback[]; isLoading: boolean; error: Error | null; refresh: () => void; } //# sourceMappingURL=index.d.ts.map