@product7/feedback-sdk 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-sdk.js","sources":["../src/utils/errors.js","../src/core/APIService.js","../src/core/EventBus.js","../src/utils/helpers.js","../src/widgets/BaseWidget.js","../src/widgets/ButtonWidget.js","../src/widgets/InlineWidget.js","../src/widgets/TabWidget.js","../src/widgets/WidgetFactory.js","../src/core/FeedbackSDK.js","../src/styles/styles.js","../src/index.js"],"sourcesContent":["export class SDKError extends Error {\n\tconstructor(message, cause) {\n\t\tsuper(message);\n\t\tthis.name = 'SDKError';\n\t\tthis.cause = cause;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, SDKError);\n\t\t}\n\t}\n}\n\nexport class APIError extends Error {\n\tconstructor(status, message, response) {\n\t\tsuper(message);\n\t\tthis.name = 'APIError';\n\t\tthis.status = status;\n\t\tthis.response = response;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, APIError);\n\t\t}\n\t}\n\n\tisNetworkError() {\n\t\treturn this.status === 0;\n\t}\n\n\tisClientError() {\n\t\treturn this.status >= 400 && this.status < 500;\n\t}\n\n\tisServerError() {\n\t\treturn this.status >= 500 && this.status < 600;\n\t}\n}\n\nexport class WidgetError extends Error {\n\tconstructor(message, widgetType, widgetId) {\n\t\tsuper(message);\n\t\tthis.name = 'WidgetError';\n\t\tthis.widgetType = widgetType;\n\t\tthis.widgetId = widgetId;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, WidgetError);\n\t\t}\n\t}\n}\n\nexport class ConfigError extends Error {\n\tconstructor(message, configKey) {\n\t\tsuper(message);\n\t\tthis.name = 'ConfigError';\n\t\tthis.configKey = configKey;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, ConfigError);\n\t\t}\n\t}\n}\n\nexport class ValidationError extends Error {\n\tconstructor(message, field, value) {\n\t\tsuper(message);\n\t\tthis.name = 'ValidationError';\n\t\tthis.field = field;\n\t\tthis.value = value;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, ValidationError);\n\t\t}\n\t}\n}\n\nexport class ErrorHandler {\n\tconstructor(debug = false) {\n\t\tthis.debug = debug;\n\t}\n\n\thandle(error, context = '') {\n\t\tconst errorInfo = {\n\t\t\tname: error.name,\n\t\t\tmessage: error.message,\n\t\t\tcontext,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t};\n\n\t\tif (error instanceof APIError) {\n\t\t\terrorInfo.status = error.status;\n\t\t\terrorInfo.type = 'api';\n\t\t} else if (error instanceof WidgetError) {\n\t\t\terrorInfo.widgetType = error.widgetType;\n\t\t\terrorInfo.widgetId = error.widgetId;\n\t\t\terrorInfo.type = 'widget';\n\t\t} else if (error instanceof ConfigError) {\n\t\t\terrorInfo.configKey = error.configKey;\n\t\t\terrorInfo.type = 'config';\n\t\t} else if (error instanceof ValidationError) {\n\t\t\terrorInfo.field = error.field;\n\t\t\terrorInfo.value = error.value;\n\t\t\terrorInfo.type = 'validation';\n\t\t} else {\n\t\t\terrorInfo.type = 'unknown';\n\t\t}\n\n\t\tif (this.debug) {\n\t\t\tconsole.error('[FeedbackSDK Error]', errorInfo, error);\n\t\t} else {\n\t\t\tconsole.error('[FeedbackSDK Error]', error.message);\n\t\t}\n\n\t\treturn errorInfo;\n\t}\n\n\tgetUserMessage(error) {\n\t\tif (error instanceof APIError) {\n\t\t\tif (error.isNetworkError()) {\n\t\t\t\treturn 'Network error. Please check your connection and try again.';\n\t\t\t} else if (error.isClientError()) {\n\t\t\t\treturn 'Invalid request. Please check your input and try again.';\n\t\t\t} else if (error.isServerError()) {\n\t\t\t\treturn 'Server error. Please try again later.';\n\t\t\t}\n\t\t\treturn 'Failed to submit feedback. Please try again.';\n\t\t}\n\n\t\tif (error instanceof ValidationError) {\n\t\t\treturn `Please check your ${error.field}: ${error.message}`;\n\t\t}\n\n\t\tif (error instanceof ConfigError) {\n\t\t\treturn 'Configuration error. Please check your SDK setup.';\n\t\t}\n\n\t\tif (error instanceof WidgetError) {\n\t\t\treturn 'Widget error. Please try refreshing the page.';\n\t\t}\n\n\t\treturn 'An unexpected error occurred. Please try again.';\n\t}\n}\n","import { APIError } from '../utils/errors.js';\n\nexport class APIService {\n\tconstructor(config = {}) {\n\t\tthis.workspace = config.workspace;\n\t\tthis.sessionToken = null;\n\t\tthis.sessionExpiry = null;\n\t\tthis.userContext = config.userContext || null;\n\n\t\t// Construct workspace-specific API URL\n\t\tif (config.apiUrl) {\n\t\t\t// If explicitly provided, use it\n\t\t\tthis.baseURL = config.apiUrl;\n\t\t} else if (this.workspace) {\n\t\t\t// Construct from workspace: workspace.api.staging.product7.io/api/v1\n\t\t\tthis.baseURL = `https://${this.workspace}.api.staging.product7.io/api/v1`;\n\t\t} else {\n\t\t\t// Fallback to default\n\t\t\tthis.baseURL = 'https://api.staging.product7.io/api/v1';\n\t\t}\n\n\t\tconsole.log('[APIService] Using API URL:', this.baseURL);\n\n\t\t// Try to load existing session from localStorage\n\t\tthis._loadStoredSession();\n\t}\n\n\tasync init(userContext = null) {\n\t\tconsole.log('[APIService] Starting initialization...');\n\n\t\tif (userContext) {\n\t\t\tthis.userContext = userContext;\n\t\t}\n\n\t\t// Check if we have a valid session token\n\t\tif (this.isSessionValid()) {\n\t\t\tconsole.log('[APIService] Found valid existing session');\n\t\t\treturn { sessionToken: this.sessionToken };\n\t\t}\n\n\t\t// Try to get user context from various sources if not provided\n\t\tif (!this.userContext) {\n\t\t\tconsole.log(\n\t\t\t\t'[APIService] No user context provided, attempting auto-detection...'\n\t\t\t);\n\t\t\tthis.userContext = this._getUserContextFromStorage();\n\t\t}\n\n\t\tif (!this.userContext || !this.workspace) {\n\t\t\tconst error = `Missing ${!this.workspace ? 'workspace' : 'user context'} for initialization`;\n\t\t\tconsole.error('[APIService]', error);\n\t\t\tthrow new APIError(400, error);\n\t\t}\n\n\t\tconsole.log('[APIService] User context detected:', this.userContext);\n\n\t\tconst payload = {\n\t\t\tworkspace: this.workspace,\n\t\t\tuser: this.userContext,\n\t\t};\n\n\t\tconsole.log(\n\t\t\t'[APIService] Making init request to:',\n\t\t\t`${this.baseURL}/widget/init`\n\t\t);\n\t\tconsole.log('[APIService] Payload:', payload);\n\n\t\ttry {\n\t\t\tconst response = await this._makeRequest('/widget/init', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify(payload),\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconsole.log('[APIService] Init response:', response);\n\n\t\t\t// Store session token and expiry\n\t\t\tthis.sessionToken = response.session_token;\n\t\t\tthis.sessionExpiry = new Date(Date.now() + response.expires_in * 1000);\n\n\t\t\t// Store session in localStorage for persistence\n\t\t\tthis._storeSession();\n\n\t\t\treturn {\n\t\t\t\tsessionToken: this.sessionToken,\n\t\t\t\tconfig: response.config || {},\n\t\t\t\texpiresIn: response.expires_in,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.error('[APIService] Init failed:', error);\n\t\t\tthrow new APIError(\n\t\t\t\terror.status || 500,\n\t\t\t\t`Failed to initialize widget: ${error.message}`,\n\t\t\t\terror.response\n\t\t\t);\n\t\t}\n\t}\n\n\tasync submitFeedback(feedbackData) {\n\t\t// Ensure we have a valid session\n\t\tif (!this.isSessionValid()) {\n\t\t\tawait this.init();\n\t\t}\n\n\t\tif (!this.sessionToken) {\n\t\t\tthrow new APIError(401, 'No valid session token available');\n\t\t}\n\n\t\tconst payload = {\n\t\t\tboard:\n\t\t\t\tfeedbackData.board_id || feedbackData.board || feedbackData.boardId,\n\t\t\ttitle: feedbackData.title,\n\t\t\tcontent: feedbackData.content,\n\t\t\tattachments: feedbackData.attachments || [],\n\t\t};\n\n\t\ttry {\n\t\t\tconst response = await this._makeRequest('/widget/feedback', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify(payload),\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\tAuthorization: `Bearer ${this.sessionToken}`,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn response;\n\t\t} catch (error) {\n\t\t\t// If session expired, try to reinitialize once\n\t\t\tif (error.status === 401) {\n\t\t\t\tthis.sessionToken = null;\n\t\t\t\tthis.sessionExpiry = null;\n\t\t\t\tawait this.init();\n\n\t\t\t\t// Retry the request with new session\n\t\t\t\treturn this.submitFeedback(feedbackData);\n\t\t\t}\n\n\t\t\tthrow new APIError(\n\t\t\t\terror.status || 500,\n\t\t\t\t`Failed to submit feedback: ${error.message}`,\n\t\t\t\terror.response\n\t\t\t);\n\t\t}\n\t}\n\n\tisSessionValid() {\n\t\treturn (\n\t\t\tthis.sessionToken && this.sessionExpiry && new Date() < this.sessionExpiry\n\t\t);\n\t}\n\n\tsetUserContext(userContext) {\n\t\tthis.userContext = userContext;\n\t\t// Store in localStorage for persistence\n\t\tif (typeof localStorage !== 'undefined') {\n\t\t\tlocalStorage.setItem(\n\t\t\t\t'feedbackSDK_userContext',\n\t\t\t\tJSON.stringify(userContext)\n\t\t\t);\n\t\t}\n\t}\n\n\tgetUserContext() {\n\t\treturn this.userContext;\n\t}\n\n\tclearSession() {\n\t\tthis.sessionToken = null;\n\t\tthis.sessionExpiry = null;\n\t\tif (typeof localStorage !== 'undefined') {\n\t\t\tlocalStorage.removeItem('feedbackSDK_session');\n\t\t}\n\t}\n\n\t_getUserContextFromStorage() {\n\t\tif (typeof localStorage === 'undefined') return null;\n\n\t\tconsole.log('[APIService] Attempting to detect user from storage...');\n\n\t\ttry {\n\t\t\t// Try to get from feedbackSDK specific storage first\n\t\t\tconst stored = localStorage.getItem('feedbackSDK_userContext');\n\t\t\tif (stored) {\n\t\t\t\tconsole.log('[APIService] Found user context in feedbackSDK storage');\n\t\t\t\treturn JSON.parse(stored);\n\t\t\t}\n\n\t\t\t// Try to get from window object (if set by parent application)\n\t\t\tif (typeof window !== 'undefined' && window.FeedbackSDKUserContext) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t'[APIService] Found user context in window.FeedbackSDKUserContext'\n\t\t\t\t);\n\t\t\t\treturn window.FeedbackSDKUserContext;\n\t\t\t}\n\n\t\t\t// Check window.currentUser\n\t\t\tif (typeof window !== 'undefined' && window.currentUser) {\n\t\t\t\tconsole.log('[APIService] Found user context in window.currentUser');\n\t\t\t\treturn this._mapUserData(window.currentUser);\n\t\t\t}\n\n\t\t\t// Try to extract from existing session storage\n\t\t\tconst authSources = ['auth', 'currentUser', 'userSession', 'user'];\n\n\t\t\tfor (const key of authSources) {\n\t\t\t\tconst sessionData = localStorage.getItem(key);\n\t\t\t\tif (sessionData) {\n\t\t\t\t\tconsole.log(`[APIService] Found data in localStorage.${key}`);\n\t\t\t\t\tconst parsed = JSON.parse(sessionData);\n\n\t\t\t\t\t// Handle nested user data (like {user: {...}, token: ...})\n\t\t\t\t\tconst userData = parsed.user || parsed;\n\n\t\t\t\t\tif (userData && (userData.id || userData.user_id || userData.email)) {\n\t\t\t\t\t\tconsole.log('[APIService] Successfully mapped user data');\n\t\t\t\t\t\treturn this._mapUserData(userData);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log('[APIService] No user context found in any storage location');\n\t\t\treturn null;\n\t\t} catch (error) {\n\t\t\tconsole.warn(\n\t\t\t\t'[FeedbackSDK] Failed to load user context from storage:',\n\t\t\t\terror\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t_mapUserData(userData) {\n\t\tconsole.log('[APIService] Mapping user data:', userData);\n\n\t\tconst mapped = {\n\t\t\tuser_id: userData.id || userData.user_id || userData.userId,\n\t\t\temail: userData.email,\n\t\t\tname: userData.name || userData.displayName || userData.full_name,\n\t\t\tcustom_fields: {},\n\t\t\tcompany: {},\n\t\t};\n\n\t\t// Map company data if available\n\t\tif (userData.company || userData.organization) {\n\t\t\tconst company = userData.company || userData.organization;\n\t\t\tmapped.company = {\n\t\t\t\tid: company.id || company.company_id,\n\t\t\t\tname: company.name || company.company_name,\n\t\t\t\tmonthly_spend: company.monthly_spend || company.spend,\n\t\t\t};\n\t\t}\n\n\t\t// Map any additional custom fields\n\t\tconst customFieldKeys = ['plan', 'role', 'tier', 'subscription'];\n\t\tcustomFieldKeys.forEach((key) => {\n\t\t\tif (userData[key]) {\n\t\t\t\tmapped.custom_fields[key] = userData[key];\n\t\t\t}\n\t\t});\n\n\t\tconsole.log('[APIService] Mapped result:', mapped);\n\t\treturn mapped;\n\t}\n\n\t_storeSession() {\n\t\tif (typeof localStorage === 'undefined') return;\n\n\t\ttry {\n\t\t\tconst sessionData = {\n\t\t\t\ttoken: this.sessionToken,\n\t\t\t\texpiry: this.sessionExpiry.toISOString(),\n\t\t\t\tworkspace: this.workspace,\n\t\t\t};\n\t\t\tlocalStorage.setItem('feedbackSDK_session', JSON.stringify(sessionData));\n\t\t} catch (error) {\n\t\t\tconsole.warn('[FeedbackSDK] Failed to store session:', error);\n\t\t}\n\t}\n\n\t_loadStoredSession() {\n\t\tif (typeof localStorage === 'undefined') return false;\n\n\t\ttry {\n\t\t\tconst stored = localStorage.getItem('feedbackSDK_session');\n\t\t\tif (!stored) return false;\n\n\t\t\tconst sessionData = JSON.parse(stored);\n\t\t\tthis.sessionToken = sessionData.token;\n\t\t\tthis.sessionExpiry = new Date(sessionData.expiry);\n\n\t\t\treturn this.isSessionValid();\n\t\t} catch (error) {\n\t\t\tconsole.warn('[FeedbackSDK] Failed to load stored session:', error);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync _makeRequest(endpoint, options = {}) {\n\t\tconst url = `${this.baseURL}${endpoint}`;\n\t\tconsole.log('[APIService] Making request to:', url);\n\n\t\ttry {\n\t\t\tconst response = await fetch(url, options);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tlet errorMessage = `HTTP ${response.status}`;\n\t\t\t\tlet responseData = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tresponseData = await response.json();\n\t\t\t\t\terrorMessage =\n\t\t\t\t\t\tresponseData.message || responseData.error || errorMessage;\n\t\t\t\t} catch (e) {\n\t\t\t\t\terrorMessage = (await response.text()) || errorMessage;\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(response.status, errorMessage, responseData);\n\t\t\t}\n\n\t\t\tconst contentType = response.headers.get('content-type');\n\t\t\tif (contentType && contentType.includes('application/json')) {\n\t\t\t\treturn await response.json();\n\t\t\t}\n\n\t\t\treturn await response.text();\n\t\t} catch (error) {\n\t\t\tif (error instanceof APIError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// Network or other errors\n\t\t\tthrow new APIError(0, error.message, null);\n\t\t}\n\t}\n}\n","export class EventBus {\n\tconstructor() {\n\t\tthis.events = new Map();\n\t}\n\n\ton(event, callback) {\n\t\tif (!this.events.has(event)) {\n\t\t\tthis.events.set(event, []);\n\t\t}\n\t\tthis.events.get(event).push(callback);\n\n\t\treturn () => this.off(event, callback);\n\t}\n\n\toff(event, callback) {\n\t\tconst callbacks = this.events.get(event);\n\t\tif (callbacks) {\n\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\tif (index > -1) {\n\t\t\t\tcallbacks.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\temit(event, data) {\n\t\tconst callbacks = this.events.get(event);\n\t\tif (callbacks) {\n\t\t\tcallbacks.forEach((callback) => {\n\t\t\t\ttry {\n\t\t\t\t\tcallback(data);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('[FeedbackSDK] Event callback error:', error);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tonce(event, callback) {\n\t\tconst unsubscribe = this.on(event, (data) => {\n\t\t\tcallback(data);\n\t\t\tunsubscribe();\n\t\t});\n\t\treturn unsubscribe;\n\t}\n\n\tclear() {\n\t\tthis.events.clear();\n\t}\n\n\tgetListenerCount(event) {\n\t\tconst callbacks = this.events.get(event);\n\t\treturn callbacks ? callbacks.length : 0;\n\t}\n}\n","export function generateId(prefix = 'feedback') {\n\tconst timestamp = Date.now();\n\tconst random = Math.random().toString(36).substring(2, 9);\n\treturn `${prefix}_${timestamp}_${random}`;\n}\n\nexport function deepMerge(target, source) {\n\tconst result = { ...target };\n\n\tfor (const key in source) {\n\t\tif (source.hasOwnProperty(key)) {\n\t\t\tif (\n\t\t\t\tsource[key] &&\n\t\t\t\ttypeof source[key] === 'object' &&\n\t\t\t\t!Array.isArray(source[key])\n\t\t\t) {\n\t\t\t\tresult[key] = deepMerge(target[key] || {}, source[key]);\n\t\t\t} else {\n\t\t\t\tresult[key] = source[key];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function debounce(func, wait) {\n\tlet timeout;\n\treturn function executedFunction(...args) {\n\t\tconst later = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tfunc(...args);\n\t\t};\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\t};\n}\n\nexport function throttle(func, limit) {\n\tlet lastFunc;\n\tlet lastRan;\n\treturn function (...args) {\n\t\tif (!lastRan) {\n\t\t\tfunc(...args);\n\t\t\tlastRan = Date.now();\n\t\t} else {\n\t\t\tclearTimeout(lastFunc);\n\t\t\tlastFunc = setTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tif (Date.now() - lastRan >= limit) {\n\t\t\t\t\t\tfunc(...args);\n\t\t\t\t\t\tlastRan = Date.now();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlimit - (Date.now() - lastRan)\n\t\t\t);\n\t\t}\n\t};\n}\n\nexport function isValidEmail(email) {\n\tif (!email || typeof email !== 'string') return false;\n\n\tconst emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\treturn emailRegex.test(email.trim());\n}\n\nexport function sanitizeHTML(str) {\n\tif (!str || typeof str !== 'string') return '';\n\n\tconst div = document.createElement('div');\n\tdiv.textContent = str;\n\treturn div.innerHTML;\n}\n\nexport function getCSSProperty(element, property, fallback = '') {\n\tif (!element || !property) return fallback;\n\n\ttry {\n\t\tconst style = window.getComputedStyle(element);\n\t\treturn style.getPropertyValue(property) || fallback;\n\t} catch (error) {\n\t\treturn fallback;\n\t}\n}\n\nexport function isInViewport(element) {\n\tif (!element) return false;\n\n\tconst rect = element.getBoundingClientRect();\n\treturn (\n\t\trect.top >= 0 &&\n\t\trect.left >= 0 &&\n\t\trect.bottom <=\n\t\t\t(window.innerHeight || document.documentElement.clientHeight) &&\n\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t);\n}\n\nexport function scrollToElement(element, options = {}) {\n\tif (!element) return;\n\n\tconst defaultOptions = {\n\t\tbehavior: 'smooth',\n\t\tblock: 'center',\n\t\tinline: 'nearest',\n\t};\n\n\telement.scrollIntoView({ ...defaultOptions, ...options });\n}\n\nexport function getBrowserInfo() {\n\tconst userAgent = navigator.userAgent;\n\tconst platform = navigator.platform;\n\n\treturn {\n\t\tuserAgent,\n\t\tplatform,\n\t\tlanguage: navigator.language || navigator.userLanguage,\n\t\tcookieEnabled: navigator.cookieEnabled,\n\t\tscreenResolution: `${screen.width}x${screen.height}`,\n\t\twindowSize: `${window.innerWidth}x${window.innerHeight}`,\n\t\ttimezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\t};\n}\n\nexport function formatFileSize(bytes) {\n\tif (bytes === 0) return '0 Bytes';\n\n\tconst k = 1024;\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nexport function delay(ms) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function safeJsonParse(str, fallback = null) {\n\ttry {\n\t\treturn JSON.parse(str);\n\t} catch (error) {\n\t\treturn fallback;\n\t}\n}\n\nexport function escapeRegex(string) {\n\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function getNestedProperty(obj, path, defaultValue = undefined) {\n\tif (!obj || !path) return defaultValue;\n\n\tconst keys = path.split('.');\n\tlet current = obj;\n\n\tfor (const key of keys) {\n\t\tif (current === null || current === undefined || !(key in current)) {\n\t\t\treturn defaultValue;\n\t\t}\n\t\tcurrent = current[key];\n\t}\n\n\treturn current;\n}\n\nexport function setNestedProperty(obj, path, value) {\n\tif (!obj || !path) return obj;\n\n\tconst keys = path.split('.');\n\tconst lastKey = keys.pop();\n\tlet current = obj;\n\n\tfor (const key of keys) {\n\t\tif (!(key in current) || typeof current[key] !== 'object') {\n\t\t\tcurrent[key] = {};\n\t\t}\n\t\tcurrent = current[key];\n\t}\n\n\tcurrent[lastKey] = value;\n\treturn obj;\n}\n\nexport function isBrowser() {\n\treturn typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nexport function isMobile() {\n\tif (!isBrowser()) return false;\n\n\treturn (\n\t\t/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n\t\t\tnavigator.userAgent\n\t\t) || window.innerWidth <= 768\n\t);\n}\n\nexport function getCurrentTimestamp() {\n\treturn new Date().toISOString();\n}\n\nexport function validateConfig(config, required = []) {\n\tconst missing = [];\n\n\tfor (const key of required) {\n\t\tif (!config[key]) {\n\t\t\tmissing.push(key);\n\t\t}\n\t}\n\n\tif (missing.length > 0) {\n\t\tthrow new Error(`Missing required configuration: ${missing.join(', ')}`);\n\t}\n\n\treturn true;\n}\n","export class BaseWidget {\n\tconstructor(options = {}) {\n\t\tthis.id = options.id;\n\t\tthis.sdk = options.sdk;\n\t\tthis.apiService = options.apiService;\n\t\tthis.type = options.type || 'base';\n\n\t\tthis.options = {\n\t\t\tcontainer: null,\n\t\t\tposition: this.sdk.config.position,\n\t\t\ttheme: this.sdk.config.theme,\n\t\t\tboardId: this.sdk.config.boardId,\n\t\t\tautoShow: false,\n\t\t\tcustomStyles: {},\n\t\t\t...options,\n\t\t};\n\n\t\tthis.element = null;\n\t\tthis.modalElement = null;\n\t\tthis.mounted = false;\n\t\tthis.destroyed = false;\n\n\t\tthis.state = {\n\t\t\tisOpen: false,\n\t\t\tisSubmitting: false,\n\t\t\ttitle: '',\n\t\t\tcontent: '',\n\t\t\temail: '',\n\t\t\tattachments: [],\n\t\t\terrors: {},\n\t\t};\n\n\t\tthis._bindMethods();\n\t}\n\n\tmount(container) {\n\t\tif (this.mounted || this.destroyed) return this;\n\n\t\tif (typeof container === 'string') {\n\t\t\tcontainer = document.querySelector(container);\n\t\t}\n\n\t\tif (!container) {\n\t\t\tcontainer = document.body;\n\t\t}\n\n\t\tthis.container = container;\n\t\tthis.element = this._render();\n\t\tthis.container.appendChild(this.element);\n\n\t\tthis.mounted = true;\n\t\tthis._attachEvents();\n\t\tthis.onMount();\n\n\t\tif (this.options.autoShow) {\n\t\t\tthis.show();\n\t\t}\n\n\t\tthis.sdk.eventBus.emit('widget:mounted', { widget: this });\n\t\treturn this;\n\t}\n\n\tshow() {\n\t\tif (this.element) {\n\t\t\tthis.element.style.display = 'block';\n\t\t}\n\t\treturn this;\n\t}\n\n\thide() {\n\t\tif (this.element) {\n\t\t\tthis.element.style.display = 'none';\n\t\t}\n\t\treturn this;\n\t}\n\n\topenModal() {\n\t\tthis.state.isOpen = true;\n\t\tthis._renderModal();\n\t}\n\n\tcloseModal() {\n\t\tthis.state.isOpen = false;\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tthis._resetForm();\n\t}\n\n\tasync submitFeedback() {\n\t\tif (this.state.isSubmitting) return;\n\n\t\ttry {\n\t\t\tthis.state.isSubmitting = true;\n\t\t\tthis._updateSubmitButton();\n\n\t\t\tconst payload = {\n\t\t\t\ttitle: this.state.title || 'Feedback',\n\t\t\t\tcontent: this.state.content,\n\t\t\t\temail: this.state.email,\n\t\t\t\tboard_id: this.options.boardId,\n\t\t\t\tattachments: this.state.attachments,\n\t\t\t};\n\n\t\t\tif (!this.state.content.trim()) {\n\t\t\t\tthis._showError('Please enter your feedback message.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst response = await this.apiService.submitFeedback(payload);\n\n\t\t\tthis._showSuccessMessage();\n\t\t\tthis.closeModal();\n\n\t\t\tthis.sdk.eventBus.emit('feedback:submitted', {\n\t\t\t\twidget: this,\n\t\t\t\tfeedback: response,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthis._showError('Failed to submit feedback. Please try again.');\n\t\t\tthis.sdk.eventBus.emit('feedback:error', { widget: this, error });\n\t\t} finally {\n\t\t\tthis.state.isSubmitting = false;\n\t\t\tthis._updateSubmitButton();\n\t\t}\n\t}\n\n\thandleConfigUpdate(newConfig) {\n\t\tthis.options.theme = newConfig.theme;\n\t\tif (this.element) {\n\t\t\tthis._updateTheme();\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tif (this.destroyed) return;\n\n\t\tthis.onDestroy();\n\t\tthis.closeModal();\n\n\t\tif (this.element && this.element.parentNode) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\n\t\tthis.destroyed = true;\n\t\tthis.mounted = false;\n\t\tthis.sdk.eventBus.emit('widget:destroyed', { widget: this });\n\t}\n\n\tonMount() {}\n\tonDestroy() {}\n\n\t_render() {\n\t\tthrow new Error('_render() must be implemented by concrete widget');\n\t}\n\n\t_attachEvents() {\n\t\t// Override in concrete widgets\n\t}\n\n\t_bindMethods() {\n\t\tthis.openModal = this.openModal.bind(this);\n\t\tthis.closeModal = this.closeModal.bind(this);\n\t\tthis.submitFeedback = this.submitFeedback.bind(this);\n\t}\n\n\t_renderModal() {\n\t\tif (this.modalElement) return;\n\n\t\tthis.modalElement = document.createElement('div');\n\t\tthis.modalElement.className = `feedback-modal theme-${this.options.theme}`;\n\t\tthis.modalElement.innerHTML = this._getModalHTML();\n\n\t\tdocument.body.appendChild(this.modalElement);\n\t\tthis._attachModalEvents();\n\n\t\tconst firstInput = this.modalElement.querySelector('input, textarea');\n\t\tif (firstInput) {\n\t\t\tsetTimeout(() => firstInput.focus(), 100);\n\t\t}\n\t}\n\n\t_getModalHTML() {\n\t\treturn `\n <div class=\"feedback-modal-overlay\">\n <div class=\"feedback-modal-content\">\n <div class=\"feedback-modal-header\">\n <h3>Send Feedback</h3>\n <button class=\"feedback-modal-close\" type=\"button\">&times;</button>\n </div>\n <form class=\"feedback-form\">\n <div class=\"feedback-form-group\">\n <label for=\"feedback-title-${this.id}\">Title</label>\n <input \n type=\"text\" \n id=\"feedback-title-${this.id}\" \n name=\"title\" \n placeholder=\"Brief description of your feedback\"\n value=\"${this.state.title}\"\n />\n </div>\n <div class=\"feedback-form-group\">\n <label for=\"feedback-content-${this.id}\">Message *</label>\n <textarea \n id=\"feedback-content-${this.id}\" \n name=\"content\" \n placeholder=\"Tell us more about your feedback...\"\n required\n >${this.state.content}</textarea>\n </div>\n <div class=\"feedback-form-actions\">\n <button type=\"button\" class=\"feedback-btn feedback-btn-cancel\">Cancel</button>\n <button type=\"submit\" class=\"feedback-btn feedback-btn-submit\">\n ${this.state.isSubmitting ? 'Sending...' : 'Send Feedback'}\n </button>\n </div>\n <div class=\"feedback-error\" style=\"display: none;\"></div>\n </form>\n </div>\n </div>\n `;\n\t}\n\n\t_attachModalEvents() {\n\t\tconst modal = this.modalElement;\n\n\t\tmodal\n\t\t\t.querySelector('.feedback-modal-close')\n\t\t\t.addEventListener('click', this.closeModal);\n\t\tmodal\n\t\t\t.querySelector('.feedback-btn-cancel')\n\t\t\t.addEventListener('click', this.closeModal);\n\t\tmodal\n\t\t\t.querySelector('.feedback-modal-overlay')\n\t\t\t.addEventListener('click', (e) => {\n\t\t\t\tif (e.target === e.currentTarget) {\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t}\n\t\t\t});\n\n\t\tconst form = modal.querySelector('.feedback-form');\n\t\tform.addEventListener('submit', (e) => {\n\t\t\te.preventDefault();\n\t\t\tthis.submitFeedback();\n\t\t});\n\n\t\tmodal\n\t\t\t.querySelector('input[name=\"title\"]')\n\t\t\t.addEventListener('input', (e) => {\n\t\t\t\tthis.state.title = e.target.value;\n\t\t\t});\n\n\t\tmodal\n\t\t\t.querySelector('textarea[name=\"content\"]')\n\t\t\t.addEventListener('input', (e) => {\n\t\t\t\tthis.state.content = e.target.value;\n\t\t\t});\n\t}\n\n\t_updateSubmitButton() {\n\t\tif (this.modalElement) {\n\t\t\tconst submitBtn = this.modalElement.querySelector('.feedback-btn-submit');\n\t\t\tif (submitBtn) {\n\t\t\t\tsubmitBtn.textContent = this.state.isSubmitting\n\t\t\t\t\t? 'Sending...'\n\t\t\t\t\t: 'Send Feedback';\n\t\t\t\tsubmitBtn.disabled = this.state.isSubmitting;\n\t\t\t}\n\t\t}\n\t}\n\n\t_showError(message) {\n\t\tif (this.modalElement) {\n\t\t\tconst errorElement = this.modalElement.querySelector('.feedback-error');\n\t\t\terrorElement.textContent = message;\n\t\t\terrorElement.style.display = 'block';\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (errorElement) {\n\t\t\t\t\terrorElement.style.display = 'none';\n\t\t\t\t}\n\t\t\t}, 5000);\n\t\t}\n\t}\n\n\t_showSuccessMessage() {\n\t\tconst notification = document.createElement('div');\n\t\tnotification.className = 'feedback-success-notification';\n\t\tnotification.innerHTML = `\n <div class=\"feedback-success-content\">\n <span>✓ Feedback submitted successfully!</span>\n <button class=\"feedback-success-close\">&times;</button>\n </div>\n `;\n\n\t\tdocument.body.appendChild(notification);\n\n\t\tsetTimeout(() => {\n\t\t\tif (notification.parentNode) {\n\t\t\t\tnotification.parentNode.removeChild(notification);\n\t\t\t}\n\t\t}, 3000);\n\n\t\tnotification\n\t\t\t.querySelector('.feedback-success-close')\n\t\t\t.addEventListener('click', () => {\n\t\t\t\tif (notification.parentNode) {\n\t\t\t\t\tnotification.parentNode.removeChild(notification);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t_resetForm() {\n\t\tthis.state.title = '';\n\t\tthis.state.content = '';\n\t\tthis.state.email = '';\n\t\tthis.state.errors = {};\n\t}\n\n\t_updateTheme() {\n\t\tif (this.element) {\n\t\t\tthis.element.className = this.element.className.replace(\n\t\t\t\t/theme-\\w+/,\n\t\t\t\t`theme-${this.options.theme}`\n\t\t\t);\n\t\t}\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.className = this.modalElement.className.replace(\n\t\t\t\t/theme-\\w+/,\n\t\t\t\t`theme-${this.options.theme}`\n\t\t\t);\n\t\t}\n\t}\n}\n","import { BaseWidget } from './BaseWidget.js';\n\nexport class ButtonWidget extends BaseWidget {\n\tconstructor(options) {\n\t\tsuper({ ...options, type: 'button' });\n\t}\n\n\t_render() {\n\t\tconst button = document.createElement('div');\n\t\tbutton.className = `feedback-widget feedback-widget-button theme-${this.options.theme} position-${this.options.position}`;\n\t\tbutton.innerHTML = `\n <button class=\"feedback-trigger-btn\" type=\"button\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\"/>\n <path d=\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\"/>\n </svg>\n Feedback\n </button>\n `;\n\n\t\tif (this.options.customStyles) {\n\t\t\tObject.assign(button.style, this.options.customStyles);\n\t\t}\n\n\t\treturn button;\n\t}\n\n\t_attachEvents() {\n\t\tconst button = this.element.querySelector('.feedback-trigger-btn');\n\t\tbutton.addEventListener('click', this.openModal);\n\n\t\tbutton.addEventListener('mouseenter', () => {\n\t\t\tif (!this.state.isSubmitting) {\n\t\t\t\tbutton.style.transform = 'translateY(-2px)';\n\t\t\t}\n\t\t});\n\n\t\tbutton.addEventListener('mouseleave', () => {\n\t\t\tbutton.style.transform = 'translateY(0)';\n\t\t});\n\t}\n\n\tupdateText(text) {\n\t\tconst button = this.element?.querySelector('.feedback-trigger-btn');\n\t\tif (button) {\n\t\t\tconst textNode = button.childNodes[button.childNodes.length - 1];\n\t\t\tif (textNode && textNode.nodeType === Node.TEXT_NODE) {\n\t\t\t\ttextNode.textContent = text;\n\t\t\t}\n\t\t}\n\t}\n\n\tupdatePosition(position) {\n\t\tthis.options.position = position;\n\t\tif (this.element) {\n\t\t\tthis.element.className = this.element.className.replace(\n\t\t\t\t/position-\\w+-\\w+/,\n\t\t\t\t`position-${position}`\n\t\t\t);\n\t\t}\n\t}\n}\n","import { BaseWidget } from './BaseWidget.js';\n\nexport class InlineWidget extends BaseWidget {\n\tconstructor(options) {\n\t\tsuper({ ...options, type: 'inline' });\n\t}\n\n\t_render() {\n\t\tconst widget = document.createElement('div');\n\t\twidget.className = `feedback-widget feedback-widget-inline theme-${this.options.theme}`;\n\t\twidget.innerHTML = `\n <div class=\"feedback-inline-content\">\n <h3>Send us your feedback</h3>\n <form class=\"feedback-inline-form\">\n <div class=\"feedback-form-group\">\n <input \n type=\"text\" \n name=\"title\" \n placeholder=\"Title (optional)\"\n value=\"${this.state.title}\"\n />\n </div>\n <div class=\"feedback-form-group\">\n <textarea \n name=\"content\" \n placeholder=\"Your feedback...\"\n required\n >${this.state.content}</textarea>\n </div>\n <div class=\"feedback-form-group\">\n <input \n type=\"email\" \n name=\"email\" \n placeholder=\"Email (optional)\"\n value=\"${this.state.email}\"\n />\n </div>\n <button type=\"submit\" class=\"feedback-btn feedback-btn-submit\">\n Send Feedback\n </button>\n <div class=\"feedback-error\" style=\"display: none;\"></div>\n </form>\n </div>\n `;\n\n\t\tif (this.options.customStyles) {\n\t\t\tObject.assign(widget.style, this.options.customStyles);\n\t\t}\n\n\t\treturn widget;\n\t}\n\n\t_attachEvents() {\n\t\tconst form = this.element.querySelector('.feedback-inline-form');\n\n\t\tform.addEventListener('submit', (e) => {\n\t\t\te.preventDefault();\n\t\t\tthis.submitFeedback();\n\t\t});\n\n\t\tform.querySelector('input[name=\"title\"]').addEventListener('input', (e) => {\n\t\t\tthis.state.title = e.target.value;\n\t\t});\n\n\t\tform\n\t\t\t.querySelector('textarea[name=\"content\"]')\n\t\t\t.addEventListener('input', (e) => {\n\t\t\t\tthis.state.content = e.target.value;\n\t\t\t});\n\n\t\tform.querySelector('input[name=\"email\"]').addEventListener('input', (e) => {\n\t\t\tthis.state.email = e.target.value;\n\t\t});\n\t}\n\n\topenModal() {\n\t\tconst textarea = this.element.querySelector('textarea[name=\"content\"]');\n\t\tif (textarea) {\n\t\t\ttextarea.focus();\n\t\t}\n\t}\n\n\tcloseModal() {\n\t\t// Inline widget doesn't use modal\n\t}\n\n\t_showSuccessMessage() {\n\t\tconst widget = this.element.querySelector('.feedback-inline-content');\n\t\tconst originalContent = widget.innerHTML;\n\n\t\twidget.innerHTML = `\n <div class=\"feedback-success\">\n <div class=\"feedback-success-icon\">✓</div>\n <h3>Thank you!</h3>\n <p>Your feedback has been submitted successfully.</p>\n <button class=\"feedback-btn feedback-btn-reset\">Send Another</button>\n </div>\n `;\n\n\t\tconst resetBtn = widget.querySelector('.feedback-btn-reset');\n\t\tresetBtn.addEventListener('click', () => {\n\t\t\twidget.innerHTML = originalContent;\n\t\t\tthis._attachEvents();\n\t\t\tthis._resetForm();\n\t\t});\n\t}\n\n\t_showError(message) {\n\t\tconst errorElement = this.element.querySelector('.feedback-error');\n\t\tif (errorElement) {\n\t\t\terrorElement.textContent = message;\n\t\t\terrorElement.style.display = 'block';\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (errorElement) {\n\t\t\t\t\terrorElement.style.display = 'none';\n\t\t\t\t}\n\t\t\t}, 5000);\n\t\t}\n\t}\n\n\t_updateSubmitButton() {\n\t\tconst submitBtn = this.element.querySelector('.feedback-btn-submit');\n\t\tif (submitBtn) {\n\t\t\tsubmitBtn.textContent = this.state.isSubmitting\n\t\t\t\t? 'Sending...'\n\t\t\t\t: 'Send Feedback';\n\t\t\tsubmitBtn.disabled = this.state.isSubmitting;\n\t\t}\n\t}\n\n\tupdateTitle(title) {\n\t\tconst titleElement = this.element?.querySelector('h3');\n\t\tif (titleElement) {\n\t\t\ttitleElement.textContent = title;\n\t\t}\n\t}\n\n\tsetPlaceholder(field, placeholder) {\n\t\tconst input = this.element?.querySelector(`[name=\"${field}\"]`);\n\t\tif (input) {\n\t\t\tinput.placeholder = placeholder;\n\t\t}\n\t}\n}\n","import { BaseWidget } from './BaseWidget.js';\n\nexport class TabWidget extends BaseWidget {\n\tconstructor(options) {\n\t\tsuper({ ...options, type: 'tab' });\n\t}\n\n\t_render() {\n\t\tconst tab = document.createElement('div');\n\t\ttab.className = `feedback-widget feedback-widget-tab theme-${this.options.theme} position-${this.options.position}`;\n\t\ttab.innerHTML = `\n <div class=\"feedback-tab-trigger\">\n <span class=\"feedback-tab-text\">Feedback</span>\n </div>\n `;\n\n\t\tif (this.options.customStyles) {\n\t\t\tObject.assign(tab.style, this.options.customStyles);\n\t\t}\n\n\t\treturn tab;\n\t}\n\n\t_attachEvents() {\n\t\tconst tab = this.element.querySelector('.feedback-tab-trigger');\n\t\ttab.addEventListener('click', this.openModal);\n\n\t\ttab.addEventListener('mouseenter', () => {\n\t\t\tif (!this.state.isSubmitting) {\n\t\t\t\ttab.style.transform = this._getHoverTransform();\n\t\t\t}\n\t\t});\n\n\t\ttab.addEventListener('mouseleave', () => {\n\t\t\ttab.style.transform = 'none';\n\t\t});\n\t}\n\n\t_getHoverTransform() {\n\t\tconst position = this.options.position;\n\t\tif (position.includes('right')) {\n\t\t\treturn 'translateX(-5px)';\n\t\t} else if (position.includes('left')) {\n\t\t\treturn 'translateX(5px)';\n\t\t}\n\t\treturn 'none';\n\t}\n\n\tupdateText(text) {\n\t\tconst textElement = this.element?.querySelector('.feedback-tab-text');\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = text;\n\t\t}\n\t}\n\n\tupdatePosition(position) {\n\t\tthis.options.position = position;\n\t\tif (this.element) {\n\t\t\tthis.element.className = this.element.className.replace(\n\t\t\t\t/position-\\w+-\\w+/,\n\t\t\t\t`position-${position}`\n\t\t\t);\n\t\t}\n\t}\n}\n","import { SDKError } from '../utils/errors.js';\nimport { ButtonWidget } from './ButtonWidget.js';\nimport { InlineWidget } from './InlineWidget.js';\nimport { TabWidget } from './TabWidget.js';\n\nexport class WidgetFactory {\n\tstatic widgets = new Map([\n\t\t['button', ButtonWidget],\n\t\t['tab', TabWidget],\n\t\t['inline', InlineWidget],\n\t]);\n\n\tstatic register(type, WidgetClass) {\n\t\tif (typeof type !== 'string' || !type.trim()) {\n\t\t\tthrow new SDKError('Widget type must be a non-empty string');\n\t\t}\n\n\t\tif (typeof WidgetClass !== 'function') {\n\t\t\tthrow new SDKError('Widget class must be a constructor function');\n\t\t}\n\n\t\tthis.widgets.set(type, WidgetClass);\n\t}\n\n\tstatic create(type, options = {}) {\n\t\tconst WidgetClass = this.widgets.get(type);\n\n\t\tif (!WidgetClass) {\n\t\t\tconst availableTypes = Array.from(this.widgets.keys()).join(', ');\n\t\t\tthrow new SDKError(\n\t\t\t\t`Unknown widget type: ${type}. Available types: ${availableTypes}`\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\treturn new WidgetClass(options);\n\t\t} catch (error) {\n\t\t\tthrow new SDKError(\n\t\t\t\t`Failed to create widget of type '${type}': ${error.message}`,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\tstatic getAvailableTypes() {\n\t\treturn Array.from(this.widgets.keys());\n\t}\n\n\tstatic isTypeRegistered(type) {\n\t\treturn this.widgets.has(type);\n\t}\n\n\tstatic unregister(type) {\n\t\treturn this.widgets.delete(type);\n\t}\n\n\tstatic clear() {\n\t\tthis.widgets.clear();\n\t}\n\n\tstatic getWidgetClass(type) {\n\t\treturn this.widgets.get(type);\n\t}\n}\n","import { ConfigError, SDKError } from '../utils/errors.js';\nimport { deepMerge, generateId } from '../utils/helpers.js';\nimport { WidgetFactory } from '../widgets/WidgetFactory.js';\nimport { APIService } from './APIService.js';\nimport { EventBus } from './EventBus.js';\n\nexport class FeedbackSDK {\n\tconstructor(config = {}) {\n\t\tthis.config = this._validateAndMergeConfig(config);\n\t\tthis.initialized = false;\n\t\tthis.widgets = new Map();\n\t\tthis.eventBus = new EventBus();\n\n\t\t// Initialize API service\n\t\tthis.apiService = new APIService({\n\t\t\tapiUrl: this.config.apiUrl,\n\t\t\tworkspace: this.config.workspace,\n\t\t\tuserContext: this.config.userContext,\n\t\t});\n\n\t\tthis._bindMethods();\n\t}\n\n\tasync init() {\n\t\tif (this.initialized) {\n\t\t\treturn { alreadyInitialized: true };\n\t\t}\n\n\t\ttry {\n\t\t\t// Initialize the API service (this will handle the /widget/init call)\n\t\t\tconst initData = await this.apiService.init(this.config.userContext);\n\n\t\t\t// Merge any server-provided config with local config\n\t\t\tif (initData.config) {\n\t\t\t\tthis.config = deepMerge(this.config, initData.config);\n\t\t\t}\n\n\t\t\tthis.initialized = true;\n\t\t\tthis.eventBus.emit('sdk:initialized', {\n\t\t\t\tconfig: this.config,\n\t\t\t\tsessionToken: initData.sessionToken,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tinitialized: true,\n\t\t\t\tconfig: initData.config || {},\n\t\t\t\tsessionToken: initData.sessionToken,\n\t\t\t\texpiresIn: initData.expiresIn,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthis.eventBus.emit('sdk:error', { error });\n\t\t\tthrow new SDKError(`Failed to initialize SDK: ${error.message}`, error);\n\t\t}\n\t}\n\n\tcreateWidget(type = 'button', options = {}) {\n\t\tif (!this.initialized) {\n\t\t\tthrow new SDKError(\n\t\t\t\t'SDK must be initialized before creating widgets. Call init() first.'\n\t\t\t);\n\t\t}\n\n\t\tconst widgetId = generateId('widget');\n\t\tconst widgetOptions = {\n\t\t\tid: widgetId,\n\t\t\tsdk: this,\n\t\t\tapiService: this.apiService,\n\t\t\t...this.config,\n\t\t\t...options,\n\t\t};\n\n\t\ttry {\n\t\t\tconst widget = WidgetFactory.create(type, widgetOptions);\n\t\t\tthis.widgets.set(widgetId, widget);\n\n\t\t\tthis.eventBus.emit('widget:created', { widget, type });\n\t\t\treturn widget;\n\t\t} catch (error) {\n\t\t\tthrow new SDKError(`Failed to create widget: ${error.message}`, error);\n\t\t}\n\t}\n\n\tgetWidget(id) {\n\t\treturn this.widgets.get(id);\n\t}\n\n\tgetAllWidgets() {\n\t\treturn Array.from(this.widgets.values());\n\t}\n\n\tdestroyWidget(id) {\n\t\tconst widget = this.widgets.get(id);\n\t\tif (widget) {\n\t\t\twidget.destroy();\n\t\t\tthis.widgets.delete(id);\n\t\t\tthis.eventBus.emit('widget:removed', { widgetId: id });\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tdestroyAllWidgets() {\n\t\tfor (const widget of this.widgets.values()) {\n\t\t\twidget.destroy();\n\t\t}\n\t\tthis.widgets.clear();\n\t\tthis.eventBus.emit('widgets:cleared');\n\t}\n\n\tupdateConfig(newConfig) {\n\t\tconst oldConfig = { ...this.config };\n\t\tthis.config = this._validateAndMergeConfig(newConfig, this.config);\n\n\t\t// Update all existing widgets with new config\n\t\tfor (const widget of this.widgets.values()) {\n\t\t\twidget.handleConfigUpdate(this.config);\n\t\t}\n\n\t\tthis.eventBus.emit('config:updated', {\n\t\t\toldConfig,\n\t\t\tnewConfig: this.config,\n\t\t});\n\t}\n\n\tsetUserContext(userContext) {\n\t\tthis.config.userContext = userContext;\n\t\tif (this.apiService) {\n\t\t\tthis.apiService.setUserContext(userContext);\n\t\t}\n\t\tthis.eventBus.emit('user:updated', { userContext });\n\t}\n\n\tgetUserContext() {\n\t\treturn (\n\t\t\tthis.config.userContext ||\n\t\t\t(this.apiService ? this.apiService.getUserContext() : null)\n\t\t);\n\t}\n\n\tasync reinitialize(newUserContext = null) {\n\t\t// Clear current session\n\t\tthis.apiService.clearSession();\n\t\tthis.initialized = false;\n\n\t\t// Update user context if provided\n\t\tif (newUserContext) {\n\t\t\tthis.setUserContext(newUserContext);\n\t\t}\n\n\t\t// Reinitialize\n\t\treturn this.init();\n\t}\n\n\ton(event, callback) {\n\t\tthis.eventBus.on(event, callback);\n\t\treturn this;\n\t}\n\n\toff(event, callback) {\n\t\tthis.eventBus.off(event, callback);\n\t\treturn this;\n\t}\n\n\tonce(event, callback) {\n\t\tthis.eventBus.once(event, callback);\n\t\treturn this;\n\t}\n\n\temit(event, data) {\n\t\tthis.eventBus.emit(event, data);\n\t\treturn this;\n\t}\n\n\tdestroy() {\n\t\tthis.destroyAllWidgets();\n\t\tthis.eventBus.removeAllListeners();\n\t\tthis.apiService.clearSession();\n\t\tthis.initialized = false;\n\t\tthis.eventBus.emit('sdk:destroyed');\n\t}\n\n\t_validateAndMergeConfig(newConfig, existingConfig = {}) {\n\t\tconst defaultConfig = {\n\t\t\tapiUrl: null,\n\t\t\tworkspace: null,\n\t\t\tuserContext: null,\n\t\t\tposition: 'bottom-right',\n\t\t\ttheme: 'light',\n\t\t\tboardId: 'general',\n\t\t\tautoShow: true,\n\t\t\tdebug: false,\n\t\t};\n\n\t\tconst mergedConfig = deepMerge(\n\t\t\tdeepMerge(defaultConfig, existingConfig),\n\t\t\tnewConfig\n\t\t);\n\n\t\t// Validate required config\n\t\tconst requiredFields = ['workspace'];\n\t\tconst missingFields = requiredFields.filter(\n\t\t\t(field) => !mergedConfig[field]\n\t\t);\n\n\t\tif (missingFields.length > 0) {\n\t\t\tthrow new ConfigError(\n\t\t\t\t`Missing required configuration: ${missingFields.join(', ')}`\n\t\t\t);\n\t\t}\n\n\t\t// Validate userContext structure if provided\n\t\tif (mergedConfig.userContext) {\n\t\t\tthis._validateUserContext(mergedConfig.userContext);\n\t\t}\n\n\t\treturn mergedConfig;\n\t}\n\n\t_validateUserContext(userContext) {\n\t\tif (!userContext.user_id && !userContext.email) {\n\t\t\tthrow new ConfigError(\n\t\t\t\t'User context must include at least user_id or email'\n\t\t\t);\n\t\t}\n\n\t\t// Validate structure matches expected API format\n\t\tconst validStructure = {\n\t\t\tuser_id: 'string',\n\t\t\temail: 'string',\n\t\t\tname: 'string',\n\t\t\tcustom_fields: 'object',\n\t\t\tcompany: 'object',\n\t\t};\n\n\t\tfor (const [key, expectedType] of Object.entries(validStructure)) {\n\t\t\tif (userContext[key] && typeof userContext[key] !== expectedType) {\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`User context field '${key}' must be of type '${expectedType}'`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t_bindMethods() {\n\t\tthis.createWidget = this.createWidget.bind(this);\n\t\tthis.destroyWidget = this.destroyWidget.bind(this);\n\t\tthis.updateConfig = this.updateConfig.bind(this);\n\t}\n\n\t// Static helper methods\n\tstatic create(config) {\n\t\treturn new FeedbackSDK(config);\n\t}\n\n\tstatic async createAndInit(config) {\n\t\tconst sdk = new FeedbackSDK(config);\n\t\tawait sdk.init();\n\t\treturn sdk;\n\t}\n\n\t// Utility methods for external integrations\n\tstatic extractUserContextFromAuth(authData) {\n\t\t// Helper method to extract user context from common auth structures\n\t\tif (!authData) return null;\n\n\t\treturn {\n\t\t\tuser_id: authData.sub || authData.id || authData.user_id,\n\t\t\temail: authData.email,\n\t\t\tname: authData.name || authData.display_name || authData.full_name,\n\t\t\tcustom_fields: {\n\t\t\t\trole: authData.role,\n\t\t\t\tplan: authData.plan || authData.subscription?.plan,\n\t\t\t\t...(authData.custom_fields || {}),\n\t\t\t},\n\t\t\tcompany:\n\t\t\t\tauthData.company || authData.organization\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tid: authData.company?.id || authData.organization?.id,\n\t\t\t\t\t\t\tname: authData.company?.name || authData.organization?.name,\n\t\t\t\t\t\t\tmonthly_spend: authData.company?.monthly_spend,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t};\n\t}\n}\n","export const CSS_STYLES = `\n.feedback-widget {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', Oxygen, Ubuntu, Cantarell, sans-serif;\n font-size: 14px;\n line-height: 1.4;\n z-index: 999999;\n box-sizing: border-box;\n}\n\n.feedback-widget *,\n.feedback-widget *::before,\n.feedback-widget *::after {\n box-sizing: border-box;\n}\n\n.feedback-widget-button {\n position: fixed;\n z-index: 999999;\n}\n\n.feedback-widget-button.position-bottom-right {\n bottom: 20px;\n right: 20px;\n}\n\n.feedback-widget-button.position-bottom-left {\n bottom: 20px;\n left: 20px;\n}\n\n.feedback-widget-button.position-top-right {\n top: 20px;\n right: 20px;\n}\n\n.feedback-widget-button.position-top-left {\n top: 20px;\n left: 20px;\n}\n\n.feedback-trigger-btn {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n height: 44px;\n overflow: hidden;\n border-radius: 0.5rem;\n border: none;\n padding: 10px 16px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.3s duration;\n color: white;\n background: #155EEF;\n box-shadow: 0 1px 2px 0 rgba(16, 24, 40, 0.05);\n}\n\n.feedback-trigger-btn:hover:not(:disabled) {\n background: #004EEB;\n box-shadow: 0 1px 2px 0 rgba(16, 24, 40, 0.1);\n}\n\n.feedback-trigger-btn:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.feedback-trigger-btn:focus-visible {\n outline: 2px solid #155EEF;\n outline-offset: 2px;\n}\n\n.feedback-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1000000;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: inherit;\n}\n\n.feedback-modal-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.feedback-modal-content {\n background: white;\n border-radius: 8px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n min-width: 460px;\n max-width: 500px;\n width: 100%;\n padding: 16px;\n max-height: 85vh;\n overflow-y: hidden;\n position: relative;\n}\n\n.feedback-modal.theme-dark .feedback-modal-content {\n background: #1F2937;\n color: white;\n}\n\n.feedback-modal-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px;\n border-bottom: 1px solid #D1D5DB;\n flex-shrink: 0;\n}\n\n.feedback-modal.theme-dark .feedback-modal-header {\n border-bottom-color: #374151;\n}\n\n.feedback-modal-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n}\n\n.feedback-modal-close {\n background: none;\n border: none;\n font-size: 24px;\n cursor: pointer;\n color: #6B7280;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.3s ease;\n}\n\n.feedback-modal-close:hover {\n color: #374151;\n}\n\n.feedback-modal-close:focus-visible {\n outline: 2px solid #155EEF;\n outline-offset: 2px;\n}\n\n.feedback-modal.theme-dark .feedback-modal-close {\n color: #9CA3AF;\n}\n\n.feedback-modal.theme-dark .feedback-modal-close:hover {\n color: #D1D5DB;\n}\n\n.feedback-form {\n padding: 16px;\n}\n\n.feedback-form-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 12px;\n}\n\n.feedback-form-group:last-child {\n margin-bottom: 0;\n}\n\n.feedback-form-group label {\n font-size: 14px;\n font-weight: 500;\n line-height: 1.25;\n color: #374151;\n}\n\n.feedback-modal.theme-dark .feedback-form-group label {\n color: #D1D5DB;\n}\n\n.feedback-form-group input {\n height: 40px;\n width: 100%;\n border-radius: 6px;\n border: 1px solid #D1D5DB;\n padding: 2px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1.25;\n color: #1F2937;\n font-family: inherit;\n outline: none;\n transition: all 0.2s ease;\n}\n\n.feedback-form-group input::placeholder {\n font-size: 14px;\n color: #6B7280;\n}\n\n.feedback-form-group input:focus {\n border-color: #84ADFF;\n box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.05), 0 0 0 3px rgba(41, 112, 255, 0.2);\n}\n\n.feedback-form-group input:focus-visible {\n outline: none;\n}\n\n.feedback-form-group textarea {\n min-height: 100px;\n width: 100%;\n resize: both;\n border-radius: 6px;\n border: 1px solid #D1D5DB;\n padding: 2px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1.25;\n color: #1F2937;\n font-family: inherit;\n outline: none;\n transition: all 0.2s ease;\n}\n\n.feedback-form-group textarea::placeholder {\n font-size: 14px;\n color: #6B7280;\n}\n\n.feedback-form-group textarea:focus {\n border-color: #84ADFF;\n box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.05), 0 0 0 3px rgba(41, 112, 255, 0.2);\n}\n\n.feedback-form-group textarea:focus-visible {\n outline: none;\n}\n\n.feedback-modal.theme-dark .feedback-form-group input,\n.feedback-modal.theme-dark .feedback-form-group textarea {\n background: #374151;\n border-color: #4B5563;\n color: white;\n}\n\n.feedback-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n border-radius: 6px;\n border: none;\n height: 40px;\n padding: 2px 16px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.feedback-btn:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.feedback-btn:focus-visible {\n outline: 2px solid #155EEF;\n outline-offset: 2px;\n}\n\n.feedback-btn-submit {\n background: #155EEF;\n color: white;\n}\n\n.feedback-btn-submit:hover:not(:disabled) {\n background: #004EEB;\n}\n\n.feedback-btn-cancel {\n background: transparent;\n color: #6B7280;\n border: 1px solid #D1D5DB;\n}\n\n.feedback-btn-cancel:hover:not(:disabled) {\n background: #F9FAFB;\n border-color: #9CA3AF;\n color: #374151;\n}\n\n.feedback-modal.theme-dark .feedback-btn-cancel {\n color: #D1D5DB;\n border-color: #4B5563;\n}\n\n.feedback-modal.theme-dark .feedback-btn-cancel:hover:not(:disabled) {\n background: #374151;\n}\n\n.feedback-form-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 16px;\n padding-top: 4px;\n}\n\n.feedback-loading {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n mask: radial-gradient(transparent 62%, white 65%);\n -webkit-mask: radial-gradient(transparent 62%, white 65%);\n animation: feedbackRotate 0.7s linear infinite;\n}\n\n.feedback-loading-white {\n background: conic-gradient(from 0deg, rgba(255, 255, 255, 0.5), white);\n}\n\n.feedback-loading-blue {\n background: conic-gradient(from 0deg, #004EEB, #eff4ff);\n}\n\n@keyframes feedbackRotate {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.feedback-error {\n color: #F04438;\n font-size: 14px;\n font-weight: 400;\n margin-top: 4px;\n text-transform: capitalize;\n}\n\n.feedback-form-error {\n color: #F04438;\n font-size: 14px;\n margin-top: 12px;\n padding: 8px 12px;\n background: #FEE2E2;\n border: 1px solid #FECACA;\n border-radius: 6px;\n}\n\n.feedback-modal.theme-dark .feedback-form-error {\n background: #7F1D1D;\n border-color: #991B1B;\n color: #FCA5A5;\n}\n\n.feedback-form-group.error input,\n.feedback-form-group.error textarea {\n border-color: #FDA29B;\n}\n\n.feedback-form-group.error input:focus,\n.feedback-form-group.error textarea:focus {\n border-color: #FDA29B;\n box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.05), 0 0 0 4px rgba(253, 162, 155, 0.3);\n}\n\n.feedback-success-notification {\n position: fixed;\n top: 20px;\n right: 20px;\n z-index: 1000001;\n background: white;\n border: 1px solid #D1FAE5;\n border-radius: 8px;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n animation: slideInRight 0.3s ease-out;\n}\n\n.feedback-success-content {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n gap: 12px;\n}\n\n.feedback-success-content span {\n color: #059669;\n font-weight: 500;\n font-size: 14px;\n}\n\n.feedback-success-close {\n background: none;\n border: none;\n color: #6B7280;\n cursor: pointer;\n font-size: 18px;\n padding: 0;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.3s ease;\n}\n\n.feedback-success-close:hover {\n color: #374151;\n}\n\n.feedback-success-close:focus-visible {\n outline: 2px solid #155EEF;\n outline-offset: 2px;\n}\n\n@keyframes slideInRight {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.feedback-modal {\n animation: fadeIn 0.2s ease-out;\n}\n\n.feedback-modal-content {\n animation: slideInUp 0.3s ease-out;\n}\n\n@keyframes slideInUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@media (max-width: 640px) {\n .feedback-modal {\n padding: 8px;\n }\n \n .feedback-modal-content {\n min-width: 280px;\n max-width: 100%;\n max-height: 95vh;\n }\n \n .feedback-form {\n padding: 16px;\n }\n \n .feedback-modal-header {\n padding: 16px;\n }\n \n .feedback-modal-header h3 {\n font-size: 15px;\n }\n \n .feedback-form-actions {\n flex-direction: column;\n gap: 8px;\n }\n \n .feedback-btn {\n width: 100%;\n height: 40px;\n }\n \n .feedback-widget-button {\n bottom: 16px;\n right: 16px;\n }\n \n .feedback-widget-button.position-bottom-left {\n left: 16px;\n }\n \n .feedback-trigger-btn {\n padding: 10px 16px;\n font-size: 13px;\n }\n \n .feedback-success-notification {\n top: 8px;\n right: 8px;\n left: 8px;\n max-width: none;\n }\n\n .feedback-form-group input {\n height: 40px;\n padding: 2px 12px;\n }\n \n .feedback-form-group textarea {\n min-height: 80px;\n padding: 2px 12px;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .feedback-trigger-btn,\n .feedback-btn,\n .feedback-modal,\n .feedback-modal-content,\n .feedback-success-notification,\n .feedback-loading {\n transition: none;\n animation: none;\n }\n \n .feedback-trigger-btn:hover {\n transform: none;\n }\n}\n\n@media print {\n .feedback-widget,\n .feedback-modal,\n .feedback-success-notification {\n display: none !important;\n }\n}\n`;\n","import { APIService } from './core/APIService.js';\nimport { EventBus } from './core/EventBus.js';\nimport { FeedbackSDK } from './core/FeedbackSDK.js';\nimport { CSS_STYLES } from './styles/styles.js';\nimport {\n\tAPIError,\n\tConfigError,\n\tSDKError,\n\tValidationError,\n\tWidgetError,\n} from './utils/errors.js';\nimport * as helpers from './utils/helpers.js';\nimport { BaseWidget } from './widgets/BaseWidget.js';\nimport { ButtonWidget } from './widgets/ButtonWidget.js';\nimport { InlineWidget } from './widgets/InlineWidget.js';\nimport { TabWidget } from './widgets/TabWidget.js';\nimport { WidgetFactory } from './widgets/WidgetFactory.js';\n\nfunction injectStyles() {\n\tconsole.log('injectStyles called');\n\tconsole.log('document exists:', typeof document !== 'undefined');\n\tconsole.log('CSS_STYLES exists:', !!CSS_STYLES);\n\n\tif (\n\t\ttypeof document !== 'undefined' &&\n\t\t!document.querySelector('#feedback-sdk-styles')\n\t) {\n\t\tconsole.log('Injecting CSS...');\n\t\tconst style = document.createElement('style');\n\t\tstyle.id = 'feedback-sdk-styles';\n\t\tstyle.textContent = CSS_STYLES;\n\t\tdocument.head.appendChild(style);\n\t\tconsole.log(\n\t\t\t'CSS injected, style element created:',\n\t\t\t!!document.querySelector('#feedback-sdk-styles')\n\t\t);\n\t} else {\n\t\tconsole.log('CSS already exists or document not ready');\n\t}\n}\n\nfunction autoInit() {\n\tif (typeof window !== 'undefined' && window.FeedbackSDKConfig) {\n\t\tinjectStyles();\n\n\t\tconst config = { ...window.FeedbackSDKConfig };\n\n\t\tif (!config.userContext) {\n\t\t\tconfig.userContext = getUserContextFromEnvironment();\n\t\t}\n\n\t\tconst sdk = new FeedbackSDK(config);\n\n\t\tsdk\n\t\t\t.init()\n\t\t\t.then((initData) => {\n\t\t\t\twindow.FeedbackSDK.instance = sdk;\n\n\t\t\t\tif (window.FeedbackSDKConfig.autoCreate) {\n\t\t\t\t\tconst widgets = Array.isArray(window.FeedbackSDKConfig.autoCreate)\n\t\t\t\t\t\t? window.FeedbackSDKConfig.autoCreate\n\t\t\t\t\t\t: [window.FeedbackSDKConfig.autoCreate];\n\n\t\t\t\t\twidgets.forEach((widgetConfig) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst widget = sdk.createWidget(\n\t\t\t\t\t\t\t\twidgetConfig.type || 'button',\n\t\t\t\t\t\t\t\twidgetConfig\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\twidget.mount(widgetConfig.container);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.error('[FeedbackSDK] Failed to create widget:', error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (typeof CustomEvent !== 'undefined') {\n\t\t\t\t\tconst event = new CustomEvent('FeedbackSDKReady', {\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tsdk,\n\t\t\t\t\t\t\tconfig: config,\n\t\t\t\t\t\t\tinitData: initData,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\twindow.dispatchEvent(event);\n\t\t\t\t}\n\n\t\t\t\tconsole.log(\n\t\t\t\t\t'[FeedbackSDK] Successfully initialized with session:',\n\t\t\t\t\tinitData.sessionToken ? 'Yes' : 'No'\n\t\t\t\t);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error('[FeedbackSDK] Auto-initialization failed:', error);\n\n\t\t\t\tif (typeof CustomEvent !== 'undefined') {\n\t\t\t\t\tconst event = new CustomEvent('FeedbackSDKError', {\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\tconfig: config,\n\t\t\t\t\t\t\tphase: 'initialization',\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\twindow.dispatchEvent(event);\n\t\t\t\t}\n\t\t\t});\n\t}\n}\n\nfunction getUserContextFromEnvironment() {\n\tif (typeof window === 'undefined') return null;\n\n\tif (window.FeedbackSDKUserContext) {\n\t\treturn window.FeedbackSDKUserContext;\n\t}\n\n\tconst authSources = [\n\t\t() => window.auth0?.user,\n\t\t() => window.firebase?.auth()?.currentUser,\n\t\t() => window.amplify?.Auth?.currentAuthenticatedUser(),\n\n\t\t() => window.currentUser,\n\t\t() => window.user,\n\t\t() => window.userData,\n\n\t\t() => window.app?.user,\n\t\t() => window.store?.getState?.()?.user,\n\t\t() => window.App?.currentUser,\n\t];\n\n\tfor (const getAuth of authSources) {\n\t\ttry {\n\t\t\tconst authData = getAuth();\n\t\t\tif (authData) {\n\t\t\t\tconst userContext = FeedbackSDK.extractUserContextFromAuth(authData);\n\t\t\t\tif (userContext && (userContext.user_id || userContext.email)) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t'[FeedbackSDK] Auto-detected user context from',\n\t\t\t\t\t\tgetAuth.name || 'unknown source'\n\t\t\t\t\t);\n\t\t\t\t\treturn userContext;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\ttry {\n\t\tconst storedAuth =\n\t\t\tlocalStorage.getItem('auth') ||\n\t\t\tlocalStorage.getItem('user') ||\n\t\t\tlocalStorage.getItem('session');\n\t\tif (storedAuth) {\n\t\t\tconst authData = JSON.parse(storedAuth);\n\t\t\tconst userContext = FeedbackSDK.extractUserContextFromAuth(authData);\n\t\t\tif (userContext && (userContext.user_id || userContext.email)) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t'[FeedbackSDK] Auto-detected user context from localStorage'\n\t\t\t\t);\n\t\t\t\treturn userContext;\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\t// Continue\n\t}\n\n\tconsole.warn(\n\t\t'[FeedbackSDK] No user context found. Widget initialization may require manual user context setting.'\n\t);\n\treturn null;\n}\n\nfunction handleDOMReady() {\n\tif (typeof document !== 'undefined') {\n\t\tif (document.readyState === 'loading') {\n\t\t\tdocument.addEventListener('DOMContentLoaded', autoInit);\n\t\t} else {\n\t\t\tsetTimeout(autoInit, 0);\n\t\t}\n\t}\n}\n\nconst FeedbackSDKExport = {\n\tFeedbackSDK,\n\tBaseWidget,\n\tButtonWidget,\n\tTabWidget,\n\tInlineWidget,\n\tWidgetFactory,\n\tEventBus,\n\tAPIService,\n\tSDKError,\n\tAPIError,\n\tWidgetError,\n\tConfigError,\n\tValidationError,\n\thelpers,\n\tcreate: (config) => {\n\t\tinjectStyles();\n\t\treturn new FeedbackSDK(config);\n\t},\n\tversion: '1.0.0',\n\tinstance: null,\n\n\tisReady: () => Boolean(FeedbackSDKExport.instance),\n\tgetInstance: () => FeedbackSDKExport.instance,\n\n\tsetUserContext: (userContext) => {\n\t\tif (FeedbackSDKExport.instance) {\n\t\t\tFeedbackSDKExport.instance.setUserContext(userContext);\n\t\t} else {\n\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\twindow.FeedbackSDKUserContext = userContext;\n\t\t\t}\n\t\t}\n\t},\n\n\tinitWithUser: async (config, userContext) => {\n\t\tinjectStyles();\n\t\tconst fullConfig = { ...config, userContext };\n\t\tconst sdk = new FeedbackSDK(fullConfig);\n\t\tawait sdk.init();\n\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.FeedbackSDK.instance = sdk;\n\t\t}\n\n\t\treturn sdk;\n\t},\n\n\tonReady: (callback) => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tif (FeedbackSDKExport.isReady()) {\n\t\t\t\tcallback(FeedbackSDKExport.instance);\n\t\t\t} else {\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'FeedbackSDKReady',\n\t\t\t\t\t(event) => {\n\t\t\t\t\t\tcallback(event.detail.sdk, event.detail);\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\n\tonError: (callback) => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.addEventListener('FeedbackSDKError', (event) => {\n\t\t\t\tcallback(event.detail.error, event.detail);\n\t\t\t});\n\t\t}\n\t},\n\n\textractUserContext: FeedbackSDK.extractUserContextFromAuth,\n};\n\nif (typeof window !== 'undefined') {\n\twindow.FeedbackSDK = FeedbackSDKExport;\n\thandleDOMReady();\n}\n\nexport default FeedbackSDKExport;\n\nexport {\n\tAPIError,\n\tAPIService,\n\tBaseWidget,\n\tButtonWidget,\n\tConfigError,\n\tEventBus,\n\tFeedbackSDK,\n\thelpers,\n\tInlineWidget,\n\tSDKError,\n\tTabWidget,\n\tValidationError,\n\tWidgetError,\n\tWidgetFactory,\n};\n"],"names":[],"mappings":"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CA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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"}
1
+ {"version":3,"file":"feedback-sdk.js","sources":["../src/utils/errors.js","../src/core/APIService.js","../src/core/EventBus.js","../src/utils/helpers.js","../src/widgets/BaseWidget.js","../src/widgets/ButtonWidget.js","../src/widgets/InlineWidget.js","../src/widgets/TabWidget.js","../src/widgets/WidgetFactory.js","../src/core/FeedbackSDK.js","../src/styles/styles.js","../src/index.js"],"sourcesContent":["export class SDKError extends Error {\n\tconstructor(message, cause) {\n\t\tsuper(message);\n\t\tthis.name = 'SDKError';\n\t\tthis.cause = cause;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, SDKError);\n\t\t}\n\t}\n}\n\nexport class APIError extends Error {\n\tconstructor(status, message, response) {\n\t\tsuper(message);\n\t\tthis.name = 'APIError';\n\t\tthis.status = status;\n\t\tthis.response = response;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, APIError);\n\t\t}\n\t}\n\n\tisNetworkError() {\n\t\treturn this.status === 0;\n\t}\n\n\tisClientError() {\n\t\treturn this.status >= 400 && this.status < 500;\n\t}\n\n\tisServerError() {\n\t\treturn this.status >= 500 && this.status < 600;\n\t}\n}\n\nexport class WidgetError extends Error {\n\tconstructor(message, widgetType, widgetId) {\n\t\tsuper(message);\n\t\tthis.name = 'WidgetError';\n\t\tthis.widgetType = widgetType;\n\t\tthis.widgetId = widgetId;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, WidgetError);\n\t\t}\n\t}\n}\n\nexport class ConfigError extends Error {\n\tconstructor(message, configKey) {\n\t\tsuper(message);\n\t\tthis.name = 'ConfigError';\n\t\tthis.configKey = configKey;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, ConfigError);\n\t\t}\n\t}\n}\n\nexport class ValidationError extends Error {\n\tconstructor(message, field, value) {\n\t\tsuper(message);\n\t\tthis.name = 'ValidationError';\n\t\tthis.field = field;\n\t\tthis.value = value;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, ValidationError);\n\t\t}\n\t}\n}\n\nexport class ErrorHandler {\n\tconstructor(debug = false) {\n\t\tthis.debug = debug;\n\t}\n\n\thandle(error, context = '') {\n\t\tconst errorInfo = {\n\t\t\tname: error.name,\n\t\t\tmessage: error.message,\n\t\t\tcontext,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t};\n\n\t\tif (error instanceof APIError) {\n\t\t\terrorInfo.status = error.status;\n\t\t\terrorInfo.type = 'api';\n\t\t} else if (error instanceof WidgetError) {\n\t\t\terrorInfo.widgetType = error.widgetType;\n\t\t\terrorInfo.widgetId = error.widgetId;\n\t\t\terrorInfo.type = 'widget';\n\t\t} else if (error instanceof ConfigError) {\n\t\t\terrorInfo.configKey = error.configKey;\n\t\t\terrorInfo.type = 'config';\n\t\t} else if (error instanceof ValidationError) {\n\t\t\terrorInfo.field = error.field;\n\t\t\terrorInfo.value = error.value;\n\t\t\terrorInfo.type = 'validation';\n\t\t} else {\n\t\t\terrorInfo.type = 'unknown';\n\t\t}\n\n\t\tif (this.debug) {\n\t\t\tconsole.error('[FeedbackSDK Error]', errorInfo, error);\n\t\t} else {\n\t\t\tconsole.error('[FeedbackSDK Error]', error.message);\n\t\t}\n\n\t\treturn errorInfo;\n\t}\n\n\tgetUserMessage(error) {\n\t\tif (error instanceof APIError) {\n\t\t\tif (error.isNetworkError()) {\n\t\t\t\treturn 'Network error. Please check your connection and try again.';\n\t\t\t} else if (error.isClientError()) {\n\t\t\t\treturn 'Invalid request. Please check your input and try again.';\n\t\t\t} else if (error.isServerError()) {\n\t\t\t\treturn 'Server error. Please try again later.';\n\t\t\t}\n\t\t\treturn 'Failed to submit feedback. Please try again.';\n\t\t}\n\n\t\tif (error instanceof ValidationError) {\n\t\t\treturn `Please check your ${error.field}: ${error.message}`;\n\t\t}\n\n\t\tif (error instanceof ConfigError) {\n\t\t\treturn 'Configuration error. Please check your SDK setup.';\n\t\t}\n\n\t\tif (error instanceof WidgetError) {\n\t\t\treturn 'Widget error. Please try refreshing the page.';\n\t\t}\n\n\t\treturn 'An unexpected error occurred. Please try again.';\n\t}\n}\n","import { APIError } from '../utils/errors.js';\n\nexport class APIService {\n\tconstructor(config = {}) {\n\t\tthis.workspace = config.workspace;\n\t\tthis.sessionToken = null;\n\t\tthis.sessionExpiry = null;\n\t\tthis.userContext = config.userContext || null;\n\n\t\tif (config.apiUrl) {\n\t\t\tthis.baseURL = config.apiUrl;\n\t\t} else if (this.workspace) {\n\t\t\tthis.baseURL = `https://${this.workspace}.api.staging.product7.io/api/v1`;\n\t\t} else {\n\t\t\tthis.baseURL = 'https://api.staging.product7.io/api/v1';\n\t\t}\n\n\t\tthis._loadStoredSession();\n\t}\n\n\tasync init(userContext = null) {\n\t\tif (userContext) {\n\t\t\tthis.userContext = userContext;\n\t\t}\n\n\t\tif (this.isSessionValid()) {\n\t\t\treturn { sessionToken: this.sessionToken };\n\t\t}\n\n\t\tif (!this.userContext || !this.workspace) {\n\t\t\tconst error = `Missing ${!this.workspace ? 'workspace' : 'user context'} for initialization`;\n\t\t\tthrow new APIError(400, error);\n\t\t}\n\n\t\tconst payload = {\n\t\t\tworkspace: this.workspace,\n\t\t\tuser: this.userContext,\n\t\t};\n\n\t\ttry {\n\t\t\tconst response = await this._makeRequest('/widget/init', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify(payload),\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthis.sessionToken = response.session_token;\n\t\t\tthis.sessionExpiry = new Date(Date.now() + response.expires_in * 1000);\n\t\t\tthis._storeSession();\n\n\t\t\treturn {\n\t\t\t\tsessionToken: this.sessionToken,\n\t\t\t\tconfig: response.config || {},\n\t\t\t\texpiresIn: response.expires_in,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new APIError(\n\t\t\t\terror.status || 500,\n\t\t\t\t`Failed to initialize widget: ${error.message}`,\n\t\t\t\terror.response\n\t\t\t);\n\t\t}\n\t}\n\n\tasync submitFeedback(feedbackData) {\n\t\tif (!this.isSessionValid()) {\n\t\t\tawait this.init();\n\t\t}\n\n\t\tif (!this.sessionToken) {\n\t\t\tthrow new APIError(401, 'No valid session token available');\n\t\t}\n\n\t\tconst payload = {\n\t\t\tboard: feedbackData.board_id || feedbackData.board || feedbackData.boardId,\n\t\t\ttitle: feedbackData.title,\n\t\t\tcontent: feedbackData.content,\n\t\t\tattachments: feedbackData.attachments || [],\n\t\t};\n\n\t\ttry {\n\t\t\tconst response = await this._makeRequest('/widget/feedback', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify(payload),\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\tAuthorization: `Bearer ${this.sessionToken}`,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn response;\n\t\t} catch (error) {\n\t\t\tif (error.status === 401) {\n\t\t\t\tthis.sessionToken = null;\n\t\t\t\tthis.sessionExpiry = null;\n\t\t\t\tawait this.init();\n\t\t\t\treturn this.submitFeedback(feedbackData);\n\t\t\t}\n\n\t\t\tthrow new APIError(\n\t\t\t\terror.status || 500,\n\t\t\t\t`Failed to submit feedback: ${error.message}`,\n\t\t\t\terror.response\n\t\t\t);\n\t\t}\n\t}\n\n\tisSessionValid() {\n\t\treturn (\n\t\t\tthis.sessionToken && this.sessionExpiry && new Date() < this.sessionExpiry\n\t\t);\n\t}\n\n\tsetUserContext(userContext) {\n\t\tthis.userContext = userContext;\n\t\tif (typeof localStorage !== 'undefined') {\n\t\t\tlocalStorage.setItem('feedbackSDK_userContext', JSON.stringify(userContext));\n\t\t}\n\t}\n\n\tgetUserContext() {\n\t\treturn this.userContext;\n\t}\n\n\tclearSession() {\n\t\tthis.sessionToken = null;\n\t\tthis.sessionExpiry = null;\n\t\tif (typeof localStorage !== 'undefined') {\n\t\t\tlocalStorage.removeItem('feedbackSDK_session');\n\t\t\tlocalStorage.removeItem('feedbackSDK_userContext');\n\t\t}\n\t}\n\n\t_storeSession() {\n\t\tif (typeof localStorage === 'undefined') return;\n\n\t\ttry {\n\t\t\tconst sessionData = {\n\t\t\t\ttoken: this.sessionToken,\n\t\t\t\texpiry: this.sessionExpiry.toISOString(),\n\t\t\t\tworkspace: this.workspace,\n\t\t\t};\n\t\t\tlocalStorage.setItem('feedbackSDK_session', JSON.stringify(sessionData));\n\t\t} catch (error) {\n\t\t\t// Silently fail if localStorage is not available\n\t\t}\n\t}\n\n\t_loadStoredSession() {\n\t\tif (typeof localStorage === 'undefined') return false;\n\n\t\ttry {\n\t\t\tconst stored = localStorage.getItem('feedbackSDK_session');\n\t\t\tif (!stored) return false;\n\n\t\t\tconst sessionData = JSON.parse(stored);\n\t\t\tthis.sessionToken = sessionData.token;\n\t\t\tthis.sessionExpiry = new Date(sessionData.expiry);\n\n\t\t\treturn this.isSessionValid();\n\t\t} catch (error) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync _makeRequest(endpoint, options = {}) {\n\t\tconst url = `${this.baseURL}${endpoint}`;\n\n\t\ttry {\n\t\t\tconst response = await fetch(url, options);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tlet errorMessage = `HTTP ${response.status}`;\n\t\t\t\tlet responseData = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tresponseData = await response.json();\n\t\t\t\t\terrorMessage = responseData.message || responseData.error || errorMessage;\n\t\t\t\t} catch (e) {\n\t\t\t\t\terrorMessage = (await response.text()) || errorMessage;\n\t\t\t\t}\n\n\t\t\t\tthrow new APIError(response.status, errorMessage, responseData);\n\t\t\t}\n\n\t\t\tconst contentType = response.headers.get('content-type');\n\t\t\tif (contentType && contentType.includes('application/json')) {\n\t\t\t\treturn await response.json();\n\t\t\t}\n\n\t\t\treturn await response.text();\n\t\t} catch (error) {\n\t\t\tif (error instanceof APIError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new APIError(0, error.message, null);\n\t\t}\n\t}\n}","export class EventBus {\n\tconstructor() {\n\t\tthis.events = new Map();\n\t}\n\n\ton(event, callback) {\n\t\tif (!this.events.has(event)) {\n\t\t\tthis.events.set(event, []);\n\t\t}\n\t\tthis.events.get(event).push(callback);\n\n\t\treturn () => this.off(event, callback);\n\t}\n\n\toff(event, callback) {\n\t\tconst callbacks = this.events.get(event);\n\t\tif (callbacks) {\n\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\tif (index > -1) {\n\t\t\t\tcallbacks.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\temit(event, data) {\n\t\tconst callbacks = this.events.get(event);\n\t\tif (callbacks) {\n\t\t\tcallbacks.forEach((callback) => {\n\t\t\t\ttry {\n\t\t\t\t\tcallback(data);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('[FeedbackSDK] Event callback error:', error);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tonce(event, callback) {\n\t\tconst unsubscribe = this.on(event, (data) => {\n\t\t\tcallback(data);\n\t\t\tunsubscribe();\n\t\t});\n\t\treturn unsubscribe;\n\t}\n\n\tclear() {\n\t\tthis.events.clear();\n\t}\n\n\tgetListenerCount(event) {\n\t\tconst callbacks = this.events.get(event);\n\t\treturn callbacks ? callbacks.length : 0;\n\t}\n}\n","export function generateId(prefix = 'feedback') {\n\tconst timestamp = Date.now();\n\tconst random = Math.random().toString(36).substring(2, 9);\n\treturn `${prefix}_${timestamp}_${random}`;\n}\n\nexport function deepMerge(target, source) {\n\tconst result = { ...target };\n\n\tfor (const key in source) {\n\t\tif (source.hasOwnProperty(key)) {\n\t\t\tif (\n\t\t\t\tsource[key] &&\n\t\t\t\ttypeof source[key] === 'object' &&\n\t\t\t\t!Array.isArray(source[key])\n\t\t\t) {\n\t\t\t\tresult[key] = deepMerge(target[key] || {}, source[key]);\n\t\t\t} else {\n\t\t\t\tresult[key] = source[key];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function debounce(func, wait) {\n\tlet timeout;\n\treturn function executedFunction(...args) {\n\t\tconst later = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tfunc(...args);\n\t\t};\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\t};\n}\n\nexport function throttle(func, limit) {\n\tlet lastFunc;\n\tlet lastRan;\n\treturn function (...args) {\n\t\tif (!lastRan) {\n\t\t\tfunc(...args);\n\t\t\tlastRan = Date.now();\n\t\t} else {\n\t\t\tclearTimeout(lastFunc);\n\t\t\tlastFunc = setTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tif (Date.now() - lastRan >= limit) {\n\t\t\t\t\t\tfunc(...args);\n\t\t\t\t\t\tlastRan = Date.now();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlimit - (Date.now() - lastRan)\n\t\t\t);\n\t\t}\n\t};\n}\n\nexport function isValidEmail(email) {\n\tif (!email || typeof email !== 'string') return false;\n\n\tconst emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\treturn emailRegex.test(email.trim());\n}\n\nexport function sanitizeHTML(str) {\n\tif (!str || typeof str !== 'string') return '';\n\n\tconst div = document.createElement('div');\n\tdiv.textContent = str;\n\treturn div.innerHTML;\n}\n\nexport function getCSSProperty(element, property, fallback = '') {\n\tif (!element || !property) return fallback;\n\n\ttry {\n\t\tconst style = window.getComputedStyle(element);\n\t\treturn style.getPropertyValue(property) || fallback;\n\t} catch (error) {\n\t\treturn fallback;\n\t}\n}\n\nexport function isInViewport(element) {\n\tif (!element) return false;\n\n\tconst rect = element.getBoundingClientRect();\n\treturn (\n\t\trect.top >= 0 &&\n\t\trect.left >= 0 &&\n\t\trect.bottom <=\n\t\t\t(window.innerHeight || document.documentElement.clientHeight) &&\n\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t);\n}\n\nexport function scrollToElement(element, options = {}) {\n\tif (!element) return;\n\n\tconst defaultOptions = {\n\t\tbehavior: 'smooth',\n\t\tblock: 'center',\n\t\tinline: 'nearest',\n\t};\n\n\telement.scrollIntoView({ ...defaultOptions, ...options });\n}\n\nexport function getBrowserInfo() {\n\tconst userAgent = navigator.userAgent;\n\tconst platform = navigator.platform;\n\n\treturn {\n\t\tuserAgent,\n\t\tplatform,\n\t\tlanguage: navigator.language || navigator.userLanguage,\n\t\tcookieEnabled: navigator.cookieEnabled,\n\t\tscreenResolution: `${screen.width}x${screen.height}`,\n\t\twindowSize: `${window.innerWidth}x${window.innerHeight}`,\n\t\ttimezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\t};\n}\n\nexport function formatFileSize(bytes) {\n\tif (bytes === 0) return '0 Bytes';\n\n\tconst k = 1024;\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nexport function delay(ms) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function safeJsonParse(str, fallback = null) {\n\ttry {\n\t\treturn JSON.parse(str);\n\t} catch (error) {\n\t\treturn fallback;\n\t}\n}\n\nexport function escapeRegex(string) {\n\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function getNestedProperty(obj, path, defaultValue = undefined) {\n\tif (!obj || !path) return defaultValue;\n\n\tconst keys = path.split('.');\n\tlet current = obj;\n\n\tfor (const key of keys) {\n\t\tif (current === null || current === undefined || !(key in current)) {\n\t\t\treturn defaultValue;\n\t\t}\n\t\tcurrent = current[key];\n\t}\n\n\treturn current;\n}\n\nexport function setNestedProperty(obj, path, value) {\n\tif (!obj || !path) return obj;\n\n\tconst keys = path.split('.');\n\tconst lastKey = keys.pop();\n\tlet current = obj;\n\n\tfor (const key of keys) {\n\t\tif (!(key in current) || typeof current[key] !== 'object') {\n\t\t\tcurrent[key] = {};\n\t\t}\n\t\tcurrent = current[key];\n\t}\n\n\tcurrent[lastKey] = value;\n\treturn obj;\n}\n\nexport function isBrowser() {\n\treturn typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nexport function isMobile() {\n\tif (!isBrowser()) return false;\n\n\treturn (\n\t\t/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n\t\t\tnavigator.userAgent\n\t\t) || window.innerWidth <= 768\n\t);\n}\n\nexport function getCurrentTimestamp() {\n\treturn new Date().toISOString();\n}\n\nexport function validateConfig(config, required = []) {\n\tconst missing = [];\n\n\tfor (const key of required) {\n\t\tif (!config[key]) {\n\t\t\tmissing.push(key);\n\t\t}\n\t}\n\n\tif (missing.length > 0) {\n\t\tthrow new Error(`Missing required configuration: ${missing.join(', ')}`);\n\t}\n\n\treturn true;\n}\n","export class BaseWidget {\n\tconstructor(options = {}) {\n\t\tthis.id = options.id;\n\t\tthis.sdk = options.sdk;\n\t\tthis.apiService = options.apiService;\n\t\tthis.type = options.type || 'base';\n\n\t\tthis.options = {\n\t\t\tcontainer: null,\n\t\t\tposition: this.sdk.config.position,\n\t\t\ttheme: this.sdk.config.theme,\n\t\t\tboardId: this.sdk.config.boardId,\n\t\t\tautoShow: false,\n\t\t\tcustomStyles: {},\n\t\t\t...options,\n\t\t};\n\n\t\tthis.element = null;\n\t\tthis.modalElement = null;\n\t\tthis.mounted = false;\n\t\tthis.destroyed = false;\n\n\t\tthis.state = {\n\t\t\tisOpen: false,\n\t\t\tisSubmitting: false,\n\t\t\ttitle: '',\n\t\t\tcontent: '',\n\t\t\temail: '',\n\t\t\tattachments: [],\n\t\t\terrors: {},\n\t\t};\n\n\t\tthis._bindMethods();\n\t}\n\n\tmount(container) {\n\t\tif (this.mounted || this.destroyed) return this;\n\n\t\tif (typeof container === 'string') {\n\t\t\tcontainer = document.querySelector(container);\n\t\t}\n\n\t\tif (!container) {\n\t\t\tcontainer = document.body;\n\t\t}\n\n\t\tthis.container = container;\n\t\tthis.element = this._render();\n\t\tthis.container.appendChild(this.element);\n\n\t\tthis.mounted = true;\n\t\tthis._attachEvents();\n\t\tthis.onMount();\n\n\t\tif (this.options.autoShow) {\n\t\t\tthis.show();\n\t\t}\n\n\t\tthis.sdk.eventBus.emit('widget:mounted', { widget: this });\n\t\treturn this;\n\t}\n\n\tshow() {\n\t\tif (this.element) {\n\t\t\tthis.element.style.display = 'block';\n\t\t}\n\t\treturn this;\n\t}\n\n\thide() {\n\t\tif (this.element) {\n\t\t\tthis.element.style.display = 'none';\n\t\t}\n\t\treturn this;\n\t}\n\n\topenModal() {\n\t\tthis.state.isOpen = true;\n\t\tthis._renderModal();\n\t}\n\n\tcloseModal() {\n\t\tthis.state.isOpen = false;\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.remove();\n\t\t\tthis.modalElement = null;\n\t\t}\n\t\tthis._resetForm();\n\t}\n\n\tasync submitFeedback() {\n\t\tif (this.state.isSubmitting) return;\n\n\t\ttry {\n\t\t\tthis.state.isSubmitting = true;\n\t\t\tthis._updateSubmitButton();\n\n\t\t\tconst payload = {\n\t\t\t\ttitle: this.state.title || 'Feedback',\n\t\t\t\tcontent: this.state.content,\n\t\t\t\temail: this.state.email,\n\t\t\t\tboard_id: this.options.boardId,\n\t\t\t\tattachments: this.state.attachments,\n\t\t\t};\n\n\t\t\tif (!this.state.content.trim()) {\n\t\t\t\tthis._showError('Please enter your feedback message.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst response = await this.apiService.submitFeedback(payload);\n\n\t\t\tthis._showSuccessMessage();\n\t\t\tthis.closeModal();\n\n\t\t\tthis.sdk.eventBus.emit('feedback:submitted', {\n\t\t\t\twidget: this,\n\t\t\t\tfeedback: response,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthis._showError('Failed to submit feedback. Please try again.');\n\t\t\tthis.sdk.eventBus.emit('feedback:error', { widget: this, error });\n\t\t} finally {\n\t\t\tthis.state.isSubmitting = false;\n\t\t\tthis._updateSubmitButton();\n\t\t}\n\t}\n\n\thandleConfigUpdate(newConfig) {\n\t\tthis.options.theme = newConfig.theme;\n\t\tif (this.element) {\n\t\t\tthis._updateTheme();\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tif (this.destroyed) return;\n\n\t\tthis.onDestroy();\n\t\tthis.closeModal();\n\n\t\tif (this.element && this.element.parentNode) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\n\t\tthis.destroyed = true;\n\t\tthis.mounted = false;\n\t\tthis.sdk.eventBus.emit('widget:destroyed', { widget: this });\n\t}\n\n\tonMount() {}\n\tonDestroy() {}\n\n\t_render() {\n\t\tthrow new Error('_render() must be implemented by concrete widget');\n\t}\n\n\t_attachEvents() {\n\t\t// Override in concrete widgets\n\t}\n\n\t_bindMethods() {\n\t\tthis.openModal = this.openModal.bind(this);\n\t\tthis.closeModal = this.closeModal.bind(this);\n\t\tthis.submitFeedback = this.submitFeedback.bind(this);\n\t}\n\n\t_renderModal() {\n\t\tif (this.modalElement) return;\n\n\t\tthis.modalElement = document.createElement('div');\n\t\tthis.modalElement.className = `feedback-modal theme-${this.options.theme}`;\n\t\tthis.modalElement.innerHTML = this._getModalHTML();\n\n\t\tdocument.body.appendChild(this.modalElement);\n\t\tthis._attachModalEvents();\n\n\t\tconst firstInput = this.modalElement.querySelector('input, textarea');\n\t\tif (firstInput) {\n\t\t\tsetTimeout(() => firstInput.focus(), 100);\n\t\t}\n\t}\n\n\t_getModalHTML() {\n\t\treturn `\n <div class=\"feedback-modal-overlay\">\n <div class=\"feedback-modal-content\">\n <div class=\"feedback-modal-header\">\n <h3>Send Feedback</h3>\n <button class=\"feedback-modal-close\" type=\"button\">&times;</button>\n </div>\n <form class=\"feedback-form\">\n <div class=\"feedback-form-group\">\n <label for=\"feedback-title-${this.id}\">Title</label>\n <input \n type=\"text\" \n id=\"feedback-title-${this.id}\" \n name=\"title\" \n placeholder=\"Brief description of your feedback\"\n value=\"${this.state.title}\"\n />\n </div>\n <div class=\"feedback-form-group\">\n <label for=\"feedback-content-${this.id}\">Message *</label>\n <textarea \n id=\"feedback-content-${this.id}\" \n name=\"content\" \n placeholder=\"Tell us more about your feedback...\"\n required\n >${this.state.content}</textarea>\n </div>\n <div class=\"feedback-form-actions\">\n <button type=\"button\" class=\"feedback-btn feedback-btn-cancel\">Cancel</button>\n <button type=\"submit\" class=\"feedback-btn feedback-btn-submit\">\n ${this.state.isSubmitting ? 'Sending...' : 'Send Feedback'}\n </button>\n </div>\n <div class=\"feedback-error\" style=\"display: none;\"></div>\n </form>\n </div>\n </div>\n `;\n\t}\n\n\t_attachModalEvents() {\n\t\tconst modal = this.modalElement;\n\n\t\tmodal\n\t\t\t.querySelector('.feedback-modal-close')\n\t\t\t.addEventListener('click', this.closeModal);\n\t\tmodal\n\t\t\t.querySelector('.feedback-btn-cancel')\n\t\t\t.addEventListener('click', this.closeModal);\n\t\tmodal\n\t\t\t.querySelector('.feedback-modal-overlay')\n\t\t\t.addEventListener('click', (e) => {\n\t\t\t\tif (e.target === e.currentTarget) {\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t}\n\t\t\t});\n\n\t\tconst form = modal.querySelector('.feedback-form');\n\t\tform.addEventListener('submit', (e) => {\n\t\t\te.preventDefault();\n\t\t\tthis.submitFeedback();\n\t\t});\n\n\t\tmodal\n\t\t\t.querySelector('input[name=\"title\"]')\n\t\t\t.addEventListener('input', (e) => {\n\t\t\t\tthis.state.title = e.target.value;\n\t\t\t});\n\n\t\tmodal\n\t\t\t.querySelector('textarea[name=\"content\"]')\n\t\t\t.addEventListener('input', (e) => {\n\t\t\t\tthis.state.content = e.target.value;\n\t\t\t});\n\t}\n\n\t_updateSubmitButton() {\n\t\tif (this.modalElement) {\n\t\t\tconst submitBtn = this.modalElement.querySelector('.feedback-btn-submit');\n\t\t\tif (submitBtn) {\n\t\t\t\tsubmitBtn.textContent = this.state.isSubmitting\n\t\t\t\t\t? 'Sending...'\n\t\t\t\t\t: 'Send Feedback';\n\t\t\t\tsubmitBtn.disabled = this.state.isSubmitting;\n\t\t\t}\n\t\t}\n\t}\n\n\t_showError(message) {\n\t\tif (this.modalElement) {\n\t\t\tconst errorElement = this.modalElement.querySelector('.feedback-error');\n\t\t\terrorElement.textContent = message;\n\t\t\terrorElement.style.display = 'block';\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (errorElement) {\n\t\t\t\t\terrorElement.style.display = 'none';\n\t\t\t\t}\n\t\t\t}, 5000);\n\t\t}\n\t}\n\n\t_showSuccessMessage() {\n\t\tconst notification = document.createElement('div');\n\t\tnotification.className = 'feedback-success-notification';\n\t\tnotification.innerHTML = `\n <div class=\"feedback-success-content\">\n <span>✓ Feedback submitted successfully!</span>\n <button class=\"feedback-success-close\">&times;</button>\n </div>\n `;\n\n\t\tdocument.body.appendChild(notification);\n\n\t\tsetTimeout(() => {\n\t\t\tif (notification.parentNode) {\n\t\t\t\tnotification.parentNode.removeChild(notification);\n\t\t\t}\n\t\t}, 3000);\n\n\t\tnotification\n\t\t\t.querySelector('.feedback-success-close')\n\t\t\t.addEventListener('click', () => {\n\t\t\t\tif (notification.parentNode) {\n\t\t\t\t\tnotification.parentNode.removeChild(notification);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t_resetForm() {\n\t\tthis.state.title = '';\n\t\tthis.state.content = '';\n\t\tthis.state.email = '';\n\t\tthis.state.errors = {};\n\t}\n\n\t_updateTheme() {\n\t\tif (this.element) {\n\t\t\tthis.element.className = this.element.className.replace(\n\t\t\t\t/theme-\\w+/,\n\t\t\t\t`theme-${this.options.theme}`\n\t\t\t);\n\t\t}\n\t\tif (this.modalElement) {\n\t\t\tthis.modalElement.className = this.modalElement.className.replace(\n\t\t\t\t/theme-\\w+/,\n\t\t\t\t`theme-${this.options.theme}`\n\t\t\t);\n\t\t}\n\t}\n}\n","import { BaseWidget } from './BaseWidget.js';\n\nexport class ButtonWidget extends BaseWidget {\n\tconstructor(options) {\n\t\tsuper({ ...options, type: 'button' });\n\t}\n\n\t_render() {\n\t\tconst button = document.createElement('div');\n\t\tbutton.className = `feedback-widget feedback-widget-button theme-${this.options.theme} position-${this.options.position}`;\n\t\tbutton.innerHTML = `\n <button class=\"feedback-trigger-btn\" type=\"button\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z\"/>\n <path d=\"M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z\"/>\n </svg>\n Feedback\n </button>\n `;\n\n\t\tif (this.options.customStyles) {\n\t\t\tObject.assign(button.style, this.options.customStyles);\n\t\t}\n\n\t\treturn button;\n\t}\n\n\t_attachEvents() {\n\t\tconst button = this.element.querySelector('.feedback-trigger-btn');\n\t\tbutton.addEventListener('click', this.openModal);\n\n\t\tbutton.addEventListener('mouseenter', () => {\n\t\t\tif (!this.state.isSubmitting) {\n\t\t\t\tbutton.style.transform = 'translateY(-2px)';\n\t\t\t}\n\t\t});\n\n\t\tbutton.addEventListener('mouseleave', () => {\n\t\t\tbutton.style.transform = 'translateY(0)';\n\t\t});\n\t}\n\n\tupdateText(text) {\n\t\tconst button = this.element?.querySelector('.feedback-trigger-btn');\n\t\tif (button) {\n\t\t\tconst textNode = button.childNodes[button.childNodes.length - 1];\n\t\t\tif (textNode && textNode.nodeType === Node.TEXT_NODE) {\n\t\t\t\ttextNode.textContent = text;\n\t\t\t}\n\t\t}\n\t}\n\n\tupdatePosition(position) {\n\t\tthis.options.position = position;\n\t\tif (this.element) {\n\t\t\tthis.element.className = this.element.className.replace(\n\t\t\t\t/position-\\w+-\\w+/,\n\t\t\t\t`position-${position}`\n\t\t\t);\n\t\t}\n\t}\n}\n","import { BaseWidget } from './BaseWidget.js';\n\nexport class InlineWidget extends BaseWidget {\n\tconstructor(options) {\n\t\tsuper({ ...options, type: 'inline' });\n\t}\n\n\t_render() {\n\t\tconst widget = document.createElement('div');\n\t\twidget.className = `feedback-widget feedback-widget-inline theme-${this.options.theme}`;\n\t\twidget.innerHTML = `\n <div class=\"feedback-inline-content\">\n <h3>Send us your feedback</h3>\n <form class=\"feedback-inline-form\">\n <div class=\"feedback-form-group\">\n <input \n type=\"text\" \n name=\"title\" \n placeholder=\"Title (optional)\"\n value=\"${this.state.title}\"\n />\n </div>\n <div class=\"feedback-form-group\">\n <textarea \n name=\"content\" \n placeholder=\"Your feedback...\"\n required\n >${this.state.content}</textarea>\n </div>\n <div class=\"feedback-form-group\">\n <input \n type=\"email\" \n name=\"email\" \n placeholder=\"Email (optional)\"\n value=\"${this.state.email}\"\n />\n </div>\n <button type=\"submit\" class=\"feedback-btn feedback-btn-submit\">\n Send Feedback\n </button>\n <div class=\"feedback-error\" style=\"display: none;\"></div>\n </form>\n </div>\n `;\n\n\t\tif (this.options.customStyles) {\n\t\t\tObject.assign(widget.style, this.options.customStyles);\n\t\t}\n\n\t\treturn widget;\n\t}\n\n\t_attachEvents() {\n\t\tconst form = this.element.querySelector('.feedback-inline-form');\n\n\t\tform.addEventListener('submit', (e) => {\n\t\t\te.preventDefault();\n\t\t\tthis.submitFeedback();\n\t\t});\n\n\t\tform.querySelector('input[name=\"title\"]').addEventListener('input', (e) => {\n\t\t\tthis.state.title = e.target.value;\n\t\t});\n\n\t\tform\n\t\t\t.querySelector('textarea[name=\"content\"]')\n\t\t\t.addEventListener('input', (e) => {\n\t\t\t\tthis.state.content = e.target.value;\n\t\t\t});\n\n\t\tform.querySelector('input[name=\"email\"]').addEventListener('input', (e) => {\n\t\t\tthis.state.email = e.target.value;\n\t\t});\n\t}\n\n\topenModal() {\n\t\tconst textarea = this.element.querySelector('textarea[name=\"content\"]');\n\t\tif (textarea) {\n\t\t\ttextarea.focus();\n\t\t}\n\t}\n\n\tcloseModal() {\n\t\t// Inline widget doesn't use modal\n\t}\n\n\t_showSuccessMessage() {\n\t\tconst widget = this.element.querySelector('.feedback-inline-content');\n\t\tconst originalContent = widget.innerHTML;\n\n\t\twidget.innerHTML = `\n <div class=\"feedback-success\">\n <div class=\"feedback-success-icon\">✓</div>\n <h3>Thank you!</h3>\n <p>Your feedback has been submitted successfully.</p>\n <button class=\"feedback-btn feedback-btn-reset\">Send Another</button>\n </div>\n `;\n\n\t\tconst resetBtn = widget.querySelector('.feedback-btn-reset');\n\t\tresetBtn.addEventListener('click', () => {\n\t\t\twidget.innerHTML = originalContent;\n\t\t\tthis._attachEvents();\n\t\t\tthis._resetForm();\n\t\t});\n\t}\n\n\t_showError(message) {\n\t\tconst errorElement = this.element.querySelector('.feedback-error');\n\t\tif (errorElement) {\n\t\t\terrorElement.textContent = message;\n\t\t\terrorElement.style.display = 'block';\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (errorElement) {\n\t\t\t\t\terrorElement.style.display = 'none';\n\t\t\t\t}\n\t\t\t}, 5000);\n\t\t}\n\t}\n\n\t_updateSubmitButton() {\n\t\tconst submitBtn = this.element.querySelector('.feedback-btn-submit');\n\t\tif (submitBtn) {\n\t\t\tsubmitBtn.textContent = this.state.isSubmitting\n\t\t\t\t? 'Sending...'\n\t\t\t\t: 'Send Feedback';\n\t\t\tsubmitBtn.disabled = this.state.isSubmitting;\n\t\t}\n\t}\n\n\tupdateTitle(title) {\n\t\tconst titleElement = this.element?.querySelector('h3');\n\t\tif (titleElement) {\n\t\t\ttitleElement.textContent = title;\n\t\t}\n\t}\n\n\tsetPlaceholder(field, placeholder) {\n\t\tconst input = this.element?.querySelector(`[name=\"${field}\"]`);\n\t\tif (input) {\n\t\t\tinput.placeholder = placeholder;\n\t\t}\n\t}\n}\n","import { BaseWidget } from './BaseWidget.js';\n\nexport class TabWidget extends BaseWidget {\n\tconstructor(options) {\n\t\tsuper({ ...options, type: 'tab' });\n\t}\n\n\t_render() {\n\t\tconst tab = document.createElement('div');\n\t\ttab.className = `feedback-widget feedback-widget-tab theme-${this.options.theme} position-${this.options.position}`;\n\t\ttab.innerHTML = `\n <div class=\"feedback-tab-trigger\">\n <span class=\"feedback-tab-text\">Feedback</span>\n </div>\n `;\n\n\t\tif (this.options.customStyles) {\n\t\t\tObject.assign(tab.style, this.options.customStyles);\n\t\t}\n\n\t\treturn tab;\n\t}\n\n\t_attachEvents() {\n\t\tconst tab = this.element.querySelector('.feedback-tab-trigger');\n\t\ttab.addEventListener('click', this.openModal);\n\n\t\ttab.addEventListener('mouseenter', () => {\n\t\t\tif (!this.state.isSubmitting) {\n\t\t\t\ttab.style.transform = this._getHoverTransform();\n\t\t\t}\n\t\t});\n\n\t\ttab.addEventListener('mouseleave', () => {\n\t\t\ttab.style.transform = 'none';\n\t\t});\n\t}\n\n\t_getHoverTransform() {\n\t\tconst position = this.options.position;\n\t\tif (position.includes('right')) {\n\t\t\treturn 'translateX(-5px)';\n\t\t} else if (position.includes('left')) {\n\t\t\treturn 'translateX(5px)';\n\t\t}\n\t\treturn 'none';\n\t}\n\n\tupdateText(text) {\n\t\tconst textElement = this.element?.querySelector('.feedback-tab-text');\n\t\tif (textElement) {\n\t\t\ttextElement.textContent = text;\n\t\t}\n\t}\n\n\tupdatePosition(position) {\n\t\tthis.options.position = position;\n\t\tif (this.element) {\n\t\t\tthis.element.className = this.element.className.replace(\n\t\t\t\t/position-\\w+-\\w+/,\n\t\t\t\t`position-${position}`\n\t\t\t);\n\t\t}\n\t}\n}\n","import { SDKError } from '../utils/errors.js';\nimport { ButtonWidget } from './ButtonWidget.js';\nimport { InlineWidget } from './InlineWidget.js';\nimport { TabWidget } from './TabWidget.js';\n\nexport class WidgetFactory {\n\tstatic widgets = new Map([\n\t\t['button', ButtonWidget],\n\t\t['tab', TabWidget],\n\t\t['inline', InlineWidget],\n\t]);\n\n\tstatic register(type, WidgetClass) {\n\t\tif (typeof type !== 'string' || !type.trim()) {\n\t\t\tthrow new SDKError('Widget type must be a non-empty string');\n\t\t}\n\n\t\tif (typeof WidgetClass !== 'function') {\n\t\t\tthrow new SDKError('Widget class must be a constructor function');\n\t\t}\n\n\t\tthis.widgets.set(type, WidgetClass);\n\t}\n\n\tstatic create(type, options = {}) {\n\t\tconst WidgetClass = this.widgets.get(type);\n\n\t\tif (!WidgetClass) {\n\t\t\tconst availableTypes = Array.from(this.widgets.keys()).join(', ');\n\t\t\tthrow new SDKError(\n\t\t\t\t`Unknown widget type: ${type}. Available types: ${availableTypes}`\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\treturn new WidgetClass(options);\n\t\t} catch (error) {\n\t\t\tthrow new SDKError(\n\t\t\t\t`Failed to create widget of type '${type}': ${error.message}`,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\tstatic getAvailableTypes() {\n\t\treturn Array.from(this.widgets.keys());\n\t}\n\n\tstatic isTypeRegistered(type) {\n\t\treturn this.widgets.has(type);\n\t}\n\n\tstatic unregister(type) {\n\t\treturn this.widgets.delete(type);\n\t}\n\n\tstatic clear() {\n\t\tthis.widgets.clear();\n\t}\n\n\tstatic getWidgetClass(type) {\n\t\treturn this.widgets.get(type);\n\t}\n}\n","import { ConfigError, SDKError } from '../utils/errors.js';\nimport { deepMerge, generateId } from '../utils/helpers.js';\nimport { WidgetFactory } from '../widgets/WidgetFactory.js';\nimport { APIService } from './APIService.js';\nimport { EventBus } from './EventBus.js';\n\nexport class FeedbackSDK {\n\tconstructor(config = {}) {\n\t\tthis.config = this._validateAndMergeConfig(config);\n\t\tthis.initialized = false;\n\t\tthis.widgets = new Map();\n\t\tthis.eventBus = new EventBus();\n\n\t\tthis.apiService = new APIService({\n\t\t\tapiUrl: this.config.apiUrl,\n\t\t\tworkspace: this.config.workspace,\n\t\t\tuserContext: this.config.userContext,\n\t\t});\n\n\t\tthis._bindMethods();\n\t}\n\n\tasync init() {\n\t\tif (this.initialized) {\n\t\t\treturn { alreadyInitialized: true };\n\t\t}\n\n\t\ttry {\n\t\t\tconst initData = await this.apiService.init(this.config.userContext);\n\n\t\t\tif (initData.config) {\n\t\t\t\tthis.config = deepMerge(this.config, initData.config);\n\t\t\t}\n\n\t\t\tthis.initialized = true;\n\t\t\tthis.eventBus.emit('sdk:initialized', {\n\t\t\t\tconfig: this.config,\n\t\t\t\tsessionToken: initData.sessionToken,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tinitialized: true,\n\t\t\t\tconfig: initData.config || {},\n\t\t\t\tsessionToken: initData.sessionToken,\n\t\t\t\texpiresIn: initData.expiresIn,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthis.eventBus.emit('sdk:error', { error });\n\t\t\tthrow new SDKError(`Failed to initialize SDK: ${error.message}`, error);\n\t\t}\n\t}\n\n\tcreateWidget(type = 'button', options = {}) {\n\t\tif (!this.initialized) {\n\t\t\tthrow new SDKError('SDK must be initialized before creating widgets. Call init() first.');\n\t\t}\n\n\t\tconst widgetId = generateId('widget');\n\t\tconst widgetOptions = {\n\t\t\tid: widgetId,\n\t\t\tsdk: this,\n\t\t\tapiService: this.apiService,\n\t\t\t...this.config,\n\t\t\t...options,\n\t\t};\n\n\t\ttry {\n\t\t\tconst widget = WidgetFactory.create(type, widgetOptions);\n\t\t\tthis.widgets.set(widgetId, widget);\n\t\t\tthis.eventBus.emit('widget:created', { widget, type });\n\t\t\treturn widget;\n\t\t} catch (error) {\n\t\t\tthrow new SDKError(`Failed to create widget: ${error.message}`, error);\n\t\t}\n\t}\n\n\tgetWidget(id) {\n\t\treturn this.widgets.get(id);\n\t}\n\n\tgetAllWidgets() {\n\t\treturn Array.from(this.widgets.values());\n\t}\n\n\tdestroyWidget(id) {\n\t\tconst widget = this.widgets.get(id);\n\t\tif (widget) {\n\t\t\twidget.destroy();\n\t\t\tthis.widgets.delete(id);\n\t\t\tthis.eventBus.emit('widget:removed', { widgetId: id });\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tdestroyAllWidgets() {\n\t\tfor (const widget of this.widgets.values()) {\n\t\t\twidget.destroy();\n\t\t}\n\t\tthis.widgets.clear();\n\t\tthis.eventBus.emit('widgets:cleared');\n\t}\n\n\tupdateConfig(newConfig) {\n\t\tconst oldConfig = { ...this.config };\n\t\tthis.config = this._validateAndMergeConfig(newConfig, this.config);\n\n\t\tfor (const widget of this.widgets.values()) {\n\t\t\twidget.handleConfigUpdate(this.config);\n\t\t}\n\n\t\tthis.eventBus.emit('config:updated', {\n\t\t\toldConfig,\n\t\t\tnewConfig: this.config,\n\t\t});\n\t}\n\n\tsetUserContext(userContext) {\n\t\tthis.config.userContext = userContext;\n\t\tif (this.apiService) {\n\t\t\tthis.apiService.setUserContext(userContext);\n\t\t}\n\t\tthis.eventBus.emit('user:updated', { userContext });\n\t}\n\n\tgetUserContext() {\n\t\treturn this.config.userContext || (this.apiService ? this.apiService.getUserContext() : null);\n\t}\n\n\tasync reinitialize(newUserContext = null) {\n\t\tthis.apiService.clearSession();\n\t\tthis.initialized = false;\n\n\t\tif (newUserContext) {\n\t\t\tthis.setUserContext(newUserContext);\n\t\t}\n\n\t\treturn this.init();\n\t}\n\n\ton(event, callback) {\n\t\tthis.eventBus.on(event, callback);\n\t\treturn this;\n\t}\n\n\toff(event, callback) {\n\t\tthis.eventBus.off(event, callback);\n\t\treturn this;\n\t}\n\n\tonce(event, callback) {\n\t\tthis.eventBus.once(event, callback);\n\t\treturn this;\n\t}\n\n\temit(event, data) {\n\t\tthis.eventBus.emit(event, data);\n\t\treturn this;\n\t}\n\n\tdestroy() {\n\t\tthis.destroyAllWidgets();\n\t\tthis.eventBus.removeAllListeners();\n\t\tthis.apiService.clearSession();\n\t\tthis.initialized = false;\n\t\tthis.eventBus.emit('sdk:destroyed');\n\t}\n\n\t_validateAndMergeConfig(newConfig, existingConfig = {}) {\n\t\tconst defaultConfig = {\n\t\t\tapiUrl: null,\n\t\t\tworkspace: null,\n\t\t\tuserContext: null,\n\t\t\tposition: 'bottom-right',\n\t\t\ttheme: 'light',\n\t\t\tboardId: 'general',\n\t\t\tautoShow: true,\n\t\t\tdebug: false,\n\t\t};\n\n\t\tconst mergedConfig = deepMerge(deepMerge(defaultConfig, existingConfig), newConfig);\n\n\t\tif (!mergedConfig.workspace) {\n\t\t\tthrow new ConfigError('Missing required configuration: workspace');\n\t\t}\n\n\t\tif (mergedConfig.userContext) {\n\t\t\tthis._validateUserContext(mergedConfig.userContext);\n\t\t}\n\n\t\treturn mergedConfig;\n\t}\n\n\t_validateUserContext(userContext) {\n\t\tif (!userContext.user_id && !userContext.email) {\n\t\t\tthrow new ConfigError('User context must include at least user_id or email');\n\t\t}\n\n\t\tconst validStructure = {\n\t\t\tuser_id: 'string',\n\t\t\temail: 'string',\n\t\t\tname: 'string',\n\t\t\tcustom_fields: 'object',\n\t\t\tcompany: 'object',\n\t\t};\n\n\t\tfor (const [key, expectedType] of Object.entries(validStructure)) {\n\t\t\tif (userContext[key] && typeof userContext[key] !== expectedType) {\n\t\t\t\tthrow new ConfigError(`User context field '${key}' must be of type '${expectedType}'`);\n\t\t\t}\n\t\t}\n\t}\n\n\t_bindMethods() {\n\t\tthis.createWidget = this.createWidget.bind(this);\n\t\tthis.destroyWidget = this.destroyWidget.bind(this);\n\t\tthis.updateConfig = this.updateConfig.bind(this);\n\t}\n\n\tstatic create(config) {\n\t\treturn new FeedbackSDK(config);\n\t}\n\n\tstatic async createAndInit(config) {\n\t\tconst sdk = new FeedbackSDK(config);\n\t\tawait sdk.init();\n\t\treturn sdk;\n\t}\n\n\tstatic extractUserContextFromAuth(authData) {\n\t\tif (!authData) return null;\n\n\t\treturn {\n\t\t\tuser_id: authData.sub || authData.id || authData.user_id,\n\t\t\temail: authData.email,\n\t\t\tname: authData.name || authData.display_name || authData.full_name,\n\t\t\tcustom_fields: {\n\t\t\t\trole: authData.role,\n\t\t\t\tplan: authData.plan || authData.subscription?.plan,\n\t\t\t\t...(authData.custom_fields || {}),\n\t\t\t},\n\t\t\tcompany: authData.company || authData.organization ? {\n\t\t\t\tid: authData.company?.id || authData.organization?.id,\n\t\t\t\tname: authData.company?.name || authData.organization?.name,\n\t\t\t\tmonthly_spend: authData.company?.monthly_spend,\n\t\t\t} : undefined,\n\t\t};\n\t}\n}","export const CSS_STYLES = `\n.feedback-widget {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', Oxygen, Ubuntu, Cantarell, sans-serif;\n font-size: 14px;\n line-height: 1.4;\n z-index: 999999;\n box-sizing: border-box;\n}\n\n.feedback-widget *,\n.feedback-widget *::before,\n.feedback-widget *::after {\n box-sizing: border-box;\n}\n\n.feedback-widget-button {\n position: fixed;\n z-index: 999999;\n}\n\n.feedback-widget-button.position-bottom-right {\n bottom: 20px;\n right: 20px;\n}\n\n.feedback-widget-button.position-bottom-left {\n bottom: 20px;\n left: 20px;\n}\n\n.feedback-widget-button.position-top-right {\n top: 20px;\n right: 20px;\n}\n\n.feedback-widget-button.position-top-left {\n top: 20px;\n left: 20px;\n}\n\n.feedback-trigger-btn {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n height: 44px;\n overflow: hidden;\n border-radius: 0.5rem;\n border: none;\n padding: 10px 16px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.3s duration;\n color: white;\n background: #155EEF;\n box-shadow: 0 1px 2px 0 rgba(16, 24, 40, 0.05);\n}\n\n.feedback-trigger-btn:hover:not(:disabled) {\n background: #004EEB;\n box-shadow: 0 1px 2px 0 rgba(16, 24, 40, 0.1);\n}\n\n.feedback-trigger-btn:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.feedback-trigger-btn:focus-visible {\n outline: 2px solid #155EEF;\n outline-offset: 2px;\n}\n\n.feedback-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1000000;\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: inherit;\n}\n\n.feedback-modal-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.feedback-modal-content {\n background: white;\n border-radius: 8px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n min-width: 460px;\n max-width: 500px;\n width: 100%;\n padding: 16px;\n max-height: 85vh;\n overflow-y: hidden;\n position: relative;\n}\n\n.feedback-modal.theme-dark .feedback-modal-content {\n background: #1F2937;\n color: white;\n}\n\n.feedback-modal-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px;\n border-bottom: 1px solid #D1D5DB;\n flex-shrink: 0;\n}\n\n.feedback-modal.theme-dark .feedback-modal-header {\n border-bottom-color: #374151;\n}\n\n.feedback-modal-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n}\n\n.feedback-modal-close {\n background: none;\n border: none;\n font-size: 24px;\n cursor: pointer;\n color: #6B7280;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.3s ease;\n}\n\n.feedback-modal-close:hover {\n color: #374151;\n}\n\n.feedback-modal-close:focus-visible {\n outline: 2px solid #155EEF;\n outline-offset: 2px;\n}\n\n.feedback-modal.theme-dark .feedback-modal-close {\n color: #9CA3AF;\n}\n\n.feedback-modal.theme-dark .feedback-modal-close:hover {\n color: #D1D5DB;\n}\n\n.feedback-form {\n padding: 16px;\n}\n\n.feedback-form-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 12px;\n}\n\n.feedback-form-group:last-child {\n margin-bottom: 0;\n}\n\n.feedback-form-group label {\n font-size: 14px;\n font-weight: 500;\n line-height: 1.25;\n color: #374151;\n}\n\n.feedback-modal.theme-dark .feedback-form-group label {\n color: #D1D5DB;\n}\n\n.feedback-form-group input {\n height: 40px;\n width: 100%;\n border-radius: 6px;\n border: 1px solid #D1D5DB;\n padding: 2px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1.25;\n color: #1F2937;\n font-family: inherit;\n outline: none;\n transition: all 0.2s ease;\n}\n\n.feedback-form-group input::placeholder {\n font-size: 14px;\n color: #6B7280;\n}\n\n.feedback-form-group input:focus {\n border-color: #84ADFF;\n box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.05), 0 0 0 3px rgba(41, 112, 255, 0.2);\n}\n\n.feedback-form-group input:focus-visible {\n outline: none;\n}\n\n.feedback-form-group textarea {\n min-height: 100px;\n width: 100%;\n resize: both;\n border-radius: 6px;\n border: 1px solid #D1D5DB;\n padding: 2px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1.25;\n color: #1F2937;\n font-family: inherit;\n outline: none;\n transition: all 0.2s ease;\n}\n\n.feedback-form-group textarea::placeholder {\n font-size: 14px;\n color: #6B7280;\n}\n\n.feedback-form-group textarea:focus {\n border-color: #84ADFF;\n box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.05), 0 0 0 3px rgba(41, 112, 255, 0.2);\n}\n\n.feedback-form-group textarea:focus-visible {\n outline: none;\n}\n\n.feedback-modal.theme-dark .feedback-form-group input,\n.feedback-modal.theme-dark .feedback-form-group textarea {\n background: #374151;\n border-color: #4B5563;\n color: white;\n}\n\n.feedback-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n border-radius: 6px;\n border: none;\n height: 40px;\n padding: 2px 16px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.feedback-btn:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.feedback-btn:focus-visible {\n outline: 2px solid #155EEF;\n outline-offset: 2px;\n}\n\n.feedback-btn-submit {\n background: #155EEF;\n color: white;\n}\n\n.feedback-btn-submit:hover:not(:disabled) {\n background: #004EEB;\n}\n\n.feedback-btn-cancel {\n background: transparent;\n color: #6B7280;\n border: 1px solid #D1D5DB;\n}\n\n.feedback-btn-cancel:hover:not(:disabled) {\n background: #F9FAFB;\n border-color: #9CA3AF;\n color: #374151;\n}\n\n.feedback-modal.theme-dark .feedback-btn-cancel {\n color: #D1D5DB;\n border-color: #4B5563;\n}\n\n.feedback-modal.theme-dark .feedback-btn-cancel:hover:not(:disabled) {\n background: #374151;\n}\n\n.feedback-form-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 16px;\n padding-top: 4px;\n}\n\n.feedback-loading {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n mask: radial-gradient(transparent 62%, white 65%);\n -webkit-mask: radial-gradient(transparent 62%, white 65%);\n animation: feedbackRotate 0.7s linear infinite;\n}\n\n.feedback-loading-white {\n background: conic-gradient(from 0deg, rgba(255, 255, 255, 0.5), white);\n}\n\n.feedback-loading-blue {\n background: conic-gradient(from 0deg, #004EEB, #eff4ff);\n}\n\n@keyframes feedbackRotate {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.feedback-error {\n color: #F04438;\n font-size: 14px;\n font-weight: 400;\n margin-top: 4px;\n text-transform: capitalize;\n}\n\n.feedback-form-error {\n color: #F04438;\n font-size: 14px;\n margin-top: 12px;\n padding: 8px 12px;\n background: #FEE2E2;\n border: 1px solid #FECACA;\n border-radius: 6px;\n}\n\n.feedback-modal.theme-dark .feedback-form-error {\n background: #7F1D1D;\n border-color: #991B1B;\n color: #FCA5A5;\n}\n\n.feedback-form-group.error input,\n.feedback-form-group.error textarea {\n border-color: #FDA29B;\n}\n\n.feedback-form-group.error input:focus,\n.feedback-form-group.error textarea:focus {\n border-color: #FDA29B;\n box-shadow: 0 0 0 1px rgba(16, 24, 40, 0.05), 0 0 0 4px rgba(253, 162, 155, 0.3);\n}\n\n.feedback-success-notification {\n position: fixed;\n top: 20px;\n right: 20px;\n z-index: 1000001;\n background: white;\n border: 1px solid #D1FAE5;\n border-radius: 8px;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n animation: slideInRight 0.3s ease-out;\n}\n\n.feedback-success-content {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n gap: 12px;\n}\n\n.feedback-success-content span {\n color: #059669;\n font-weight: 500;\n font-size: 14px;\n}\n\n.feedback-success-close {\n background: none;\n border: none;\n color: #6B7280;\n cursor: pointer;\n font-size: 18px;\n padding: 0;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.3s ease;\n}\n\n.feedback-success-close:hover {\n color: #374151;\n}\n\n.feedback-success-close:focus-visible {\n outline: 2px solid #155EEF;\n outline-offset: 2px;\n}\n\n@keyframes slideInRight {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.feedback-modal {\n animation: fadeIn 0.2s ease-out;\n}\n\n.feedback-modal-content {\n animation: slideInUp 0.3s ease-out;\n}\n\n@keyframes slideInUp {\n from {\n transform: translateY(20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@media (max-width: 640px) {\n .feedback-modal {\n padding: 8px;\n }\n \n .feedback-modal-content {\n min-width: 280px;\n max-width: 100%;\n max-height: 95vh;\n }\n \n .feedback-form {\n padding: 16px;\n }\n \n .feedback-modal-header {\n padding: 16px;\n }\n \n .feedback-modal-header h3 {\n font-size: 15px;\n }\n \n .feedback-form-actions {\n flex-direction: column;\n gap: 8px;\n }\n \n .feedback-btn {\n width: 100%;\n height: 40px;\n }\n \n .feedback-widget-button {\n bottom: 16px;\n right: 16px;\n }\n \n .feedback-widget-button.position-bottom-left {\n left: 16px;\n }\n \n .feedback-trigger-btn {\n padding: 10px 16px;\n font-size: 13px;\n }\n \n .feedback-success-notification {\n top: 8px;\n right: 8px;\n left: 8px;\n max-width: none;\n }\n\n .feedback-form-group input {\n height: 40px;\n padding: 2px 12px;\n }\n \n .feedback-form-group textarea {\n min-height: 80px;\n padding: 2px 12px;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .feedback-trigger-btn,\n .feedback-btn,\n .feedback-modal,\n .feedback-modal-content,\n .feedback-success-notification,\n .feedback-loading {\n transition: none;\n animation: none;\n }\n \n .feedback-trigger-btn:hover {\n transform: none;\n }\n}\n\n@media print {\n .feedback-widget,\n .feedback-modal,\n .feedback-success-notification {\n display: none !important;\n }\n}\n`;\n","import { APIService } from './core/APIService.js';\nimport { EventBus } from './core/EventBus.js';\nimport { FeedbackSDK } from './core/FeedbackSDK.js';\nimport { CSS_STYLES } from './styles/styles.js';\nimport {\n\tAPIError,\n\tConfigError,\n\tSDKError,\n\tValidationError,\n\tWidgetError,\n} from './utils/errors.js';\nimport * as helpers from './utils/helpers.js';\nimport { BaseWidget } from './widgets/BaseWidget.js';\nimport { ButtonWidget } from './widgets/ButtonWidget.js';\nimport { InlineWidget } from './widgets/InlineWidget.js';\nimport { TabWidget } from './widgets/TabWidget.js';\nimport { WidgetFactory } from './widgets/WidgetFactory.js';\n\nfunction injectStyles() {\n\tif (typeof document !== 'undefined' && !document.querySelector('#feedback-sdk-styles')) {\n\t\tconst style = document.createElement('style');\n\t\tstyle.id = 'feedback-sdk-styles';\n\t\tstyle.textContent = CSS_STYLES;\n\t\tdocument.head.appendChild(style);\n\t}\n}\n\nfunction autoInit() {\n\tif (typeof window !== 'undefined' && window.FeedbackSDKConfig) {\n\t\tinjectStyles();\n\n\t\tconst config = { ...window.FeedbackSDKConfig };\n\t\tconst sdk = new FeedbackSDK(config);\n\n\t\tsdk\n\t\t\t.init()\n\t\t\t.then((initData) => {\n\t\t\t\twindow.FeedbackSDK.instance = sdk;\n\n\t\t\t\tif (window.FeedbackSDKConfig.autoCreate) {\n\t\t\t\t\tconst widgets = Array.isArray(window.FeedbackSDKConfig.autoCreate)\n\t\t\t\t\t\t? window.FeedbackSDKConfig.autoCreate\n\t\t\t\t\t\t: [window.FeedbackSDKConfig.autoCreate];\n\n\t\t\t\t\twidgets.forEach((widgetConfig) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst widget = sdk.createWidget(\n\t\t\t\t\t\t\t\twidgetConfig.type || 'button',\n\t\t\t\t\t\t\t\twidgetConfig\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\twidget.mount(widgetConfig.container);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.error('[FeedbackSDK] Failed to create widget:', error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (typeof CustomEvent !== 'undefined') {\n\t\t\t\t\tconst event = new CustomEvent('FeedbackSDKReady', {\n\t\t\t\t\t\tdetail: { sdk, config, initData },\n\t\t\t\t\t});\n\t\t\t\t\twindow.dispatchEvent(event);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error('[FeedbackSDK] Auto-initialization failed:', error);\n\n\t\t\t\tif (typeof CustomEvent !== 'undefined') {\n\t\t\t\t\tconst event = new CustomEvent('FeedbackSDKError', {\n\t\t\t\t\t\tdetail: { error, config, phase: 'initialization' },\n\t\t\t\t\t});\n\t\t\t\t\twindow.dispatchEvent(event);\n\t\t\t\t}\n\t\t\t});\n\t}\n}\n\nfunction handleDOMReady() {\n\tif (typeof document !== 'undefined') {\n\t\tif (document.readyState === 'loading') {\n\t\t\tdocument.addEventListener('DOMContentLoaded', autoInit);\n\t\t} else {\n\t\t\tsetTimeout(autoInit, 0);\n\t\t}\n\t}\n}\n\nconst FeedbackSDKExport = {\n\tFeedbackSDK,\n\tBaseWidget,\n\tButtonWidget,\n\tTabWidget,\n\tInlineWidget,\n\tWidgetFactory,\n\tEventBus,\n\tAPIService,\n\tSDKError,\n\tAPIError,\n\tWidgetError,\n\tConfigError,\n\tValidationError,\n\thelpers,\n\tcreate: (config) => {\n\t\tinjectStyles();\n\t\treturn new FeedbackSDK(config);\n\t},\n\tversion: '1.0.0',\n\tinstance: null,\n\n\tisReady: () => Boolean(FeedbackSDKExport.instance),\n\tgetInstance: () => FeedbackSDKExport.instance,\n\n\tsetUserContext: (userContext) => {\n\t\tif (FeedbackSDKExport.instance) {\n\t\t\tFeedbackSDKExport.instance.setUserContext(userContext);\n\t\t} else {\n\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\twindow.FeedbackSDKUserContext = userContext;\n\t\t\t}\n\t\t}\n\t},\n\n\tinitWithUser: async (config, userContext) => {\n\t\tinjectStyles();\n\t\tconst fullConfig = { ...config, userContext };\n\t\tconst sdk = new FeedbackSDK(fullConfig);\n\t\tawait sdk.init();\n\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.FeedbackSDK.instance = sdk;\n\t\t}\n\n\t\treturn sdk;\n\t},\n\n\tonReady: (callback) => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tif (FeedbackSDKExport.isReady()) {\n\t\t\t\tcallback(FeedbackSDKExport.instance);\n\t\t\t} else {\n\t\t\t\twindow.addEventListener(\n\t\t\t\t\t'FeedbackSDKReady',\n\t\t\t\t\t(event) => {\n\t\t\t\t\t\tcallback(event.detail.sdk, event.detail);\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\n\tonError: (callback) => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.addEventListener('FeedbackSDKError', (event) => {\n\t\t\t\tcallback(event.detail.error, event.detail);\n\t\t\t});\n\t\t}\n\t},\n\n\textractUserContext: FeedbackSDK.extractUserContextFromAuth,\n};\n\nif (typeof window !== 'undefined') {\n\twindow.FeedbackSDK = FeedbackSDKExport;\n\thandleDOMReady();\n}\n\nexport default FeedbackSDKExport;\n\nexport {\n\tAPIError,\n\tAPIService,\n\tBaseWidget,\n\tButtonWidget,\n\tConfigError,\n\tEventBus,\n\tFeedbackSDK,\n\thelpers,\n\tInlineWidget,\n\tSDKError,\n\tTabWidget,\n\tValidationError,\n\tWidgetError,\n\tWidgetFactory,\n};"],"names":[],"mappings":"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;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;CC1hBD,SAAS,YAAY,GAAG;C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"}