@weldsuite/helpdesk-widget-sdk 1.0.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue-composables.js","sources":["../../src/types/config.ts","../../src/utils/logger.ts","../../src/core/IframeManager.ts","../../src/types/messages.ts","../../src/utils/security.ts","../../src/core/MessageBroker.ts","../../src/types/state.ts","../../src/utils/validation.ts","../../src/core/StateCoordinator.ts","../../src/core/WeldSDK.ts","../../frameworks/vue/useHelpdeskWidget.ts"],"sourcesContent":["/**\r\n * Weld SDK - Configuration Types\r\n * Type definitions for SDK initialization and configuration\r\n */\r\n\r\n/**\r\n * Event types for widget events\r\n */\r\nexport type WidgetEventType = 'ready' | 'open' | 'close' | 'error' | 'message' | 'minimize' | 'maximize' | 'destroy';\r\n\r\n/**\r\n * Widget event structure\r\n */\r\nexport interface WidgetEvent {\r\n type: WidgetEventType;\r\n data?: any;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * Event handler function type\r\n */\r\nexport type WidgetEventHandler = (event?: WidgetEvent | any) => void;\r\n\r\n/**\r\n * Position configuration\r\n */\r\nexport interface PositionConfig {\r\n bottom?: string;\r\n right?: string;\r\n left?: string;\r\n top?: string;\r\n}\r\n\r\n/**\r\n * Customization configuration\r\n */\r\nexport interface CustomizationConfig {\r\n primaryColor?: string;\r\n accentColor?: string;\r\n backgroundColor?: string;\r\n textColor?: string;\r\n fontFamily?: string;\r\n fontSize?: string;\r\n borderRadius?: string;\r\n}\r\n\r\n/**\r\n * Feature flags\r\n */\r\nexport interface FeatureConfig {\r\n attachments?: boolean;\r\n reactions?: boolean;\r\n typing?: boolean;\r\n readReceipts?: boolean;\r\n offlineMode?: boolean;\r\n fileUpload?: boolean;\r\n imageUpload?: boolean;\r\n voiceMessages?: boolean;\r\n videoMessages?: boolean;\r\n}\r\n\r\n/**\r\n * Mobile configuration\r\n */\r\nexport interface MobileConfig {\r\n fullScreen?: boolean;\r\n scrollLock?: boolean;\r\n keyboardHandling?: 'auto' | 'manual';\r\n safeAreaInsets?: boolean;\r\n}\r\n\r\n/**\r\n * Iframe configuration\r\n */\r\nexport interface IframeConfig {\r\n launcher: {\r\n url: string;\r\n name: string;\r\n position: PositionConfig;\r\n size: string;\r\n };\r\n widget: {\r\n url: string;\r\n name: string;\r\n position: PositionConfig;\r\n width: string;\r\n height: string;\r\n };\r\n backdrop?: {\r\n enabled: boolean;\r\n closeOnClick: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * API configuration\r\n */\r\nexport interface ApiConfig {\r\n baseUrl: string;\r\n widgetId: string;\r\n endpoints?: {\r\n messages?: string;\r\n users?: string;\r\n conversations?: string;\r\n upload?: string;\r\n };\r\n timeout?: number;\r\n retries?: number;\r\n}\r\n\r\n/**\r\n * Authentication configuration\r\n */\r\nexport interface AuthConfig {\r\n enabled?: boolean;\r\n mode?: 'anonymous' | 'identified';\r\n userId?: string;\r\n email?: string;\r\n name?: string;\r\n avatar?: string;\r\n metadata?: Record<string, any>;\r\n token?: string;\r\n}\r\n\r\n/**\r\n * Locale configuration\r\n */\r\nexport interface LocaleConfig {\r\n locale?: string;\r\n translations?: Record<string, Record<string, string>>;\r\n dateFormat?: string;\r\n timeFormat?: string;\r\n timezone?: string;\r\n}\r\n\r\n/**\r\n * Logging configuration\r\n */\r\nexport interface LogConfig {\r\n enabled?: boolean;\r\n level?: 'debug' | 'info' | 'warn' | 'error';\r\n prefix?: string;\r\n includeTimestamp?: boolean;\r\n}\r\n\r\n/**\r\n * Performance configuration\r\n */\r\nexport interface PerformanceConfig {\r\n lazyLoad?: boolean;\r\n preload?: boolean;\r\n caching?: boolean;\r\n prefetch?: boolean;\r\n}\r\n\r\n/**\r\n * Security configuration\r\n */\r\nexport interface SecurityConfig {\r\n allowedOrigins?: string[];\r\n validateMessages?: boolean;\r\n sanitizeInput?: boolean;\r\n contentSecurityPolicy?: string;\r\n}\r\n\r\n/**\r\n * Main SDK configuration\r\n */\r\nexport interface WeldConfig {\r\n // Required\r\n widgetId: string;\r\n\r\n // Optional\r\n api?: Partial<ApiConfig>;\r\n iframes?: Partial<IframeConfig>;\r\n position?: {\r\n launcher?: PositionConfig;\r\n widget?: PositionConfig;\r\n };\r\n customization?: CustomizationConfig;\r\n features?: FeatureConfig;\r\n mobile?: MobileConfig;\r\n auth?: AuthConfig;\r\n locale?: LocaleConfig;\r\n logging?: LogConfig;\r\n performance?: PerformanceConfig;\r\n security?: SecurityConfig;\r\n\r\n // Callbacks\r\n onReady?: () => void;\r\n onError?: (error: Error) => void;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: any) => void;\r\n onMinimize?: () => void;\r\n onMaximize?: () => void;\r\n onDestroy?: () => void;\r\n}\r\n\r\n/**\r\n * Runtime configuration (resolved from WeldConfig)\r\n */\r\nexport interface ResolvedConfig {\r\n widgetId: string;\r\n api: ApiConfig;\r\n iframes: IframeConfig;\r\n customization: CustomizationConfig;\r\n features: FeatureConfig;\r\n mobile: MobileConfig;\r\n auth: AuthConfig;\r\n locale: LocaleConfig;\r\n logging: LogConfig;\r\n performance: PerformanceConfig;\r\n security: SecurityConfig;\r\n // Callbacks (passed through from WeldConfig)\r\n onReady?: () => void;\r\n onError?: (error: Error) => void;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n onMessage?: (message: any) => void;\r\n onMinimize?: () => void;\r\n onMaximize?: () => void;\r\n onDestroy?: () => void;\r\n}\r\n\r\n/**\r\n * Device detection\r\n */\r\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop';\r\n\r\nexport interface DeviceInfo {\r\n type: DeviceType;\r\n isMobile: boolean;\r\n isTablet: boolean;\r\n isDesktop: boolean;\r\n isTouchDevice: boolean;\r\n screenWidth: number;\r\n screenHeight: number;\r\n orientation: 'portrait' | 'landscape';\r\n userAgent: string;\r\n}\r\n\r\n/**\r\n * Default configuration values\r\n */\r\nexport const DEFAULT_CONFIG: Omit<ResolvedConfig, 'widgetId'> = {\r\n api: {\r\n baseUrl: 'https://weldsuite-helpdesk-widget.vercel.app',\r\n widgetId: '',\r\n timeout: 30000,\r\n retries: 3,\r\n },\r\n iframes: {\r\n launcher: {\r\n url: '/widget?mode=launcher',\r\n name: 'weld-launcher-frame',\r\n position: { bottom: '24px', right: '24px' },\r\n size: '60px',\r\n },\r\n widget: {\r\n url: '/widget?mode=widget',\r\n name: 'weld-widget-frame',\r\n position: { bottom: '100px', right: '24px' },\r\n width: '400px',\r\n height: 'min(680px, calc(100vh - 120px))',\r\n },\r\n backdrop: {\r\n enabled: true,\r\n closeOnClick: true,\r\n },\r\n },\r\n customization: {\r\n primaryColor: '#000000',\r\n accentColor: '#3b82f6',\r\n backgroundColor: '#ffffff',\r\n textColor: '#111827',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n fontSize: '14px',\r\n borderRadius: '12px',\r\n },\r\n features: {\r\n attachments: true,\r\n reactions: true,\r\n typing: true,\r\n readReceipts: true,\r\n offlineMode: false,\r\n fileUpload: true,\r\n imageUpload: true,\r\n voiceMessages: false,\r\n videoMessages: false,\r\n },\r\n mobile: {\r\n fullScreen: true,\r\n scrollLock: true,\r\n keyboardHandling: 'auto',\r\n safeAreaInsets: true,\r\n },\r\n auth: {\r\n enabled: true,\r\n mode: 'anonymous',\r\n },\r\n locale: {\r\n locale: 'en',\r\n dateFormat: 'MMM dd, yyyy',\r\n timeFormat: 'HH:mm',\r\n },\r\n logging: {\r\n enabled: true,\r\n level: 'warn',\r\n prefix: '[Weld]',\r\n includeTimestamp: true,\r\n },\r\n performance: {\r\n lazyLoad: true,\r\n preload: false,\r\n caching: true,\r\n prefetch: false,\r\n },\r\n security: {\r\n allowedOrigins: [],\r\n validateMessages: true,\r\n sanitizeInput: true,\r\n },\r\n};\r\n\r\n/**\r\n * Configuration validation\r\n */\r\nexport function validateConfig(config: Partial<WeldConfig>): boolean {\r\n if (!config.widgetId || typeof config.widgetId !== 'string') {\r\n throw new Error('WeldConfig: widgetId is required and must be a string');\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Merge configuration with defaults\r\n */\r\nexport function resolveConfig(config: WeldConfig): ResolvedConfig {\r\n validateConfig(config);\r\n\r\n return {\r\n widgetId: config.widgetId,\r\n api: {\r\n ...DEFAULT_CONFIG.api,\r\n widgetId: config.widgetId,\r\n ...config.api,\r\n },\r\n iframes: {\r\n launcher: {\r\n ...DEFAULT_CONFIG.iframes.launcher,\r\n ...config.iframes?.launcher,\r\n position: {\r\n ...DEFAULT_CONFIG.iframes.launcher.position,\r\n ...config.position?.launcher,\r\n ...config.iframes?.launcher?.position,\r\n },\r\n },\r\n widget: {\r\n ...DEFAULT_CONFIG.iframes.widget,\r\n ...config.iframes?.widget,\r\n position: {\r\n ...DEFAULT_CONFIG.iframes.widget.position,\r\n ...config.position?.widget,\r\n ...config.iframes?.widget?.position,\r\n },\r\n },\r\n backdrop: {\r\n ...DEFAULT_CONFIG.iframes.backdrop!,\r\n ...config.iframes?.backdrop,\r\n },\r\n },\r\n customization: {\r\n ...DEFAULT_CONFIG.customization,\r\n ...config.customization,\r\n },\r\n features: {\r\n ...DEFAULT_CONFIG.features,\r\n ...config.features,\r\n },\r\n mobile: {\r\n ...DEFAULT_CONFIG.mobile,\r\n ...config.mobile,\r\n },\r\n auth: {\r\n ...DEFAULT_CONFIG.auth,\r\n ...config.auth,\r\n },\r\n locale: {\r\n ...DEFAULT_CONFIG.locale,\r\n ...config.locale,\r\n },\r\n logging: {\r\n ...DEFAULT_CONFIG.logging,\r\n ...config.logging,\r\n },\r\n performance: {\r\n ...DEFAULT_CONFIG.performance,\r\n ...config.performance,\r\n },\r\n security: {\r\n ...DEFAULT_CONFIG.security,\r\n ...config.security,\r\n },\r\n // Pass through callbacks\r\n onReady: config.onReady,\r\n onError: config.onError,\r\n onOpen: config.onOpen,\r\n onClose: config.onClose,\r\n onMessage: config.onMessage,\r\n onMinimize: config.onMinimize,\r\n onMaximize: config.onMaximize,\r\n onDestroy: config.onDestroy,\r\n };\r\n}\r\n","/**\r\n * Weld SDK - Logger Utility\r\n * Centralized logging with configurable levels and formatting\r\n */\r\n\r\nimport type { LogConfig } from '../types/config';\r\n\r\n/**\r\n * Log levels\r\n */\r\nexport enum LogLevel {\r\n DEBUG = 0,\r\n INFO = 1,\r\n WARN = 2,\r\n ERROR = 3,\r\n SILENT = 4,\r\n}\r\n\r\n/**\r\n * Logger class\r\n */\r\nexport class Logger {\r\n private config: LogConfig;\r\n private level: LogLevel;\r\n\r\n constructor(config: LogConfig) {\r\n this.config = {\r\n enabled: true,\r\n level: 'warn',\r\n prefix: '[Weld]',\r\n includeTimestamp: true,\r\n ...config,\r\n };\r\n\r\n this.level = this.getLevelFromString(this.config.level!);\r\n }\r\n\r\n /**\r\n * Convert string level to LogLevel enum\r\n */\r\n private getLevelFromString(level: string): LogLevel {\r\n switch (level.toLowerCase()) {\r\n case 'debug':\r\n return LogLevel.DEBUG;\r\n case 'info':\r\n return LogLevel.INFO;\r\n case 'warn':\r\n return LogLevel.WARN;\r\n case 'error':\r\n return LogLevel.ERROR;\r\n default:\r\n return LogLevel.WARN;\r\n }\r\n }\r\n\r\n /**\r\n * Check if logging is enabled for level\r\n */\r\n private shouldLog(level: LogLevel): boolean {\r\n return (this.config.enabled ?? true) && level >= this.level;\r\n }\r\n\r\n /**\r\n * Format log message\r\n */\r\n private format(level: string, message: string, _data?: any): string[] {\r\n const parts: string[] = [];\r\n\r\n if (this.config.prefix) {\r\n parts.push(this.config.prefix);\r\n }\r\n\r\n if (this.config.includeTimestamp) {\r\n const timestamp = new Date().toISOString();\r\n parts.push(`[${timestamp}]`);\r\n }\r\n\r\n parts.push(`[${level.toUpperCase()}]`);\r\n parts.push(message);\r\n\r\n return parts;\r\n }\r\n\r\n /**\r\n * Log debug message\r\n */\r\n public debug(message: string, data?: any): void {\r\n if (!this.shouldLog(LogLevel.DEBUG)) return;\r\n\r\n const formatted = this.format('debug', message, data);\r\n if (data !== undefined) {\r\n console.debug(...formatted, data);\r\n } else {\r\n console.debug(...formatted);\r\n }\r\n }\r\n\r\n /**\r\n * Log info message\r\n */\r\n public info(message: string, data?: any): void {\r\n if (!this.shouldLog(LogLevel.INFO)) return;\r\n\r\n const formatted = this.format('info', message, data);\r\n if (data !== undefined) {\r\n console.info(...formatted, data);\r\n } else {\r\n console.info(...formatted);\r\n }\r\n }\r\n\r\n /**\r\n * Log warning message\r\n */\r\n public warn(message: string, data?: any): void {\r\n if (!this.shouldLog(LogLevel.WARN)) return;\r\n\r\n const formatted = this.format('warn', message, data);\r\n if (data !== undefined) {\r\n console.warn(...formatted, data);\r\n } else {\r\n console.warn(...formatted);\r\n }\r\n }\r\n\r\n /**\r\n * Log error message\r\n */\r\n public error(message: string, error?: Error | any): void {\r\n if (!this.shouldLog(LogLevel.ERROR)) return;\r\n\r\n const formatted = this.format('error', message);\r\n if (error !== undefined) {\r\n if (error instanceof Error) {\r\n console.error(...formatted, error.message, error.stack);\r\n } else {\r\n console.error(...formatted, error);\r\n }\r\n } else {\r\n console.error(...formatted);\r\n }\r\n }\r\n\r\n /**\r\n * Create child logger with prefix\r\n */\r\n public child(prefix: string): Logger {\r\n return new Logger({\r\n ...this.config,\r\n prefix: `${this.config.prefix} ${prefix}`,\r\n });\r\n }\r\n\r\n /**\r\n * Update log level at runtime\r\n */\r\n public setLevel(level: 'debug' | 'info' | 'warn' | 'error'): void {\r\n this.config.level = level;\r\n this.level = this.getLevelFromString(level);\r\n }\r\n\r\n /**\r\n * Enable/disable logging\r\n */\r\n public setEnabled(enabled: boolean): void {\r\n this.config.enabled = enabled;\r\n }\r\n}\r\n\r\n/**\r\n * Default logger instance\r\n */\r\nexport const defaultLogger = new Logger({\r\n enabled: true,\r\n level: 'warn',\r\n prefix: '[Weld]',\r\n includeTimestamp: true,\r\n});\r\n","/**\r\n * Weld SDK - Iframe Manager\r\n * Manages creation, lifecycle, and communication with multiple iframes\r\n */\r\n\r\nimport type { ResolvedConfig, DeviceInfo } from '../types/config';\r\nimport { Logger } from '../utils/logger';\r\n\r\n/**\r\n * Iframe types\r\n */\r\nexport enum IframeType {\r\n LAUNCHER = 'launcher',\r\n WIDGET = 'widget',\r\n BACKDROP = 'backdrop',\r\n}\r\n\r\n/**\r\n * Iframe metadata\r\n */\r\nexport interface IframeMetadata {\r\n type: IframeType;\r\n element: HTMLIFrameElement;\r\n container: HTMLDivElement;\r\n ready: boolean;\r\n visible: boolean;\r\n createdAt: number;\r\n}\r\n\r\n/**\r\n * Device detection result\r\n */\r\nfunction detectDevice(): DeviceInfo {\r\n const width = window.innerWidth;\r\n const height = window.innerHeight;\r\n const userAgent = navigator.userAgent;\r\n\r\n const isMobile = width < 768;\r\n const isTablet = width >= 768 && width <= 1024;\r\n const isDesktop = width > 1024;\r\n const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n\r\n return {\r\n type: isMobile ? 'mobile' : isTablet ? 'tablet' : 'desktop',\r\n isMobile,\r\n isTablet,\r\n isDesktop,\r\n isTouchDevice,\r\n screenWidth: width,\r\n screenHeight: height,\r\n orientation: width > height ? 'landscape' : 'portrait',\r\n userAgent,\r\n };\r\n}\r\n\r\n/**\r\n * IframeManager class\r\n * Orchestrates multiple iframes for the widget system\r\n */\r\nexport class IframeManager {\r\n private config: ResolvedConfig;\r\n private logger: Logger;\r\n private iframes: Map<IframeType, IframeMetadata> = new Map();\r\n private rootContainer: HTMLDivElement | null = null;\r\n private appContainer: HTMLDivElement | null = null;\r\n private modalContainer: HTMLDivElement | null = null;\r\n private deviceInfo: DeviceInfo;\r\n private styleElement: HTMLStyleElement | null = null;\r\n\r\n constructor(config: ResolvedConfig) {\r\n this.config = config;\r\n this.logger = new Logger(config.logging);\r\n this.deviceInfo = detectDevice();\r\n\r\n this.logger.info('IframeManager initialized', {\r\n device: this.deviceInfo.type,\r\n mobile: this.deviceInfo.isMobile,\r\n });\r\n }\r\n\r\n /**\r\n * Initialize all containers and iframes\r\n */\r\n public async init(): Promise<void> {\r\n this.logger.debug('Initializing iframe manager');\r\n\r\n try {\r\n // Create root container structure\r\n this.createRootContainer();\r\n\r\n // Inject CSS\r\n this.injectCSS();\r\n\r\n // Create iframes\r\n await this.createLauncherIframe();\r\n await this.createBackdropIframe();\r\n await this.createWidgetIframe();\r\n\r\n // Setup event listeners\r\n this.setupEventListeners();\r\n\r\n this.logger.info('IframeManager initialized successfully');\r\n } catch (error) {\r\n this.logger.error('Failed to initialize IframeManager', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Create root container structure\r\n */\r\n private createRootContainer(): void {\r\n // Check if already exists\r\n let existingContainer = document.getElementById('weld-container');\r\n if (existingContainer) {\r\n this.logger.warn('Weld container already exists, removing old instance');\r\n existingContainer.remove();\r\n }\r\n\r\n // Create root container\r\n this.rootContainer = document.createElement('div');\r\n this.rootContainer.id = 'weld-container';\r\n this.rootContainer.className = 'weld-namespace';\r\n\r\n // Create app container\r\n this.appContainer = document.createElement('div');\r\n this.appContainer.className = 'weld-app';\r\n this.appContainer.setAttribute('aria-live', 'polite');\r\n this.appContainer.setAttribute('role', 'complementary');\r\n this.appContainer.setAttribute('aria-label', 'Weld Helpdesk Widget');\r\n\r\n // Create modal container\r\n this.modalContainer = document.createElement('div');\r\n this.modalContainer.id = 'weld-modal-container';\r\n\r\n // Assemble structure\r\n this.rootContainer.appendChild(this.appContainer);\r\n this.rootContainer.appendChild(this.modalContainer);\r\n document.body.appendChild(this.rootContainer);\r\n\r\n this.logger.debug('Root container created');\r\n }\r\n\r\n /**\r\n * Inject CSS into the page\r\n */\r\n private injectCSS(): void {\r\n // Remove existing style if present\r\n const existingStyle = document.getElementById('weld-styles');\r\n if (existingStyle) {\r\n existingStyle.remove();\r\n }\r\n\r\n this.styleElement = document.createElement('style');\r\n this.styleElement.id = 'weld-styles';\r\n this.styleElement.textContent = this.generateCSS();\r\n document.head.appendChild(this.styleElement);\r\n\r\n this.logger.debug('CSS injected');\r\n }\r\n\r\n /**\r\n * Generate CSS for containers\r\n */\r\n private generateCSS(): string {\r\n const { customization } = this.config;\r\n\r\n return `\r\n /* Weld Container */\r\n #weld-container {\r\n --weld-color-primary: ${customization.primaryColor};\r\n --weld-color-accent: ${customization.accentColor};\r\n --weld-font-family: ${customization.fontFamily};\r\n --weld-font-size-base: ${customization.fontSize};\r\n --weld-radius-xl: ${customization.borderRadius};\r\n }\r\n\r\n /* Import main stylesheet */\r\n @import url('/styles/index.css');\r\n\r\n /* Prevent page scroll when mobile widget is open */\r\n body.weld-mobile-open {\r\n overflow: hidden !important;\r\n position: fixed !important;\r\n width: 100% !important;\r\n height: 100% !important;\r\n }\r\n\r\n /* High contrast mode support */\r\n @media (prefers-contrast: high) {\r\n .weld-namespace {\r\n --weld-color-border: currentColor;\r\n }\r\n }\r\n `;\r\n }\r\n\r\n /**\r\n * Create launcher iframe\r\n */\r\n private async createLauncherIframe(): Promise<void> {\r\n const { iframes } = this.config;\r\n const { launcher } = iframes;\r\n\r\n // Create container\r\n const container = document.createElement('div');\r\n container.className = 'weld-launcher-frame';\r\n container.setAttribute('data-state', 'visible');\r\n container.style.cssText = `\r\n position: fixed;\r\n bottom: ${launcher.position.bottom};\r\n right: ${launcher.position.right};\r\n width: ${launcher.size};\r\n height: ${launcher.size};\r\n z-index: 2147483003;\r\n pointer-events: auto;\r\n display: block;\r\n `;\r\n\r\n // Create iframe\r\n const iframe = document.createElement('iframe');\r\n iframe.name = launcher.name;\r\n iframe.title = 'Weld Launcher';\r\n iframe.src = this.buildIframeUrl(launcher.url);\r\n iframe.style.cssText = `\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n background: transparent;\r\n display: block;\r\n `;\r\n iframe.setAttribute('allow', 'clipboard-write');\r\n iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms allow-popups');\r\n\r\n container.appendChild(iframe);\r\n this.appContainer?.appendChild(container);\r\n\r\n // Store metadata\r\n this.iframes.set(IframeType.LAUNCHER, {\r\n type: IframeType.LAUNCHER,\r\n element: iframe,\r\n container,\r\n ready: false,\r\n visible: true,\r\n createdAt: Date.now(),\r\n });\r\n\r\n // Mark as ready when loaded\r\n iframe.onload = () => {\r\n const metadata = this.iframes.get(IframeType.LAUNCHER);\r\n if (metadata) {\r\n metadata.ready = true;\r\n this.logger.debug('Launcher iframe loaded and ready');\r\n }\r\n };\r\n\r\n this.logger.debug('Launcher iframe created');\r\n }\r\n\r\n /**\r\n * Create widget iframe\r\n */\r\n private async createWidgetIframe(): Promise<void> {\r\n const { iframes } = this.config;\r\n const { widget } = iframes;\r\n\r\n // Create container\r\n const container = document.createElement('div');\r\n container.className = 'weld-widget-frame';\r\n container.setAttribute('data-state', 'closed');\r\n container.style.cssText = `\r\n position: fixed;\r\n bottom: ${widget.position.bottom};\r\n right: ${widget.position.right};\r\n width: ${widget.width};\r\n height: ${widget.height};\r\n max-width: 100vw;\r\n z-index: 2147483001;\r\n pointer-events: none;\r\n display: none;\r\n border-radius: 16px;\r\n overflow: hidden;\r\n background: transparent;\r\n `;\r\n\r\n // Create iframe\r\n const iframe = document.createElement('iframe');\r\n iframe.name = widget.name;\r\n iframe.title = 'Weld Widget';\r\n iframe.src = this.buildIframeUrl(widget.url);\r\n iframe.style.cssText = `\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n background: transparent;\r\n display: block;\r\n border-radius: 16px;\r\n `;\r\n iframe.setAttribute('allow', 'clipboard-write; camera; microphone');\r\n iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms allow-popups allow-downloads');\r\n\r\n container.appendChild(iframe);\r\n this.appContainer?.appendChild(container);\r\n\r\n // Store metadata\r\n this.iframes.set(IframeType.WIDGET, {\r\n type: IframeType.WIDGET,\r\n element: iframe,\r\n container,\r\n ready: false,\r\n visible: false,\r\n createdAt: Date.now(),\r\n });\r\n\r\n // Mark as ready when loaded\r\n iframe.onload = () => {\r\n const metadata = this.iframes.get(IframeType.WIDGET);\r\n if (metadata) {\r\n metadata.ready = true;\r\n this.logger.debug('Widget iframe loaded and ready');\r\n }\r\n };\r\n\r\n this.logger.debug('Widget iframe created');\r\n }\r\n\r\n /**\r\n * Create backdrop iframe\r\n */\r\n private async createBackdropIframe(): Promise<void> {\r\n if (!this.config.iframes.backdrop?.enabled) {\r\n this.logger.debug('Backdrop disabled, skipping creation');\r\n return;\r\n }\r\n\r\n // Create container\r\n const container = document.createElement('div');\r\n container.className = 'weld-backdrop-frame';\r\n container.setAttribute('data-state', 'hidden');\r\n container.style.cssText = `\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 2147483000;\r\n background: transparent;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: opacity 200ms ease;\r\n `;\r\n\r\n this.appContainer?.appendChild(container);\r\n\r\n // Store metadata (backdrop doesn't have an iframe, just a div)\r\n // We'll create a minimal \"iframe\" reference for consistency\r\n const dummyIframe = document.createElement('iframe');\r\n dummyIframe.style.display = 'none';\r\n\r\n this.iframes.set(IframeType.BACKDROP, {\r\n type: IframeType.BACKDROP,\r\n element: dummyIframe,\r\n container,\r\n ready: true, // Backdrop is always ready\r\n visible: false,\r\n createdAt: Date.now(),\r\n });\r\n\r\n this.logger.debug('Backdrop created');\r\n }\r\n\r\n /**\r\n * Build iframe URL with parameters\r\n */\r\n private buildIframeUrl(path: string): string {\r\n const { widgetId, api } = this.config;\r\n const baseUrl = api.baseUrl;\r\n\r\n // Handle paths that may already have query parameters\r\n const url = new URL(path, baseUrl);\r\n url.searchParams.set('widgetId', widgetId);\r\n url.searchParams.set('device', this.deviceInfo.type);\r\n url.searchParams.set('mobile', String(this.deviceInfo.isMobile));\r\n url.searchParams.set('parentOrigin', window.location.origin);\r\n\r\n return url.toString();\r\n }\r\n\r\n /**\r\n * Setup event listeners\r\n */\r\n private setupEventListeners(): void {\r\n // Window resize\r\n window.addEventListener('resize', this.handleResize.bind(this));\r\n\r\n // Orientation change\r\n window.addEventListener('orientationchange', this.handleOrientationChange.bind(this));\r\n\r\n this.logger.debug('Event listeners setup');\r\n }\r\n\r\n /**\r\n * Handle window resize\r\n */\r\n private handleResize(): void {\r\n this.deviceInfo = detectDevice();\r\n this.logger.debug('Window resized', { device: this.deviceInfo.type });\r\n }\r\n\r\n /**\r\n * Handle orientation change\r\n */\r\n private handleOrientationChange(): void {\r\n this.deviceInfo = detectDevice();\r\n this.logger.debug('Orientation changed', { orientation: this.deviceInfo.orientation });\r\n }\r\n\r\n /**\r\n * Get iframe by type\r\n */\r\n public getIframe(type: IframeType): IframeMetadata | undefined {\r\n return this.iframes.get(type);\r\n }\r\n\r\n /**\r\n * Get iframe element\r\n */\r\n public getIframeElement(type: IframeType): HTMLIFrameElement | undefined {\r\n return this.iframes.get(type)?.element;\r\n }\r\n\r\n /**\r\n * Get iframe container\r\n */\r\n public getIframeContainer(type: IframeType): HTMLDivElement | undefined {\r\n return this.iframes.get(type)?.container;\r\n }\r\n\r\n /**\r\n * Mark iframe as ready\r\n */\r\n public setIframeReady(type: IframeType): void {\r\n const iframe = this.iframes.get(type);\r\n if (iframe) {\r\n iframe.ready = true;\r\n this.logger.debug(`Iframe ${type} marked as ready`);\r\n }\r\n }\r\n\r\n /**\r\n * Check if all iframes are ready\r\n */\r\n public areAllIframesReady(): boolean {\r\n for (const [type, iframe] of this.iframes) {\r\n if (type !== IframeType.BACKDROP && !iframe.ready) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Show iframe\r\n */\r\n public showIframe(type: IframeType): void {\r\n const iframe = this.iframes.get(type);\r\n if (!iframe) {\r\n console.warn(`[Weld SDK] showIframe: iframe ${type} not found`);\r\n return;\r\n }\r\n\r\n console.log(`[Weld SDK] Showing iframe ${type}`, { currentDisplay: iframe.container.style.display });\r\n\r\n iframe.visible = true;\r\n iframe.container.setAttribute('data-state', type === IframeType.BACKDROP ? 'visible' : 'open');\r\n iframe.container.style.pointerEvents = 'auto';\r\n iframe.container.style.display = 'block';\r\n\r\n // Handle mobile scroll lock\r\n if (this.deviceInfo.isMobile && type === IframeType.WIDGET && this.config.mobile.scrollLock) {\r\n document.body.classList.add('weld-mobile-open');\r\n }\r\n\r\n console.log(`[Weld SDK] Iframe ${type} shown`, { newDisplay: iframe.container.style.display });\r\n }\r\n\r\n /**\r\n * Hide iframe\r\n */\r\n public hideIframe(type: IframeType): void {\r\n const iframe = this.iframes.get(type);\r\n if (!iframe) {\r\n console.warn(`[Weld SDK] hideIframe: iframe ${type} not found`);\r\n return;\r\n }\r\n\r\n console.log(`[Weld SDK] Hiding iframe ${type}`, { currentDisplay: iframe.container.style.display });\r\n\r\n iframe.visible = false;\r\n iframe.container.setAttribute('data-state', type === IframeType.BACKDROP ? 'hidden' : 'closed');\r\n iframe.container.style.pointerEvents = 'none';\r\n iframe.container.style.display = 'none';\r\n\r\n // Remove mobile scroll lock\r\n if (this.deviceInfo.isMobile && type === IframeType.WIDGET) {\r\n document.body.classList.remove('weld-mobile-open');\r\n }\r\n\r\n console.log(`[Weld SDK] Iframe ${type} hidden`, { newDisplay: iframe.container.style.display });\r\n }\r\n\r\n /**\r\n * Get device info\r\n */\r\n public getDeviceInfo(): DeviceInfo {\r\n return this.deviceInfo;\r\n }\r\n\r\n /**\r\n * Get modal container\r\n */\r\n public getModalContainer(): HTMLDivElement | null {\r\n return this.modalContainer;\r\n }\r\n\r\n /**\r\n * Destroy all iframes and cleanup\r\n */\r\n public destroy(): void {\r\n this.logger.debug('Destroying iframe manager');\r\n\r\n // Remove event listeners\r\n window.removeEventListener('resize', this.handleResize.bind(this));\r\n window.removeEventListener('orientationchange', this.handleOrientationChange.bind(this));\r\n\r\n // Remove mobile scroll lock\r\n document.body.classList.remove('weld-mobile-open');\r\n\r\n // Remove root container\r\n if (this.rootContainer) {\r\n this.rootContainer.remove();\r\n this.rootContainer = null;\r\n }\r\n\r\n // Remove style element\r\n if (this.styleElement) {\r\n this.styleElement.remove();\r\n this.styleElement = null;\r\n }\r\n\r\n // Clear iframe references\r\n this.iframes.clear();\r\n\r\n this.logger.info('IframeManager destroyed');\r\n }\r\n}\r\n","/**\r\n * Weld SDK - Message Types\r\n * Type definitions for postMessage communication between parent and iframes\r\n */\r\n\r\n/**\r\n * Message origins for validation\r\n */\r\nexport enum MessageOrigin {\r\n LAUNCHER = 'launcher',\r\n WIDGET = 'widget',\r\n PARENT = 'parent',\r\n BACKDROP = 'backdrop',\r\n}\r\n\r\n/**\r\n * Message types for different communication patterns\r\n */\r\nexport enum MessageType {\r\n // Lifecycle\r\n READY = 'weld:ready',\r\n INIT = 'weld:init',\r\n DESTROY = 'weld:destroy',\r\n\r\n // State changes\r\n STATE_UPDATE = 'weld:state:update',\r\n STATE_REQUEST = 'weld:state:request',\r\n STATE_RESPONSE = 'weld:state:response',\r\n\r\n // Widget control\r\n WIDGET_OPEN = 'weld:widget:open',\r\n WIDGET_CLOSE = 'weld:widget:close',\r\n WIDGET_TOGGLE = 'weld:widget:toggle',\r\n WIDGET_MINIMIZE = 'weld:widget:minimize',\r\n WIDGET_MAXIMIZE = 'weld:widget:maximize',\r\n\r\n // Launcher control\r\n LAUNCHER_SHOW = 'weld:launcher:show',\r\n LAUNCHER_HIDE = 'weld:launcher:hide',\r\n LAUNCHER_UPDATE = 'weld:launcher:update',\r\n\r\n // Backdrop control\r\n BACKDROP_SHOW = 'weld:backdrop:show',\r\n BACKDROP_HIDE = 'weld:backdrop:hide',\r\n BACKDROP_CLICK = 'weld:backdrop:click',\r\n\r\n // User interactions\r\n MESSAGE_SEND = 'weld:message:send',\r\n MESSAGE_RECEIVE = 'weld:message:receive',\r\n TYPING_START = 'weld:typing:start',\r\n TYPING_STOP = 'weld:typing:stop',\r\n\r\n // Badge updates\r\n BADGE_UPDATE = 'weld:badge:update',\r\n BADGE_CLEAR = 'weld:badge:clear',\r\n\r\n // Mobile handling\r\n MOBILE_SCROLL_LOCK = 'weld:mobile:scroll:lock',\r\n MOBILE_SCROLL_UNLOCK = 'weld:mobile:scroll:unlock',\r\n\r\n // Configuration\r\n CONFIG_UPDATE = 'weld:config:update',\r\n THEME_UPDATE = 'weld:theme:update',\r\n LOCALE_UPDATE = 'weld:locale:update',\r\n\r\n // Authentication\r\n AUTH_LOGIN = 'weld:auth:login',\r\n AUTH_LOGOUT = 'weld:auth:logout',\r\n AUTH_TOKEN_UPDATE = 'weld:auth:token:update',\r\n\r\n // Events\r\n EVENT_TRACK = 'weld:event:track',\r\n ERROR_REPORT = 'weld:error:report',\r\n\r\n // API responses\r\n API_SUCCESS = 'weld:api:success',\r\n API_ERROR = 'weld:api:error',\r\n}\r\n\r\n/**\r\n * Base message structure\r\n */\r\nexport interface BaseMessage {\r\n type: MessageType;\r\n origin: MessageOrigin;\r\n timestamp: number;\r\n id: string;\r\n}\r\n\r\n/**\r\n * Message with payload\r\n */\r\nexport interface PayloadMessage<T = any> extends BaseMessage {\r\n payload: T;\r\n}\r\n\r\n/**\r\n * State update payload\r\n */\r\nexport interface StateUpdatePayload {\r\n path: string;\r\n value: any;\r\n merge?: boolean;\r\n}\r\n\r\n/**\r\n * Widget state payload\r\n */\r\nexport interface WidgetStatePayload {\r\n isOpen: boolean;\r\n isMinimized: boolean;\r\n view?: string;\r\n data?: any;\r\n}\r\n\r\n/**\r\n * Launcher state payload\r\n */\r\nexport interface LauncherStatePayload {\r\n isVisible: boolean;\r\n badgeCount?: number;\r\n badgeText?: string;\r\n customColor?: string;\r\n}\r\n\r\n/**\r\n * Backdrop state payload\r\n */\r\nexport interface BackdropStatePayload {\r\n isVisible: boolean;\r\n onClick?: 'close' | 'ignore';\r\n}\r\n\r\n/**\r\n * Message data payload\r\n */\r\nexport interface MessageDataPayload {\r\n id: string;\r\n text: string;\r\n sender: 'user' | 'agent' | 'bot';\r\n timestamp: number;\r\n attachments?: Array<{\r\n type: string;\r\n url: string;\r\n name?: string;\r\n }>;\r\n}\r\n\r\n/**\r\n * Configuration update payload\r\n */\r\nexport interface ConfigUpdatePayload {\r\n apiKey?: string;\r\n workspaceId?: string;\r\n position?: {\r\n launcher?: { bottom: string; right: string };\r\n widget?: { bottom: string; right: string };\r\n };\r\n customization?: {\r\n primaryColor?: string;\r\n accentColor?: string;\r\n fontFamily?: string;\r\n };\r\n features?: {\r\n attachments?: boolean;\r\n reactions?: boolean;\r\n typing?: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Theme update payload\r\n */\r\nexport interface ThemeUpdatePayload {\r\n mode: 'light' | 'dark' | 'auto';\r\n primaryColor?: string;\r\n accentColor?: string;\r\n customCSS?: string;\r\n}\r\n\r\n/**\r\n * Authentication payload\r\n */\r\nexport interface AuthPayload {\r\n userId?: string;\r\n email?: string;\r\n name?: string;\r\n avatar?: string;\r\n metadata?: Record<string, any>;\r\n token?: string;\r\n}\r\n\r\n/**\r\n * Error payload\r\n */\r\nexport interface ErrorPayload {\r\n code: string;\r\n message: string;\r\n stack?: string;\r\n context?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Event tracking payload\r\n */\r\nexport interface EventPayload {\r\n name: string;\r\n properties?: Record<string, any>;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * Type guards\r\n */\r\nexport function isBaseMessage(message: any): message is BaseMessage {\r\n return (\r\n typeof message === 'object' &&\r\n message !== null &&\r\n 'type' in message &&\r\n 'origin' in message &&\r\n 'timestamp' in message &&\r\n 'id' in message\r\n );\r\n}\r\n\r\nexport function isPayloadMessage<T = any>(\r\n message: any\r\n): message is PayloadMessage<T> {\r\n return isBaseMessage(message) && 'payload' in message;\r\n}\r\n\r\n/**\r\n * Message creator utilities\r\n */\r\nexport function createMessage(\r\n type: MessageType,\r\n origin: MessageOrigin,\r\n payload?: any\r\n): PayloadMessage {\r\n return {\r\n type,\r\n origin,\r\n timestamp: Date.now(),\r\n id: `${type}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\r\n payload,\r\n };\r\n}\r\n\r\n/**\r\n * Specific message type definitions\r\n */\r\nexport type ReadyMessage = PayloadMessage<{ iframe: string; ready: true }>;\r\nexport type StateUpdateMessage = PayloadMessage<StateUpdatePayload>;\r\nexport type WidgetStateMessage = PayloadMessage<WidgetStatePayload>;\r\nexport type LauncherStateMessage = PayloadMessage<LauncherStatePayload>;\r\nexport type BackdropStateMessage = PayloadMessage<BackdropStatePayload>;\r\nexport type MessageDataMessage = PayloadMessage<MessageDataPayload>;\r\nexport type ConfigUpdateMessage = PayloadMessage<ConfigUpdatePayload>;\r\nexport type ThemeUpdateMessage = PayloadMessage<ThemeUpdatePayload>;\r\nexport type AuthMessage = PayloadMessage<AuthPayload>;\r\nexport type ErrorMessage = PayloadMessage<ErrorPayload>;\r\nexport type EventMessage = PayloadMessage<EventPayload>;\r\n\r\n/**\r\n * Union type for all messages\r\n */\r\nexport type WeldMessage =\r\n | BaseMessage\r\n | ReadyMessage\r\n | StateUpdateMessage\r\n | WidgetStateMessage\r\n | LauncherStateMessage\r\n | BackdropStateMessage\r\n | MessageDataMessage\r\n | ConfigUpdateMessage\r\n | ThemeUpdateMessage\r\n | AuthMessage\r\n | ErrorMessage\r\n | EventMessage;\r\n","/**\r\n * Weld SDK - Security Utilities\r\n * Security validation and origin checking for postMessage communication\r\n */\r\n\r\nimport type { SecurityConfig } from '../types/config';\r\nimport { Logger } from './logger';\r\n\r\n/**\r\n * SecurityManager class\r\n */\r\nexport class SecurityManager {\r\n private config: SecurityConfig;\r\n private logger: Logger;\r\n private allowedOrigins: Set<string>;\r\n\r\n constructor(config: SecurityConfig, logger: Logger) {\r\n this.config = config;\r\n this.logger = logger;\r\n this.allowedOrigins = new Set(config.allowedOrigins || []);\r\n\r\n // Always allow same origin\r\n this.allowedOrigins.add(window.location.origin);\r\n }\r\n\r\n /**\r\n * Validate message origin\r\n */\r\n public isOriginAllowed(origin: string): boolean {\r\n // If no allowed origins specified, only allow same origin\r\n if (this.config.allowedOrigins?.length === 0) {\r\n return origin === window.location.origin;\r\n }\r\n\r\n // Check if origin is in allowed list\r\n if (this.allowedOrigins.has(origin)) {\r\n return true;\r\n }\r\n\r\n // Check for wildcard patterns\r\n for (const allowed of this.allowedOrigins) {\r\n if (this.matchesPattern(origin, allowed)) {\r\n return true;\r\n }\r\n }\r\n\r\n this.logger.warn('Origin not allowed', { origin });\r\n return false;\r\n }\r\n\r\n /**\r\n * Match origin against pattern (supports wildcards)\r\n */\r\n private matchesPattern(origin: string, pattern: string): boolean {\r\n // Exact match\r\n if (origin === pattern) {\r\n return true;\r\n }\r\n\r\n // Wildcard pattern (e.g., \"https://*.example.com\")\r\n if (pattern.includes('*')) {\r\n const regex = new RegExp(\r\n '^' + pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*') + '$'\r\n );\r\n return regex.test(origin);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Validate postMessage event\r\n */\r\n public validateMessageEvent(event: MessageEvent): boolean {\r\n // Check origin\r\n if (!this.isOriginAllowed(event.origin)) {\r\n this.logger.warn('Invalid message origin', { origin: event.origin });\r\n return false;\r\n }\r\n\r\n // Check if message has data\r\n if (!event.data) {\r\n this.logger.warn('Message has no data');\r\n return false;\r\n }\r\n\r\n // Check if message is an object\r\n if (typeof event.data !== 'object') {\r\n this.logger.warn('Message data is not an object');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Sanitize message data\r\n */\r\n public sanitizeMessageData(data: any): any {\r\n if (!this.config.sanitizeInput) {\r\n return data;\r\n }\r\n\r\n // Deep clone to avoid modifying original\r\n const sanitized = JSON.parse(JSON.stringify(data));\r\n\r\n // Recursively sanitize strings\r\n this.sanitizeObject(sanitized);\r\n\r\n return sanitized;\r\n }\r\n\r\n /**\r\n * Recursively sanitize object properties\r\n */\r\n private sanitizeObject(obj: any): void {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return;\r\n }\r\n\r\n for (const key in obj) {\r\n if (typeof obj[key] === 'string') {\r\n obj[key] = this.sanitizeString(obj[key]);\r\n } else if (typeof obj[key] === 'object') {\r\n this.sanitizeObject(obj[key]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sanitize string to prevent XSS\r\n */\r\n private sanitizeString(str: string): string {\r\n const div = document.createElement('div');\r\n div.textContent = str;\r\n return div.innerHTML\r\n .replace(/javascript:/gi, '')\r\n .replace(/on\\w+\\s*=/gi, '');\r\n }\r\n\r\n /**\r\n * Generate secure random ID\r\n */\r\n public generateSecureId(): string {\r\n const array = new Uint8Array(16);\r\n crypto.getRandomValues(array);\r\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');\r\n }\r\n\r\n /**\r\n * Validate iframe source\r\n */\r\n public isValidIframeSource(src: string): boolean {\r\n try {\r\n const url = new URL(src, window.location.origin);\r\n\r\n // Check if URL is from allowed origin\r\n if (!this.isOriginAllowed(url.origin)) {\r\n this.logger.warn('Invalid iframe source origin', { src });\r\n return false;\r\n }\r\n\r\n // Prevent javascript: protocol\r\n if (url.protocol === 'javascript:') {\r\n this.logger.warn('Javascript protocol not allowed in iframe source');\r\n return false;\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n this.logger.warn('Invalid iframe source URL', { src, error });\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Create Content Security Policy\r\n */\r\n public createCSP(): string {\r\n const origins = Array.from(this.allowedOrigins).join(' ');\r\n\r\n return [\r\n `default-src 'self' ${origins}`,\r\n `script-src 'self' 'unsafe-inline' ${origins}`,\r\n `style-src 'self' 'unsafe-inline' ${origins}`,\r\n `img-src 'self' data: https: ${origins}`,\r\n `font-src 'self' data: ${origins}`,\r\n `connect-src 'self' ${origins}`,\r\n `frame-src 'self' ${origins}`,\r\n `media-src 'self' ${origins}`,\r\n ].join('; ');\r\n }\r\n\r\n /**\r\n * Add allowed origin\r\n */\r\n public addAllowedOrigin(origin: string): void {\r\n this.allowedOrigins.add(origin);\r\n this.logger.debug('Added allowed origin', { origin });\r\n }\r\n\r\n /**\r\n * Remove allowed origin\r\n */\r\n public removeAllowedOrigin(origin: string): void {\r\n this.allowedOrigins.delete(origin);\r\n this.logger.debug('Removed allowed origin', { origin });\r\n }\r\n\r\n /**\r\n * Get all allowed origins\r\n */\r\n public getAllowedOrigins(): string[] {\r\n return Array.from(this.allowedOrigins);\r\n }\r\n}\r\n\r\n/**\r\n * Rate limiting utility\r\n */\r\nexport class RateLimiter {\r\n private requests: Map<string, number[]> = new Map();\r\n private maxRequests: number;\r\n private windowMs: number;\r\n\r\n constructor(maxRequests: number = 100, windowMs: number = 60000) {\r\n this.maxRequests = maxRequests;\r\n this.windowMs = windowMs;\r\n }\r\n\r\n /**\r\n * Check if request is allowed\r\n */\r\n public isAllowed(key: string): boolean {\r\n const now = Date.now();\r\n const requests = this.requests.get(key) || [];\r\n\r\n // Remove old requests outside window\r\n const validRequests = requests.filter((time) => now - time < this.windowMs);\r\n\r\n // Check if limit exceeded\r\n if (validRequests.length >= this.maxRequests) {\r\n return false;\r\n }\r\n\r\n // Add current request\r\n validRequests.push(now);\r\n this.requests.set(key, validRequests);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Reset rate limit for key\r\n */\r\n public reset(key: string): void {\r\n this.requests.delete(key);\r\n }\r\n\r\n /**\r\n * Clear all rate limits\r\n */\r\n public clearAll(): void {\r\n this.requests.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Token validation utilities\r\n */\r\nexport class TokenValidator {\r\n private static readonly TOKEN_PATTERN = /^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.?[A-Za-z0-9-_.+/=]*$/;\r\n\r\n /**\r\n * Check if string looks like a JWT token\r\n */\r\n public static isJWT(token: string): boolean {\r\n return this.TOKEN_PATTERN.test(token);\r\n }\r\n\r\n /**\r\n * Decode JWT payload (without verification)\r\n */\r\n public static decodeJWT(token: string): any | null {\r\n try {\r\n const parts = token.split('.');\r\n if (parts.length !== 3) {\r\n return null;\r\n }\r\n\r\n const payload = parts[1];\r\n const decoded = atob(payload.replace(/-/g, '+').replace(/_/g, '/'));\r\n return JSON.parse(decoded);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Check if JWT is expired\r\n */\r\n public static isExpired(token: string): boolean {\r\n const payload = this.decodeJWT(token);\r\n if (!payload || !payload.exp) {\r\n return true;\r\n }\r\n\r\n return Date.now() >= payload.exp * 1000;\r\n }\r\n}\r\n","/**\r\n * Weld SDK - Message Broker\r\n * Handles secure postMessage communication between parent and iframes\r\n */\r\n\r\nimport type {\r\n WeldMessage,\r\n MessageType,\r\n PayloadMessage,\r\n} from '../types/messages';\r\nimport {\r\n MessageOrigin,\r\n isBaseMessage,\r\n isPayloadMessage,\r\n createMessage,\r\n} from '../types/messages';\r\nimport type { ResolvedConfig } from '../types/config';\r\nimport { Logger } from '../utils/logger';\r\nimport { SecurityManager, RateLimiter } from '../utils/security';\r\nimport { IframeManager, IframeType } from './IframeManager';\r\n\r\n/**\r\n * Message handler callback\r\n */\r\nexport type MessageHandler<T = any> = (payload: T, message: PayloadMessage<T>) => void;\r\n\r\n/**\r\n * Message subscription\r\n */\r\ninterface MessageSubscription {\r\n id: string;\r\n type: MessageType | '*';\r\n origin?: MessageOrigin;\r\n handler: MessageHandler;\r\n}\r\n\r\n/**\r\n * MessageBroker class\r\n * Central hub for all postMessage communication\r\n */\r\nexport class MessageBroker {\r\n private config: ResolvedConfig;\r\n private logger: Logger;\r\n private security: SecurityManager;\r\n private iframeManager: IframeManager;\r\n private subscriptions: Map<string, MessageSubscription> = new Map();\r\n private messageQueue: PayloadMessage[] = [];\r\n private isReady = false;\r\n private rateLimiter: RateLimiter;\r\n private responseHandlers: Map<string, (message: WeldMessage) => void> = new Map();\r\n\r\n constructor(\r\n config: ResolvedConfig,\r\n iframeManager: IframeManager,\r\n logger: Logger\r\n ) {\r\n this.config = config;\r\n this.logger = logger.child('[MessageBroker]');\r\n this.iframeManager = iframeManager;\r\n this.security = new SecurityManager(config.security, this.logger);\r\n this.rateLimiter = new RateLimiter(100, 60000); // 100 messages per minute\r\n\r\n this.setupMessageListener();\r\n this.logger.debug('MessageBroker initialized');\r\n }\r\n\r\n /**\r\n * Setup global message listener\r\n */\r\n private setupMessageListener(): void {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n this.logger.debug('Message listener setup');\r\n }\r\n\r\n /**\r\n * Handle incoming postMessage\r\n */\r\n private handleMessage(event: MessageEvent): void {\r\n // Validate message event\r\n if (!this.security.validateMessageEvent(event)) {\r\n return;\r\n }\r\n\r\n // Validate message structure\r\n if (!isBaseMessage(event.data)) {\r\n this.logger.warn('Invalid message structure', event.data);\r\n return;\r\n }\r\n\r\n const message = event.data as WeldMessage;\r\n\r\n // Rate limiting\r\n if (!this.rateLimiter.isAllowed(message.origin)) {\r\n this.logger.warn('Rate limit exceeded', { origin: message.origin });\r\n return;\r\n }\r\n\r\n // Sanitize message if enabled\r\n const sanitized = this.config.security.sanitizeInput\r\n ? this.security.sanitizeMessageData(message)\r\n : message;\r\n\r\n this.logger.debug('Message received', {\r\n type: sanitized.type,\r\n origin: sanitized.origin,\r\n id: sanitized.id,\r\n });\r\n\r\n // Check for response handlers\r\n if (this.responseHandlers.has(sanitized.id)) {\r\n const handler = this.responseHandlers.get(sanitized.id);\r\n handler?.(sanitized);\r\n this.responseHandlers.delete(sanitized.id);\r\n return;\r\n }\r\n\r\n // Dispatch to subscribers\r\n this.dispatchMessage(sanitized);\r\n }\r\n\r\n /**\r\n * Dispatch message to subscribers\r\n */\r\n private dispatchMessage(message: WeldMessage): void {\r\n const subscriptions = Array.from(this.subscriptions.values());\r\n\r\n for (const subscription of subscriptions) {\r\n // Check if type matches\r\n const typeMatches =\r\n subscription.type === '*' || subscription.type === message.type;\r\n\r\n // Check if origin matches (if specified)\r\n const originMatches =\r\n !subscription.origin || subscription.origin === message.origin;\r\n\r\n if (typeMatches && originMatches) {\r\n try {\r\n if (isPayloadMessage(message)) {\r\n subscription.handler(message.payload, message);\r\n } else {\r\n subscription.handler(undefined, message as unknown as PayloadMessage);\r\n }\r\n } catch (error) {\r\n this.logger.error('Error in message handler', error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Subscribe to messages\r\n */\r\n public subscribe<T = any>(\r\n type: MessageType | '*',\r\n handler: MessageHandler<T>,\r\n origin?: MessageOrigin\r\n ): string {\r\n const id = this.security.generateSecureId();\r\n\r\n this.subscriptions.set(id, {\r\n id,\r\n type,\r\n origin,\r\n handler,\r\n });\r\n\r\n this.logger.debug('Subscribed to messages', { type, origin, id });\r\n return id;\r\n }\r\n\r\n /**\r\n * Unsubscribe from messages\r\n */\r\n public unsubscribe(subscriptionId: string): void {\r\n if (this.subscriptions.delete(subscriptionId)) {\r\n this.logger.debug('Unsubscribed from messages', { id: subscriptionId });\r\n }\r\n }\r\n\r\n /**\r\n * Send message to iframe\r\n */\r\n public sendToIframe(\r\n iframeType: IframeType,\r\n type: MessageType,\r\n payload?: any\r\n ): void {\r\n const iframe = this.iframeManager.getIframe(iframeType);\r\n\r\n if (!iframe) {\r\n this.logger.warn('Iframe not found', { iframeType });\r\n return;\r\n }\r\n\r\n if (!iframe.ready && type !== 'weld:init' as MessageType) {\r\n // Queue message if iframe not ready\r\n const message = createMessage(type, MessageOrigin.PARENT, payload);\r\n this.messageQueue.push(message);\r\n this.logger.debug('Message queued (iframe not ready)', {\r\n iframeType,\r\n type,\r\n });\r\n return;\r\n }\r\n\r\n const message = createMessage(type, MessageOrigin.PARENT, payload);\r\n this.postMessage(iframe.element, message);\r\n }\r\n\r\n /**\r\n * Send message to all iframes\r\n */\r\n public broadcast(type: MessageType, payload?: any): void {\r\n const message = createMessage(type, MessageOrigin.PARENT, payload);\r\n\r\n const launcherIframe = this.iframeManager.getIframe(IframeType.LAUNCHER);\r\n const widgetIframe = this.iframeManager.getIframe(IframeType.WIDGET);\r\n\r\n if (launcherIframe && launcherIframe.ready) {\r\n this.postMessage(launcherIframe.element, message);\r\n }\r\n if (widgetIframe && widgetIframe.ready) {\r\n this.postMessage(widgetIframe.element, message);\r\n }\r\n\r\n this.logger.debug('Message broadcast', { type });\r\n }\r\n\r\n /**\r\n * Send message and wait for response\r\n */\r\n public async sendAndWaitForResponse<T = any>(\r\n iframeType: IframeType,\r\n type: MessageType,\r\n payload?: any,\r\n timeout = 5000\r\n ): Promise<T> {\r\n return new Promise((resolve, reject) => {\r\n const message = createMessage(type, MessageOrigin.PARENT, payload);\r\n\r\n // Setup response handler\r\n const timeoutId = setTimeout(() => {\r\n this.responseHandlers.delete(message.id);\r\n reject(new Error('Message response timeout'));\r\n }, timeout);\r\n\r\n this.responseHandlers.set(message.id, (response: WeldMessage) => {\r\n clearTimeout(timeoutId);\r\n if (isPayloadMessage(response)) {\r\n resolve(response.payload as T);\r\n } else {\r\n resolve(undefined as T);\r\n }\r\n });\r\n\r\n // Send message\r\n const iframe = this.iframeManager.getIframe(iframeType);\r\n if (!iframe) {\r\n reject(new Error('Iframe not found'));\r\n return;\r\n }\r\n\r\n this.postMessage(iframe.element, message);\r\n });\r\n }\r\n\r\n /**\r\n * Post message to iframe\r\n */\r\n private postMessage(iframe: HTMLIFrameElement, message: WeldMessage): void {\r\n if (!iframe.contentWindow) {\r\n this.logger.warn('Iframe contentWindow not available');\r\n return;\r\n }\r\n\r\n try {\r\n iframe.contentWindow.postMessage(message, '*');\r\n this.logger.debug('Message sent', {\r\n type: message.type,\r\n id: message.id,\r\n });\r\n } catch (error) {\r\n this.logger.error('Failed to post message', error);\r\n }\r\n }\r\n\r\n /**\r\n * Mark iframe as ready and flush queued messages\r\n */\r\n public setIframeReady(iframeType: IframeType): void {\r\n this.iframeManager.setIframeReady(iframeType);\r\n\r\n // Flush queued messages for this iframe\r\n this.flushMessageQueue(iframeType);\r\n\r\n // Check if all iframes ready\r\n if (this.iframeManager.areAllIframesReady()) {\r\n this.isReady = true;\r\n this.logger.info('All iframes ready');\r\n }\r\n }\r\n\r\n /**\r\n * Flush queued messages to iframe\r\n */\r\n private flushMessageQueue(iframeType: IframeType): void {\r\n const iframe = this.iframeManager.getIframe(iframeType);\r\n if (!iframe) return;\r\n\r\n const queuedMessages = this.messageQueue.splice(0);\r\n\r\n for (const message of queuedMessages) {\r\n this.postMessage(iframe.element, message);\r\n }\r\n\r\n if (queuedMessages.length > 0) {\r\n this.logger.debug('Flushed queued messages', {\r\n count: queuedMessages.length,\r\n iframeType,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Check if broker is ready\r\n */\r\n public isMessageBrokerReady(): boolean {\r\n return this.isReady;\r\n }\r\n\r\n /**\r\n * Get queued message count\r\n */\r\n public getQueuedMessageCount(): number {\r\n return this.messageQueue.length;\r\n }\r\n\r\n /**\r\n * Clear message queue\r\n */\r\n public clearMessageQueue(): void {\r\n this.messageQueue = [];\r\n this.logger.debug('Message queue cleared');\r\n }\r\n\r\n /**\r\n * Get active subscription count\r\n */\r\n public getSubscriptionCount(): number {\r\n return this.subscriptions.size;\r\n }\r\n\r\n /**\r\n * Destroy broker and cleanup\r\n */\r\n public destroy(): void {\r\n this.logger.debug('Destroying message broker');\r\n\r\n // Remove event listener\r\n window.removeEventListener('message', this.handleMessage.bind(this));\r\n\r\n // Clear subscriptions\r\n this.subscriptions.clear();\r\n\r\n // Clear message queue\r\n this.messageQueue = [];\r\n\r\n // Clear response handlers\r\n this.responseHandlers.clear();\r\n\r\n // Reset rate limiter\r\n this.rateLimiter.clearAll();\r\n\r\n this.isReady = false;\r\n this.logger.info('MessageBroker destroyed');\r\n }\r\n}\r\n","/**\r\n * Weld SDK - State Types\r\n * Type definitions for state management across iframes\r\n */\r\n\r\n/**\r\n * Widget visibility state\r\n */\r\nexport enum WidgetVisibility {\r\n HIDDEN = 'hidden',\r\n VISIBLE = 'visible',\r\n MINIMIZED = 'minimized',\r\n}\r\n\r\n/**\r\n * Widget view types\r\n */\r\nexport enum WidgetView {\r\n HOME = 'home',\r\n CONVERSATION = 'conversation',\r\n CONVERSATIONS = 'conversations',\r\n HELP = 'help',\r\n SETTINGS = 'settings',\r\n SEARCH = 'search',\r\n}\r\n\r\n/**\r\n * Connection status\r\n */\r\nexport enum ConnectionStatus {\r\n DISCONNECTED = 'disconnected',\r\n CONNECTING = 'connecting',\r\n CONNECTED = 'connected',\r\n RECONNECTING = 'reconnecting',\r\n ERROR = 'error',\r\n}\r\n\r\n/**\r\n * Message status\r\n */\r\nexport enum MessageStatus {\r\n SENDING = 'sending',\r\n SENT = 'sent',\r\n DELIVERED = 'delivered',\r\n READ = 'read',\r\n FAILED = 'failed',\r\n}\r\n\r\n/**\r\n * User state\r\n */\r\nexport interface UserState {\r\n id?: string;\r\n email?: string;\r\n name?: string;\r\n avatar?: string;\r\n metadata?: Record<string, any>;\r\n isAuthenticated: boolean;\r\n isAnonymous: boolean;\r\n}\r\n\r\n/**\r\n * Conversation state\r\n */\r\nexport interface ConversationState {\r\n id?: string;\r\n messages: Message[];\r\n participants: Participant[];\r\n unreadCount: number;\r\n lastMessageAt?: number;\r\n isTyping: boolean;\r\n typingUsers: string[];\r\n}\r\n\r\n/**\r\n * Message interface\r\n */\r\nexport interface Message {\r\n id: string;\r\n conversationId: string;\r\n text: string;\r\n sender: {\r\n id: string;\r\n name: string;\r\n avatar?: string;\r\n type: 'user' | 'agent' | 'bot';\r\n };\r\n status: MessageStatus;\r\n timestamp: number;\r\n createdAt: number;\r\n updatedAt?: number;\r\n attachments?: Attachment[];\r\n reactions?: Reaction[];\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * Attachment interface\r\n */\r\nexport interface Attachment {\r\n id: string;\r\n type: 'image' | 'file' | 'video' | 'audio';\r\n url: string;\r\n name: string;\r\n size: number;\r\n mimeType: string;\r\n thumbnail?: string;\r\n}\r\n\r\n/**\r\n * Reaction interface\r\n */\r\nexport interface Reaction {\r\n emoji: string;\r\n count: number;\r\n users: string[];\r\n}\r\n\r\n/**\r\n * Participant interface\r\n */\r\nexport interface Participant {\r\n id: string;\r\n name: string;\r\n avatar?: string;\r\n type: 'user' | 'agent' | 'bot';\r\n isOnline: boolean;\r\n lastSeenAt?: number;\r\n}\r\n\r\n/**\r\n * Widget state\r\n */\r\nexport interface WidgetState {\r\n visibility: WidgetVisibility;\r\n view: WidgetView;\r\n isOpen: boolean;\r\n isMinimized: boolean;\r\n dimensions: {\r\n width: string;\r\n height: string;\r\n };\r\n position: {\r\n bottom: string;\r\n right: string;\r\n };\r\n}\r\n\r\n/**\r\n * Launcher state\r\n */\r\nexport interface LauncherState {\r\n isVisible: boolean;\r\n badge: {\r\n count: number;\r\n text?: string;\r\n show: boolean;\r\n };\r\n customColor?: string;\r\n tooltip?: string;\r\n}\r\n\r\n/**\r\n * Backdrop state\r\n */\r\nexport interface BackdropState {\r\n isVisible: boolean;\r\n closeOnClick: boolean;\r\n opacity: number;\r\n}\r\n\r\n/**\r\n * Mobile state\r\n */\r\nexport interface MobileState {\r\n isFullScreen: boolean;\r\n isScrollLocked: boolean;\r\n keyboardHeight: number;\r\n orientation: 'portrait' | 'landscape';\r\n safeAreaInsets: {\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n };\r\n}\r\n\r\n/**\r\n * Network state\r\n */\r\nexport interface NetworkState {\r\n status: ConnectionStatus;\r\n lastConnected?: number;\r\n retryCount: number;\r\n latency?: number;\r\n}\r\n\r\n/**\r\n * UI state\r\n */\r\nexport interface UIState {\r\n theme: 'light' | 'dark' | 'auto';\r\n locale: string;\r\n isLoading: boolean;\r\n error?: {\r\n code: string;\r\n message: string;\r\n recoverable: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Main application state\r\n */\r\nexport interface WeldState {\r\n user: UserState;\r\n conversation: ConversationState;\r\n widget: WidgetState;\r\n launcher: LauncherState;\r\n backdrop: BackdropState;\r\n mobile: MobileState;\r\n network: NetworkState;\r\n ui: UIState;\r\n initialized: boolean;\r\n lastUpdated: number;\r\n}\r\n\r\n/**\r\n * State update action\r\n */\r\nexport interface StateAction<T = any> {\r\n type: string;\r\n path: keyof WeldState | string;\r\n payload: T;\r\n merge?: boolean;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * State listener callback\r\n */\r\nexport type StateListener<T = any> = (newState: T, oldState: T) => void;\r\n\r\n/**\r\n * State subscription\r\n */\r\nexport interface StateSubscription {\r\n id: string;\r\n path: string;\r\n listener: StateListener;\r\n immediate?: boolean;\r\n}\r\n\r\n/**\r\n * Initial state factory\r\n */\r\nexport function createInitialState(): WeldState {\r\n return {\r\n user: {\r\n isAuthenticated: false,\r\n isAnonymous: true,\r\n },\r\n conversation: {\r\n messages: [],\r\n participants: [],\r\n unreadCount: 0,\r\n isTyping: false,\r\n typingUsers: [],\r\n },\r\n widget: {\r\n visibility: WidgetVisibility.HIDDEN,\r\n view: WidgetView.HOME,\r\n isOpen: false,\r\n isMinimized: false,\r\n dimensions: {\r\n width: '400px',\r\n height: 'min(680px, 88vh)',\r\n },\r\n position: {\r\n bottom: '24px',\r\n right: '24px',\r\n },\r\n },\r\n launcher: {\r\n isVisible: true,\r\n badge: {\r\n count: 0,\r\n show: false,\r\n },\r\n },\r\n backdrop: {\r\n isVisible: false,\r\n closeOnClick: true,\r\n opacity: 0,\r\n },\r\n mobile: {\r\n isFullScreen: false,\r\n isScrollLocked: false,\r\n keyboardHeight: 0,\r\n orientation: 'portrait',\r\n safeAreaInsets: {\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n left: 0,\r\n },\r\n },\r\n network: {\r\n status: ConnectionStatus.DISCONNECTED,\r\n retryCount: 0,\r\n },\r\n ui: {\r\n theme: 'auto',\r\n locale: 'en',\r\n isLoading: false,\r\n },\r\n initialized: false,\r\n lastUpdated: Date.now(),\r\n };\r\n}\r\n\r\n/**\r\n * State path utility\r\n */\r\nexport function getStateValue<T = any>(state: WeldState, path: string): T {\r\n const keys = path.split('.');\r\n let value: any = state;\r\n\r\n for (const key of keys) {\r\n if (value && typeof value === 'object' && key in value) {\r\n value = value[key];\r\n } else {\r\n return undefined as T;\r\n }\r\n }\r\n\r\n return value as T;\r\n}\r\n\r\n/**\r\n * State update utility\r\n */\r\nexport function setStateValue(\r\n state: WeldState,\r\n path: string,\r\n value: any,\r\n merge = false\r\n): WeldState {\r\n const keys = path.split('.');\r\n const newState = JSON.parse(JSON.stringify(state));\r\n let current: any = newState;\r\n\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n if (!(key in current)) {\r\n current[key] = {};\r\n }\r\n current = current[key];\r\n }\r\n\r\n const lastKey = keys[keys.length - 1];\r\n\r\n if (merge && typeof current[lastKey] === 'object' && typeof value === 'object') {\r\n current[lastKey] = { ...current[lastKey], ...value };\r\n } else {\r\n current[lastKey] = value;\r\n }\r\n\r\n newState.lastUpdated = Date.now();\r\n return newState;\r\n}\r\n","/**\r\n * Weld SDK - Validation Utilities\r\n * Input validation and sanitization functions\r\n */\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport function isValidEmail(email: string): boolean {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(email);\r\n}\r\n\r\n/**\r\n * Validate URL format\r\n */\r\nexport function isValidUrl(url: string): boolean {\r\n try {\r\n new URL(url);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Validate API key format\r\n */\r\nexport function isValidApiKey(apiKey: string): boolean {\r\n return typeof apiKey === 'string' && apiKey.length > 0 && apiKey.length <= 256;\r\n}\r\n\r\n/**\r\n * Validate workspace ID format\r\n */\r\nexport function isValidWorkspaceId(workspaceId: string): boolean {\r\n return typeof workspaceId === 'string' && workspaceId.length > 0 && workspaceId.length <= 128;\r\n}\r\n\r\n/**\r\n * Validate color format (hex, rgb, rgba)\r\n */\r\nexport function isValidColor(color: string): boolean {\r\n const hexRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\r\n const rgbRegex = /^rgb\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*\\)$/;\r\n const rgbaRegex = /^rgba\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*(0|1|0?\\.\\d+)\\s*\\)$/;\r\n\r\n return hexRegex.test(color) || rgbRegex.test(color) || rgbaRegex.test(color);\r\n}\r\n\r\n/**\r\n * Validate message text\r\n */\r\nexport function isValidMessageText(text: string): boolean {\r\n return typeof text === 'string' && text.trim().length > 0 && text.length <= 10000;\r\n}\r\n\r\n/**\r\n * Sanitize HTML to prevent XSS\r\n */\r\nexport function sanitizeHtml(html: string): string {\r\n const div = document.createElement('div');\r\n div.textContent = html;\r\n return div.innerHTML;\r\n}\r\n\r\n/**\r\n * Sanitize user input\r\n */\r\nexport function sanitizeInput(input: string): string {\r\n if (typeof input !== 'string') {\r\n return '';\r\n }\r\n\r\n return input\r\n .trim()\r\n .replace(/[<>]/g, '') // Remove angle brackets\r\n .replace(/javascript:/gi, '') // Remove javascript: protocol\r\n .replace(/on\\w+\\s*=/gi, ''); // Remove event handlers\r\n}\r\n\r\n/**\r\n * Validate object has required properties\r\n */\r\nexport function hasRequiredProperties<T extends Record<string, any>>(\r\n obj: any,\r\n properties: (keyof T)[]\r\n): obj is T {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n\r\n return properties.every((prop) => prop in obj);\r\n}\r\n\r\n/**\r\n * Validate string length\r\n */\r\nexport function isValidLength(\r\n str: string,\r\n options: { min?: number; max?: number }\r\n): boolean {\r\n const length = str.length;\r\n\r\n if (options.min !== undefined && length < options.min) {\r\n return false;\r\n }\r\n\r\n if (options.max !== undefined && length > options.max) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Validate number range\r\n */\r\nexport function isInRange(\r\n num: number,\r\n options: { min?: number; max?: number }\r\n): boolean {\r\n if (options.min !== undefined && num < options.min) {\r\n return false;\r\n }\r\n\r\n if (options.max !== undefined && num > options.max) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Validate array length\r\n */\r\nexport function isValidArrayLength<T>(\r\n arr: T[],\r\n options: { min?: number; max?: number }\r\n): boolean {\r\n if (!Array.isArray(arr)) {\r\n return false;\r\n }\r\n\r\n return isInRange(arr.length, options);\r\n}\r\n\r\n/**\r\n * Deep clone object (safe for JSON-serializable objects)\r\n */\r\nexport function deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return obj.map((item) => deepClone(item)) as any;\r\n }\r\n\r\n if (obj instanceof Object) {\r\n const cloned: any = {};\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n cloned[key] = deepClone(obj[key]);\r\n }\r\n }\r\n return cloned;\r\n }\r\n\r\n return obj;\r\n}\r\n\r\n/**\r\n * Check if value is a plain object\r\n */\r\nexport function isPlainObject(value: any): value is Record<string, any> {\r\n if (typeof value !== 'object' || value === null) {\r\n return false;\r\n }\r\n\r\n const proto = Object.getPrototypeOf(value);\r\n return proto === null || proto === Object.prototype;\r\n}\r\n\r\n/**\r\n * Merge objects deeply\r\n */\r\nexport function deepMerge<T extends Record<string, any>>(\r\n target: T,\r\n ...sources: Partial<T>[]\r\n): T {\r\n if (!sources.length) return target;\r\n\r\n const source = sources.shift();\r\n if (!source) return target;\r\n\r\n if (isPlainObject(target) && isPlainObject(source)) {\r\n for (const key in source) {\r\n if (isPlainObject(source[key])) {\r\n if (!target[key]) {\r\n Object.assign(target, { [key]: {} });\r\n }\r\n deepMerge(target[key], source[key] as any);\r\n } else {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return deepMerge(target, ...sources);\r\n}\r\n\r\n/**\r\n * Validate file type\r\n */\r\nexport function isValidFileType(file: File, allowedTypes: string[]): boolean {\r\n return allowedTypes.some((type) => {\r\n if (type.endsWith('/*')) {\r\n const category = type.split('/')[0];\r\n return file.type.startsWith(category + '/');\r\n }\r\n return file.type === type;\r\n });\r\n}\r\n\r\n/**\r\n * Validate file size\r\n */\r\nexport function isValidFileSize(file: File, maxSizeBytes: number): boolean {\r\n return file.size <= maxSizeBytes;\r\n}\r\n\r\n/**\r\n * Format file size for display\r\n */\r\nexport function formatFileSize(bytes: number): string {\r\n if (bytes === 0) return '0 Bytes';\r\n\r\n const k = 1024;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\r\n return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];\r\n}\r\n","/**\r\n * Weld SDK - State Coordinator\r\n * Manages and synchronizes state across iframes\r\n */\r\n\r\nimport type {\r\n WeldState,\r\n StateAction,\r\n StateListener,\r\n StateSubscription,\r\n} from '../types/state';\r\nimport {\r\n createInitialState,\r\n getStateValue,\r\n setStateValue,\r\n} from '../types/state';\r\nimport type { MessageType } from '../types/messages';\r\nimport { Logger } from '../utils/logger';\r\nimport { MessageBroker } from './MessageBroker';\r\nimport { deepClone } from '../utils/validation';\r\n\r\n/**\r\n * StateCoordinator class\r\n * Central state management for multi-iframe architecture\r\n */\r\nexport class StateCoordinator {\r\n private state: WeldState;\r\n private logger: Logger;\r\n private messageBroker: MessageBroker;\r\n private subscriptions: Map<string, StateSubscription> = new Map();\r\n private stateHistory: StateAction[] = [];\r\n private maxHistorySize = 50;\r\n\r\n constructor(messageBroker: MessageBroker, logger: Logger) {\r\n this.messageBroker = messageBroker;\r\n this.logger = logger.child('[StateCoordinator]');\r\n this.state = createInitialState();\r\n\r\n this.setupMessageHandlers();\r\n this.logger.debug('StateCoordinator initialized');\r\n }\r\n\r\n /**\r\n * Setup message handlers for state updates\r\n */\r\n private setupMessageHandlers(): void {\r\n // Listen for state update requests from iframes\r\n this.messageBroker.subscribe(\r\n 'weld:state:update' as MessageType,\r\n this.handleStateUpdate.bind(this)\r\n );\r\n\r\n // Listen for state request messages\r\n this.messageBroker.subscribe(\r\n 'weld:state:request' as MessageType,\r\n this.handleStateRequest.bind(this)\r\n );\r\n\r\n this.logger.debug('Message handlers setup');\r\n }\r\n\r\n /**\r\n * Handle state update from iframe\r\n */\r\n private handleStateUpdate(payload: any): void {\r\n const { path, value, merge } = payload;\r\n\r\n if (!path) {\r\n this.logger.warn('State update missing path', payload);\r\n return;\r\n }\r\n\r\n this.updateState(path, value, merge);\r\n }\r\n\r\n /**\r\n * Handle state request from iframe\r\n */\r\n private handleStateRequest(payload: any): void {\r\n const { path } = payload;\r\n\r\n if (path) {\r\n const value = getStateValue(this.state, path);\r\n this.messageBroker.broadcast('weld:state:response' as MessageType, {\r\n path,\r\n value,\r\n });\r\n } else {\r\n // Send entire state\r\n this.messageBroker.broadcast('weld:state:response' as MessageType, {\r\n state: this.state,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Get current state\r\n */\r\n public getState(): WeldState {\r\n return deepClone(this.state);\r\n }\r\n\r\n /**\r\n * Get state value by path\r\n */\r\n public getValue<T = any>(path: string): T {\r\n return getStateValue(this.state, path);\r\n }\r\n\r\n /**\r\n * Update state\r\n */\r\n public updateState(path: string, value: any, merge = false): void {\r\n const oldState = deepClone(this.state);\r\n this.state = setStateValue(this.state, path, value, merge);\r\n\r\n // Create state action\r\n const action: StateAction = {\r\n type: 'UPDATE',\r\n path,\r\n payload: value,\r\n merge,\r\n timestamp: Date.now(),\r\n };\r\n\r\n // Add to history\r\n this.addToHistory(action);\r\n\r\n // Notify subscribers\r\n this.notifySubscribers(path, value, getStateValue(oldState, path));\r\n\r\n // Broadcast to iframes\r\n this.messageBroker.broadcast('weld:state:update' as MessageType, {\r\n path,\r\n value,\r\n merge,\r\n });\r\n\r\n this.logger.debug('State updated', { path, merge });\r\n }\r\n\r\n /**\r\n * Batch update multiple state paths\r\n */\r\n public batchUpdate(updates: Array<{ path: string; value: any; merge?: boolean }>): void {\r\n const oldState = deepClone(this.state);\r\n\r\n for (const update of updates) {\r\n this.state = setStateValue(\r\n this.state,\r\n update.path,\r\n update.value,\r\n update.merge\r\n );\r\n }\r\n\r\n // Notify subscribers for each update\r\n for (const update of updates) {\r\n this.notifySubscribers(\r\n update.path,\r\n getStateValue(this.state, update.path),\r\n getStateValue(oldState, update.path)\r\n );\r\n }\r\n\r\n // Broadcast all updates\r\n this.messageBroker.broadcast('weld:state:update' as MessageType, {\r\n batch: updates,\r\n });\r\n\r\n this.logger.debug('Batch state update', { count: updates.length });\r\n }\r\n\r\n /**\r\n * Reset state to initial\r\n */\r\n public resetState(): void {\r\n const oldState = this.state;\r\n this.state = createInitialState();\r\n\r\n // Notify all subscribers\r\n for (const [_id, subscription] of this.subscriptions) {\r\n const oldValue = getStateValue(oldState, subscription.path);\r\n const newValue = getStateValue(this.state, subscription.path);\r\n subscription.listener(newValue, oldValue);\r\n }\r\n\r\n // Broadcast reset\r\n this.messageBroker.broadcast('weld:state:update' as MessageType, {\r\n reset: true,\r\n state: this.state,\r\n });\r\n\r\n this.logger.debug('State reset');\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n */\r\n public subscribe<T = any>(\r\n path: string,\r\n listener: StateListener<T>,\r\n immediate = false\r\n ): string {\r\n const id = `sub_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n this.subscriptions.set(id, {\r\n id,\r\n path,\r\n listener,\r\n immediate,\r\n });\r\n\r\n // Call listener immediately if requested\r\n if (immediate) {\r\n const value = getStateValue(this.state, path);\r\n listener(value, value);\r\n }\r\n\r\n this.logger.debug('State subscription added', { id, path });\r\n return id;\r\n }\r\n\r\n /**\r\n * Unsubscribe from state changes\r\n */\r\n public unsubscribe(subscriptionId: string): void {\r\n if (this.subscriptions.delete(subscriptionId)) {\r\n this.logger.debug('State subscription removed', { id: subscriptionId });\r\n }\r\n }\r\n\r\n /**\r\n * Notify subscribers of state change\r\n */\r\n private notifySubscribers(path: string, newValue: any, oldValue: any): void {\r\n const subscriptions = Array.from(this.subscriptions.values());\r\n\r\n for (const subscription of subscriptions) {\r\n // Exact path match\r\n if (subscription.path === path) {\r\n try {\r\n subscription.listener(newValue, oldValue);\r\n } catch (error) {\r\n this.logger.error('Error in state listener', error);\r\n }\r\n continue;\r\n }\r\n\r\n // Parent path match (e.g., subscriber to \"user\" gets notified for \"user.name\")\r\n if (path.startsWith(subscription.path + '.')) {\r\n const subValue = getStateValue(this.state, subscription.path);\r\n try {\r\n subscription.listener(subValue, oldValue);\r\n } catch (error) {\r\n this.logger.error('Error in state listener', error);\r\n }\r\n continue;\r\n }\r\n\r\n // Child path match (e.g., subscriber to \"user.name\" gets notified for \"user\")\r\n if (subscription.path.startsWith(path + '.')) {\r\n const subValue = getStateValue(this.state, subscription.path);\r\n try {\r\n subscription.listener(subValue, undefined);\r\n } catch (error) {\r\n this.logger.error('Error in state listener', error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add action to history\r\n */\r\n private addToHistory(action: StateAction): void {\r\n this.stateHistory.push(action);\r\n\r\n // Trim history if too large\r\n if (this.stateHistory.length > this.maxHistorySize) {\r\n this.stateHistory.shift();\r\n }\r\n }\r\n\r\n /**\r\n * Get state history\r\n */\r\n public getHistory(): StateAction[] {\r\n return [...this.stateHistory];\r\n }\r\n\r\n /**\r\n * Clear state history\r\n */\r\n public clearHistory(): void {\r\n this.stateHistory = [];\r\n this.logger.debug('State history cleared');\r\n }\r\n\r\n /**\r\n * Get snapshot of state at specific time\r\n */\r\n public getSnapshot(timestamp: number): WeldState | null {\r\n // Find all actions before timestamp\r\n const actions = this.stateHistory.filter((a) => a.timestamp <= timestamp);\r\n\r\n if (actions.length === 0) {\r\n return null;\r\n }\r\n\r\n // Replay actions to reconstruct state\r\n let state = createInitialState();\r\n for (const action of actions) {\r\n state = setStateValue(state, action.path, action.payload, action.merge);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n /**\r\n * Widget-specific state helpers\r\n */\r\n public openWidget(): void {\r\n this.batchUpdate([\r\n { path: 'widget.isOpen', value: true },\r\n { path: 'widget.visibility', value: 'visible' },\r\n { path: 'launcher.isVisible', value: false },\r\n { path: 'backdrop.isVisible', value: true },\r\n ]);\r\n }\r\n\r\n public closeWidget(): void {\r\n this.batchUpdate([\r\n { path: 'widget.isOpen', value: false },\r\n { path: 'widget.visibility', value: 'hidden' },\r\n { path: 'launcher.isVisible', value: true },\r\n { path: 'backdrop.isVisible', value: false },\r\n ]);\r\n }\r\n\r\n public minimizeWidget(): void {\r\n this.batchUpdate([\r\n { path: 'widget.isMinimized', value: true },\r\n { path: 'widget.visibility', value: 'minimized' },\r\n ]);\r\n }\r\n\r\n public maximizeWidget(): void {\r\n this.batchUpdate([\r\n { path: 'widget.isMinimized', value: false },\r\n { path: 'widget.visibility', value: 'visible' },\r\n ]);\r\n }\r\n\r\n public setBadgeCount(count: number): void {\r\n this.batchUpdate([\r\n { path: 'launcher.badge.count', value: count },\r\n { path: 'launcher.badge.show', value: count > 0 },\r\n ]);\r\n }\r\n\r\n public setUserAuth(userId: string, email?: string, name?: string): void {\r\n this.batchUpdate([\r\n { path: 'user.isAuthenticated', value: true },\r\n { path: 'user.isAnonymous', value: false },\r\n { path: 'user.id', value: userId },\r\n { path: 'user.email', value: email },\r\n { path: 'user.name', value: name },\r\n ]);\r\n }\r\n\r\n public setConnectionStatus(status: string): void {\r\n this.updateState('network.status', status);\r\n }\r\n\r\n public setLoading(isLoading: boolean): void {\r\n this.updateState('ui.isLoading', isLoading);\r\n }\r\n\r\n public setError(code: string, message: string, recoverable = true): void {\r\n this.updateState('ui.error', { code, message, recoverable });\r\n }\r\n\r\n public clearError(): void {\r\n this.updateState('ui.error', undefined);\r\n }\r\n\r\n /**\r\n * Get active subscription count\r\n */\r\n public getSubscriptionCount(): number {\r\n return this.subscriptions.size;\r\n }\r\n\r\n /**\r\n * Validate state integrity\r\n */\r\n public validateState(): boolean {\r\n try {\r\n // Check required properties exist\r\n const requiredPaths = [\r\n 'user',\r\n 'conversation',\r\n 'widget',\r\n 'launcher',\r\n 'backdrop',\r\n 'mobile',\r\n 'network',\r\n 'ui',\r\n ];\r\n\r\n for (const path of requiredPaths) {\r\n if (getStateValue(this.state, path) === undefined) {\r\n this.logger.error('Missing required state path', { path });\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n this.logger.error('State validation failed', error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Export state as JSON\r\n */\r\n public exportState(): string {\r\n return JSON.stringify(this.state, null, 2);\r\n }\r\n\r\n /**\r\n * Import state from JSON\r\n */\r\n public importState(json: string): boolean {\r\n try {\r\n const imported = JSON.parse(json);\r\n this.state = { ...createInitialState(), ...imported };\r\n this.messageBroker.broadcast('weld:state:update' as MessageType, {\r\n reset: true,\r\n state: this.state,\r\n });\r\n this.logger.info('State imported');\r\n return true;\r\n } catch (error) {\r\n this.logger.error('Failed to import state', error);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy coordinator and cleanup\r\n */\r\n public destroy(): void {\r\n this.logger.debug('Destroying state coordinator');\r\n\r\n // Clear subscriptions\r\n this.subscriptions.clear();\r\n\r\n // Clear history\r\n this.stateHistory = [];\r\n\r\n // Reset state\r\n this.state = createInitialState();\r\n\r\n this.logger.info('StateCoordinator destroyed');\r\n }\r\n}\r\n","/**\r\n * Weld SDK - Main Entry Point\r\n * Public API for the Weld helpdesk widget\r\n */\r\n\r\nimport type { WeldConfig, ResolvedConfig } from '../types/config';\r\nimport { resolveConfig } from '../types/config';\r\nimport type { WeldState } from '../types/state';\r\nimport type { MessageType } from '../types/messages';\r\nimport { Logger } from '../utils/logger';\r\nimport { IframeManager, IframeType } from './IframeManager';\r\nimport { MessageBroker } from './MessageBroker';\r\nimport { StateCoordinator } from './StateCoordinator';\r\nimport packageJson from '../../package.json';\r\n\r\n/**\r\n * SDK initialization status\r\n */\r\nenum SDKStatus {\r\n UNINITIALIZED = 'uninitialized',\r\n INITIALIZING = 'initializing',\r\n READY = 'ready',\r\n ERROR = 'error',\r\n DESTROYED = 'destroyed',\r\n}\r\n\r\n/**\r\n * User identification data\r\n */\r\nexport interface UserIdentity {\r\n userId: string;\r\n email?: string;\r\n name?: string;\r\n avatar?: string;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n/**\r\n * WeldSDK class\r\n * Main SDK interface for embedding the widget\r\n */\r\nexport class WeldSDK {\r\n private config: ResolvedConfig;\r\n private logger: Logger;\r\n private iframeManager: IframeManager;\r\n private messageBroker: MessageBroker;\r\n private stateCoordinator: StateCoordinator;\r\n private status: SDKStatus = SDKStatus.UNINITIALIZED;\r\n private readyPromise: Promise<void> | null = null;\r\n private readyResolve: (() => void) | null = null;\r\n\r\n constructor(config: WeldConfig) {\r\n // Resolve configuration\r\n this.config = resolveConfig(config);\r\n\r\n // Initialize logger\r\n this.logger = new Logger(this.config.logging);\r\n this.logger.info('WeldSDK created', {\r\n widgetId: this.config.widgetId,\r\n });\r\n\r\n // Create ready promise\r\n this.readyPromise = new Promise((resolve) => {\r\n this.readyResolve = resolve;\r\n });\r\n\r\n // Initialize managers\r\n this.iframeManager = new IframeManager(this.config);\r\n this.messageBroker = new MessageBroker(\r\n this.config,\r\n this.iframeManager,\r\n this.logger\r\n );\r\n this.stateCoordinator = new StateCoordinator(\r\n this.messageBroker,\r\n this.logger\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the SDK and render widget\r\n */\r\n public async init(): Promise<void> {\r\n if (this.status !== SDKStatus.UNINITIALIZED) {\r\n this.logger.warn('SDK already initialized');\r\n return this.readyPromise!;\r\n }\r\n\r\n this.status = SDKStatus.INITIALIZING;\r\n this.logger.info('Initializing WeldSDK');\r\n\r\n try {\r\n // Initialize iframe manager\r\n await this.iframeManager.init();\r\n\r\n // Setup ready handlers\r\n this.setupReadyHandlers();\r\n\r\n // Wait for all iframes to be ready\r\n await this.waitForIframesReady();\r\n\r\n // Mark as ready\r\n this.status = SDKStatus.READY;\r\n this.readyResolve?.();\r\n this.logger.info('WeldSDK ready');\r\n\r\n // Call onReady callback\r\n this.config.onReady?.();\r\n } catch (error) {\r\n this.status = SDKStatus.ERROR;\r\n this.logger.error('Failed to initialize WeldSDK', error);\r\n this.config.onError?.(error as Error);\r\n throw error;\r\n }\r\n\r\n return this.readyPromise!;\r\n }\r\n\r\n /**\r\n * Setup ready message handlers\r\n */\r\n private setupReadyHandlers(): void {\r\n this.messageBroker.subscribe('weld:ready' as MessageType, (payload) => {\r\n const { iframe } = payload;\r\n this.logger.debug('Iframe ready', { iframe });\r\n\r\n // Map iframe name to type\r\n const iframeType = this.mapIframeNameToType(iframe);\r\n if (iframeType) {\r\n this.messageBroker.setIframeReady(iframeType);\r\n }\r\n });\r\n\r\n // Listen for launcher click events from the iframe\r\n window.addEventListener('message', (event: MessageEvent) => {\r\n // Log all messages from iframes for debugging\r\n if (event.data?.type) {\r\n console.log('[Weld SDK] Received message:', event.data.type);\r\n }\r\n\r\n if (event.data?.type === 'launcher:clicked') {\r\n // Toggle behavior - if widget is open, close it; if closed, open it\r\n const state = this.stateCoordinator.getState();\r\n if (state.widget.isOpen) {\r\n console.log('[Weld SDK] Launcher clicked - closing widget (toggle)');\r\n this.close();\r\n } else {\r\n console.log('[Weld SDK] Launcher clicked - opening widget');\r\n this.open();\r\n }\r\n }\r\n if (event.data?.type === 'weld:close') {\r\n console.log('[Weld SDK] Widget close requested');\r\n this.close();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Map iframe name to type\r\n */\r\n private mapIframeNameToType(name: string): IframeType | null {\r\n if (name.includes('launcher')) return IframeType.LAUNCHER;\r\n if (name.includes('widget')) return IframeType.WIDGET;\r\n return null;\r\n }\r\n\r\n /**\r\n * Wait for all iframes to be ready\r\n */\r\n private async waitForIframesReady(timeout = 10000): Promise<void> {\r\n const startTime = Date.now();\r\n\r\n return new Promise((resolve, reject) => {\r\n const checkReady = () => {\r\n if (this.iframeManager.areAllIframesReady()) {\r\n resolve();\r\n return;\r\n }\r\n\r\n if (Date.now() - startTime > timeout) {\r\n reject(new Error('Timeout waiting for iframes to be ready'));\r\n return;\r\n }\r\n\r\n setTimeout(checkReady, 100);\r\n };\r\n\r\n checkReady();\r\n });\r\n }\r\n\r\n /**\r\n * Wait for SDK to be ready\r\n */\r\n public async ready(): Promise<void> {\r\n return this.readyPromise!;\r\n }\r\n\r\n /**\r\n * Check if SDK is ready\r\n */\r\n public isReady(): boolean {\r\n return this.status === SDKStatus.READY;\r\n }\r\n\r\n /**\r\n * Open the widget\r\n */\r\n public open(): void {\r\n this.ensureReady();\r\n console.log('[Weld SDK] Opening widget...');\r\n\r\n this.stateCoordinator.openWidget();\r\n this.iframeManager.showIframe(IframeType.WIDGET);\r\n this.iframeManager.showIframe(IframeType.BACKDROP);\r\n // Keep launcher visible so user can click it to close the widget\r\n\r\n // Send open message to the widget iframe\r\n const widgetIframe = this.iframeManager.getIframe(IframeType.WIDGET);\r\n if (widgetIframe?.element?.contentWindow) {\r\n widgetIframe.element.contentWindow.postMessage({ type: 'weld:open' }, '*');\r\n }\r\n\r\n // Notify launcher that widget is now open (so it can show X icon)\r\n const launcherIframe = this.iframeManager.getIframe(IframeType.LAUNCHER);\r\n if (launcherIframe?.element?.contentWindow) {\r\n launcherIframe.element.contentWindow.postMessage({ type: 'weld:widget-opened' }, '*');\r\n }\r\n\r\n this.config.onOpen?.();\r\n }\r\n\r\n /**\r\n * Close the widget\r\n */\r\n public close(): void {\r\n this.ensureReady();\r\n console.log('[Weld SDK] Closing widget...');\r\n\r\n this.stateCoordinator.closeWidget();\r\n this.iframeManager.hideIframe(IframeType.WIDGET);\r\n this.iframeManager.hideIframe(IframeType.BACKDROP);\r\n // Launcher stays visible\r\n\r\n // Send close message to the widget iframe\r\n const widgetIframe = this.iframeManager.getIframe(IframeType.WIDGET);\r\n if (widgetIframe?.element?.contentWindow) {\r\n widgetIframe.element.contentWindow.postMessage({ type: 'weld:close' }, '*');\r\n }\r\n\r\n // Notify launcher that widget is now closed (so it can show chat icon)\r\n const launcherIframe = this.iframeManager.getIframe(IframeType.LAUNCHER);\r\n if (launcherIframe?.element?.contentWindow) {\r\n launcherIframe.element.contentWindow.postMessage({ type: 'weld:widget-closed' }, '*');\r\n }\r\n\r\n this.config.onClose?.();\r\n }\r\n\r\n /**\r\n * Toggle widget open/close\r\n */\r\n public toggle(): void {\r\n const state = this.stateCoordinator.getState();\r\n if (state.widget.isOpen) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n /**\r\n * Minimize the widget\r\n */\r\n public minimize(): void {\r\n this.ensureReady();\r\n this.logger.debug('Minimizing widget');\r\n\r\n this.stateCoordinator.minimizeWidget();\r\n this.config.onMinimize?.();\r\n }\r\n\r\n /**\r\n * Maximize the widget\r\n */\r\n public maximize(): void {\r\n this.ensureReady();\r\n this.logger.debug('Maximizing widget');\r\n\r\n this.stateCoordinator.maximizeWidget();\r\n this.config.onMaximize?.();\r\n }\r\n\r\n /**\r\n * Show the launcher\r\n */\r\n public showLauncher(): void {\r\n this.ensureReady();\r\n this.logger.debug('Showing launcher');\r\n\r\n this.iframeManager.showIframe(IframeType.LAUNCHER);\r\n this.stateCoordinator.updateState('launcher.isVisible', true);\r\n }\r\n\r\n /**\r\n * Hide the launcher\r\n */\r\n public hideLauncher(): void {\r\n this.ensureReady();\r\n this.logger.debug('Hiding launcher');\r\n\r\n this.iframeManager.hideIframe(IframeType.LAUNCHER);\r\n this.stateCoordinator.updateState('launcher.isVisible', false);\r\n }\r\n\r\n /**\r\n * Set badge count\r\n */\r\n public setBadgeCount(count: number): void {\r\n this.ensureReady();\r\n this.logger.debug('Setting badge count', { count });\r\n\r\n this.stateCoordinator.setBadgeCount(count);\r\n }\r\n\r\n /**\r\n * Clear badge\r\n */\r\n public clearBadge(): void {\r\n this.setBadgeCount(0);\r\n }\r\n\r\n /**\r\n * Send a message\r\n */\r\n public sendMessage(text: string, metadata?: Record<string, any>): void {\r\n this.ensureReady();\r\n this.logger.debug('Sending message', { text });\r\n\r\n this.messageBroker.sendToIframe(IframeType.WIDGET, 'weld:message:send' as MessageType, {\r\n text,\r\n metadata,\r\n timestamp: Date.now(),\r\n });\r\n }\r\n\r\n /**\r\n * Identify user\r\n */\r\n public identify(identity: UserIdentity): void {\r\n this.ensureReady();\r\n this.logger.debug('Identifying user', { userId: identity.userId });\r\n\r\n this.stateCoordinator.setUserAuth(\r\n identity.userId,\r\n identity.email,\r\n identity.name\r\n );\r\n\r\n this.messageBroker.broadcast('weld:auth:login' as MessageType, identity);\r\n }\r\n\r\n /**\r\n * Logout user\r\n */\r\n public logout(): void {\r\n this.ensureReady();\r\n this.logger.debug('Logging out user');\r\n\r\n this.stateCoordinator.updateState('user', {\r\n isAuthenticated: false,\r\n isAnonymous: true,\r\n });\r\n\r\n this.messageBroker.broadcast('weld:auth:logout' as MessageType, {});\r\n }\r\n\r\n /**\r\n * Update configuration\r\n */\r\n public updateConfig(updates: Partial<WeldConfig>): void {\r\n this.ensureReady();\r\n this.logger.debug('Updating configuration');\r\n\r\n // Merge config\r\n this.config = resolveConfig({ ...this.config, ...updates });\r\n\r\n // Broadcast config update\r\n this.messageBroker.broadcast('weld:config:update' as MessageType, updates);\r\n }\r\n\r\n /**\r\n * Update theme\r\n */\r\n public setTheme(theme: 'light' | 'dark' | 'auto'): void {\r\n this.ensureReady();\r\n this.logger.debug('Setting theme', { theme });\r\n\r\n this.stateCoordinator.updateState('ui.theme', theme);\r\n this.messageBroker.broadcast('weld:theme:update' as MessageType, { mode: theme });\r\n }\r\n\r\n /**\r\n * Update locale\r\n */\r\n public setLocale(locale: string): void {\r\n this.ensureReady();\r\n this.logger.debug('Setting locale', { locale });\r\n\r\n this.stateCoordinator.updateState('ui.locale', locale);\r\n this.messageBroker.broadcast('weld:locale:update' as MessageType, { locale });\r\n }\r\n\r\n /**\r\n * Track custom event\r\n */\r\n public track(eventName: string, properties?: Record<string, any>): void {\r\n this.ensureReady();\r\n this.logger.debug('Tracking event', { eventName });\r\n\r\n this.messageBroker.broadcast('weld:event:track' as MessageType, {\r\n name: eventName,\r\n properties,\r\n timestamp: Date.now(),\r\n });\r\n }\r\n\r\n /**\r\n * Get current state\r\n */\r\n public getState(): WeldState {\r\n return this.stateCoordinator.getState();\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n */\r\n public onStateChange<T = any>(\r\n path: string,\r\n listener: (newValue: T, oldValue: T) => void\r\n ): () => void {\r\n this.ensureReady();\r\n\r\n const subscriptionId = this.stateCoordinator.subscribe(path, listener);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n this.stateCoordinator.unsubscribe(subscriptionId);\r\n };\r\n }\r\n\r\n /**\r\n * Get device info\r\n */\r\n public getDeviceInfo() {\r\n return this.iframeManager.getDeviceInfo();\r\n }\r\n\r\n /**\r\n * Get SDK status\r\n */\r\n public getStatus(): string {\r\n return this.status;\r\n }\r\n\r\n /**\r\n * Get SDK version\r\n */\r\n public getVersion(): string {\r\n return packageJson.version;\r\n }\r\n\r\n /**\r\n * Enable debug mode\r\n */\r\n public enableDebug(): void {\r\n this.logger.setLevel('debug');\r\n this.logger.info('Debug mode enabled');\r\n }\r\n\r\n /**\r\n * Disable debug mode\r\n */\r\n public disableDebug(): void {\r\n this.logger.setLevel('warn');\r\n this.logger.info('Debug mode disabled');\r\n }\r\n\r\n /**\r\n * Ensure SDK is ready before operation\r\n */\r\n private ensureReady(): void {\r\n if (this.status !== SDKStatus.READY) {\r\n throw new Error('SDK not ready. Call init() first.');\r\n }\r\n }\r\n\r\n /**\r\n * Destroy SDK and cleanup\r\n */\r\n public destroy(): void {\r\n this.logger.info('Destroying WeldSDK');\r\n\r\n // Destroy modules\r\n this.stateCoordinator.destroy();\r\n this.messageBroker.destroy();\r\n this.iframeManager.destroy();\r\n\r\n // Reset status\r\n this.status = SDKStatus.DESTROYED;\r\n\r\n // Call onDestroy callback\r\n this.config.onDestroy?.();\r\n\r\n this.logger.info('WeldSDK destroyed');\r\n }\r\n}\r\n\r\n/**\r\n * Create and initialize WeldSDK instance\r\n */\r\nexport async function createWeldSDK(config: WeldConfig): Promise<WeldSDK> {\r\n const sdk = new WeldSDK(config);\r\n await sdk.init();\r\n return sdk;\r\n}\r\n","import { onMounted, onUnmounted, ref } from 'vue';\r\nimport { WeldSDK, type WeldConfig } from '../../src/index';\r\n\r\n/**\r\n * Vue 3 composable for the Helpdesk Widget\r\n *\r\n * @example\r\n * ```vue\r\n * <script setup lang=\"ts\">\r\n * import { useHelpdeskWidget } from '@weldsuite/helpdesk-widget-sdk/vue';\r\n *\r\n * const widget = useHelpdeskWidget({ widgetId: 'your-widget-id' });\r\n * </script>\r\n *\r\n * <template>\r\n * <button @click=\"widget?.open()\">Show Support</button>\r\n * </template>\r\n * ```\r\n */\r\nexport function useHelpdeskWidget(config: WeldConfig) {\r\n const widget = ref<WeldSDK | null>(null);\r\n\r\n onMounted(() => {\r\n try {\r\n widget.value = new WeldSDK(config);\r\n widget.value.init();\r\n } catch (error) {\r\n console.error('Failed to initialize Helpdesk Widget:', error);\r\n }\r\n });\r\n\r\n onUnmounted(() => {\r\n if (widget.value) {\r\n widget.value.destroy();\r\n widget.value = null;\r\n }\r\n });\r\n\r\n return widget;\r\n}\r\n\r\n/**\r\n * Composable that provides widget control methods\r\n *\r\n * @example\r\n * ```vue\r\n * <script setup lang=\"ts\">\r\n * import { useHelpdeskWidgetControls } from '@weldsuite/helpdesk-widget-sdk/vue';\r\n *\r\n * const { open, close, toggle } = useHelpdeskWidgetControls({\r\n * widgetId: 'your-widget-id'\r\n * });\r\n * </script>\r\n *\r\n * <template>\r\n * <div>\r\n * <button @click=\"open\">Show Support</button>\r\n * <button @click=\"close\">Hide Support</button>\r\n * <button @click=\"toggle\">Toggle Support</button>\r\n * </div>\r\n * </template>\r\n * ```\r\n */\r\nexport function useHelpdeskWidgetControls(config: WeldConfig) {\r\n const widget = useHelpdeskWidget(config);\r\n\r\n const open = () => {\r\n widget.value?.open();\r\n };\r\n\r\n const close = () => {\r\n widget.value?.close();\r\n };\r\n\r\n const toggle = () => {\r\n widget.value?.toggle();\r\n };\r\n\r\n const sendMessage = (message: string) => {\r\n widget.value?.sendMessage(message);\r\n };\r\n\r\n return {\r\n widget,\r\n open,\r\n close,\r\n toggle,\r\n sendMessage,\r\n };\r\n}\r\n"],"names":["ref","onMounted","onUnmounted"],"mappings":";;;;AAAA;;;AAGG;AAgPH;;AAEG;AACI,MAAM,cAAc,GAAqC;AAC9D,IAAA,GAAG,EAAE;AACH,QAAA,OAAO,EAAE,8CAA8C;AACvD,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE;AACR,YAAA,GAAG,EAAE,uBAAuB;AAC5B,YAAA,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAC3C,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,GAAG,EAAE,qBAAqB;AAC1B,YAAA,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;AAC5C,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,iCAAiC;AAC1C,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA;AACF,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,eAAe,EAAE,SAAS;AAC1B,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,UAAU,EAAE,mEAAmE;AAC/E,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,YAAY,EAAE,MAAM;AACrB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,aAAa,EAAE,KAAK;AACrB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,gBAAgB,EAAE,MAAM;AACxB,QAAA,cAAc,EAAE,IAAI;AACrB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,IAAI,EAAE,WAAW;AAClB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE,cAAc;AAC1B,QAAA,UAAU,EAAE,OAAO;AACpB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,gBAAgB,EAAE,IAAI;AACvB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,QAAQ,EAAE,KAAK;AAChB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,cAAc,EAAE,EAAE;AAClB,QAAA,gBAAgB,EAAE,IAAI;AACtB,QAAA,aAAa,EAAE,IAAI;AACpB,KAAA;CACF;AAED;;AAEG;AACG,SAAU,cAAc,CAAC,MAA2B,EAAA;AACxD,IAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC3D,QAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;IAC1E;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACG,SAAU,aAAa,CAAC,MAAkB,EAAA;IAC9C,cAAc,CAAC,MAAM,CAAC;IAEtB,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,QAAA,GAAG,EAAE;YACH,GAAG,cAAc,CAAC,GAAG;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,MAAM,CAAC,GAAG;AACd,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE;AACR,gBAAA,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ;AAClC,gBAAA,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ;AAC3B,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ;AAC3C,oBAAA,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ;AAC5B,oBAAA,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ;AACtC,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM;AAChC,gBAAA,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM;AACzB,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ;AACzC,oBAAA,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM;AAC1B,oBAAA,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ;AACpC,iBAAA;AACF,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,GAAG,cAAc,CAAC,OAAO,CAAC,QAAS;AACnC,gBAAA,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ;AAC5B,aAAA;AACF,SAAA;AACD,QAAA,aAAa,EAAE;YACb,GAAG,cAAc,CAAC,aAAa;YAC/B,GAAG,MAAM,CAAC,aAAa;AACxB,SAAA;AACD,QAAA,QAAQ,EAAE;YACR,GAAG,cAAc,CAAC,QAAQ;YAC1B,GAAG,MAAM,CAAC,QAAQ;AACnB,SAAA;AACD,QAAA,MAAM,EAAE;YACN,GAAG,cAAc,CAAC,MAAM;YACxB,GAAG,MAAM,CAAC,MAAM;AACjB,SAAA;AACD,QAAA,IAAI,EAAE;YACJ,GAAG,cAAc,CAAC,IAAI;YACtB,GAAG,MAAM,CAAC,IAAI;AACf,SAAA;AACD,QAAA,MAAM,EAAE;YACN,GAAG,cAAc,CAAC,MAAM;YACxB,GAAG,MAAM,CAAC,MAAM;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,MAAM,CAAC,OAAO;AAClB,SAAA;AACD,QAAA,WAAW,EAAE;YACX,GAAG,cAAc,CAAC,WAAW;YAC7B,GAAG,MAAM,CAAC,WAAW;AACtB,SAAA;AACD,QAAA,QAAQ,EAAE;YACR,GAAG,cAAc,CAAC,QAAQ;YAC1B,GAAG,MAAM,CAAC,QAAQ;AACnB,SAAA;;QAED,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B;AACH;;AChaA;;;AAGG;AAIH;;AAEG;AACH,IAAY,QAMX;AAND,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACZ,CAAC,EANW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AAQpB;;AAEG;MACU,MAAM,CAAA;AAIjB,IAAA,WAAA,CAAY,MAAiB,EAAA;QAC3B,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,GAAG,MAAM;SACV;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAM,CAAC;IAC1D;AAEA;;AAEG;AACK,IAAA,kBAAkB,CAAC,KAAa,EAAA;AACtC,QAAA,QAAQ,KAAK,CAAC,WAAW,EAAE;AACzB,YAAA,KAAK,OAAO;gBACV,OAAO,QAAQ,CAAC,KAAK;AACvB,YAAA,KAAK,MAAM;gBACT,OAAO,QAAQ,CAAC,IAAI;AACtB,YAAA,KAAK,MAAM;gBACT,OAAO,QAAQ,CAAC,IAAI;AACtB,YAAA,KAAK,OAAO;gBACV,OAAO,QAAQ,CAAC,KAAK;AACvB,YAAA;gBACE,OAAO,QAAQ,CAAC,IAAI;;IAE1B;AAEA;;AAEG;AACK,IAAA,SAAS,CAAC,KAAe,EAAA;AAC/B,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK;IAC7D;AAEA;;AAEG;AACK,IAAA,MAAM,CAAC,KAAa,EAAE,OAAe,EAAE,KAAW,EAAA;QACxD,MAAM,KAAK,GAAa,EAAE;AAE1B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAChC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC1C,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA,CAAA,CAAG,CAAC;QAC9B;QAEA,KAAK,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,WAAW,EAAE,CAAA,CAAA,CAAG,CAAC;AACtC,QAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAEnB,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;IACI,KAAK,CAAC,OAAe,EAAE,IAAU,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE;AAErC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AACrD,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC;QACnC;aAAO;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;QAC7B;IACF;AAEA;;AAEG;IACI,IAAI,CAAC,OAAe,EAAE,IAAU,EAAA;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;AAEpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AACpD,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC;QAClC;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QAC5B;IACF;AAEA;;AAEG;IACI,IAAI,CAAC,OAAe,EAAE,IAAU,EAAA;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE;AAEpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AACpD,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC;QAClC;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QAC5B;IACF;AAEA;;AAEG;IACI,KAAK,CAAC,OAAe,EAAE,KAAmB,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;AAC/C,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;YACzD;iBAAO;gBACL,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC;YACpC;QACF;aAAO;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;QAC7B;IACF;AAEA;;AAEG;AACI,IAAA,KAAK,CAAC,MAAc,EAAA;QACzB,OAAO,IAAI,MAAM,CAAC;YAChB,GAAG,IAAI,CAAC,MAAM;YACd,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;AAC1C,SAAA,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,QAAQ,CAAC,KAA0C,EAAA;AACxD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC7C;AAEA;;AAEG;AACI,IAAA,UAAU,CAAC,OAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO;IAC/B;AACD;AAED;;AAEG;AAC0B,IAAI,MAAM,CAAC;AACtC,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,gBAAgB,EAAE,IAAI;AACvB,CAAA;;ACjLD;;;AAGG;AAKH;;AAEG;AACH,IAAY,UAIX;AAJD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAkBtB;;AAEG;AACH,SAAS,YAAY,GAAA;AACnB,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU;AAC/B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW;AACjC,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS;AAErC,IAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,GAAG;IAC5B,MAAM,QAAQ,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI;AAC9C,IAAA,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI;IAC9B,MAAM,aAAa,GAAG,cAAc,IAAI,MAAM,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC;IAE9E,OAAO;AACL,QAAA,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS;QAC3D,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,aAAa;AACb,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU;QACtD,SAAS;KACV;AACH;AAEA;;;AAGG;MACU,aAAa,CAAA;AAUxB,IAAA,WAAA,CAAY,MAAsB,EAAA;AAP1B,QAAA,IAAA,CAAA,OAAO,GAAoC,IAAI,GAAG,EAAE;QACpD,IAAA,CAAA,aAAa,GAA0B,IAAI;QAC3C,IAAA,CAAA,YAAY,GAA0B,IAAI;QAC1C,IAAA,CAAA,cAAc,GAA0B,IAAI;QAE5C,IAAA,CAAA,YAAY,GAA4B,IAAI;AAGlD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AACxC,QAAA,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE;AAEhC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;AAC5C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC5B,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;AACjC,SAAA,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,MAAM,IAAI,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC;AAEhD,QAAA,IAAI;;YAEF,IAAI,CAAC,mBAAmB,EAAE;;YAG1B,IAAI,CAAC,SAAS,EAAE;;AAGhB,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;AACjC,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;AACjC,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;;YAG/B,IAAI,CAAC,mBAAmB,EAAE;AAE1B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC;QAC5D;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAC9D,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;AAEG;IACK,mBAAmB,GAAA;;QAEzB,IAAI,iBAAiB,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;QACjE,IAAI,iBAAiB,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC;YACxE,iBAAiB,CAAC,MAAM,EAAE;QAC5B;;QAGA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,gBAAgB;;QAG/C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACjD,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,UAAU;QACxC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC;QACvD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,sBAAsB,CAAC;;QAGpE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,sBAAsB;;QAG/C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;QACjD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AAE7C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAC7C;AAEA;;AAEG;IACK,SAAS,GAAA;;QAEf,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC;QAC5D,IAAI,aAAa,EAAE;YACjB,aAAa,CAAC,MAAM,EAAE;QACxB;QAEA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,aAAa;QACpC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QAClD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AAE5C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;IACnC;AAEA;;AAEG;IACK,WAAW,GAAA;AACjB,QAAA,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM;QAErC,OAAO,CAAA;;;AAGqB,8BAAA,EAAA,aAAa,CAAC,YAAY,CAAA;AAC3B,6BAAA,EAAA,aAAa,CAAC,WAAW,CAAA;AAC1B,4BAAA,EAAA,aAAa,CAAC,UAAU,CAAA;AACrB,+BAAA,EAAA,aAAa,CAAC,QAAQ,CAAA;AAC3B,0BAAA,EAAA,aAAa,CAAC,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;KAoBjD;IACH;AAEA;;AAEG;AACK,IAAA,MAAM,oBAAoB,GAAA;AAChC,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM;AAC/B,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO;;QAG5B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,SAAS,CAAC,SAAS,GAAG,qBAAqB;AAC3C,QAAA,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC;AAC/C,QAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;gBAEd,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAA;eACzB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAA;AACvB,aAAA,EAAA,QAAQ,CAAC,IAAI,CAAA;AACZ,cAAA,EAAA,QAAQ,CAAC,IAAI,CAAA;;;;KAIxB;;QAGD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC3B,QAAA,MAAM,CAAC,KAAK,GAAG,eAAe;QAC9B,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9C,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;;;KAMtB;AACD,QAAA,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC;AAC/C,QAAA,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,0DAA0D,CAAC;AAE1F,QAAA,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,CAAC;;QAGzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;YACpC,IAAI,EAAE,UAAU,CAAC,QAAQ;AACzB,YAAA,OAAO,EAAE,MAAM;YACf,SAAS;AACT,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,SAAA,CAAC;;AAGF,QAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;YACtD,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,KAAK,GAAG,IAAI;AACrB,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC;YACvD;AACF,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC;IAC9C;AAEA;;AAEG;AACK,IAAA,MAAM,kBAAkB,GAAA;AAC9B,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM;AAC/B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;;QAG1B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,SAAS,CAAC,SAAS,GAAG,mBAAmB;AACzC,QAAA,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC;AAC9C,QAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;gBAEd,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA;eACvB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAA;AACrB,aAAA,EAAA,MAAM,CAAC,KAAK,CAAA;AACX,cAAA,EAAA,MAAM,CAAC,MAAM,CAAA;;;;;;;;KAQxB;;QAGD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACzB,QAAA,MAAM,CAAC,KAAK,GAAG,aAAa;QAC5B,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;AAC5C,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;;;;KAOtB;AACD,QAAA,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,qCAAqC,CAAC;AACnE,QAAA,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,0EAA0E,CAAC;AAE1G,QAAA,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,CAAC;;QAGzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE;YAClC,IAAI,EAAE,UAAU,CAAC,MAAM;AACvB,YAAA,OAAO,EAAE,MAAM;YACf,SAAS;AACT,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,SAAA,CAAC;;AAGF,QAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YACpD,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,KAAK,GAAG,IAAI;AACrB,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC;YACrD;AACF,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC5C;AAEA;;AAEG;AACK,IAAA,MAAM,oBAAoB,GAAA;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC1C,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC;YACzD;QACF;;QAGA,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,QAAA,SAAS,CAAC,SAAS,GAAG,qBAAqB;AAC3C,QAAA,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC;AAC9C,QAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;;;;;;;;;;KAWzB;AAED,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,CAAC;;;QAIzC,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,QAAA,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAElC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;YACpC,IAAI,EAAE,UAAU,CAAC,QAAQ;AACzB,YAAA,OAAO,EAAE,WAAW;YACpB,SAAS;YACT,KAAK,EAAE,IAAI;AACX,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACvC;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,IAAY,EAAA;QACjC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;AACrC,QAAA,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO;;QAG3B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;QAClC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC1C,QAAA,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACpD,QAAA,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAChE,QAAA,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAE5D,QAAA,OAAO,GAAG,CAAC,QAAQ,EAAE;IACvB;AAEA;;AAEG;IACK,mBAAmB,GAAA;;AAEzB,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG/D,QAAA,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAErF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC5C;AAEA;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACvE;AAEA;;AAEG;IACK,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IACxF;AAEA;;AAEG;AACI,IAAA,SAAS,CAAC,IAAgB,EAAA;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC/B;AAEA;;AAEG;AACI,IAAA,gBAAgB,CAAC,IAAgB,EAAA;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO;IACxC;AAEA;;AAEG;AACI,IAAA,kBAAkB,CAAC,IAAgB,EAAA;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS;IAC1C;AAEA;;AAEG;AACI,IAAA,cAAc,CAAC,IAAgB,EAAA;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACrC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,OAAA,EAAU,IAAI,CAAA,gBAAA,CAAkB,CAAC;QACrD;IACF;AAEA;;AAEG;IACI,kBAAkB,GAAA;QACvB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YACzC,IAAI,IAAI,KAAK,UAAU,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjD,gBAAA,OAAO,KAAK;YACd;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACI,IAAA,UAAU,CAAC,IAAgB,EAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAA,UAAA,CAAY,CAAC;YAC/D;QACF;AAEA,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAA,CAAE,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAEpG,QAAA,MAAM,CAAC,OAAO,GAAG,IAAI;QACrB,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,KAAK,UAAU,CAAC,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QAC9F,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM;QAC7C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;;QAGxC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;YAC3F,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACjD;AAEA,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAA,MAAA,CAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAChG;AAEA;;AAEG;AACI,IAAA,UAAU,CAAC,IAAgB,EAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAA,UAAA,CAAY,CAAC;YAC/D;QACF;AAEA,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAA,CAAE,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAEnG,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK;QACtB,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,KAAK,UAAU,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAC/F,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM;QAC7C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;;AAGvC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,KAAK,UAAU,CAAC,MAAM,EAAE;YAC1D,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACpD;AAEA,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAA,OAAA,CAAS,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACjG;AAEA;;AAEG;IACI,aAAa,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA;;AAEG;IACI,iBAAiB,GAAA;QACtB,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA;;AAEG;IACI,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC;;AAG9C,QAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,QAAA,MAAM,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAGxF,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;;AAGlD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;;AAGA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;;AAGA,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAEpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;IAC7C;AACD;;AC3iBD;;;AAGG;AAEH;;AAEG;AACH,IAAY,aAKX;AALD,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EALW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAOzB;;AAEG;AACH,IAAY,WA2DX;AA3DD,CAAA,UAAY,WAAW,EAAA;;AAErB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,YAAoB;AACpB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,WAAkB;AAClB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,cAAwB;;AAGxB,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,mBAAkC;AAClC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACpC,IAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,qBAAsC;;AAGtC,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,kBAAgC;AAChC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,mBAAkC;AAClC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACpC,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,sBAAwC;AACxC,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,sBAAwC;;AAGxC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACpC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACpC,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,sBAAwC;;AAGxC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACpC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACpC,IAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,qBAAsC;;AAGtC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,mBAAkC;AAClC,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,sBAAwC;AACxC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,mBAAkC;AAClC,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,kBAAgC;;AAGhC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,mBAAkC;AAClC,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,kBAAgC;;AAGhC,IAAA,WAAA,CAAA,oBAAA,CAAA,GAAA,yBAA8C;AAC9C,IAAA,WAAA,CAAA,sBAAA,CAAA,GAAA,2BAAkD;;AAGlD,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;AACpC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,mBAAkC;AAClC,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,oBAAoC;;AAGpC,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,iBAA8B;AAC9B,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,kBAAgC;AAChC,IAAA,WAAA,CAAA,mBAAA,CAAA,GAAA,wBAA4C;;AAG5C,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,kBAAgC;AAChC,IAAA,WAAA,CAAA,cAAA,CAAA,GAAA,mBAAkC;;AAGlC,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,kBAAgC;AAChC,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,gBAA4B;AAC9B,CAAC,EA3DW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAiMvB;;AAEG;AACG,SAAU,aAAa,CAAC,OAAY,EAAA;AACxC,IAAA,QACE,OAAO,OAAO,KAAK,QAAQ;AAC3B,QAAA,OAAO,KAAK,IAAI;AAChB,QAAA,MAAM,IAAI,OAAO;AACjB,QAAA,QAAQ,IAAI,OAAO;AACnB,QAAA,WAAW,IAAI,OAAO;QACtB,IAAI,IAAI,OAAO;AAEnB;AAEM,SAAU,gBAAgB,CAC9B,OAAY,EAAA;IAEZ,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,SAAS,IAAI,OAAO;AACvD;AAEA;;AAEG;SACa,aAAa,CAC3B,IAAiB,EACjB,MAAqB,EACrB,OAAa,EAAA;IAEb,OAAO;QACL,IAAI;QACJ,MAAM;AACN,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,EAAE,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;QACtE,OAAO;KACR;AACH;;ACtPA;;;AAGG;AAKH;;AAEG;MACU,eAAe,CAAA;IAK1B,WAAA,CAAY,MAAsB,EAAE,MAAc,EAAA;AAChD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;;QAG1D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IACjD;AAEA;;AAEG;AACI,IAAA,eAAe,CAAC,MAAc,EAAA;;QAEnC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,KAAK,CAAC,EAAE;AAC5C,YAAA,OAAO,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM;QAC1C;;QAGA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;YACzC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;AACxC,gBAAA,OAAO,IAAI;YACb;QACF;QAEA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,CAAC;AAClD,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;IACK,cAAc,CAAC,MAAc,EAAE,OAAe,EAAA;;AAEpD,QAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAC/D;AACD,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B;AAEA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;AACI,IAAA,oBAAoB,CAAC,KAAmB,EAAA;;QAE7C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACpE,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACvC,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC;AACjD,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACI,IAAA,mBAAmB,CAAC,IAAS,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAC9B,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAGlD,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AAE9B,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,GAAQ,EAAA;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;YAC3C;QACF;AAEA,QAAA,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;YACrB,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AAChC,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C;iBAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;gBACvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B;QACF;IACF;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,GAAW,EAAA;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,WAAW,GAAG,GAAG;QACrB,OAAO,GAAG,CAAC;AACR,aAAA,OAAO,CAAC,eAAe,EAAE,EAAE;AAC3B,aAAA,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;IAC/B;AAEA;;AAEG;IACI,gBAAgB,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACjF;AAEA;;AAEG;AACI,IAAA,mBAAmB,CAAC,GAAW,EAAA;AACpC,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;;YAGhD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,GAAG,EAAE,CAAC;AACzD,gBAAA,OAAO,KAAK;YACd;;AAGA,YAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;AAClC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC;AACpE,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC7D,YAAA,OAAO,KAAK;QACd;IACF;AAEA;;AAEG;IACI,SAAS,GAAA;AACd,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAEzD,OAAO;AACL,YAAA,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAE;AAC/B,YAAA,CAAA,kCAAA,EAAqC,OAAO,CAAA,CAAE;AAC9C,YAAA,CAAA,iCAAA,EAAoC,OAAO,CAAA,CAAE;AAC7C,YAAA,CAAA,4BAAA,EAA+B,OAAO,CAAA,CAAE;AACxC,YAAA,CAAA,sBAAA,EAAyB,OAAO,CAAA,CAAE;AAClC,YAAA,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAE;AAC/B,YAAA,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE;AAC7B,YAAA,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE;AAC9B,SAAA,CAAC,IAAI,CAAC,IAAI,CAAC;IACd;AAEA;;AAEG;AACI,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACpC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC;IACvD;AAEA;;AAEG;AACI,IAAA,mBAAmB,CAAC,MAAc,EAAA;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,CAAC;IACzD;AAEA;;AAEG;IACI,iBAAiB,GAAA;QACtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IACxC;AACD;AAED;;AAEG;MACU,WAAW,CAAA;AAKtB,IAAA,WAAA,CAAY,WAAA,GAAsB,GAAG,EAAE,QAAA,GAAmB,KAAK,EAAA;AAJvD,QAAA,IAAA,CAAA,QAAQ,GAA0B,IAAI,GAAG,EAAE;AAKjD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEA;;AAEG;AACI,IAAA,SAAS,CAAC,GAAW,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;;AAG7C,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAG3E,IAAI,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC5C,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC;AAErC,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACI,IAAA,KAAK,CAAC,GAAW,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;IAC3B;AAEA;;AAEG;IACI,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACvB;AACD;;ACzQD;;;AAGG;AAiCH;;;AAGG;MACU,aAAa,CAAA;AAWxB,IAAA,WAAA,CACE,MAAsB,EACtB,aAA4B,EAC5B,MAAc,EAAA;AATR,QAAA,IAAA,CAAA,aAAa,GAAqC,IAAI,GAAG,EAAE;QAC3D,IAAA,CAAA,YAAY,GAAqB,EAAE;QACnC,IAAA,CAAA,OAAO,GAAG,KAAK;AAEf,QAAA,IAAA,CAAA,gBAAgB,GAAgD,IAAI,GAAG,EAAE;AAO/E,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;AACjE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE/C,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC;IAChD;AAEA;;AAEG;IACK,oBAAoB,GAAA;AAC1B,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAC7C;AAEA;;AAEG;AACK,IAAA,aAAa,CAAC,KAAmB,EAAA;;QAEvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;YAC9C;QACF;;QAGA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,IAAI,CAAC;YACzD;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAmB;;AAGzC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACnE;QACF;;QAGA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;cACnC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO;cACzC,OAAO;AAEX,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;YACpC,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,EAAE,EAAE,SAAS,CAAC,EAAE;AACjB,SAAA,CAAC;;QAGF,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;AAC3C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;AACvD,YAAA,OAAO,GAAG,SAAS,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C;QACF;;AAGA,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;IACjC;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,OAAoB,EAAA;AAC1C,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;AAE7D,QAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;;AAExC,YAAA,MAAM,WAAW,GACf,YAAY,CAAC,IAAI,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;;AAGjE,YAAA,MAAM,aAAa,GACjB,CAAC,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;AAEhE,YAAA,IAAI,WAAW,IAAI,aAAa,EAAE;AAChC,gBAAA,IAAI;AACF,oBAAA,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;wBAC7B,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;oBAChD;yBAAO;AACL,wBAAA,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,OAAoC,CAAC;oBACvE;gBACF;gBAAE,OAAO,KAAK,EAAE;oBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;gBACtD;YACF;QACF;IACF;AAEA;;AAEG;AACI,IAAA,SAAS,CACd,IAAuB,EACvB,OAA0B,EAC1B,MAAsB,EAAA;QAEtB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AAE3C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE;YACzB,EAAE;YACF,IAAI;YACJ,MAAM;YACN,OAAO;AACR,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACjE,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;AACI,IAAA,WAAW,CAAC,cAAsB,EAAA;QACvC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC;QACzE;IACF;AAEA;;AAEG;AACI,IAAA,YAAY,CACjB,UAAsB,EACtB,IAAiB,EACjB,OAAa,EAAA;QAEb,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC;QAEvD,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,CAAC;YACpD;QACF;QAEA,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,WAA0B,EAAE;;AAExD,YAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;AAClE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE;gBACrD,UAAU;gBACV,IAAI;AACL,aAAA,CAAC;YACF;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3C;AAEA;;AAEG;IACI,SAAS,CAAC,IAAiB,EAAE,OAAa,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;AAElE,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;AACxE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;AAEpE,QAAA,IAAI,cAAc,IAAI,cAAc,CAAC,KAAK,EAAE;YAC1C,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;QACnD;AACA,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,KAAK,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;QACjD;QAEA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC;IAClD;AAEA;;AAEG;IACI,MAAM,sBAAsB,CACjC,UAAsB,EACtB,IAAiB,EACjB,OAAa,EACb,OAAO,GAAG,IAAI,EAAA;QAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;;AAGlE,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAK;gBAChC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AACxC,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC/C,CAAC,EAAE,OAAO,CAAC;AAEX,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,QAAqB,KAAI;gBAC9D,YAAY,CAAC,SAAS,CAAC;AACvB,gBAAA,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE;AAC9B,oBAAA,OAAO,CAAC,QAAQ,CAAC,OAAY,CAAC;gBAChC;qBAAO;oBACL,OAAO,CAAC,SAAc,CAAC;gBACzB;AACF,YAAA,CAAC,CAAC;;YAGF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC;YACvD,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACrC;YACF;YAEA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;AAC3C,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,WAAW,CAAC,MAAyB,EAAE,OAAoB,EAAA;AACjE,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC;YACtD;QACF;AAEA,QAAA,IAAI;YACF,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;gBAChC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,EAAE,EAAE,OAAO,CAAC,EAAE;AACf,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;QACpD;IACF;AAEA;;AAEG;AACI,IAAA,cAAc,CAAC,UAAsB,EAAA;AAC1C,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC;;AAG7C,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;;AAGlC,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACvC;IACF;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,UAAsB,EAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAElD,QAAA,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE;YACpC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;QAC3C;AAEA,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;gBAC3C,KAAK,EAAE,cAAc,CAAC,MAAM;gBAC5B,UAAU;AACX,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;IACI,oBAAoB,GAAA;QACzB,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA;;AAEG;IACI,qBAAqB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM;IACjC;AAEA;;AAEG;IACI,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC5C;AAEA;;AAEG;IACI,oBAAoB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI;IAChC;AAEA;;AAEG;IACI,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC;;AAG9C,QAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAGpE,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;;AAG1B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;;AAG7B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAE3B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;IAC7C;AACD;;ACxXD;;;AAGG;AAEH;;AAEG;AACH,IAAY,gBAIX;AAJD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;AAM5B;;AAEG;AACH,IAAY,UAOX;AAPD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,UAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAPW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAStB;;AAEG;AACH,IAAY,gBAMX;AAND,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;AAQ5B;;AAEG;AACH,IAAY,aAMX;AAND,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EANW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AAqNzB;;AAEG;SACa,kBAAkB,GAAA;IAChC,OAAO;AACL,QAAA,IAAI,EAAE;AACJ,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,WAAW,EAAE,EAAE;AAChB,SAAA;AACD,QAAA,MAAM,EAAE;YACN,UAAU,EAAE,gBAAgB,CAAC,MAAM;YACnC,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,UAAU,EAAE;AACV,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,MAAM,EAAE,kBAAkB;AAC3B,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,IAAI,EAAE,KAAK;AACZ,aAAA;AACF,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,cAAc,EAAE;AACd,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC;AACR,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE;YACP,MAAM,EAAE,gBAAgB,CAAC,YAAY;AACrC,YAAA,UAAU,EAAE,CAAC;AACd,SAAA;AACD,QAAA,EAAE,EAAE;AACF,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA;AACD,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB;AACH;AAEA;;AAEG;AACG,SAAU,aAAa,CAAU,KAAgB,EAAE,IAAY,EAAA;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5B,IAAI,KAAK,GAAQ,KAAK;AAEtB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,GAAG,IAAI,KAAK,EAAE;AACtD,YAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;QACpB;aAAO;AACL,YAAA,OAAO,SAAc;QACvB;IACF;AAEA,IAAA,OAAO,KAAU;AACnB;AAEA;;AAEG;AACG,SAAU,aAAa,CAC3B,KAAgB,EAChB,IAAY,EACZ,KAAU,EACV,KAAK,GAAG,KAAK,EAAA;IAEb,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5B,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,GAAQ,QAAQ;AAE3B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE;AACrB,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;QACnB;AACA,QAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB;IAEA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAErC,IAAA,IAAI,KAAK,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC9E,QAAA,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE;IACtD;SAAO;AACL,QAAA,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK;IAC1B;AAEA,IAAA,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE;AACjC,IAAA,OAAO,QAAQ;AACjB;;AClXA;;;AAGG;AAEH;;AAEG;AA4IH;;AAEG;AACG,SAAU,SAAS,CAAI,GAAM,EAAA;IACjC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3C,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,IAAI,GAAG,YAAY,IAAI,EAAE;QACvB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAQ;IACvC;AAEA,IAAA,IAAI,GAAG,YAAY,KAAK,EAAE;AACxB,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAQ;IAClD;AAEA,IAAA,IAAI,GAAG,YAAY,MAAM,EAAE;QACzB,MAAM,MAAM,GAAQ,EAAE;AACtB,QAAA,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AACrB,YAAA,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC;QACF;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,OAAO,GAAG;AACZ;;AC9KA;;;AAGG;AAkBH;;;AAGG;MACU,gBAAgB,CAAA;IAQ3B,WAAA,CAAY,aAA4B,EAAE,MAAc,EAAA;AAJhD,QAAA,IAAA,CAAA,aAAa,GAAmC,IAAI,GAAG,EAAE;QACzD,IAAA,CAAA,YAAY,GAAkB,EAAE;QAChC,IAAA,CAAA,cAAc,GAAG,EAAE;AAGzB,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB,EAAE;QAEjC,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC;IACnD;AAEA;;AAEG;IACK,oBAAoB,GAAA;;AAE1B,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAC1B,mBAAkC,EAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC;;AAGD,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAC1B,oBAAmC,EACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACnC;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAC7C;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,OAAY,EAAA;QACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO;QAEtC,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC;YACtD;QACF;QAEA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;IACtC;AAEA;;AAEG;AACK,IAAA,kBAAkB,CAAC,OAAY,EAAA;AACrC,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO;QAExB,IAAI,IAAI,EAAE;YACR,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAC7C,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,qBAAoC,EAAE;gBACjE,IAAI;gBACJ,KAAK;AACN,aAAA,CAAC;QACJ;aAAO;;AAEL,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,qBAAoC,EAAE;gBACjE,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;IACI,QAAQ,GAAA;AACb,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA;;AAEG;AACI,IAAA,QAAQ,CAAU,IAAY,EAAA;QACnC,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IACxC;AAEA;;AAEG;AACI,IAAA,WAAW,CAAC,IAAY,EAAE,KAAU,EAAE,KAAK,GAAG,KAAK,EAAA;QACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;;AAG1D,QAAA,MAAM,MAAM,GAAgB;AAC1B,YAAA,IAAI,EAAE,QAAQ;YACd,IAAI;AACJ,YAAA,OAAO,EAAE,KAAK;YACd,KAAK;AACL,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB;;AAGD,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;AAGzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;;AAGlE,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAkC,EAAE;YAC/D,IAAI;YACJ,KAAK;YACL,KAAK;AACN,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACrD;AAEA;;AAEG;AACI,IAAA,WAAW,CAAC,OAA6D,EAAA;QAC9E,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAEtC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,aAAa,CACxB,IAAI,CAAC,KAAK,EACV,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,CACb;QACH;;AAGA,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,CAAC,iBAAiB,CACpB,MAAM,CAAC,IAAI,EACX,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EACtC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CACrC;QACH;;AAGA,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAkC,EAAE;AAC/D,YAAA,KAAK,EAAE,OAAO;AACf,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACpE;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB,EAAE;;QAGjC,KAAK,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;YACpD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC;AAC3D,YAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;AAC7D,YAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC3C;;AAGA,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAkC,EAAE;AAC/D,YAAA,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;IAClC;AAEA;;AAEG;AACI,IAAA,SAAS,CACd,IAAY,EACZ,QAA0B,EAC1B,SAAS,GAAG,KAAK,EAAA;QAEjB,MAAM,EAAE,GAAG,CAAA,IAAA,EAAO,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;AAEzE,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE;YACzB,EAAE;YACF,IAAI;YACJ,QAAQ;YACR,SAAS;AACV,SAAA,CAAC;;QAGF,IAAI,SAAS,EAAE;YACb,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAC7C,YAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QACxB;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAC3D,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;AACI,IAAA,WAAW,CAAC,cAAsB,EAAA;QACvC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC;QACzE;IACF;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,IAAY,EAAE,QAAa,EAAE,QAAa,EAAA;AAClE,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;AAE7D,QAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;;AAExC,YAAA,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE;AAC9B,gBAAA,IAAI;AACF,oBAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC3C;gBAAE,OAAO,KAAK,EAAE;oBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;gBACrD;gBACA;YACF;;YAGA,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE;AAC5C,gBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;AAC7D,gBAAA,IAAI;AACF,oBAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC3C;gBAAE,OAAO,KAAK,EAAE;oBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;gBACrD;gBACA;YACF;;YAGA,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE;AAC5C,gBAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;AAC7D,gBAAA,IAAI;AACF,oBAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC5C;gBAAE,OAAO,KAAK,EAAE;oBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;gBACrD;YACF;QACF;IACF;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,MAAmB,EAAA;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;;QAG9B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;AAClD,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QAC3B;IACF;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;IAC/B;AAEA;;AAEG;IACI,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC5C;AAEA;;AAEG;AACI,IAAA,WAAW,CAAC,SAAiB,EAAA;;AAElC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC;AAEzE,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,IAAI,KAAK,GAAG,kBAAkB,EAAE;AAChC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;QACzE;AAEA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;IACI,UAAU,GAAA;QACf,IAAI,CAAC,WAAW,CAAC;AACf,YAAA,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE;AACtC,YAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;AAC/C,YAAA,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE;AAC5C,YAAA,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5C,SAAA,CAAC;IACJ;IAEO,WAAW,GAAA;QAChB,IAAI,CAAC,WAAW,CAAC;AACf,YAAA,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE;AACvC,YAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC9C,YAAA,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC3C,YAAA,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE;AAC7C,SAAA,CAAC;IACJ;IAEO,cAAc,GAAA;QACnB,IAAI,CAAC,WAAW,CAAC;AACf,YAAA,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC3C,YAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,EAAE;AAClD,SAAA,CAAC;IACJ;IAEO,cAAc,GAAA;QACnB,IAAI,CAAC,WAAW,CAAC;AACf,YAAA,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE;AAC5C,YAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;AAChD,SAAA,CAAC;IACJ;AAEO,IAAA,aAAa,CAAC,KAAa,EAAA;QAChC,IAAI,CAAC,WAAW,CAAC;AACf,YAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,EAAE;YAC9C,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE;AAClD,SAAA,CAAC;IACJ;AAEO,IAAA,WAAW,CAAC,MAAc,EAAE,KAAc,EAAE,IAAa,EAAA;QAC9D,IAAI,CAAC,WAAW,CAAC;AACf,YAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7C,YAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE;AAC1C,YAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;AAClC,YAAA,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;AACpC,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;AACnC,SAAA,CAAC;IACJ;AAEO,IAAA,mBAAmB,CAAC,MAAc,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC5C;AAEO,IAAA,UAAU,CAAC,SAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC;IAC7C;AAEO,IAAA,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,WAAW,GAAG,IAAI,EAAA;AAC/D,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAC9D;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC;IACzC;AAEA;;AAEG;IACI,oBAAoB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI;IAChC;AAEA;;AAEG;IACI,aAAa,GAAA;AAClB,QAAA,IAAI;;AAEF,YAAA,MAAM,aAAa,GAAG;gBACpB,MAAM;gBACN,cAAc;gBACd,QAAQ;gBACR,UAAU;gBACV,UAAU;gBACV,QAAQ;gBACR,SAAS;gBACT,IAAI;aACL;AAED,YAAA,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;gBAChC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,SAAS,EAAE;oBACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,CAAC;AAC1D,oBAAA,OAAO,KAAK;gBACd;YACF;AAEA,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AACnD,YAAA,OAAO,KAAK;QACd;IACF;AAEA;;AAEG;IACI,WAAW,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C;AAEA;;AAEG;AACI,IAAA,WAAW,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,kBAAkB,EAAE,EAAE,GAAG,QAAQ,EAAE;AACrD,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAkC,EAAE;AAC/D,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAClC,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAClD,YAAA,OAAO,KAAK;QACd;IACF;AAEA;;AAEG;IACI,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC;;AAGjD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;;AAG1B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;;AAGtB,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB,EAAE;AAEjC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC;IAChD;AACD;;;;;;ACpdD;;;AAGG;AAYH;;AAEG;AACH,IAAK,SAMJ;AAND,CAAA,UAAK,SAAS,EAAA;AACZ,IAAA,SAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,SAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,SAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACzB,CAAC,EANI,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AAmBd;;;AAGG;MACU,OAAO,CAAA;AAUlB,IAAA,WAAA,CAAY,MAAkB,EAAA;AAJtB,QAAA,IAAA,CAAA,MAAM,GAAc,SAAS,CAAC,aAAa;QAC3C,IAAA,CAAA,YAAY,GAAyB,IAAI;QACzC,IAAA,CAAA,YAAY,GAAwB,IAAI;;AAI9C,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;;AAGnC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAClC,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,SAAA,CAAC;;QAGF,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC1C,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAC7B,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AACnD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CACpC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,MAAM,CACZ;AACD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAC1C,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,MAAM,CACZ;IACH;AAEA;;AAEG;AACI,IAAA,MAAM,IAAI,GAAA;QACf,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,aAAa,EAAE;AAC3C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;YAC3C,OAAO,IAAI,CAAC,YAAa;QAC3B;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,YAAY;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAExC,QAAA,IAAI;;AAEF,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;YAG/B,IAAI,CAAC,kBAAkB,EAAE;;AAGzB,YAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE;;AAGhC,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK;AAC7B,YAAA,IAAI,CAAC,YAAY,IAAI;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;;AAGjC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI;QACzB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAc,CAAC;AACrC,YAAA,MAAM,KAAK;QACb;QAEA,OAAO,IAAI,CAAC,YAAa;IAC3B;AAEA;;AAEG;IACK,kBAAkB,GAAA;QACxB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAA2B,EAAE,CAAC,OAAO,KAAI;AACpE,YAAA,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC;;YAG7C,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YACnD,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC;YAC/C;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAmB,KAAI;;AAEzD,YAAA,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;gBACpB,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9D;YAEA,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,kBAAkB,EAAE;;gBAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAC9C,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;AACvB,oBAAA,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC;oBACpE,IAAI,CAAC,KAAK,EAAE;gBACd;qBAAO;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC;oBAC3D,IAAI,CAAC,IAAI,EAAE;gBACb;YACF;YACA,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,YAAY,EAAE;AACrC,gBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC;gBAChD,IAAI,CAAC,KAAK,EAAE;YACd;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACK,IAAA,mBAAmB,CAAC,IAAY,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAO,UAAU,CAAC,QAAQ;AACzD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,UAAU,CAAC,MAAM;AACrD,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;AACK,IAAA,MAAM,mBAAmB,CAAC,OAAO,GAAG,KAAK,EAAA;AAC/C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;QAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,MAAM,UAAU,GAAG,MAAK;AACtB,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE;AAC3C,oBAAA,OAAO,EAAE;oBACT;gBACF;gBAEA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE;AACpC,oBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;oBAC5D;gBACF;AAEA,gBAAA,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;AAC7B,YAAA,CAAC;AAED,YAAA,UAAU,EAAE;AACd,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,MAAM,KAAK,GAAA;QAChB,OAAO,IAAI,CAAC,YAAa;IAC3B;AAEA;;AAEG;IACI,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,KAAK;IACxC;AAEA;;AAEG;IACI,IAAI,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;AAE3C,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;QAClC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;;;AAIlD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;AACpE,QAAA,IAAI,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE;AACxC,YAAA,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC;QAC5E;;AAGA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;AACxE,QAAA,IAAI,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE;AAC1C,YAAA,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC;QACvF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI;IACxB;AAEA;;AAEG;IACI,KAAK,GAAA;QACV,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;AAE3C,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;QACnC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;;;AAIlD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;AACpE,QAAA,IAAI,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE;AACxC,YAAA,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC;QAC7E;;AAGA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;AACxE,QAAA,IAAI,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE;AAC1C,YAAA,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC;QACvF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI;IACzB;AAEA;;AAEG;IACI,MAAM,GAAA;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;AAC9C,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,KAAK,EAAE;QACd;aAAO;YACL,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA;;AAEG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAEtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI;IAC5B;AAEA;;AAEG;IACI,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAEtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI;IAC5B;AAEA;;AAEG;IACI,YAAY,GAAA;QACjB,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAErC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,oBAAoB,EAAE,IAAI,CAAC;IAC/D;AAEA;;AAEG;IACI,YAAY,GAAA;QACjB,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAEpC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,oBAAoB,EAAE,KAAK,CAAC;IAChE;AAEA;;AAEG;AACI,IAAA,aAAa,CAAC,KAAa,EAAA;QAChC,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC;AAEnD,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC;IAC5C;AAEA;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACvB;AAEA;;AAEG;IACI,WAAW,CAAC,IAAY,EAAE,QAA8B,EAAA;QAC7D,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,mBAAkC,EAAE;YACrF,IAAI;YACJ,QAAQ;AACR,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,SAAA,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,QAAQ,CAAC,QAAsB,EAAA;QACpC,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AAElE,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,IAAI,CACd;QAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAgC,EAAE,QAAQ,CAAC;IAC1E;AAEA;;AAEG;IACI,MAAM,GAAA;QACX,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC;AAErC,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE;AACxC,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,WAAW,EAAE,IAAI;AAClB,SAAA,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAiC,EAAE,EAAE,CAAC;IACrE;AAEA;;AAEG;AACI,IAAA,YAAY,CAAC,OAA4B,EAAA;QAC9C,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC;;AAG3C,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;;QAG3D,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAmC,EAAE,OAAO,CAAC;IAC5E;AAEA;;AAEG;AACI,IAAA,QAAQ,CAAC,KAAgC,EAAA;QAC9C,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC;QAE7C,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAkC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACnF;AAEA;;AAEG;AACI,IAAA,SAAS,CAAC,MAAc,EAAA;QAC7B,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,CAAC;QAE/C,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC;QACtD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAmC,EAAE,EAAE,MAAM,EAAE,CAAC;IAC/E;AAEA;;AAEG;IACI,KAAK,CAAC,SAAiB,EAAE,UAAgC,EAAA;QAC9D,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,CAAC;AAElD,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAiC,EAAE;AAC9D,YAAA,IAAI,EAAE,SAAS;YACf,UAAU;AACV,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,SAAA,CAAC;IACJ;AAEA;;AAEG;IACI,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;IACzC;AAEA;;AAEG;IACI,aAAa,CAClB,IAAY,EACZ,QAA4C,EAAA;QAE5C,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;;AAGtE,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,cAAc,CAAC;AACnD,QAAA,CAAC;IACH;AAEA;;AAEG;IACI,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;IAC3C;AAEA;;AAEG;IACI,SAAS,GAAA;QACd,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;AAEG;IACI,UAAU,GAAA;QACf,OAAO,WAAW,CAAC,OAAO;IAC5B;AAEA;;AAEG;IACI,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACxC;AAEA;;AAEG;IACI,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACzC;AAEA;;AAEG;IACK,WAAW,GAAA;QACjB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,KAAK,EAAE;AACnC,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;QACtD;IACF;AAEA;;AAEG;IACI,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;;AAGtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;;AAG5B,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS;;AAGjC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI;AAEzB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACvC;AACD;;AClgBD;;;;;;;;;;;;;;;AAeG;AACG,SAAU,iBAAiB,CAAC,MAAkB,EAAA;AAClD,IAAA,MAAM,MAAM,GAAGA,OAAG,CAAiB,IAAI,CAAC;IAExCC,aAAS,CAAC,MAAK;AACb,QAAA,IAAI;YACF,MAAM,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;AAClC,YAAA,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QACrB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;QAC/D;AACF,IAAA,CAAC,CAAC;IAEFC,eAAW,CAAC,MAAK;AACf,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,YAAA,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;AACtB,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI;QACrB;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACf;AAEA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACG,SAAU,yBAAyB,CAAC,MAAkB,EAAA;AAC1D,IAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAExC,MAAM,IAAI,GAAG,MAAK;AAChB,QAAA,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE;AACtB,IAAA,CAAC;IAED,MAAM,KAAK,GAAG,MAAK;AACjB,QAAA,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE;AACvB,IAAA,CAAC;IAED,MAAM,MAAM,GAAG,MAAK;AAClB,QAAA,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE;AACxB,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,OAAe,KAAI;AACtC,QAAA,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;AACpC,IAAA,CAAC;IAED,OAAO;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,WAAW;KACZ;AACH;;;;;"}
@@ -0,0 +1,101 @@
1
+ <script lang="ts">
2
+ import { onMount, onDestroy } from 'svelte';
3
+ import { HelpdeskWidget, type HelpdeskWidgetConfig, type WidgetEventHandler } from '../../src/index';
4
+
5
+ /**
6
+ * Svelte component for the Helpdesk Widget
7
+ *
8
+ * This component provides a declarative way to add the widget to your app.
9
+ * The widget loads in an iframe and doesn't render any visible children.
10
+ *
11
+ * @example
12
+ * ```svelte
13
+ * <script>
14
+ * import { HelpdeskWidget } from '@weldsuite/helpdesk-widget-sdk/svelte';
15
+ * </script>
16
+ *
17
+ * <h1>My App</h1>
18
+ * <HelpdeskWidget widgetId="your-widget-id" />
19
+ * ```
20
+ *
21
+ * @example With event handlers
22
+ * ```svelte
23
+ * <script>
24
+ * import { HelpdeskWidget } from '@weldsuite/helpdesk-widget-sdk/svelte';
25
+ *
26
+ * const handleReady = (event) => {
27
+ * console.log('Widget ready', event);
28
+ * };
29
+ * </script>
30
+ *
31
+ * <HelpdeskWidget
32
+ * widgetId="your-widget-id"
33
+ * onReady={handleReady}
34
+ * />
35
+ * ```
36
+ */
37
+
38
+ export let widgetId: string;
39
+ export let baseUrl: string | undefined = undefined;
40
+ export let onReady: WidgetEventHandler | undefined = undefined;
41
+ export let onOpened: WidgetEventHandler | undefined = undefined;
42
+ export let onClosed: WidgetEventHandler | undefined = undefined;
43
+ export let onError: WidgetEventHandler | undefined = undefined;
44
+
45
+ let widget: HelpdeskWidget | null = null;
46
+
47
+ onMount(() => {
48
+ const config: HelpdeskWidgetConfig = {
49
+ widgetId,
50
+ baseUrl,
51
+ onReady,
52
+ onOpened,
53
+ onClosed,
54
+ onError,
55
+ };
56
+
57
+ try {
58
+ widget = new HelpdeskWidget(config);
59
+ widget.init();
60
+ } catch (error) {
61
+ console.error('Failed to initialize Helpdesk Widget:', error);
62
+ }
63
+ });
64
+
65
+ onDestroy(() => {
66
+ if (widget) {
67
+ widget.destroy();
68
+ widget = null;
69
+ }
70
+ });
71
+
72
+ /**
73
+ * Show the widget programmatically
74
+ */
75
+ export function show() {
76
+ widget?.show();
77
+ }
78
+
79
+ /**
80
+ * Hide the widget programmatically
81
+ */
82
+ export function hide() {
83
+ widget?.hide();
84
+ }
85
+
86
+ /**
87
+ * Toggle widget visibility programmatically
88
+ */
89
+ export function toggle() {
90
+ widget?.toggle();
91
+ }
92
+
93
+ /**
94
+ * Send a message to the widget
95
+ */
96
+ export function sendMessage(message: any) {
97
+ widget?.sendMessage(message);
98
+ }
99
+ </script>
100
+
101
+ <!-- Widget loads in iframe, no visible component needed -->
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Svelte integration for Helpdesk Widget SDK
3
+ *
4
+ * @example
5
+ * ```svelte
6
+ * <script>
7
+ * import { HelpdeskWidget } from '@weldsuite/helpdesk-widget-sdk/svelte';
8
+ * </script>
9
+ *
10
+ * <h1>My App</h1>
11
+ * <HelpdeskWidget widgetId="your-widget-id" />
12
+ * ```
13
+ *
14
+ * @example With programmatic control
15
+ * ```svelte
16
+ * <script>
17
+ * import { HelpdeskWidget } from '@weldsuite/helpdesk-widget-sdk/svelte';
18
+ *
19
+ * let widgetComponent;
20
+ *
21
+ * const openSupport = () => {
22
+ * widgetComponent?.open();
23
+ * };
24
+ * </script>
25
+ *
26
+ * <button on:click={openSupport}>Show Support</button>
27
+ * <HelpdeskWidget bind:this={widgetComponent} widgetId="your-widget-id" />
28
+ * ```
29
+ */
30
+
31
+ export { default as HelpdeskWidget } from './HelpdeskWidget.svelte';
32
+
33
+ // Re-export core types and configs for convenience
34
+ export type {
35
+ WeldConfig,
36
+ HelpdeskWidgetConfig,
37
+ WidgetEventType,
38
+ WidgetEvent,
39
+ WidgetEventHandler,
40
+ } from '../../src/index';
41
+
42
+ export {
43
+ DEFAULT_CONFIG,
44
+ WeldSDK,
45
+ HelpdeskWidget as HelpdeskWidgetClass,
46
+ } from '../../src/index';
@@ -0,0 +1,4 @@
1
+ declare module '*.svelte' {
2
+ import type { SvelteComponent } from 'svelte';
3
+ export default class extends SvelteComponent<any, any, any> {}
4
+ }
@@ -0,0 +1,46 @@
1
+ <script setup lang="ts">
2
+ import { useHelpdeskWidget } from './useHelpdeskWidget';
3
+ import type { HelpdeskWidgetConfig } from '../../src/index';
4
+
5
+ /**
6
+ * Vue 3 component for the Helpdesk Widget
7
+ *
8
+ * This component provides a declarative way to add the widget to your app.
9
+ * The widget loads in an iframe and doesn't render any visible children.
10
+ *
11
+ * @example
12
+ * ```vue
13
+ * <script setup>
14
+ * import { HelpdeskWidget } from '@weldsuite/helpdesk-widget-sdk/vue';
15
+ * </script>
16
+ *
17
+ * <template>
18
+ * <div>
19
+ * <h1>My App</h1>
20
+ * <HelpdeskWidget widget-id="your-widget-id" />
21
+ * </div>
22
+ * </template>
23
+ * ```
24
+ *
25
+ * @example With event handlers
26
+ * ```vue
27
+ * <HelpdeskWidget
28
+ * widget-id="your-widget-id"
29
+ * :on-ready="(event) => console.log('Ready', event)"
30
+ * :on-opened="(event) => console.log('Opened', event)"
31
+ * />
32
+ * ```
33
+ */
34
+
35
+ interface Props extends HelpdeskWidgetConfig {
36
+ widgetId: string;
37
+ }
38
+
39
+ const props = defineProps<Props>();
40
+
41
+ useHelpdeskWidget(props);
42
+ </script>
43
+
44
+ <template>
45
+ <!-- Widget loads in iframe, no visible component needed -->
46
+ </template>