@qontinui/ui-bridge 0.1.1
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.
- package/dist/control/index.d.mts +134 -0
- package/dist/control/index.d.ts +134 -0
- package/dist/control/index.js +924 -0
- package/dist/control/index.js.map +1 -0
- package/dist/control/index.mjs +919 -0
- package/dist/control/index.mjs.map +1 -0
- package/dist/core/index.d.mts +52 -0
- package/dist/core/index.d.ts +52 -0
- package/dist/core/index.js +1424 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +1409 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/debug/index.d.mts +93 -0
- package/dist/debug/index.d.ts +93 -0
- package/dist/debug/index.js +673 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/debug/index.mjs +664 -0
- package/dist/debug/index.mjs.map +1 -0
- package/dist/index.d.mts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +4719 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +4665 -0
- package/dist/index.mjs.map +1 -0
- package/dist/metrics-BCG7z7Aq.d.mts +147 -0
- package/dist/metrics-QCnK0EFw.d.ts +147 -0
- package/dist/react/index.d.mts +786 -0
- package/dist/react/index.d.ts +786 -0
- package/dist/react/index.js +4312 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +4290 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/registry-CT6BVVKr.d.mts +253 -0
- package/dist/registry-D4mQ01B3.d.ts +253 -0
- package/dist/render-log/index.d.mts +340 -0
- package/dist/render-log/index.d.ts +340 -0
- package/dist/render-log/index.js +702 -0
- package/dist/render-log/index.js.map +1 -0
- package/dist/render-log/index.mjs +695 -0
- package/dist/render-log/index.mjs.map +1 -0
- package/dist/types-BDkXy5si.d.ts +354 -0
- package/dist/types-BpvpStn3.d.mts +802 -0
- package/dist/types-BpvpStn3.d.ts +802 -0
- package/dist/types-DdJD9yw5.d.mts +354 -0
- package/dist/websocket-client-B2LC9CYc.d.mts +124 -0
- package/dist/websocket-client-DupH0X7B.d.ts +124 -0
- package/package.json +83 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/element-identifier.ts","../../src/core/registry.ts","../../src/core/websocket-client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Element Identification Module\n *\n * Provides utilities for identifying DOM elements using multiple strategies:\n * 1. data-ui-id (explicit UI Bridge identifier - preferred)\n * 2. data-testid (testing library convention)\n * 3. data-awas-element (legacy support)\n * 4. id (HTML id attribute)\n * 5. Generated XPath/CSS selector (fallback)\n */\n\nimport type { ElementIdentifier } from './types';\n\n/**\n * Data attributes used for element identification (in priority order)\n */\nexport const ID_ATTRIBUTES = ['data-ui-id', 'data-testid', 'data-awas-element', 'id'] as const;\n\n/**\n * Generate a unique XPath for an element\n */\nexport function generateXPath(element: HTMLElement): string {\n if (element.id) {\n return `//*[@id=\"${element.id}\"]`;\n }\n\n const parts: string[] = [];\n let current: HTMLElement | null = element;\n\n while (current && current.nodeType === Node.ELEMENT_NODE) {\n let selector = current.nodeName.toLowerCase();\n\n // Check for identifying attributes\n const uiId = current.getAttribute('data-ui-id');\n if (uiId) {\n selector += `[@data-ui-id=\"${uiId}\"]`;\n parts.unshift(selector);\n break;\n }\n\n const testId = current.getAttribute('data-testid');\n if (testId) {\n selector += `[@data-testid=\"${testId}\"]`;\n parts.unshift(selector);\n break;\n }\n\n const id = current.id;\n if (id) {\n selector += `[@id=\"${id}\"]`;\n parts.unshift(selector);\n break;\n }\n\n // Calculate position among siblings with same tag\n const parentEl: HTMLElement | null = current.parentElement;\n if (parentEl) {\n const currentEl = current;\n const siblings = Array.from(parentEl.children).filter(\n (child): child is Element => child.nodeName === currentEl.nodeName\n );\n if (siblings.length > 1) {\n const index = siblings.indexOf(currentEl) + 1;\n selector += `[${index}]`;\n }\n }\n\n parts.unshift(selector);\n current = parentEl;\n }\n\n return '/' + parts.join('/');\n}\n\n/**\n * Generate a unique CSS selector for an element\n */\nexport function generateCSSSelector(element: HTMLElement): string {\n // Check for identifying attributes first\n const uiId = element.getAttribute('data-ui-id');\n if (uiId) {\n return `[data-ui-id=\"${uiId}\"]`;\n }\n\n const testId = element.getAttribute('data-testid');\n if (testId) {\n return `[data-testid=\"${testId}\"]`;\n }\n\n const awasId = element.getAttribute('data-awas-element');\n if (awasId) {\n return `[data-awas-element=\"${awasId}\"]`;\n }\n\n if (element.id) {\n return `#${CSS.escape(element.id)}`;\n }\n\n // Build a path selector\n const path: string[] = [];\n let current: HTMLElement | null = element;\n\n while (current && current.nodeType === Node.ELEMENT_NODE) {\n let selector = current.nodeName.toLowerCase();\n\n // Check for unique identifiers on ancestors\n const parentUiId = current.getAttribute('data-ui-id');\n if (parentUiId && current !== element) {\n path.unshift(`[data-ui-id=\"${parentUiId}\"]`);\n break;\n }\n\n const parentTestId = current.getAttribute('data-testid');\n if (parentTestId && current !== element) {\n path.unshift(`[data-testid=\"${parentTestId}\"]`);\n break;\n }\n\n if (current.id) {\n path.unshift(`#${CSS.escape(current.id)}`);\n break;\n }\n\n // Add nth-child if needed for uniqueness\n const parentEl: HTMLElement | null = current.parentElement;\n if (parentEl) {\n const currentEl = current;\n const siblings = Array.from(parentEl.children);\n const sameTagSiblings = siblings.filter(\n (s): s is Element => s.nodeName === currentEl.nodeName\n );\n\n if (sameTagSiblings.length > 1) {\n const index = siblings.indexOf(currentEl) + 1;\n selector += `:nth-child(${index})`;\n }\n }\n\n path.unshift(selector);\n current = current.parentElement;\n }\n\n return path.join(' > ');\n}\n\n/**\n * Get the best identifier for an element based on available attributes\n */\nexport function getBestIdentifier(element: HTMLElement): string {\n // Priority order\n const uiId = element.getAttribute('data-ui-id');\n if (uiId) return uiId;\n\n const testId = element.getAttribute('data-testid');\n if (testId) return testId;\n\n const awasId = element.getAttribute('data-awas-element');\n if (awasId) return awasId;\n\n if (element.id) return element.id;\n\n // Fallback to generated CSS selector\n return generateCSSSelector(element);\n}\n\n/**\n * Create a full ElementIdentifier object for an element\n */\nexport function createElementIdentifier(element: HTMLElement): ElementIdentifier {\n return {\n uiId: element.getAttribute('data-ui-id') || undefined,\n testId: element.getAttribute('data-testid') || undefined,\n awasId: element.getAttribute('data-awas-element') || undefined,\n htmlId: element.id || undefined,\n xpath: generateXPath(element),\n selector: generateCSSSelector(element),\n };\n}\n\n/**\n * Find an element by its identifier\n *\n * Tries each identification method in priority order\n */\nexport function findElementByIdentifier(\n identifier: string | ElementIdentifier,\n root: ParentNode = document\n): HTMLElement | null {\n // If string, try each identification method\n if (typeof identifier === 'string') {\n // Try data-ui-id\n const byUiId = root.querySelector<HTMLElement>(`[data-ui-id=\"${identifier}\"]`);\n if (byUiId) return byUiId;\n\n // Try data-testid\n const byTestId = root.querySelector<HTMLElement>(`[data-testid=\"${identifier}\"]`);\n if (byTestId) return byTestId;\n\n // Try data-awas-element\n const byAwasId = root.querySelector<HTMLElement>(`[data-awas-element=\"${identifier}\"]`);\n if (byAwasId) return byAwasId;\n\n // Try id\n const byId = root.querySelector<HTMLElement>(`#${CSS.escape(identifier)}`);\n if (byId) return byId;\n\n // Try as CSS selector\n try {\n const bySelector = root.querySelector<HTMLElement>(identifier);\n if (bySelector) return bySelector;\n } catch {\n // Invalid selector, ignore\n }\n\n // Try as XPath\n try {\n const result = document.evaluate(\n identifier,\n root,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n if (result.singleNodeValue instanceof HTMLElement) {\n return result.singleNodeValue;\n }\n } catch {\n // Invalid XPath, ignore\n }\n\n return null;\n }\n\n // If ElementIdentifier object, try in priority order\n if (identifier.uiId) {\n const el = root.querySelector<HTMLElement>(`[data-ui-id=\"${identifier.uiId}\"]`);\n if (el) return el;\n }\n\n if (identifier.testId) {\n const el = root.querySelector<HTMLElement>(`[data-testid=\"${identifier.testId}\"]`);\n if (el) return el;\n }\n\n if (identifier.awasId) {\n const el = root.querySelector<HTMLElement>(`[data-awas-element=\"${identifier.awasId}\"]`);\n if (el) return el;\n }\n\n if (identifier.htmlId) {\n const el = root.querySelector<HTMLElement>(`#${CSS.escape(identifier.htmlId)}`);\n if (el) return el;\n }\n\n // Try CSS selector\n if (identifier.selector) {\n try {\n const el = root.querySelector<HTMLElement>(identifier.selector);\n if (el) return el;\n } catch {\n // Invalid selector\n }\n }\n\n // Try XPath\n if (identifier.xpath) {\n try {\n const result = document.evaluate(\n identifier.xpath,\n root,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n if (result.singleNodeValue instanceof HTMLElement) {\n return result.singleNodeValue;\n }\n } catch {\n // Invalid XPath\n }\n }\n\n return null;\n}\n\n/**\n * Find all elements matching an identifier pattern\n */\nexport function findAllElementsByIdentifier(\n pattern: string,\n root: ParentNode = document\n): HTMLElement[] {\n const results: HTMLElement[] = [];\n\n // Try as CSS selector first (supports wildcards better)\n try {\n const elements = root.querySelectorAll<HTMLElement>(pattern);\n results.push(...Array.from(elements));\n if (results.length > 0) return results;\n } catch {\n // Not a valid CSS selector\n }\n\n // Try partial matching on data attributes\n const partials = [\n `[data-ui-id*=\"${pattern}\"]`,\n `[data-testid*=\"${pattern}\"]`,\n `[data-awas-element*=\"${pattern}\"]`,\n `[id*=\"${pattern}\"]`,\n ];\n\n for (const selector of partials) {\n try {\n const elements = root.querySelectorAll<HTMLElement>(selector);\n for (const el of elements) {\n if (!results.includes(el)) {\n results.push(el);\n }\n }\n } catch {\n // Invalid selector\n }\n }\n\n return results;\n}\n\n/**\n * Check if an element matches an identifier\n */\nexport function elementMatchesIdentifier(\n element: HTMLElement,\n identifier: string | ElementIdentifier\n): boolean {\n if (typeof identifier === 'string') {\n return (\n element.getAttribute('data-ui-id') === identifier ||\n element.getAttribute('data-testid') === identifier ||\n element.getAttribute('data-awas-element') === identifier ||\n element.id === identifier ||\n element.matches(identifier)\n );\n }\n\n return (\n (identifier.uiId && element.getAttribute('data-ui-id') === identifier.uiId) ||\n (identifier.testId && element.getAttribute('data-testid') === identifier.testId) ||\n (identifier.awasId && element.getAttribute('data-awas-element') === identifier.awasId) ||\n (identifier.htmlId && element.id === identifier.htmlId) ||\n false\n );\n}\n","/**\n * Element and Component Registry\n *\n * Central registry for all UI elements and components registered with UI Bridge.\n * Provides methods for registration, lookup, and lifecycle management.\n */\n\nimport type {\n RegisteredElement,\n RegisteredComponent,\n Workflow,\n ElementState,\n ElementType,\n StandardAction,\n CustomAction,\n BridgeEvent,\n BridgeEventType,\n BridgeEventListener,\n BridgeSnapshot,\n UIState,\n UIStateGroup,\n UITransition,\n PathResult,\n TransitionResult,\n NavigationResult,\n StateSnapshot,\n} from './types';\nimport { createElementIdentifier } from './element-identifier';\n\n/**\n * Get the current state of an element\n */\nfunction getElementState(element: HTMLElement): ElementState {\n const rect = element.getBoundingClientRect();\n const computedStyle = window.getComputedStyle(element);\n\n const state: ElementState = {\n visible: isElementVisible(element, rect, computedStyle),\n enabled: !isElementDisabled(element),\n focused: document.activeElement === element,\n rect: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n },\n textContent: element.textContent?.trim() || undefined,\n computedStyles: {\n display: computedStyle.display,\n visibility: computedStyle.visibility,\n opacity: computedStyle.opacity,\n pointerEvents: computedStyle.pointerEvents,\n },\n };\n\n // Add input-specific state\n if (element instanceof HTMLInputElement) {\n state.value = element.value;\n if (element.type === 'checkbox' || element.type === 'radio') {\n state.checked = element.checked;\n }\n } else if (element instanceof HTMLTextAreaElement) {\n state.value = element.value;\n } else if (element instanceof HTMLSelectElement) {\n state.value = element.value;\n state.selectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value);\n }\n\n return state;\n}\n\n/**\n * Check if an element is visible\n */\nfunction isElementVisible(\n element: HTMLElement,\n rect: DOMRect,\n style: CSSStyleDeclaration\n): boolean {\n if (rect.width === 0 || rect.height === 0) return false;\n if (style.display === 'none') return false;\n if (style.visibility === 'hidden') return false;\n if (parseFloat(style.opacity) === 0) return false;\n\n // Check if in viewport\n const inViewport =\n rect.top < window.innerHeight &&\n rect.bottom > 0 &&\n rect.left < window.innerWidth &&\n rect.right > 0;\n\n return inViewport;\n}\n\n/**\n * Check if an element is disabled\n */\nfunction isElementDisabled(element: HTMLElement): boolean {\n if ('disabled' in element && (element as HTMLButtonElement).disabled) {\n return true;\n }\n if (element.getAttribute('aria-disabled') === 'true') {\n return true;\n }\n return false;\n}\n\n/**\n * Infer available actions based on element type\n */\nfunction inferActions(type: ElementType): StandardAction[] {\n const baseActions: StandardAction[] = ['focus', 'blur', 'hover'];\n\n switch (type) {\n case 'button':\n return [...baseActions, 'click', 'doubleClick', 'rightClick'];\n case 'input':\n return [...baseActions, 'click', 'type', 'clear'];\n case 'textarea':\n return [...baseActions, 'click', 'type', 'clear'];\n case 'select':\n return [...baseActions, 'click', 'select'];\n case 'checkbox':\n return [...baseActions, 'click', 'check', 'uncheck', 'toggle'];\n case 'radio':\n return [...baseActions, 'click', 'check'];\n case 'link':\n return [...baseActions, 'click'];\n case 'form':\n return ['focus', 'blur'];\n case 'menu':\n case 'menuitem':\n return [...baseActions, 'click'];\n case 'tab':\n return [...baseActions, 'click'];\n case 'dialog':\n return ['focus', 'blur'];\n case 'custom':\n default:\n return [...baseActions, 'click'];\n }\n}\n\n/**\n * Infer element type from HTML element\n */\nfunction inferElementType(element: HTMLElement): ElementType {\n const tagName = element.tagName.toLowerCase();\n const role = element.getAttribute('role');\n\n // Check role first\n if (role) {\n switch (role) {\n case 'button':\n return 'button';\n case 'textbox':\n return 'input';\n case 'checkbox':\n return 'checkbox';\n case 'radio':\n return 'radio';\n case 'link':\n return 'link';\n case 'listbox':\n case 'combobox':\n return 'select';\n case 'menu':\n return 'menu';\n case 'menuitem':\n return 'menuitem';\n case 'tab':\n return 'tab';\n case 'dialog':\n return 'dialog';\n }\n }\n\n // Check tag name\n switch (tagName) {\n case 'button':\n return 'button';\n case 'input': {\n const inputType = (element as HTMLInputElement).type;\n if (inputType === 'checkbox') return 'checkbox';\n if (inputType === 'radio') return 'radio';\n if (inputType === 'submit' || inputType === 'button') return 'button';\n return 'input';\n }\n case 'textarea':\n return 'textarea';\n case 'select':\n return 'select';\n case 'a':\n return 'link';\n case 'form':\n return 'form';\n default:\n return 'custom';\n }\n}\n\n/**\n * Registry options\n */\nexport interface RegistryOptions {\n /** Enable verbose logging */\n verbose?: boolean;\n /** Callback when an event occurs */\n onEvent?: BridgeEventListener;\n}\n\n/**\n * UI Bridge Registry\n *\n * Central registry for managing elements, components, and workflows.\n */\nexport class UIBridgeRegistry {\n private elements = new Map<string, RegisteredElement>();\n private components = new Map<string, RegisteredComponent>();\n private workflows = new Map<string, Workflow>();\n private eventListeners = new Map<BridgeEventType, Set<BridgeEventListener>>();\n private options: RegistryOptions;\n\n // State management\n private states = new Map<string, UIState>();\n private stateGroups = new Map<string, UIStateGroup>();\n private transitions = new Map<string, UITransition>();\n private activeStates = new Set<string>();\n\n constructor(options: RegistryOptions = {}) {\n this.options = options;\n }\n\n /**\n * Emit an event\n */\n private emit<T>(type: BridgeEventType, data: T): void {\n const event: BridgeEvent<T> = {\n type,\n timestamp: Date.now(),\n data,\n };\n\n // Call global handler\n this.options.onEvent?.(event);\n\n // Call specific listeners\n const listeners = this.eventListeners.get(type);\n if (listeners) {\n for (const listener of listeners) {\n try {\n listener(event);\n } catch (error) {\n console.error(`Error in event listener for ${type}:`, error);\n }\n }\n }\n\n if (this.options.verbose) {\n console.log('[UIBridge]', type, data);\n }\n }\n\n /**\n * Register an event listener\n */\n on<T = unknown>(type: BridgeEventType, listener: BridgeEventListener<T>): () => void {\n if (!this.eventListeners.has(type)) {\n this.eventListeners.set(type, new Set());\n }\n this.eventListeners.get(type)!.add(listener as BridgeEventListener);\n\n // Return unsubscribe function\n return () => {\n this.eventListeners.get(type)?.delete(listener as BridgeEventListener);\n };\n }\n\n /**\n * Remove an event listener\n */\n off<T = unknown>(type: BridgeEventType, listener: BridgeEventListener<T>): void {\n this.eventListeners.get(type)?.delete(listener as BridgeEventListener);\n }\n\n /**\n * Register an element\n */\n registerElement(\n id: string,\n element: HTMLElement,\n options: {\n type?: ElementType;\n label?: string;\n actions?: StandardAction[];\n customActions?: Record<string, CustomAction>;\n } = {}\n ): RegisteredElement {\n const type = options.type ?? inferElementType(element);\n const actions = options.actions ?? inferActions(type);\n\n // Set data-ui-id attribute on the DOM element for external tools (Chrome extension, etc.)\n // This allows tools to find and interact with registered elements via DOM queries\n element.setAttribute('data-ui-id', id);\n\n const registered: RegisteredElement = {\n id,\n element,\n type,\n label: options.label,\n actions,\n customActions: options.customActions,\n getState: () => getElementState(element),\n getIdentifier: () => createElementIdentifier(element),\n registeredAt: Date.now(),\n mounted: true,\n };\n\n this.elements.set(id, registered);\n this.emit('element:registered', { id, type, label: options.label });\n\n return registered;\n }\n\n /**\n * Unregister an element\n */\n unregisterElement(id: string): boolean {\n const registered = this.elements.get(id);\n if (registered) {\n registered.mounted = false;\n // Remove data-ui-id attribute from DOM element\n registered.element.removeAttribute('data-ui-id');\n this.elements.delete(id);\n this.emit('element:unregistered', { id });\n return true;\n }\n return false;\n }\n\n /**\n * Get a registered element\n */\n getElement(id: string): RegisteredElement | undefined {\n return this.elements.get(id);\n }\n\n /**\n * Get all registered elements\n */\n getAllElements(): RegisteredElement[] {\n return Array.from(this.elements.values());\n }\n\n /**\n * Find element by DOM element reference\n */\n findByDOMElement(element: HTMLElement): RegisteredElement | undefined {\n for (const registered of this.elements.values()) {\n if (registered.element === element) {\n return registered;\n }\n }\n return undefined;\n }\n\n /**\n * Register a component\n */\n registerComponent(\n id: string,\n options: {\n name: string;\n description?: string;\n actions?: Array<{\n id: string;\n label?: string;\n description?: string;\n handler: (params?: unknown) => unknown | Promise<unknown>;\n }>;\n elementIds?: string[];\n }\n ): RegisteredComponent {\n const registered: RegisteredComponent = {\n id,\n name: options.name,\n description: options.description,\n actions:\n options.actions?.map((a) => ({\n id: a.id,\n label: a.label,\n description: a.description,\n handler: a.handler,\n })) ?? [],\n elementIds: options.elementIds,\n registeredAt: Date.now(),\n mounted: true,\n };\n\n this.components.set(id, registered);\n this.emit('component:registered', { id, name: options.name });\n\n return registered;\n }\n\n /**\n * Unregister a component\n */\n unregisterComponent(id: string): boolean {\n const component = this.components.get(id);\n if (component) {\n component.mounted = false;\n this.components.delete(id);\n this.emit('component:unregistered', { id });\n return true;\n }\n return false;\n }\n\n /**\n * Get a registered component\n */\n getComponent(id: string): RegisteredComponent | undefined {\n return this.components.get(id);\n }\n\n /**\n * Get all registered components\n */\n getAllComponents(): RegisteredComponent[] {\n return Array.from(this.components.values());\n }\n\n /**\n * Register a workflow\n */\n registerWorkflow(workflow: Workflow): Workflow {\n this.workflows.set(workflow.id, workflow);\n return workflow;\n }\n\n /**\n * Unregister a workflow\n */\n unregisterWorkflow(id: string): boolean {\n return this.workflows.delete(id);\n }\n\n /**\n * Get a workflow\n */\n getWorkflow(id: string): Workflow | undefined {\n return this.workflows.get(id);\n }\n\n /**\n * Get all workflows\n */\n getAllWorkflows(): Workflow[] {\n return Array.from(this.workflows.values());\n }\n\n // ==========================================================================\n // State Management\n // ==========================================================================\n\n /**\n * Register a state\n */\n registerState(state: UIState): UIState {\n this.states.set(state.id, state);\n this.emit('element:registered', { id: state.id, type: 'state', name: state.name });\n return state;\n }\n\n /**\n * Unregister a state\n */\n unregisterState(id: string): boolean {\n const state = this.states.get(id);\n if (state) {\n this.activeStates.delete(id);\n this.states.delete(id);\n this.emit('element:unregistered', { id, type: 'state' });\n return true;\n }\n return false;\n }\n\n /**\n * Get a registered state\n */\n getState(id: string): UIState | undefined {\n return this.states.get(id);\n }\n\n /**\n * Get all registered states\n */\n getAllStates(): UIState[] {\n return Array.from(this.states.values());\n }\n\n /**\n * Register a state group\n */\n registerStateGroup(group: UIStateGroup): UIStateGroup {\n this.stateGroups.set(group.id, group);\n return group;\n }\n\n /**\n * Unregister a state group\n */\n unregisterStateGroup(id: string): boolean {\n return this.stateGroups.delete(id);\n }\n\n /**\n * Get a state group\n */\n getStateGroup(id: string): UIStateGroup | undefined {\n return this.stateGroups.get(id);\n }\n\n /**\n * Get all state groups\n */\n getAllStateGroups(): UIStateGroup[] {\n return Array.from(this.stateGroups.values());\n }\n\n /**\n * Register a transition\n */\n registerTransition(transition: UITransition): UITransition {\n this.transitions.set(transition.id, transition);\n return transition;\n }\n\n /**\n * Unregister a transition\n */\n unregisterTransition(id: string): boolean {\n return this.transitions.delete(id);\n }\n\n /**\n * Get a transition\n */\n getTransition(id: string): UITransition | undefined {\n return this.transitions.get(id);\n }\n\n /**\n * Get all transitions\n */\n getAllTransitions(): UITransition[] {\n return Array.from(this.transitions.values());\n }\n\n /**\n * Get currently active states\n */\n getActiveStates(): string[] {\n return Array.from(this.activeStates);\n }\n\n /**\n * Check if a state is active\n */\n isStateActive(id: string): boolean {\n return this.activeStates.has(id);\n }\n\n /**\n * Activate a state\n */\n activateState(id: string): boolean {\n const state = this.states.get(id);\n if (!state) {\n return false;\n }\n\n // Check if blocked by another state\n for (const activeId of this.activeStates) {\n const activeState = this.states.get(activeId);\n if (activeState?.blocking && activeState.id !== id) {\n // Blocked by a modal/blocking state\n return false;\n }\n if (activeState?.blocks?.includes(id)) {\n // Specifically blocked by this state\n return false;\n }\n }\n\n const wasActive = this.activeStates.has(id);\n this.activeStates.add(id);\n\n if (!wasActive) {\n this.emit('element:stateChanged', {\n stateId: id,\n active: true,\n activeStates: this.getActiveStates(),\n });\n }\n\n return true;\n }\n\n /**\n * Deactivate a state\n */\n deactivateState(id: string): boolean {\n const wasActive = this.activeStates.has(id);\n this.activeStates.delete(id);\n\n if (wasActive) {\n this.emit('element:stateChanged', {\n stateId: id,\n active: false,\n activeStates: this.getActiveStates(),\n });\n }\n\n return wasActive;\n }\n\n /**\n * Activate multiple states\n */\n activateStates(ids: string[]): string[] {\n const activated: string[] = [];\n for (const id of ids) {\n if (this.activateState(id)) {\n activated.push(id);\n }\n }\n return activated;\n }\n\n /**\n * Deactivate multiple states\n */\n deactivateStates(ids: string[]): string[] {\n const deactivated: string[] = [];\n for (const id of ids) {\n if (this.deactivateState(id)) {\n deactivated.push(id);\n }\n }\n return deactivated;\n }\n\n /**\n * Activate a state group (all states in the group)\n */\n activateStateGroup(groupId: string): string[] {\n const group = this.stateGroups.get(groupId);\n if (!group) return [];\n return this.activateStates(group.states);\n }\n\n /**\n * Deactivate a state group (all states in the group)\n */\n deactivateStateGroup(groupId: string): string[] {\n const group = this.stateGroups.get(groupId);\n if (!group) return [];\n return this.deactivateStates(group.states);\n }\n\n /**\n * Check if a transition can be executed from current state\n */\n canExecuteTransition(transitionId: string): boolean {\n const transition = this.transitions.get(transitionId);\n if (!transition) return false;\n\n // At least one fromState must be active\n return transition.fromStates.some((stateId) => this.activeStates.has(stateId));\n }\n\n /**\n * Execute a transition\n */\n async executeTransition(transitionId: string): Promise<TransitionResult> {\n const startTime = performance.now();\n const transition = this.transitions.get(transitionId);\n\n if (!transition) {\n return {\n success: false,\n activatedStates: [],\n deactivatedStates: [],\n error: `Transition not found: ${transitionId}`,\n durationMs: performance.now() - startTime,\n };\n }\n\n if (!this.canExecuteTransition(transitionId)) {\n return {\n success: false,\n activatedStates: [],\n deactivatedStates: [],\n error: 'Precondition not met: none of the fromStates are active',\n failedPhase: 'precondition',\n durationMs: performance.now() - startTime,\n };\n }\n\n try {\n // Phase 1: Deactivate exit states\n const deactivated = this.deactivateStates(transition.exitStates);\n\n // Phase 2: Deactivate exit groups\n if (transition.exitGroups) {\n for (const groupId of transition.exitGroups) {\n deactivated.push(...this.deactivateStateGroup(groupId));\n }\n }\n\n // Phase 3: Execute actions (if any)\n // Note: Actual action execution happens in the workflow engine\n // Here we just track that the transition occurred\n\n // Phase 4: Activate states\n const activated = this.activateStates(transition.activateStates);\n\n // Phase 5: Activate groups\n if (transition.activateGroups) {\n for (const groupId of transition.activateGroups) {\n activated.push(...this.activateStateGroup(groupId));\n }\n }\n\n return {\n success: true,\n activatedStates: activated,\n deactivatedStates: deactivated,\n durationMs: performance.now() - startTime,\n };\n } catch (error) {\n return {\n success: false,\n activatedStates: [],\n deactivatedStates: [],\n error: error instanceof Error ? error.message : String(error),\n failedPhase: 'execution',\n durationMs: performance.now() - startTime,\n };\n }\n }\n\n /**\n * Find a path from current state to target states\n *\n * Uses a simple BFS algorithm for pathfinding.\n * For more advanced pathfinding (Dijkstra, A*), use the Python state manager service.\n */\n findPath(targetStates: string[]): PathResult {\n // Check if already at target\n if (targetStates.every((t) => this.activeStates.has(t))) {\n return {\n found: true,\n transitions: [],\n totalCost: 0,\n targetStates,\n estimatedSteps: 0,\n };\n }\n\n // BFS to find path\n const queue: { activeStates: Set<string>; path: string[]; cost: number }[] = [\n { activeStates: new Set(this.activeStates), path: [], cost: 0 },\n ];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n const stateKey = Array.from(current.activeStates).sort().join(',');\n\n if (visited.has(stateKey)) continue;\n visited.add(stateKey);\n\n // Check if target reached\n if (targetStates.every((t) => current.activeStates.has(t))) {\n return {\n found: true,\n transitions: current.path,\n totalCost: current.cost,\n targetStates,\n estimatedSteps: current.path.length,\n };\n }\n\n // Try each transition\n for (const transition of this.transitions.values()) {\n // Check if transition can be executed from current state\n const canExecute = transition.fromStates.some((s) => current.activeStates.has(s));\n if (!canExecute) continue;\n\n // Calculate new state after transition\n const newActive = new Set(current.activeStates);\n for (const s of transition.exitStates) newActive.delete(s);\n for (const s of transition.activateStates) newActive.add(s);\n\n const newCost = current.cost + (transition.pathCost ?? 1);\n\n queue.push({\n activeStates: newActive,\n path: [...current.path, transition.id],\n cost: newCost,\n });\n }\n }\n\n return {\n found: false,\n transitions: [],\n totalCost: 0,\n targetStates,\n estimatedSteps: 0,\n };\n }\n\n /**\n * Navigate to target states using pathfinding\n */\n async navigateTo(targetStates: string[]): Promise<NavigationResult> {\n const startTime = performance.now();\n const path = this.findPath(targetStates);\n\n if (!path.found) {\n return {\n success: false,\n path,\n executedTransitions: [],\n finalActiveStates: this.getActiveStates(),\n error: `No path found to target states: ${targetStates.join(', ')}`,\n durationMs: performance.now() - startTime,\n };\n }\n\n const executedTransitions: string[] = [];\n\n for (const transitionId of path.transitions) {\n const result = await this.executeTransition(transitionId);\n if (!result.success) {\n return {\n success: false,\n path,\n executedTransitions,\n finalActiveStates: this.getActiveStates(),\n error: result.error,\n durationMs: performance.now() - startTime,\n };\n }\n executedTransitions.push(transitionId);\n }\n\n return {\n success: true,\n path,\n executedTransitions,\n finalActiveStates: this.getActiveStates(),\n durationMs: performance.now() - startTime,\n };\n }\n\n /**\n * Create a state snapshot\n */\n createStateSnapshot(): StateSnapshot {\n return {\n timestamp: Date.now(),\n activeStates: this.getActiveStates(),\n states: this.getAllStates(),\n groups: this.getAllStateGroups(),\n transitions: this.getAllTransitions(),\n };\n }\n\n /**\n * Create a snapshot of the current state\n */\n createSnapshot(): BridgeSnapshot {\n return {\n timestamp: Date.now(),\n elements: this.getAllElements().map((el) => ({\n id: el.id,\n type: el.type,\n label: el.label,\n identifier: el.getIdentifier(),\n state: el.getState(),\n actions: el.actions,\n customActions: el.customActions ? Object.keys(el.customActions) : undefined,\n })),\n components: this.getAllComponents().map((comp) => ({\n id: comp.id,\n name: comp.name,\n description: comp.description,\n actions: comp.actions.map((a) => a.id),\n elementIds: comp.elementIds,\n })),\n workflows: this.getAllWorkflows().map((wf) => ({\n id: wf.id,\n name: wf.name,\n description: wf.description,\n stepCount: wf.steps.length,\n })),\n };\n }\n\n /**\n * Clear all registrations\n */\n clear(): void {\n this.elements.clear();\n this.components.clear();\n this.workflows.clear();\n this.eventListeners.clear();\n this.states.clear();\n this.stateGroups.clear();\n this.transitions.clear();\n this.activeStates.clear();\n }\n\n /**\n * Get registry statistics\n */\n getStats(): {\n elementCount: number;\n componentCount: number;\n workflowCount: number;\n mountedElementCount: number;\n mountedComponentCount: number;\n stateCount: number;\n stateGroupCount: number;\n transitionCount: number;\n activeStateCount: number;\n } {\n const elements = this.getAllElements();\n const components = this.getAllComponents();\n\n return {\n elementCount: elements.length,\n componentCount: components.length,\n workflowCount: this.workflows.size,\n mountedElementCount: elements.filter((e) => e.mounted).length,\n mountedComponentCount: components.filter((c) => c.mounted).length,\n stateCount: this.states.size,\n stateGroupCount: this.stateGroups.size,\n transitionCount: this.transitions.size,\n activeStateCount: this.activeStates.size,\n };\n }\n}\n\n/**\n * Default global registry instance\n */\nlet globalRegistry: UIBridgeRegistry | null = null;\n\n/**\n * Get or create the global registry\n */\nexport function getGlobalRegistry(): UIBridgeRegistry {\n if (!globalRegistry) {\n globalRegistry = new UIBridgeRegistry();\n }\n return globalRegistry;\n}\n\n/**\n * Set the global registry\n */\nexport function setGlobalRegistry(registry: UIBridgeRegistry): void {\n globalRegistry = registry;\n}\n\n/**\n * Reset the global registry\n */\nexport function resetGlobalRegistry(): void {\n globalRegistry?.clear();\n globalRegistry = null;\n}\n","/**\n * WebSocket Client for UI Bridge\n *\n * Provides real-time communication with UI Bridge server.\n */\n\nimport type {\n BridgeEvent,\n BridgeEventType,\n BridgeSnapshot,\n WSClientConfig,\n WSClientMessage,\n WSConnectionState,\n WSServerMessage,\n WSSubscriptionOptions,\n ActionRequest,\n ActionResponse,\n} from './types';\n\n/**\n * Generate unique message ID\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n\n/**\n * WebSocket client for UI Bridge\n */\nexport class UIBridgeWSClient {\n private ws: WebSocket | null = null;\n private config: Required<WSClientConfig>;\n private state: WSConnectionState = 'disconnected';\n private clientId: string | null = null;\n private reconnectAttempts = 0;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private pingTimer: ReturnType<typeof setInterval> | null = null;\n private pendingRequests = new Map<\n string,\n {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n }\n >();\n\n // Event listeners\n private connectionListeners = new Set<(state: WSConnectionState) => void>();\n private eventListeners = new Map<BridgeEventType | '*', Set<(event: BridgeEvent) => void>>();\n private errorListeners = new Set<(error: Error) => void>();\n\n // Current subscriptions\n private subscriptions: WSSubscriptionOptions = {};\n\n constructor(config: WSClientConfig) {\n this.config = {\n url: config.url,\n autoReconnect: config.autoReconnect ?? true,\n reconnectDelay: config.reconnectDelay ?? 1000,\n maxReconnectAttempts: config.maxReconnectAttempts ?? 10,\n pingInterval: config.pingInterval ?? 30000,\n connectionTimeout: config.connectionTimeout ?? 10000,\n };\n }\n\n /**\n * Get current connection state\n */\n get connectionState(): WSConnectionState {\n return this.state;\n }\n\n /**\n * Get assigned client ID\n */\n get id(): string | null {\n return this.clientId;\n }\n\n /**\n * Connect to the WebSocket server\n */\n connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.ws && this.state === 'connected') {\n resolve();\n return;\n }\n\n this.setState('connecting');\n\n try {\n this.ws = new WebSocket(this.config.url);\n } catch (error) {\n this.setState('disconnected');\n reject(error);\n return;\n }\n\n const connectionTimeout = setTimeout(() => {\n if (this.state === 'connecting') {\n this.ws?.close();\n this.setState('disconnected');\n reject(new Error('Connection timeout'));\n }\n }, this.config.connectionTimeout);\n\n this.ws.onopen = () => {\n clearTimeout(connectionTimeout);\n // Wait for welcome message before resolving\n };\n\n this.ws.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data as string) as WSServerMessage;\n this.handleMessage(message);\n\n // Resolve connect promise on welcome message\n if (message.type === 'welcome') {\n clearTimeout(connectionTimeout);\n this.reconnectAttempts = 0;\n this.setState('connected');\n this.startPingInterval();\n\n // Re-subscribe if we have active subscriptions\n if (\n this.subscriptions.events?.length ||\n this.subscriptions.elementIds?.length ||\n this.subscriptions.componentIds?.length\n ) {\n this.subscribe(this.subscriptions);\n }\n\n resolve();\n }\n } catch (error) {\n console.error('Failed to parse WebSocket message:', error);\n }\n };\n\n this.ws.onerror = (_event) => {\n clearTimeout(connectionTimeout);\n const error = new Error('WebSocket error');\n this.notifyError(error);\n if (this.state === 'connecting') {\n reject(error);\n }\n };\n\n this.ws.onclose = () => {\n clearTimeout(connectionTimeout);\n this.stopPingInterval();\n this.clientId = null;\n\n const wasConnected = this.state === 'connected';\n this.setState('disconnected');\n\n // Reject all pending requests\n for (const [_id, pending] of this.pendingRequests) {\n clearTimeout(pending.timeout);\n pending.reject(new Error('Connection closed'));\n }\n this.pendingRequests.clear();\n\n // Auto-reconnect\n if (\n wasConnected &&\n this.config.autoReconnect &&\n (this.config.maxReconnectAttempts === 0 ||\n this.reconnectAttempts < this.config.maxReconnectAttempts)\n ) {\n this.scheduleReconnect();\n }\n };\n });\n }\n\n /**\n * Disconnect from the server\n */\n disconnect(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.stopPingInterval();\n\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n this.setState('disconnected');\n }\n\n /**\n * Subscribe to events\n */\n async subscribe(options: WSSubscriptionOptions): Promise<BridgeEventType[]> {\n this.subscriptions = { ...this.subscriptions, ...options };\n\n const response = await this.sendRequest<{ events: BridgeEventType[] }>({\n id: generateId(),\n type: 'subscribe',\n timestamp: Date.now(),\n payload: options,\n });\n\n return response.events;\n }\n\n /**\n * Unsubscribe from events\n */\n async unsubscribe(events?: BridgeEventType[]): Promise<BridgeEventType[]> {\n if (events) {\n this.subscriptions.events = this.subscriptions.events?.filter((e) => !events.includes(e));\n } else {\n this.subscriptions = {};\n }\n\n const response = await this.sendRequest<{ events: BridgeEventType[] }>({\n id: generateId(),\n type: 'unsubscribe',\n timestamp: Date.now(),\n payload: { events },\n });\n\n return response.events;\n }\n\n /**\n * Find elements\n */\n async find(options?: {\n interactiveOnly?: boolean;\n includeState?: boolean;\n selector?: string;\n }): Promise<BridgeSnapshot['elements']> {\n const response = await this.sendRequest<{ elements: BridgeSnapshot['elements'] }>({\n id: generateId(),\n type: 'find',\n timestamp: Date.now(),\n payload: options,\n });\n\n return response.elements;\n }\n\n /**\n * Discover elements\n * @deprecated Use find() instead\n */\n async discover(options?: {\n interactiveOnly?: boolean;\n includeState?: boolean;\n selector?: string;\n }): Promise<BridgeSnapshot['elements']> {\n return this.find(options);\n }\n\n /**\n * Get element details\n */\n async getElement(\n elementId: string,\n includeState = true\n ): Promise<BridgeSnapshot['elements'][0] | null> {\n const response = await this.sendRequest<{ element: BridgeSnapshot['elements'][0] | null }>({\n id: generateId(),\n type: 'getElement',\n timestamp: Date.now(),\n payload: { elementId, includeState },\n });\n\n return response.element;\n }\n\n /**\n * Get full snapshot\n */\n async getSnapshot(): Promise<BridgeSnapshot> {\n const response = await this.sendRequest<BridgeSnapshot>({\n id: generateId(),\n type: 'getSnapshot',\n timestamp: Date.now(),\n });\n\n return response;\n }\n\n /**\n * Execute action on an element\n */\n async executeAction(elementId: string, action: ActionRequest): Promise<ActionResponse> {\n const response = await this.sendRequest<ActionResponse>({\n id: generateId(),\n type: 'executeAction',\n timestamp: Date.now(),\n payload: { elementId, action },\n });\n\n return response;\n }\n\n /**\n * Execute component action\n */\n async executeComponentAction(\n componentId: string,\n action: string,\n params?: Record<string, unknown>\n ): Promise<ActionResponse> {\n const response = await this.sendRequest<ActionResponse>({\n id: generateId(),\n type: 'executeComponentAction',\n timestamp: Date.now(),\n payload: { componentId, action, params },\n });\n\n return response;\n }\n\n /**\n * Execute workflow with optional progress streaming\n */\n async executeWorkflow(\n workflowId: string,\n params?: Record<string, unknown>,\n onProgress?: (progress: {\n currentStep: number;\n totalSteps: number;\n step: { id: string; status: string };\n }) => void\n ): Promise<{ success: boolean; results: unknown[] }> {\n const id = generateId();\n\n // Set up progress listener if provided\n const progressHandler: ((message: WSServerMessage) => void) | undefined = onProgress\n ? (message: WSServerMessage) => {\n if (message.type === 'workflowProgress' && message.requestId === id) {\n onProgress({\n currentStep: message.payload.currentStep,\n totalSteps: message.payload.totalSteps,\n step: {\n id: message.payload.step.id,\n status: message.payload.step.status,\n },\n });\n }\n }\n : undefined;\n\n const response = await this.sendRequest<{ success: boolean; results: unknown[] }>(\n {\n id,\n type: 'executeWorkflow',\n timestamp: Date.now(),\n payload: { workflowId, params, streamProgress: !!onProgress },\n },\n progressHandler\n );\n\n return response;\n }\n\n /**\n * Add connection state listener\n */\n onConnectionChange(listener: (state: WSConnectionState) => void): () => void {\n this.connectionListeners.add(listener);\n return () => this.connectionListeners.delete(listener);\n }\n\n /**\n * Add event listener\n */\n onEvent(\n eventType: BridgeEventType | '*',\n listener: (event: BridgeEvent) => void\n ): () => void {\n if (!this.eventListeners.has(eventType)) {\n this.eventListeners.set(eventType, new Set());\n }\n this.eventListeners.get(eventType)!.add(listener);\n return () => this.eventListeners.get(eventType)?.delete(listener);\n }\n\n /**\n * Add error listener\n */\n onError(listener: (error: Error) => void): () => void {\n this.errorListeners.add(listener);\n return () => this.errorListeners.delete(listener);\n }\n\n // Private methods\n\n private setState(state: WSConnectionState): void {\n this.state = state;\n for (const listener of this.connectionListeners) {\n try {\n listener(state);\n } catch (error) {\n console.error('Connection listener error:', error);\n }\n }\n }\n\n private handleMessage(message: WSServerMessage): void {\n switch (message.type) {\n case 'welcome':\n this.clientId = message.payload.clientId;\n break;\n\n case 'pong':\n // Ping/pong handled automatically\n break;\n\n case 'subscribed':\n case 'unsubscribed':\n // Handled by request/response\n break;\n\n case 'event':\n this.notifyEvent(message.payload);\n break;\n\n case 'response':\n this.handleResponse(message);\n break;\n\n case 'error':\n if (message.requestId) {\n this.handleResponse({\n ...message,\n type: 'response',\n requestId: message.requestId,\n payload: {\n success: false,\n error: message.payload.message,\n },\n });\n } else {\n this.notifyError(new Error(message.payload.message));\n }\n break;\n\n case 'workflowProgress':\n // Handled by progress callback in executeWorkflow\n break;\n }\n }\n\n private handleResponse(message: WSServerMessage & { requestId: string }): void {\n const pending = this.pendingRequests.get(message.requestId);\n if (!pending) return;\n\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(message.requestId);\n\n if (message.type === 'response') {\n if (message.payload.success) {\n pending.resolve(message.payload.data);\n } else {\n pending.reject(new Error(message.payload.error || 'Request failed'));\n }\n }\n }\n\n private notifyEvent(event: BridgeEvent): void {\n // Notify specific type listeners\n const typeListeners = this.eventListeners.get(event.type);\n if (typeListeners) {\n for (const listener of typeListeners) {\n try {\n listener(event);\n } catch (error) {\n console.error('Event listener error:', error);\n }\n }\n }\n\n // Notify wildcard listeners\n const wildcardListeners = this.eventListeners.get('*');\n if (wildcardListeners) {\n for (const listener of wildcardListeners) {\n try {\n listener(event);\n } catch (error) {\n console.error('Event listener error:', error);\n }\n }\n }\n }\n\n private notifyError(error: Error): void {\n for (const listener of this.errorListeners) {\n try {\n listener(error);\n } catch (e) {\n console.error('Error listener error:', e);\n }\n }\n }\n\n private sendRequest<T>(\n message: WSClientMessage,\n progressHandler?: (message: WSServerMessage) => void\n ): Promise<T> {\n return new Promise((resolve, reject) => {\n if (!this.ws || this.state !== 'connected') {\n reject(new Error('Not connected'));\n return;\n }\n\n const timeout = setTimeout(() => {\n this.pendingRequests.delete(message.id);\n reject(new Error('Request timeout'));\n }, 30000);\n\n this.pendingRequests.set(message.id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n timeout,\n });\n\n // Handle progress messages during workflow execution\n if (progressHandler && this.ws) {\n const originalHandler = this.ws.onmessage;\n const wsRef = this.ws;\n const wrappedHandler = (event: MessageEvent) => {\n try {\n const msg = JSON.parse(event.data as string) as WSServerMessage;\n if (msg.type === 'workflowProgress') {\n progressHandler(msg);\n }\n } catch {\n // Ignore parse errors for progress\n }\n // Call original handler\n if (originalHandler) {\n originalHandler.call(wsRef, event);\n }\n };\n this.ws.onmessage = wrappedHandler;\n }\n\n this.ws.send(JSON.stringify(message));\n });\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimer) return;\n\n this.setState('reconnecting');\n this.reconnectAttempts++;\n\n const delay = Math.min(\n this.config.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1),\n 30000\n );\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n this.connect().catch(() => {\n // Will auto-retry if configured\n });\n }, delay);\n }\n\n private startPingInterval(): void {\n if (this.config.pingInterval <= 0) return;\n\n this.pingTimer = setInterval(() => {\n if (this.ws && this.state === 'connected') {\n this.ws.send(\n JSON.stringify({\n id: generateId(),\n type: 'ping',\n timestamp: Date.now(),\n })\n );\n }\n }, this.config.pingInterval);\n }\n\n private stopPingInterval(): void {\n if (this.pingTimer) {\n clearInterval(this.pingTimer);\n this.pingTimer = null;\n }\n }\n}\n\n/**\n * Create a WebSocket client instance\n */\nexport function createWSClient(config: WSClientConfig): UIBridgeWSClient {\n return new UIBridgeWSClient(config);\n}\n"]}
|