{"version":3,"sources":["../src/context/MicroFeedbackContext.tsx","../src/core/embed.ts","../src/hooks/useMicroFeedback.ts","../src/components/MicroFeedbackWidget.tsx","../src/components/withMicroFeedback.tsx","../src/hooks/useWidgetState.ts"],"names":["useState","useCallback","useRef","error","useEffect","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * MicroFeedback Context for Performance-Optimized Widget Management\r\n * Provides global widget configuration and state management\r\n */\r\n\r\nimport React, {\r\n  createContext,\r\n  useContext,\r\n  useState,\r\n  useCallback,\r\n  useMemo,\r\n} from \"react\"\r\nimport type { EmbedConfig } from \"../core/types\"\r\n\r\nexport interface MicroFeedbackContextValue {\r\n  apiKey?: string\r\n  baseUrl?: string\r\n  theme?: \"light\" | \"dark\" | \"auto\"\r\n  defaultWidgetId?: string\r\n\r\n  // Performance optimization methods\r\n  preloadWidget: (widgetId: string) => Promise<void>\r\n  isWidgetPreloaded: (widgetId: string) => boolean\r\n\r\n  // Global widget management\r\n  widgets: Record<string, any>\r\n  createWidget: (\r\n    widgetId: string,\r\n    config: Partial<EmbedConfig>\r\n  ) => Promise<void>\r\n  destroyWidget: (widgetId: string) => void\r\n\r\n  // Performance monitoring\r\n  performanceMetrics: Record<string, any>\r\n  updatePerformanceMetrics: (widgetId: string, metrics: Record<string, any>) => void\r\n\r\n  // Error handling\r\n  onError?: (error: any) => void\r\n\r\n  // Enhanced state management (for backward compatibility)\r\n  registerWidget?: (widgetId: string) => void\r\n  unregisterWidget?: (widgetId: string) => void\r\n  addGlobalError?: (error: any) => void\r\n  clearGlobalErrors?: () => void\r\n  incrementGlobalInteractions?: () => void\r\n}\r\n\r\nconst MicroFeedbackContext = createContext<MicroFeedbackContextValue | null>(\r\n  null\r\n)\r\n\r\nexport interface MicroFeedbackProviderProps {\r\n  children: React.ReactNode\r\n  apiKey: string\r\n  baseUrl?: string\r\n  theme?: \"light\" | \"dark\" | \"auto\"\r\n  defaultWidgetId?: string\r\n  onError?: (error: any) => void\r\n}\r\n\r\nexport function MicroFeedbackProvider({\r\n  children,\r\n  apiKey,\r\n  baseUrl,\r\n  theme = \"auto\",\r\n  defaultWidgetId,\r\n  onError,\r\n}: MicroFeedbackProviderProps) {\r\n  const [widgets, setWidgets] = useState<Record<string, any>>({})\r\n  const [preloadedWidgets, setPreloadedWidgets] = useState<Set<string>>(\r\n    new Set()\r\n  )\r\n  const [performanceMetrics, setPerformanceMetrics] = useState<\r\n    Record<string, any>\r\n  >({})\r\n\r\n  const preloadWidget = useCallback(\r\n    async (widgetId: string) => {\r\n      if (preloadedWidgets.has(widgetId)) return\r\n\r\n      try {\r\n        // Preload widget resources\r\n        const { LazyEmbedLoader } = await import(\"microfeedback-embed-core\")\r\n        await LazyEmbedLoader.preloadModules([\"core\"], { apiKey, widgetId })\r\n\r\n        setPreloadedWidgets(prev => new Set([...prev, widgetId]))\r\n      } catch (error) {\r\n        console.warn(\"Failed to preload widget:\", widgetId, error)\r\n      }\r\n    },\r\n    [apiKey]\r\n  )\r\n\r\n  const isWidgetPreloaded = useCallback(\r\n    (widgetId: string) => {\r\n      return preloadedWidgets.has(widgetId)\r\n    },\r\n    [preloadedWidgets]\r\n  )\r\n\r\n  const createWidget = useCallback(\r\n    async (widgetId: string, config: Partial<EmbedConfig>) => {\r\n      try {\r\n        const { LazyEmbedLoader } = await import(\"microfeedback-embed-core\")\r\n        const widget = await LazyEmbedLoader.createEmbed({\r\n          apiKey,\r\n          widgetId,\r\n          baseUrl,\r\n          theme,\r\n          ...config,\r\n        })\r\n\r\n        setWidgets(prev => ({ ...prev, [widgetId]: widget }))\r\n      } catch (error) {\r\n        console.error(\"Failed to create widget:\", widgetId, error)\r\n      }\r\n    },\r\n    [apiKey, baseUrl, theme]\r\n  )\r\n\r\n  const destroyWidget = useCallback(\r\n    (widgetId: string) => {\r\n      const widget = widgets[widgetId]\r\n      if (widget) {\r\n        widget.destroy?.()\r\n        setWidgets(prev => {\r\n          const { [widgetId]: removed, ...rest } = prev\r\n          return rest\r\n        })\r\n      }\r\n    },\r\n    [widgets]\r\n  )\r\n\r\n  const updatePerformanceMetrics = useCallback(\r\n    (widgetId: string, metrics: Record<string, any>) => {\r\n      setPerformanceMetrics(prev => ({\r\n        ...prev,\r\n        [widgetId]: { ...prev[widgetId], ...metrics }\r\n      }))\r\n    },\r\n    []\r\n  )\r\n\r\n  // Enhanced state management methods (for backward compatibility)\r\n  const registerWidget = useCallback((widgetId: string) => {\r\n    console.log(\"Registering widget:\", widgetId)\r\n  }, [])\r\n\r\n  const unregisterWidget = useCallback((widgetId: string) => {\r\n    console.log(\"Unregistering widget:\", widgetId)\r\n  }, [])\r\n\r\n  const addGlobalError = useCallback((error: any) => {\r\n    console.error(\"Global error:\", error)\r\n  }, [])\r\n\r\n  const clearGlobalErrors = useCallback(() => {\r\n    console.log(\"Clearing global errors\")\r\n  }, [])\r\n\r\n  const incrementGlobalInteractions = useCallback(() => {\r\n    console.log(\"Incrementing global interactions\")\r\n  }, [])\r\n\r\n  const contextValue = useMemo(\r\n    () => ({\r\n      apiKey,\r\n      baseUrl,\r\n      theme,\r\n      defaultWidgetId,\r\n      onError,\r\n      preloadWidget,\r\n      isWidgetPreloaded,\r\n      widgets,\r\n      createWidget,\r\n      destroyWidget,\r\n      performanceMetrics,\r\n      updatePerformanceMetrics,\r\n      registerWidget,\r\n      unregisterWidget,\r\n      addGlobalError,\r\n      clearGlobalErrors,\r\n      incrementGlobalInteractions,\r\n    }),\r\n    [\r\n      apiKey,\r\n      baseUrl,\r\n      theme,\r\n      defaultWidgetId,\r\n      onError,\r\n      preloadWidget,\r\n      isWidgetPreloaded,\r\n      widgets,\r\n      createWidget,\r\n      destroyWidget,\r\n      performanceMetrics,\r\n      updatePerformanceMetrics,\r\n      registerWidget,\r\n      unregisterWidget,\r\n      addGlobalError,\r\n      clearGlobalErrors,\r\n      incrementGlobalInteractions,\r\n    ]\r\n  )\r\n\r\n  return (\r\n    <MicroFeedbackContext.Provider value={contextValue}>\r\n      {children}\r\n    </MicroFeedbackContext.Provider>\r\n  )\r\n}\r\n\r\nexport function useMicroFeedbackContext() {\r\n  const context = useContext(MicroFeedbackContext)\r\n  if (!context) {\r\n    throw new Error(\r\n      \"useMicroFeedbackContext must be used within a MicroFeedbackProvider\"\r\n    )\r\n  }\r\n  return context\r\n}\r\n\r\n/**\r\n * Enhanced hook for accessing MicroFeedback context with additional state management\r\n * This is an alias for useMicroFeedbackContext for backward compatibility\r\n */\r\nexport const useEnhancedMicroFeedbackContext = () => {\r\n  const context = useContext(MicroFeedbackContext)\r\n  if (!context) {\r\n    throw new Error(\r\n      \"useEnhancedMicroFeedbackContext must be used within a MicroFeedbackProvider\"\r\n    )\r\n  }\r\n  return context\r\n}\r\n","import type {\r\n    EmbedConfig,\r\n    WidgetConfig,\r\n    EmbedError,\r\n    EmbedEventType,\r\n    EmbedEventHandler,\r\n    EmbedEvents,\r\n} from \"./types\"\r\n\r\nexport class MicroFeedbackEmbed {\r\n    private config: EmbedConfig\r\n    private widget: HTMLElement | null = null\r\n    private widgetConfig: WidgetConfig | null = null\r\n    private events: EmbedEvents = {}\r\n    private retryCount = 0\r\n    private maxRetries = 3\r\n    private retryDelay = 1000\r\n    private isDestroyed = false\r\n\r\n    constructor(config: EmbedConfig) {\r\n        this.config = {\r\n            theme: \"auto\",\r\n            position: \"bottom-right\",\r\n            baseUrl: \"https://api.microfeedback.com/embed\",\r\n            ...config,\r\n        }\r\n\r\n        this.validateConfig()\r\n        this.init()\r\n    }\r\n\r\n    private validateConfig(): void {\r\n        if (!this.config.apiKey) {\r\n            throw new Error(\"API key is required\")\r\n        }\r\n        if (!this.config.widgetId) {\r\n            throw new Error(\"Widget ID is required\")\r\n        }\r\n    }\r\n\r\n    private async init(): Promise<void> {\r\n        try {\r\n            await this.fetchWidgetConfig()\r\n            this.render()\r\n            this.emit(\"load\")\r\n        } catch (error) {\r\n            this.handleError(error)\r\n        }\r\n    }\r\n\r\n    private async fetchWidgetConfig(): Promise<void> {\r\n        const url = `${this.config.baseUrl}/widget/${this.config.widgetId}`\r\n        console.log(\"Fetching widget config from:\", url)\r\n        console.log(\"Config:\", this.config)\r\n\r\n        try {\r\n            const response = await fetch(url, {\r\n                method: \"GET\",\r\n                headers: {\r\n                    \"X-API-Key\": this.config.apiKey,\r\n                    \"Content-Type\": \"application/json\",\r\n                },\r\n            })\r\n\r\n            if (!response.ok) {\r\n                const errorData = await response.json().catch(() => ({}))\r\n                throw this.createEmbedError(response.status, errorData)\r\n            }\r\n\r\n            this.widgetConfig = await response.json() as WidgetConfig\r\n        } catch (error) {\r\n            if (error instanceof TypeError && error.message.includes(\"fetch\")) {\r\n                // Network error - retry with exponential backoff\r\n                if (this.retryCount < this.maxRetries) {\r\n                    this.retryCount++\r\n                    const delay = this.retryDelay * Math.pow(2, this.retryCount - 1)\r\n\r\n                    await new Promise(resolve => setTimeout(resolve, delay))\r\n                    return this.fetchWidgetConfig()\r\n                }\r\n\r\n                throw this.createEmbedError(0, {\r\n                    code: \"NETWORK_ERROR\",\r\n                    message: \"Failed to connect to MicroFeedback API\",\r\n                })\r\n            }\r\n\r\n            throw error\r\n        }\r\n    }\r\n\r\n    private createEmbedError(status: number, errorData: any): EmbedError {\r\n        let code: EmbedError[\"code\"] = \"INTERNAL_ERROR\"\r\n        let message = \"An unexpected error occurred\"\r\n\r\n        switch (status) {\r\n            case 401:\r\n                code = \"INVALID_API_KEY\"\r\n                message = \"Invalid API key provided\"\r\n                break\r\n            case 404:\r\n                code = \"WIDGET_NOT_FOUND\"\r\n                message = \"Widget not found or not accessible\"\r\n                break\r\n            case 0:\r\n                code = errorData.code || \"NETWORK_ERROR\"\r\n                message = errorData.message || \"Network error occurred\"\r\n                break\r\n            default:\r\n                message = errorData.message || `HTTP ${status} error`\r\n        }\r\n\r\n        const error = new Error(message) as EmbedError\r\n        error.code = code\r\n        error.details = errorData\r\n\r\n        return error\r\n    }\r\n\r\n    private render(): void {\r\n        if (!this.widgetConfig || this.isDestroyed) {\r\n            return\r\n        }\r\n\r\n        this.widget = this.createWidgetElement()\r\n        this.attachToDOM()\r\n        this.bindEvents()\r\n        this.applyPositioning()\r\n    }\r\n\r\n    private createWidgetElement(): HTMLElement {\r\n        if (!this.widgetConfig) {\r\n            throw new Error(\"Widget configuration not loaded\")\r\n        }\r\n\r\n        const widget = document.createElement(\"div\")\r\n        widget.className = \"microfeedback-widget\"\r\n        widget.setAttribute(\"data-widget-id\", this.config.widgetId)\r\n\r\n        // Apply theme styles\r\n        const theme = this.widgetConfig.theme\r\n        widget.style.cssText = `\r\n      position: fixed;\r\n      z-index: 999999;\r\n      background-color: ${theme.backgroundColor};\r\n      color: ${theme.textColor};\r\n      border-radius: ${theme.borderRadius}px;\r\n      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\r\n      font-size: 14px;\r\n      line-height: 1.4;\r\n      max-width: 320px;\r\n      min-width: 280px;\r\n      transition: all 0.3s ease;\r\n      opacity: 0;\r\n      transform: translateY(20px);\r\n    `\r\n\r\n        // Create widget content\r\n        widget.innerHTML = this.generateWidgetHTML()\r\n\r\n        return widget\r\n    }\r\n\r\n    private generateWidgetHTML(): string {\r\n        if (!this.widgetConfig) {\r\n            return \"\"\r\n        }\r\n\r\n        const { content, theme } = this.widgetConfig\r\n\r\n        return `\r\n      <div class=\"microfeedback-header\" style=\"\r\n        padding: 16px 16px 12px;\r\n        border-bottom: 1px solid rgba(0, 0, 0, 0.1);\r\n      \">\r\n        <h3 style=\"\r\n          margin: 0;\r\n          font-size: 16px;\r\n          font-weight: 600;\r\n          color: ${theme.textColor};\r\n        \">${content.title}</h3>\r\n        <button class=\"microfeedback-close\" style=\"\r\n          position: absolute;\r\n          top: 12px;\r\n          right: 12px;\r\n          background: none;\r\n          border: none;\r\n          font-size: 18px;\r\n          cursor: pointer;\r\n          color: ${theme.textColor};\r\n          opacity: 0.6;\r\n          padding: 4px;\r\n          line-height: 1;\r\n        \">&times;</button>\r\n      </div>\r\n      <div class=\"microfeedback-body\" style=\"padding: 16px;\">\r\n        <textarea \r\n          class=\"microfeedback-input\"\r\n          placeholder=\"${content.placeholder}\"\r\n          style=\"\r\n            width: 100%;\r\n            min-height: 80px;\r\n            padding: 12px;\r\n            border: 1px solid rgba(0, 0, 0, 0.2);\r\n            border-radius: 6px;\r\n            font-family: inherit;\r\n            font-size: 14px;\r\n            resize: vertical;\r\n            box-sizing: border-box;\r\n          \"\r\n        ></textarea>\r\n        <button \r\n          class=\"microfeedback-submit\"\r\n          style=\"\r\n            background-color: ${theme.primaryColor};\r\n            color: white;\r\n            border: none;\r\n            padding: 10px 20px;\r\n            border-radius: 6px;\r\n            font-size: 14px;\r\n            font-weight: 500;\r\n            cursor: pointer;\r\n            margin-top: 12px;\r\n            transition: opacity 0.2s ease;\r\n          \"\r\n        >${content.submitText}</button>\r\n      </div>\r\n    `\r\n    }\r\n\r\n    private attachToDOM(): void {\r\n        if (!this.widget) {\r\n            return\r\n        }\r\n\r\n        document.body.appendChild(this.widget)\r\n\r\n        // Animate in\r\n        requestAnimationFrame(() => {\r\n            if (this.widget) {\r\n                this.widget.style.opacity = \"1\"\r\n                this.widget.style.transform = \"translateY(0)\"\r\n            }\r\n        })\r\n    }\r\n\r\n    private bindEvents(): void {\r\n        if (!this.widget) {\r\n            return\r\n        }\r\n\r\n        // Close button\r\n        const closeBtn = this.widget.querySelector(\".microfeedback-close\")\r\n        closeBtn?.addEventListener(\"click\", () => this.hide())\r\n\r\n        // Submit button\r\n        const submitBtn = this.widget.querySelector(\".microfeedback-submit\")\r\n        const textarea = this.widget.querySelector(\r\n            \".microfeedback-input\"\r\n        ) as HTMLTextAreaElement\r\n\r\n        submitBtn?.addEventListener(\"click\", () => {\r\n            const feedback = textarea?.value?.trim()\r\n            if (feedback) {\r\n                this.submitFeedback(feedback)\r\n            }\r\n        })\r\n\r\n        // Enter key to submit (with Ctrl/Cmd)\r\n        textarea?.addEventListener(\"keydown\", (e: KeyboardEvent) => {\r\n            if (e.key === \"Enter\" && (e.ctrlKey || e.metaKey)) {\r\n                e.preventDefault()\r\n                const feedback = textarea.value.trim()\r\n                if (feedback) {\r\n                    this.submitFeedback(feedback)\r\n                }\r\n            }\r\n        })\r\n    }\r\n\r\n    private applyPositioning(): void {\r\n        if (!this.widget || !this.widgetConfig) {\r\n            return\r\n        }\r\n\r\n        const position = this.config.position || this.widgetConfig.position.placement\r\n        const offset = this.widgetConfig.position.offset\r\n\r\n        switch (position) {\r\n            case \"bottom-right\":\r\n                this.widget.style.bottom = `${offset.y}px`\r\n                this.widget.style.right = `${offset.x}px`\r\n                break\r\n            case \"bottom-left\":\r\n                this.widget.style.bottom = `${offset.y}px`\r\n                this.widget.style.left = `${offset.x}px`\r\n                break\r\n            case \"top-right\":\r\n                this.widget.style.top = `${offset.y}px`\r\n                this.widget.style.right = `${offset.x}px`\r\n                break\r\n            case \"top-left\":\r\n                this.widget.style.top = `${offset.y}px`\r\n                this.widget.style.left = `${offset.x}px`\r\n                break\r\n        }\r\n    }\r\n\r\n    private async submitFeedback(feedback: string): Promise<void> {\r\n        try {\r\n            const response = await fetch(`${this.config.baseUrl}/feedback`, {\r\n                method: \"POST\",\r\n                headers: {\r\n                    \"X-API-Key\": this.config.apiKey,\r\n                    \"Content-Type\": \"application/json\",\r\n                },\r\n                body: JSON.stringify({\r\n                    widgetId: this.config.widgetId,\r\n                    feedback,\r\n                    timestamp: new Date().toISOString(),\r\n                }),\r\n            })\r\n\r\n            if (!response.ok) {\r\n                throw new Error(`Failed to submit feedback: ${response.statusText}`)\r\n            }\r\n\r\n            this.emit(\"submit\", { feedback })\r\n            this.showThankYou()\r\n\r\n            if (this.widgetConfig?.behavior.hideAfterSubmit) {\r\n                setTimeout(() => this.hide(), 2000)\r\n            }\r\n        } catch (error) {\r\n            this.handleError(error)\r\n        }\r\n    }\r\n\r\n    private showThankYou(): void {\r\n        if (!this.widget || !this.widgetConfig) {\r\n            return\r\n        }\r\n\r\n        const body = this.widget.querySelector(\".microfeedback-body\")\r\n        if (body) {\r\n            body.innerHTML = `\r\n        <div style=\"\r\n          text-align: center;\r\n          padding: 20px;\r\n          color: ${this.widgetConfig.theme.textColor};\r\n        \">\r\n          <div style=\"font-size: 24px; margin-bottom: 8px;\">✓</div>\r\n          <div>${this.widgetConfig.content.thankYouMessage}</div>\r\n        </div>\r\n      `\r\n        }\r\n    }\r\n\r\n    private handleError(error: any): void {\r\n        console.error(\"MicroFeedback embed error:\", error)\r\n        this.emit(\"error\", error)\r\n    }\r\n\r\n    // Event system\r\n    on(event: EmbedEventType, handler: EmbedEventHandler): void {\r\n        if (!this.events[event]) {\r\n            this.events[event] = []\r\n        }\r\n        this.events[event].push(handler)\r\n    }\r\n\r\n    off(event: EmbedEventType, handler?: EmbedEventHandler): void {\r\n        if (!this.events[event]) {\r\n            return\r\n        }\r\n\r\n        if (handler) {\r\n            const index = this.events[event].indexOf(handler)\r\n            if (index > -1) {\r\n                this.events[event].splice(index, 1)\r\n            }\r\n        } else {\r\n            this.events[event] = []\r\n        }\r\n    }\r\n\r\n    private emit(event: EmbedEventType, data?: any): void {\r\n        if (this.events[event]) {\r\n            this.events[event].forEach(handler => handler(data))\r\n        }\r\n    }\r\n\r\n    // Public methods\r\n    show(): void {\r\n        if (this.widget) {\r\n            this.widget.style.display = \"block\"\r\n            this.widget.style.opacity = \"1\"\r\n            this.widget.style.transform = \"translateY(0)\"\r\n            this.emit(\"show\")\r\n        }\r\n    }\r\n\r\n    async hide(): Promise<void> {\r\n        if (this.widget) {\r\n            this.widget.style.opacity = \"0\"\r\n            this.widget.style.transform = \"translateY(20px)\"\r\n            setTimeout(() => {\r\n                if (this.widget) {\r\n                    this.widget.style.display = \"none\"\r\n                }\r\n            }, 300)\r\n            this.emit(\"hide\")\r\n        }\r\n    }\r\n\r\n    destroy(): void {\r\n        this.isDestroyed = true\r\n\r\n        if (this.widget) {\r\n            this.widget.remove()\r\n            this.widget = null\r\n        }\r\n\r\n        this.events = {}\r\n        this.widgetConfig = null\r\n    }\r\n\r\n    // Getters\r\n    get isLoaded(): boolean {\r\n        return this.widgetConfig !== null\r\n    }\r\n\r\n    get isVisible(): boolean {\r\n        return this.widget !== null && this.widget.style.display !== \"none\"\r\n    }\r\n}","/**\r\n * Enhanced MicroFeedback Hook with Performance Optimization\r\n * Provides widget management with Core Web Vitals monitoring\r\n */\r\n\r\nimport { useState, useEffect, useCallback, useRef } from \"react\"\r\nimport { MicroFeedbackEmbed } from \"../core/embed\"\r\nimport type { EmbedConfig, EmbedError } from \"../core/types\"\r\n\r\nexport interface UseMicroFeedbackOptions extends EmbedConfig {\r\n  onLoad?: () => void\r\n  onError?: (error: EmbedError) => void\r\n  onSubmit?: (data: any) => void\r\n  onShow?: () => void\r\n  onHide?: () => void\r\n\r\n  // Performance options\r\n  enablePerformanceMonitoring?: boolean\r\n  performanceReportInterval?: number\r\n}\r\n\r\nexport interface UseMicroFeedbackReturn {\r\n  isLoaded: boolean\r\n  isVisible: boolean\r\n  error: EmbedError | null\r\n\r\n  // Control methods\r\n  show: () => void\r\n  hide: () => void\r\n  destroy: () => void\r\n\r\n  // Performance metrics\r\n  performanceMetrics: any\r\n  performanceScore: number\r\n}\r\n\r\nexport function useMicroFeedback(\r\n  options: UseMicroFeedbackOptions\r\n): UseMicroFeedbackReturn {\r\n  const {\r\n    apiKey,\r\n    widgetId,\r\n    enablePerformanceMonitoring = true,\r\n    performanceReportInterval = 30000,\r\n    onLoad,\r\n    onError,\r\n    onSubmit,\r\n    onShow,\r\n    onHide,\r\n    ...config\r\n  } = options\r\n\r\n  const [isLoaded, setIsLoaded] = useState(false)\r\n  const [isVisible, setIsVisible] = useState(false)\r\n  const [error, setError] = useState<EmbedError | null>(null)\r\n  const embedRef = useRef<any>(null)\r\n\r\n  // Performance monitoring (disabled to fix infinite loop)\r\n  const performanceMetrics = {}\r\n  const getPerformanceScore = () => 0\r\n\r\n  // Initialize embed\r\n  useEffect(() => {\r\n    if (!apiKey || !widgetId) return\r\n\r\n    let mounted = true\r\n\r\n    const initializeEmbed = async () => {\r\n      try {\r\n        // Create embed instance directly\r\n        const embed = new MicroFeedbackEmbed({\r\n          apiKey,\r\n          widgetId,\r\n          ...config,\r\n        })\r\n\r\n        if (!mounted) return\r\n\r\n        embedRef.current = embed\r\n\r\n        // Set up event listeners\r\n        embed.on(\"load\", () => {\r\n          setIsLoaded(true)\r\n          setError(null)\r\n          onLoad?.()\r\n        })\r\n\r\n        embed.on(\"error\", (err: EmbedError) => {\r\n          setError(err)\r\n          setIsLoaded(false)\r\n          onError?.(err)\r\n        })\r\n\r\n        embed.on(\"submit\", (data: any) => {\r\n          onSubmit?.(data)\r\n        })\r\n\r\n        embed.on(\"show\", () => {\r\n          setIsVisible(true)\r\n          onShow?.()\r\n        })\r\n\r\n        embed.on(\"hide\", () => {\r\n          setIsVisible(false)\r\n          onHide?.()\r\n        })\r\n      } catch (err) {\r\n        if (mounted) {\r\n          setError(err as EmbedError)\r\n          onError?.(err as EmbedError)\r\n        }\r\n      }\r\n    }\r\n\r\n    initializeEmbed()\r\n\r\n    return () => {\r\n      mounted = false\r\n      if (embedRef.current) {\r\n        embedRef.current.destroy()\r\n        embedRef.current = null\r\n      }\r\n    }\r\n  }, [apiKey, widgetId, onLoad, onError, onSubmit, onShow, onHide])\r\n\r\n  // Control methods\r\n  const show = useCallback(() => {\r\n    embedRef.current?.show()\r\n  }, [])\r\n\r\n  const hide = useCallback(() => {\r\n    embedRef.current?.hide()\r\n  }, [])\r\n\r\n  const destroy = useCallback(() => {\r\n    embedRef.current?.destroy()\r\n    embedRef.current = null\r\n    setIsLoaded(false)\r\n    setIsVisible(false)\r\n    setError(null)\r\n  }, [])\r\n\r\n  return {\r\n    isLoaded,\r\n    isVisible,\r\n    error,\r\n    show,\r\n    hide,\r\n    destroy,\r\n    performanceMetrics,\r\n    performanceScore: getPerformanceScore(),\r\n  }\r\n}\r\n","import React, { useEffect, useRef, useCallback } from \"react\"\r\nimport type { MicroFeedbackWidgetProps } from \"../types\"\r\nimport {\r\n  useMicroFeedbackContext,\r\n  useEnhancedMicroFeedbackContext,\r\n} from \"../context\"\r\nimport { useMicroFeedback } from \"../hooks/useMicroFeedback\"\r\nimport type { EmbedError } from \"../core/types\"\r\n\r\n/**\r\n * React component for embedding MicroFeedback widgets\r\n *\r\n * @example\r\n * ```tsx\r\n * <MicroFeedbackWidget\r\n *   apiKey=\"mk_dev_abc123\"\r\n *   widgetId=\"widget_xyz789\"\r\n *   theme=\"auto\"\r\n *   position=\"bottom-right\"\r\n *   onLoad={() => console.log('Widget loaded')}\r\n *   onSubmit={(data) => console.log('Feedback submitted:', data)}\r\n * />\r\n * ```\r\n */\r\nexport const MicroFeedbackWidget: React.FC<MicroFeedbackWidgetProps> = ({\r\n  apiKey: propApiKey,\r\n  widgetId,\r\n  theme = \"auto\",\r\n  position = \"bottom-right\",\r\n  baseUrl: propBaseUrl,\r\n  onLoad,\r\n  onError: propOnError,\r\n  onSubmit,\r\n  onShow,\r\n  onHide,\r\n  className,\r\n  style,\r\n  initiallyVisible = true,\r\n}) => {\r\n  const context = useMicroFeedbackContext()\r\n  const containerRef = useRef<HTMLDivElement>(null)\r\n\r\n  // Try to get enhanced context, fall back to basic context\r\n  let enhancedContext: ReturnType<\r\n    typeof useEnhancedMicroFeedbackContext\r\n  > | null = null\r\n  try {\r\n    enhancedContext = useEnhancedMicroFeedbackContext()\r\n  } catch {\r\n    // Enhanced context not available, continue with basic context\r\n  }\r\n\r\n  // Merge props with context values (props take precedence)\r\n  const apiKey = propApiKey || context.apiKey\r\n  const baseUrl = propBaseUrl || context.baseUrl\r\n  const onError = propOnError || context.onError\r\n\r\n  // Validate required props\r\n  if (!apiKey) {\r\n    throw new Error(\r\n      \"MicroFeedbackWidget: apiKey is required. Provide it as a prop or through MicroFeedbackProvider.\"\r\n    )\r\n  }\r\n\r\n  if (!widgetId) {\r\n    throw new Error(\"MicroFeedbackWidget: widgetId is required.\")\r\n  }\r\n\r\n  // Enhanced event handlers that integrate with global state\r\n  const handleLoad = useCallback(() => {\r\n    enhancedContext?.registerWidget?.(widgetId)\r\n    onLoad?.()\r\n  }, [enhancedContext, widgetId, onLoad])\r\n\r\n  const handleError = useCallback(\r\n    (error: EmbedError) => {\r\n      enhancedContext?.addGlobalError?.(error)\r\n      onError?.(error)\r\n    },\r\n    [enhancedContext, onError]\r\n  )\r\n\r\n  const handleSubmit = useCallback(\r\n    (data: { feedback: string }) => {\r\n      enhancedContext?.incrementGlobalInteractions?.()\r\n      onSubmit?.(data)\r\n    },\r\n    [enhancedContext, onSubmit]\r\n  )\r\n\r\n  const handleShow = useCallback(() => {\r\n    enhancedContext?.incrementGlobalInteractions?.()\r\n    onShow?.()\r\n  }, [enhancedContext, onShow])\r\n\r\n  const { isLoaded, isVisible, error, show, hide, destroy, _containerRef } =\r\n    useMicroFeedback({\r\n      apiKey,\r\n      widgetId,\r\n      theme,\r\n      position,\r\n      baseUrl,\r\n      onLoad: handleLoad,\r\n      onError: handleError,\r\n      onSubmit: handleSubmit,\r\n      onShow: handleShow,\r\n      onHide,\r\n    }) as any\r\n\r\n  // Set the container ref\r\n  useEffect(() => {\r\n    if (containerRef.current && _containerRef) {\r\n      _containerRef.current = containerRef.current\r\n    }\r\n  }, [_containerRef])\r\n\r\n  // Handle initial visibility\r\n  useEffect(() => {\r\n    if (isLoaded && initiallyVisible && !isVisible) {\r\n      show()\r\n    } else if (isLoaded && !initiallyVisible && isVisible) {\r\n      hide()\r\n    }\r\n  }, [isLoaded, initiallyVisible, isVisible, show, hide])\r\n\r\n  // Cleanup on unmount\r\n  useEffect(() => {\r\n    return () => {\r\n      enhancedContext?.unregisterWidget?.(widgetId)\r\n      destroy()\r\n    }\r\n  }, [destroy, enhancedContext, widgetId])\r\n\r\n  // Error boundary-like behavior\r\n  if (error) {\r\n    return (\r\n      <div\r\n        className={`microfeedback-error ${className || \"\"}`}\r\n        style={{\r\n          padding: \"16px\",\r\n          backgroundColor: \"#fee\",\r\n          border: \"1px solid #fcc\",\r\n          borderRadius: \"4px\",\r\n          color: \"#c33\",\r\n          fontSize: \"14px\",\r\n          ...style,\r\n        }}\r\n      >\r\n        <strong>MicroFeedback Error:</strong> {error.message}\r\n        {process.env.NODE_ENV === \"development\" && error.details && (\r\n          <details style={{ marginTop: \"8px\" }}>\r\n            <summary>Error Details</summary>\r\n            <pre style={{ fontSize: \"12px\", marginTop: \"4px\" }}>\r\n              {JSON.stringify(error.details, null, 2)}\r\n            </pre>\r\n          </details>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <div\r\n      ref={containerRef}\r\n      className={`microfeedback-widget-container ${className || \"\"}`}\r\n      style={style}\r\n      data-testid='microfeedback-widget-container'\r\n      data-widget-id={widgetId}\r\n      data-loaded={isLoaded}\r\n      data-visible={isVisible}\r\n    />\r\n  )\r\n}\r\n\r\n// Add display name for debugging\r\nMicroFeedbackWidget.displayName = \"MicroFeedbackWidget\"\r\n","import React, { forwardRef, useImperativeHandle } from \"react\"\nimport type { MicroFeedbackWidgetProps, UseMicroFeedbackReturn } from \"../types\"\nimport { MicroFeedbackWidget } from \"./MicroFeedbackWidget\"\nimport { useMicroFeedback } from \"../hooks/useMicroFeedback\"\nimport { useMicroFeedbackContext } from \"../context\"\n\nexport interface MicroFeedbackRef extends UseMicroFeedbackReturn {}\n\nexport interface WithMicroFeedbackProps extends MicroFeedbackWidgetProps {\n  /** Ref to access widget control methods */\n  ref?: React.Ref<MicroFeedbackRef>\n}\n\n/**\n * Higher-order component that provides imperative access to widget methods\n */\nexport const withMicroFeedback = <P extends object>(\n  Component: React.ComponentType<P>\n) => {\n  return forwardRef<MicroFeedbackRef, P & WithMicroFeedbackProps>(\n    (props, ref) => {\n      const {\n        apiKey: propApiKey,\n        widgetId,\n        theme,\n        position,\n        baseUrl: propBaseUrl,\n        onLoad,\n        onError: propOnError,\n        onSubmit,\n        onShow,\n        onHide,\n        ...componentProps\n      } = props\n\n      const context = useMicroFeedbackContext()\n      const apiKey = propApiKey || context.apiKey\n      const baseUrl = propBaseUrl || context.baseUrl\n      const onError = propOnError || context.onError\n\n      const widgetControls = useMicroFeedback({\n        apiKey: apiKey!,\n        widgetId,\n        theme,\n        position,\n        baseUrl,\n        onLoad,\n        onError,\n        onSubmit,\n        onShow,\n        onHide,\n      })\n\n      useImperativeHandle(ref, () => widgetControls, [widgetControls])\n\n      return <Component {...(componentProps as P)} />\n    }\n  )\n}\n\n/**\n * Enhanced MicroFeedback widget with imperative ref access\n */\nexport const MicroFeedbackWidgetWithRef = forwardRef<\n  MicroFeedbackRef,\n  MicroFeedbackWidgetProps\n>((props, ref) => {\n  const context = useMicroFeedbackContext()\n  const apiKey = props.apiKey || context.apiKey\n  const baseUrl = props.baseUrl || context.baseUrl\n  const onError = props.onError || context.onError\n\n  const widgetControls = useMicroFeedback({\n    apiKey: apiKey!,\n    widgetId: props.widgetId,\n    theme: props.theme,\n    position: props.position,\n    baseUrl,\n    onLoad: props.onLoad,\n    onError,\n    onSubmit: props.onSubmit,\n    onShow: props.onShow,\n    onHide: props.onHide,\n  })\n\n  useImperativeHandle(ref, () => widgetControls, [widgetControls])\n\n  return <MicroFeedbackWidget {...props} />\n})\n\nMicroFeedbackWidgetWithRef.displayName = \"MicroFeedbackWidgetWithRef\"\n","import { useReducer, useRef } from \"react\"\nimport type { EmbedError } from \"../core/types\"\n\nexport interface WidgetState {\n  isLoaded: boolean\n  isVisible: boolean\n  isLoading: boolean\n  error: EmbedError | null\n  lastSubmission: { feedback: string; timestamp: Date } | null\n  interactionCount: number\n}\n\ntype WidgetAction =\n  | { type: \"LOADING_START\" }\n  | { type: \"LOADING_SUCCESS\" }\n  | { type: \"LOADING_ERROR\"; error: EmbedError }\n  | { type: \"SHOW\" }\n  | { type: \"HIDE\" }\n  | { type: \"SUBMIT\"; feedback: string }\n  | { type: \"RESET\" }\n  | { type: \"INCREMENT_INTERACTION\" }\n\nconst initialState: WidgetState = {\n  isLoaded: false,\n  isVisible: false,\n  isLoading: false,\n  error: null,\n  lastSubmission: null,\n  interactionCount: 0,\n}\n\nfunction widgetReducer(state: WidgetState, action: WidgetAction): WidgetState {\n  switch (action.type) {\n    case \"LOADING_START\":\n      return {\n        ...state,\n        isLoading: true,\n        error: null,\n      }\n\n    case \"LOADING_SUCCESS\":\n      return {\n        ...state,\n        isLoaded: true,\n        isLoading: false,\n        error: null,\n      }\n\n    case \"LOADING_ERROR\":\n      return {\n        ...state,\n        isLoaded: false,\n        isLoading: false,\n        error: action.error,\n      }\n\n    case \"SHOW\":\n      return {\n        ...state,\n        isVisible: true,\n        interactionCount: state.interactionCount + 1,\n      }\n\n    case \"HIDE\":\n      return {\n        ...state,\n        isVisible: false,\n      }\n\n    case \"SUBMIT\":\n      return {\n        ...state,\n        lastSubmission: {\n          feedback: action.feedback,\n          timestamp: new Date(),\n        },\n        interactionCount: state.interactionCount + 1,\n      }\n\n    case \"INCREMENT_INTERACTION\":\n      return {\n        ...state,\n        interactionCount: state.interactionCount + 1,\n      }\n\n    case \"RESET\":\n      return initialState\n\n    default:\n      return state\n  }\n}\n\nexport interface UseWidgetStateReturn {\n  state: WidgetState\n  actions: {\n    startLoading: () => void\n    loadingSuccess: () => void\n    loadingError: (error: EmbedError) => void\n    show: () => void\n    hide: () => void\n    submit: (feedback: string) => void\n    reset: () => void\n    incrementInteraction: () => void\n  }\n}\n\n/**\n * Hook for managing widget state with React patterns\n */\nexport const useWidgetState = (): UseWidgetStateReturn => {\n  const [state, dispatch] = useReducer(widgetReducer, initialState)\n  const actionsRef = useRef({\n    startLoading: () => dispatch({ type: \"LOADING_START\" }),\n    loadingSuccess: () => dispatch({ type: \"LOADING_SUCCESS\" }),\n    loadingError: (error: EmbedError) =>\n      dispatch({ type: \"LOADING_ERROR\", error }),\n    show: () => dispatch({ type: \"SHOW\" }),\n    hide: () => dispatch({ type: \"HIDE\" }),\n    submit: (feedback: string) => dispatch({ type: \"SUBMIT\", feedback }),\n    reset: () => dispatch({ type: \"RESET\" }),\n    incrementInteraction: () => dispatch({ type: \"INCREMENT_INTERACTION\" }),\n  })\n\n  return {\n    state,\n    actions: actionsRef.current,\n  }\n}\n"]}