@qontinui/ui-bridge 0.1.1 → 0.3.0
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/ai/index.d.mts +893 -0
- package/dist/ai/index.d.ts +893 -0
- package/dist/ai/index.js +3897 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/index.mjs +3839 -0
- package/dist/ai/index.mjs.map +1 -0
- package/dist/babel-plugin/index.js +515 -0
- package/dist/babel-plugin/index.js.map +1 -0
- package/dist/babel-plugin/index.mjs +499 -0
- package/dist/babel-plugin/index.mjs.map +1 -0
- package/dist/control/index.d.mts +5 -4
- package/dist/control/index.d.ts +5 -4
- package/dist/core/index.d.mts +115 -42
- package/dist/core/index.d.ts +115 -42
- package/dist/core/index.js +0 -983
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +1 -972
- package/dist/core/index.mjs.map +1 -1
- package/dist/debug/index.d.mts +3 -3
- package/dist/debug/index.d.ts +3 -3
- package/dist/index.d.mts +8 -7
- package/dist/index.d.ts +8 -7
- package/dist/index.js +8249 -4163
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8193 -4152
- package/dist/index.mjs.map +1 -1
- package/dist/{metrics-QCnK0EFw.d.ts → metrics-BfiT_rhZ.d.ts} +2 -2
- package/dist/{metrics-BCG7z7Aq.d.mts → metrics-DTA2bwG7.d.mts} +2 -2
- package/dist/native/control/index.js +453 -0
- package/dist/native/control/index.js.map +1 -0
- package/dist/native/control/index.mjs +450 -0
- package/dist/native/control/index.mjs.map +1 -0
- package/dist/native/core/index.js +486 -0
- package/dist/native/core/index.js.map +1 -0
- package/dist/native/core/index.mjs +475 -0
- package/dist/native/core/index.mjs.map +1 -0
- package/dist/native/debug/index.js +451 -0
- package/dist/native/debug/index.js.map +1 -0
- package/dist/native/debug/index.mjs +449 -0
- package/dist/native/debug/index.mjs.map +1 -0
- package/dist/native/index.js +2274 -0
- package/dist/native/index.js.map +1 -0
- package/dist/native/index.mjs +2246 -0
- package/dist/native/index.mjs.map +1 -0
- package/dist/native/react/index.js +1401 -0
- package/dist/native/react/index.js.map +1 -0
- package/dist/native/react/index.mjs +1389 -0
- package/dist/native/react/index.mjs.map +1 -0
- package/dist/native/server/index.js +415 -0
- package/dist/native/server/index.js.map +1 -0
- package/dist/native/server/index.mjs +410 -0
- package/dist/native/server/index.mjs.map +1 -0
- package/dist/react/index.d.mts +20 -6
- package/dist/react/index.d.ts +20 -6
- package/dist/react/index.js +629 -14
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +629 -14
- package/dist/react/index.mjs.map +1 -1
- package/dist/{registry-CT6BVVKr.d.mts → registry-BKLEm-yk.d.ts} +29 -14
- package/dist/{registry-D4mQ01B3.d.ts → registry-BmZgyCz8.d.mts} +29 -14
- package/dist/render-log/index.d.mts +1 -1
- package/dist/render-log/index.d.ts +1 -1
- package/dist/server/express.d.mts +36 -0
- package/dist/server/express.d.ts +36 -0
- package/dist/server/express.js +196 -0
- package/dist/server/express.js.map +1 -0
- package/dist/server/express.mjs +192 -0
- package/dist/server/express.mjs.map +1 -0
- package/dist/server/handlers.d.mts +93 -0
- package/dist/server/handlers.d.ts +93 -0
- package/dist/server/handlers.js +4278 -0
- package/dist/server/handlers.js.map +1 -0
- package/dist/server/handlers.mjs +4275 -0
- package/dist/server/handlers.mjs.map +1 -0
- package/dist/server/index.d.mts +10 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.js +5352 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +5337 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/nextjs.d.mts +126 -0
- package/dist/server/nextjs.d.ts +126 -0
- package/dist/server/nextjs.js +287 -0
- package/dist/server/nextjs.js.map +1 -0
- package/dist/server/nextjs.mjs +282 -0
- package/dist/server/nextjs.mjs.map +1 -0
- package/dist/server/standalone.d.mts +6 -0
- package/dist/server/standalone.d.ts +6 -0
- package/dist/server/standalone.js +719 -0
- package/dist/server/standalone.js.map +1 -0
- package/dist/server/standalone.mjs +715 -0
- package/dist/server/standalone.mjs.map +1 -0
- package/dist/standalone-BURj8J3G.d.ts +212 -0
- package/dist/standalone-Dwmel29d.d.mts +212 -0
- package/dist/swc-plugin/index.d.mts +79 -0
- package/dist/swc-plugin/index.d.ts +79 -0
- package/dist/swc-plugin/index.js +15 -0
- package/dist/swc-plugin/index.js.map +1 -0
- package/dist/swc-plugin/index.mjs +9 -0
- package/dist/swc-plugin/index.mjs.map +1 -0
- package/dist/types-B5Q0GVo0.d.mts +646 -0
- package/dist/{types-DdJD9yw5.d.mts → types-B7J7noLK.d.mts} +1 -1
- package/dist/{types-BDkXy5si.d.ts → types-BkNRILUa.d.ts} +1 -1
- package/dist/types-CEQLnFMv.d.mts +156 -0
- package/dist/types-CHnlwiTK.d.ts +156 -0
- package/dist/types-DfPqwU-i.d.ts +646 -0
- package/dist/{types-BpvpStn3.d.mts → types-jKVgTI6_.d.mts} +364 -160
- package/dist/{types-BpvpStn3.d.ts → types-jKVgTI6_.d.ts} +364 -160
- package/package.json +111 -3
- package/swc-plugin-wasm/ui_bridge_swc_plugin.wasm +0 -0
- package/dist/websocket-client-B2LC9CYc.d.mts +0 -124
- package/dist/websocket-client-DupH0X7B.d.ts +0 -124
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/native/core/registry.ts","../../../src/native/core/element-identifier.ts","../../../src/native/control/action-executor.ts","../../../src/native/react/UIBridgeNativeProvider.tsx","../../../src/native/react/useUIElement.ts","../../../src/native/react/useUIComponent.ts","../../../src/native/react/useUIBridge.ts","../../../src/native/react/useAutoRegister.ts"],"names":["createContext","useRef","useState","useCallback","useEffect","useMemo","useContext"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Native Element and Component Registry\n *\n * Central registry for all UI elements and components registered with UI Bridge Native.\n * Adapted from ui-bridge for React Native environments.\n */\n\nimport type {\n RegisteredNativeElement,\n RegisteredNativeComponent,\n NativeElementState,\n NativeElementType,\n NativeStandardAction,\n NativeCustomAction,\n NativeBridgeSnapshot,\n NativeElementIdentifier,\n NativeElementRef,\n Workflow,\n BridgeEvent,\n BridgeEventType,\n BridgeEventListener,\n} from './types';\n\n/**\n * Options for registering an element\n */\nexport interface RegisterElementOptions {\n type?: NativeElementType;\n label?: string;\n actions?: NativeStandardAction[];\n customActions?: Record<string, NativeCustomAction>;\n props?: Record<string, unknown>;\n treePath?: string;\n testId?: string;\n accessibilityLabel?: string;\n}\n\n/**\n * Options for registering a component\n */\nexport interface RegisterComponentOptions {\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\n/**\n * Registry configuration\n */\nexport interface NativeRegistryConfig {\n verbose?: boolean;\n onEvent?: BridgeEventListener;\n}\n\n/**\n * Infer available actions based on element type\n */\nfunction inferActions(type: NativeElementType): NativeStandardAction[] {\n const baseActions: NativeStandardAction[] = ['focus', 'blur'];\n\n switch (type) {\n case 'button':\n case 'touchable':\n case 'pressable':\n return [...baseActions, 'press', 'longPress', 'doubleTap'];\n case 'input':\n return [...baseActions, 'press', 'type', 'clear'];\n case 'text':\n return [...baseActions, 'press', 'longPress'];\n case 'view':\n return [...baseActions, 'press'];\n case 'scroll':\n return [...baseActions, 'scroll', 'swipe'];\n case 'list':\n return [...baseActions, 'scroll', 'swipe'];\n case 'listItem':\n return [...baseActions, 'press', 'longPress', 'swipe'];\n case 'switch':\n case 'checkbox':\n return [...baseActions, 'press', 'toggle'];\n case 'radio':\n return [...baseActions, 'press'];\n case 'image':\n return [...baseActions, 'press', 'longPress'];\n case 'modal':\n return ['focus', 'blur'];\n case 'custom':\n default:\n return [...baseActions, 'press'];\n }\n}\n\n/**\n * Native UI Bridge Registry\n *\n * Manages registration and lookup of native UI elements and components.\n */\nexport class NativeUIBridgeRegistry {\n private elements = new Map<string, RegisteredNativeElement>();\n private components = new Map<string, RegisteredNativeComponent>();\n private workflows = new Map<string, Workflow>();\n private eventListeners = new Map<BridgeEventType, Set<BridgeEventListener>>();\n private config: NativeRegistryConfig;\n\n constructor(config: NativeRegistryConfig = {}) {\n this.config = config;\n }\n\n // ============================================================================\n // Element Management\n // ============================================================================\n\n /**\n * Register a native element\n */\n registerElement(\n id: string,\n ref: React.RefObject<NativeElementRef>,\n options: RegisterElementOptions = {}\n ): RegisteredNativeElement {\n const {\n type = 'custom',\n label,\n actions = inferActions(type),\n customActions,\n props,\n treePath = id,\n testId,\n accessibilityLabel,\n } = options;\n\n // Create state getter\n const getState = (): NativeElementState => {\n const element = ref.current;\n if (!element) {\n return {\n mounted: false,\n visible: false,\n enabled: false,\n focused: false,\n layout: null,\n };\n }\n\n // State is populated by the element during onLayout\n // Here we return the stored state from the element's metadata\n const stored = this.elements.get(id);\n if (stored && stored.getState !== getState) {\n return stored.getState();\n }\n\n return {\n mounted: true,\n visible: true,\n enabled: true,\n focused: false,\n layout: null,\n };\n };\n\n // Create identifier getter\n const getIdentifier = (): NativeElementIdentifier => ({\n uiId: id,\n testId: testId || id,\n accessibilityLabel,\n treePath,\n });\n\n const registered: RegisteredNativeElement = {\n id,\n ref,\n type,\n label,\n actions,\n customActions,\n props,\n getState,\n getIdentifier,\n registeredAt: Date.now(),\n mounted: true,\n };\n\n this.elements.set(id, registered);\n\n this.emit('element:registered', { id, type, label });\n\n if (this.config.verbose) {\n console.log(`[ui-bridge-native] Registered element: ${id} (${type})`);\n }\n\n return registered;\n }\n\n /**\n * Unregister an element\n */\n unregisterElement(id: string): void {\n const element = this.elements.get(id);\n if (element) {\n this.elements.delete(id);\n this.emit('element:unregistered', { id });\n\n if (this.config.verbose) {\n console.log(`[ui-bridge-native] Unregistered element: ${id}`);\n }\n }\n }\n\n /**\n * Get a registered element\n */\n getElement(id: string): RegisteredNativeElement | undefined {\n return this.elements.get(id);\n }\n\n /**\n * Get all registered elements\n */\n getAllElements(): RegisteredNativeElement[] {\n return Array.from(this.elements.values());\n }\n\n /**\n * Update element state\n */\n updateElementState(id: string, state: Partial<NativeElementState>): void {\n const element = this.elements.get(id);\n if (element) {\n // Create a new getState that includes the updated state\n const currentState = element.getState();\n const newState = { ...currentState, ...state };\n\n const updated: RegisteredNativeElement = {\n ...element,\n getState: () => newState,\n };\n\n this.elements.set(id, updated);\n this.emit('element:stateChanged', { id, state: newState });\n }\n }\n\n /**\n * Update element props (for action execution)\n */\n updateElementProps(id: string, props: Record<string, unknown>): void {\n const element = this.elements.get(id);\n if (element) {\n const updated: RegisteredNativeElement = {\n ...element,\n props: { ...element.props, ...props },\n };\n this.elements.set(id, updated);\n }\n }\n\n /**\n * Find element by testID\n */\n findByTestId(testId: string): RegisteredNativeElement | undefined {\n for (const element of this.elements.values()) {\n const identifier = element.getIdentifier();\n if (identifier.testId === testId) {\n return element;\n }\n }\n return undefined;\n }\n\n /**\n * Find elements by type\n */\n findByType(type: NativeElementType): RegisteredNativeElement[] {\n return Array.from(this.elements.values()).filter((e) => e.type === type);\n }\n\n // ============================================================================\n // Component Management\n // ============================================================================\n\n /**\n * Register a component\n */\n registerComponent(id: string, options: RegisterComponentOptions): RegisteredNativeComponent {\n const { name, description, actions = [], elementIds } = options;\n\n const registered: RegisteredNativeComponent = {\n id,\n name,\n description,\n actions: actions.map((a) => ({\n id: a.id,\n label: a.label,\n description: a.description,\n handler: a.handler,\n })),\n elementIds,\n registeredAt: Date.now(),\n mounted: true,\n };\n\n this.components.set(id, registered);\n\n this.emit('component:registered', { id, name });\n\n if (this.config.verbose) {\n console.log(`[ui-bridge-native] Registered component: ${id} (${name})`);\n }\n\n return registered;\n }\n\n /**\n * Unregister a component\n */\n unregisterComponent(id: string): void {\n const component = this.components.get(id);\n if (component) {\n this.components.delete(id);\n this.emit('component:unregistered', { id });\n\n if (this.config.verbose) {\n console.log(`[ui-bridge-native] Unregistered component: ${id}`);\n }\n }\n }\n\n /**\n * Get a registered component\n */\n getComponent(id: string): RegisteredNativeComponent | undefined {\n return this.components.get(id);\n }\n\n /**\n * Get all registered components\n */\n getAllComponents(): RegisteredNativeComponent[] {\n return Array.from(this.components.values());\n }\n\n // ============================================================================\n // Workflow Management\n // ============================================================================\n\n /**\n * Register a workflow\n */\n registerWorkflow(workflow: Workflow): void {\n this.workflows.set(workflow.id, workflow);\n\n if (this.config.verbose) {\n console.log(`[ui-bridge-native] Registered workflow: ${workflow.id}`);\n }\n }\n\n /**\n * Unregister a workflow\n */\n unregisterWorkflow(id: string): void {\n 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 // Event System\n // ============================================================================\n\n /**\n * Subscribe to events\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 () => this.off(type, listener);\n }\n\n /**\n * Unsubscribe from events\n */\n off<T = unknown>(type: BridgeEventType, listener: BridgeEventListener<T>): void {\n this.eventListeners.get(type)?.delete(listener as BridgeEventListener);\n }\n\n /**\n * Emit an event\n */\n private emit(type: BridgeEventType, data: unknown): void {\n const event: BridgeEvent = {\n type,\n timestamp: Date.now(),\n data,\n };\n\n // Notify 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(`[ui-bridge-native] Event listener error:`, error);\n }\n }\n }\n\n // Notify global handler\n if (this.config.onEvent) {\n try {\n this.config.onEvent(event);\n } catch (error) {\n console.error(`[ui-bridge-native] Global event handler error:`, error);\n }\n }\n }\n\n // ============================================================================\n // Snapshots\n // ============================================================================\n\n /**\n * Create a snapshot of the current state\n */\n createSnapshot(): NativeBridgeSnapshot {\n return {\n timestamp: Date.now(),\n elements: this.getAllElements().map((e) => ({\n id: e.id,\n type: e.type,\n label: e.label,\n identifier: e.getIdentifier(),\n state: e.getState(),\n actions: e.actions,\n customActions: e.customActions ? Object.keys(e.customActions) : undefined,\n })),\n components: this.getAllComponents().map((c) => ({\n id: c.id,\n name: c.name,\n description: c.description,\n actions: c.actions.map((a) => a.id),\n elementIds: c.elementIds,\n })),\n workflows: this.getAllWorkflows().map((w) => ({\n id: w.id,\n name: w.name,\n description: w.description,\n stepCount: w.steps.length,\n })),\n };\n }\n\n /**\n * Get registry statistics\n */\n getStats(): { elements: number; components: number; workflows: number } {\n return {\n elements: this.elements.size,\n components: this.components.size,\n workflows: this.workflows.size,\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\n if (this.config.verbose) {\n console.log(`[ui-bridge-native] Registry cleared`);\n }\n }\n}\n\n// ============================================================================\n// Global Registry\n// ============================================================================\n\nlet globalRegistry: NativeUIBridgeRegistry | null = null;\n\n/**\n * Set the global registry\n */\nexport function setGlobalRegistry(registry: NativeUIBridgeRegistry): void {\n globalRegistry = registry;\n}\n\n/**\n * Get the global registry\n */\nexport function getGlobalRegistry(): NativeUIBridgeRegistry | null {\n return globalRegistry;\n}\n\n/**\n * Reset the global registry\n */\nexport function resetGlobalRegistry(): void {\n globalRegistry?.clear();\n globalRegistry = null;\n}\n","/**\n * Native Element Identifier\n *\n * Utilities for identifying and finding native elements.\n * In React Native, we use testID, accessibilityLabel, and tree paths\n * instead of XPath/CSS selectors.\n */\n\nimport type { NativeElementIdentifier, RegisteredNativeElement } from './types';\nimport { getGlobalRegistry } from './registry';\n\n/**\n * Create an element identifier for a native element\n */\nexport function createNativeElementIdentifier(\n id: string,\n options: {\n testId?: string;\n accessibilityLabel?: string;\n accessibilityHint?: string;\n treePath?: string;\n } = {}\n): NativeElementIdentifier {\n return {\n uiId: id,\n testId: options.testId || id,\n accessibilityLabel: options.accessibilityLabel,\n accessibilityHint: options.accessibilityHint,\n treePath: options.treePath || id,\n };\n}\n\n/**\n * Find an element by its identifier in the global registry\n */\nexport function findElementByIdentifier(\n identifier: string | NativeElementIdentifier\n): RegisteredNativeElement | null {\n const registry = getGlobalRegistry();\n if (!registry) return null;\n\n // If string, try different lookup strategies\n if (typeof identifier === 'string') {\n // Try direct ID lookup\n const byId = registry.getElement(identifier);\n if (byId) return byId;\n\n // Try testID lookup\n const byTestId = registry.findByTestId(identifier);\n if (byTestId) return byTestId;\n\n // Try pattern matching\n return findByPattern(registry, identifier);\n }\n\n // If identifier object, try each strategy\n if (identifier.uiId) {\n const byId = registry.getElement(identifier.uiId);\n if (byId) return byId;\n }\n\n if (identifier.testId) {\n const byTestId = registry.findByTestId(identifier.testId);\n if (byTestId) return byTestId;\n }\n\n return null;\n}\n\n/**\n * Find element by pattern (supports wildcards)\n */\nfunction findByPattern(\n registry: ReturnType<typeof getGlobalRegistry>,\n pattern: string\n): RegisteredNativeElement | null {\n if (!registry) return null;\n\n // Convert pattern to regex\n const regexPattern = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // Escape special chars\n .replace(/\\*/g, '.*') // Convert * to .*\n .replace(/\\?/g, '.'); // Convert ? to .\n\n const regex = new RegExp(`^${regexPattern}$`, 'i');\n\n for (const element of registry.getAllElements()) {\n const identifier = element.getIdentifier();\n\n // Match against testId\n if (identifier.testId && regex.test(identifier.testId)) {\n return element;\n }\n\n // Match against uiId\n if (identifier.uiId && regex.test(identifier.uiId)) {\n return element;\n }\n\n // Match against treePath\n if (identifier.treePath && regex.test(identifier.treePath)) {\n return element;\n }\n\n // Match against accessibilityLabel\n if (identifier.accessibilityLabel && regex.test(identifier.accessibilityLabel)) {\n return element;\n }\n }\n\n return null;\n}\n\n/**\n * Find all elements matching a pattern\n */\nexport function findAllByPattern(pattern: string): RegisteredNativeElement[] {\n const registry = getGlobalRegistry();\n if (!registry) return [];\n\n // Convert pattern to regex\n const regexPattern = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n\n const regex = new RegExp(`^${regexPattern}$`, 'i');\n const results: RegisteredNativeElement[] = [];\n\n for (const element of registry.getAllElements()) {\n const identifier = element.getIdentifier();\n\n if (\n (identifier.testId && regex.test(identifier.testId)) ||\n (identifier.uiId && regex.test(identifier.uiId)) ||\n (identifier.treePath && regex.test(identifier.treePath)) ||\n (identifier.accessibilityLabel && regex.test(identifier.accessibilityLabel))\n ) {\n results.push(element);\n }\n }\n\n return results;\n}\n\n/**\n * Build a tree path for an element based on its position in the component tree\n */\nexport function buildTreePath(componentPath: string[], elementIndex?: number): string {\n let path = componentPath.join('/');\n if (elementIndex !== undefined) {\n path += `[${elementIndex}]`;\n }\n return path;\n}\n\n/**\n * Parse a tree path into its components\n */\nexport function parseTreePath(treePath: string): { components: string[]; index?: number } {\n const indexMatch = treePath.match(/\\[(\\d+)\\]$/);\n const index = indexMatch ? parseInt(indexMatch[1], 10) : undefined;\n const pathWithoutIndex = treePath.replace(/\\[\\d+\\]$/, '');\n const components = pathWithoutIndex.split('/').filter(Boolean);\n\n return { components, index };\n}\n\n/**\n * Check if an identifier matches criteria\n */\nexport function matchesIdentifier(\n identifier: NativeElementIdentifier,\n criteria: Partial<NativeElementIdentifier>\n): boolean {\n if (criteria.uiId && identifier.uiId !== criteria.uiId) {\n return false;\n }\n if (criteria.testId && identifier.testId !== criteria.testId) {\n return false;\n }\n if (criteria.accessibilityLabel && identifier.accessibilityLabel !== criteria.accessibilityLabel) {\n return false;\n }\n if (criteria.treePath && identifier.treePath !== criteria.treePath) {\n return false;\n }\n return true;\n}\n","/**\n * Native Action Executor\n *\n * Executes actions on registered native elements and components.\n * In React Native, we execute actions by calling prop handlers directly\n * (onPress, onChangeText, etc.) rather than simulating DOM events.\n */\n\nimport type { NativeUIBridgeRegistry } from '../core/registry';\nimport type {\n NativeStandardAction,\n NativeFindRequest,\n NativeFindResponse,\n DiscoveredNativeElement,\n WaitOptions,\n} from '../core/types';\nimport { findElementByIdentifier } from '../core/element-identifier';\nimport type {\n ControlActionRequest,\n ControlActionResponse,\n ComponentActionRequest,\n ComponentActionResponse,\n WaitResult,\n NativeActionExecutor,\n TypeActionParams,\n ScrollActionParams,\n SwipeActionParams,\n PressActionParams,\n} from './types';\n\n/**\n * Default wait options\n */\nconst DEFAULT_WAIT_OPTIONS: Required<WaitOptions> = {\n visible: true,\n enabled: true,\n focused: false,\n state: {},\n timeout: 10000,\n interval: 100,\n};\n\n/**\n * Sleep for a duration\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Default native action executor implementation\n */\nexport class DefaultNativeActionExecutor implements NativeActionExecutor {\n constructor(private registry: NativeUIBridgeRegistry) {}\n\n /**\n * Execute an action on an element\n */\n async executeAction(\n elementId: string,\n request: ControlActionRequest\n ): Promise<ControlActionResponse> {\n const startTime = Date.now();\n let waitDurationMs = 0;\n\n try {\n // Find the element\n let registered = this.registry.getElement(elementId);\n\n // If not in registry, try by identifier\n if (!registered) {\n registered = findElementByIdentifier(elementId) ?? undefined;\n }\n\n if (!registered) {\n return {\n success: false,\n error: `Element not found: ${elementId}`,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n requestId: request.requestId,\n };\n }\n\n // Wait for conditions if specified\n if (request.waitOptions) {\n const waitResult = await this.waitForElementInternal(\n registered.id,\n request.waitOptions\n );\n waitDurationMs = waitResult.waitedMs;\n if (!waitResult.met) {\n return {\n success: false,\n error: waitResult.error || 'Wait condition not met',\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n requestId: request.requestId,\n waitDurationMs,\n };\n }\n }\n\n // Execute the action\n const result = await this.performAction(registered, request.action, request.params);\n\n return {\n success: true,\n elementState: registered.getState(),\n result,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n requestId: request.requestId,\n waitDurationMs,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n requestId: request.requestId,\n waitDurationMs,\n };\n }\n }\n\n /**\n * Perform an action on an element\n */\n private async performAction(\n element: ReturnType<NativeUIBridgeRegistry['getElement']>,\n action: NativeStandardAction | string,\n params?: Record<string, unknown>\n ): Promise<unknown> {\n if (!element) {\n throw new Error('Element not found');\n }\n\n const props = element.props || {};\n\n // Check for custom action first\n if (element.customActions && action in element.customActions) {\n return element.customActions[action].handler(params);\n }\n\n // Execute standard actions\n switch (action) {\n case 'press':\n return this.performPress(props, params as PressActionParams | undefined);\n\n case 'longPress':\n return this.performLongPress(props, params as PressActionParams | undefined);\n\n case 'doubleTap':\n return this.performDoubleTap(props);\n\n case 'type':\n return this.performType(element, props, params as unknown as TypeActionParams);\n\n case 'clear':\n return this.performClear(element, props);\n\n case 'focus':\n return this.performFocus(element);\n\n case 'blur':\n return this.performBlur(element);\n\n case 'scroll':\n return this.performScroll(props, params as ScrollActionParams | undefined);\n\n case 'swipe':\n return this.performSwipe(props, params as unknown as SwipeActionParams);\n\n case 'toggle':\n return this.performToggle(props);\n\n default:\n throw new Error(`Unknown action: ${action}`);\n }\n }\n\n /**\n * Perform press action\n */\n private async performPress(\n props: Record<string, unknown>,\n params?: PressActionParams\n ): Promise<void> {\n // Try different press handlers in order of preference\n const handlers = ['onPress', 'onPressIn', 'onResponderRelease'];\n\n for (const handler of handlers) {\n if (typeof props[handler] === 'function') {\n // Create a synthetic event object\n const event = this.createPressEvent(params);\n (props[handler] as (event: unknown) => void)(event);\n return;\n }\n }\n\n throw new Error('No press handler found on element');\n }\n\n /**\n * Perform long press action\n */\n private async performLongPress(\n props: Record<string, unknown>,\n params?: PressActionParams\n ): Promise<void> {\n if (typeof props.onLongPress === 'function') {\n const event = this.createPressEvent(params);\n (props.onLongPress as (event: unknown) => void)(event);\n return;\n }\n\n throw new Error('No long press handler found on element');\n }\n\n /**\n * Perform double tap action\n */\n private async performDoubleTap(props: Record<string, unknown>): Promise<void> {\n // First try dedicated double tap handler\n if (typeof props.onDoubleTap === 'function') {\n (props.onDoubleTap as () => void)();\n return;\n }\n\n // Fall back to calling press twice\n if (typeof props.onPress === 'function') {\n const event = this.createPressEvent();\n (props.onPress as (event: unknown) => void)(event);\n await sleep(50);\n (props.onPress as (event: unknown) => void)(event);\n return;\n }\n\n throw new Error('No press handler found for double tap');\n }\n\n /**\n * Perform type action\n */\n private async performType(\n element: ReturnType<NativeUIBridgeRegistry['getElement']>,\n props: Record<string, unknown>,\n params: TypeActionParams\n ): Promise<void> {\n if (!params?.text) {\n throw new Error('Type action requires text parameter');\n }\n\n // Clear first if requested\n if (params.clearFirst) {\n await this.performClear(element, props);\n }\n\n // Type character by character if delay specified\n if (params.delay && params.delay > 0) {\n const currentValue = (element?.getState().value || '') as string;\n for (const char of params.text) {\n const newValue = currentValue + char;\n if (typeof props.onChangeText === 'function') {\n (props.onChangeText as (text: string) => void)(newValue);\n }\n await sleep(params.delay);\n }\n } else {\n // Type all at once\n if (typeof props.onChangeText === 'function') {\n (props.onChangeText as (text: string) => void)(params.text);\n } else if (typeof props.onChange === 'function') {\n (props.onChange as (event: { nativeEvent: { text: string } }) => void)({\n nativeEvent: { text: params.text },\n });\n } else {\n throw new Error('No text change handler found on element');\n }\n }\n\n // Update element state\n if (element) {\n this.registry.updateElementState(element.id, { value: params.text });\n }\n }\n\n /**\n * Perform clear action\n */\n private async performClear(\n element: ReturnType<NativeUIBridgeRegistry['getElement']>,\n props: Record<string, unknown>\n ): Promise<void> {\n if (typeof props.onChangeText === 'function') {\n (props.onChangeText as (text: string) => void)('');\n } else if (typeof props.onChange === 'function') {\n (props.onChange as (event: { nativeEvent: { text: string } }) => void)({\n nativeEvent: { text: '' },\n });\n }\n\n // Update element state\n if (element) {\n this.registry.updateElementState(element.id, { value: '' });\n }\n }\n\n /**\n * Perform focus action\n */\n private async performFocus(\n element: ReturnType<NativeUIBridgeRegistry['getElement']>\n ): Promise<void> {\n if (element?.ref.current && 'focus' in element.ref.current) {\n (element.ref.current as { focus: () => void }).focus();\n }\n\n // Update element state\n if (element) {\n this.registry.updateElementState(element.id, { focused: true });\n }\n }\n\n /**\n * Perform blur action\n */\n private async performBlur(\n element: ReturnType<NativeUIBridgeRegistry['getElement']>\n ): Promise<void> {\n if (element?.ref.current && 'blur' in element.ref.current) {\n (element.ref.current as { blur: () => void }).blur();\n }\n\n // Update element state\n if (element) {\n this.registry.updateElementState(element.id, { focused: false });\n }\n }\n\n /**\n * Perform scroll action\n */\n private async performScroll(\n props: Record<string, unknown>,\n params?: ScrollActionParams\n ): Promise<void> {\n if (typeof props.onScroll === 'function') {\n const event = {\n nativeEvent: {\n contentOffset: params?.offset || { x: 0, y: 0 },\n },\n };\n (props.onScroll as (event: unknown) => void)(event);\n }\n }\n\n /**\n * Perform swipe action\n */\n private async performSwipe(\n props: Record<string, unknown>,\n params: SwipeActionParams\n ): Promise<void> {\n if (!params?.direction) {\n throw new Error('Swipe action requires direction parameter');\n }\n\n // Try dedicated swipe handlers\n const handlerMap: Record<string, string> = {\n left: 'onSwipeLeft',\n right: 'onSwipeRight',\n up: 'onSwipeUp',\n down: 'onSwipeDown',\n };\n\n const handler = handlerMap[params.direction];\n if (handler && typeof props[handler] === 'function') {\n (props[handler] as () => void)();\n return;\n }\n\n // Fall back to generic swipe handler\n if (typeof props.onSwipe === 'function') {\n (props.onSwipe as (direction: string) => void)(params.direction);\n }\n }\n\n /**\n * Perform toggle action\n */\n private async performToggle(props: Record<string, unknown>): Promise<void> {\n // For Switch components\n if (typeof props.onValueChange === 'function') {\n const currentValue = props.value as boolean;\n (props.onValueChange as (value: boolean) => void)(!currentValue);\n return;\n }\n\n // Fall back to press\n if (typeof props.onPress === 'function') {\n (props.onPress as () => void)();\n return;\n }\n\n throw new Error('No toggle handler found on element');\n }\n\n /**\n * Create a synthetic press event\n */\n private createPressEvent(params?: PressActionParams): object {\n return {\n nativeEvent: {\n locationX: params?.position?.x ?? 0,\n locationY: params?.position?.y ?? 0,\n timestamp: Date.now(),\n },\n persist: () => {},\n };\n }\n\n /**\n * Execute a component action\n */\n async executeComponentAction(\n componentId: string,\n request: ComponentActionRequest\n ): Promise<ComponentActionResponse> {\n const startTime = Date.now();\n\n try {\n const component = this.registry.getComponent(componentId);\n\n if (!component) {\n return {\n success: false,\n error: `Component not found: ${componentId}`,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n requestId: request.requestId,\n };\n }\n\n // Find the action\n const action = component.actions.find((a) => a.id === request.action);\n\n if (!action) {\n return {\n success: false,\n error: `Action not found: ${request.action}`,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n requestId: request.requestId,\n };\n }\n\n // Execute the action\n const result = await action.handler(request.params);\n\n return {\n success: true,\n result,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n requestId: request.requestId,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n requestId: request.requestId,\n };\n }\n }\n\n /**\n * Find elements\n */\n async find(request: NativeFindRequest): Promise<NativeFindResponse> {\n const startTime = Date.now();\n\n const allElements = this.registry.getAllElements();\n let filtered = allElements;\n\n // Filter by type\n if (request.types && request.types.length > 0) {\n filtered = filtered.filter((e) => request.types!.includes(e.type));\n }\n\n // Filter by testID pattern\n if (request.testIdPattern) {\n const regex = new RegExp(\n request.testIdPattern.replace(/\\*/g, '.*').replace(/\\?/g, '.')\n );\n filtered = filtered.filter((e) => {\n const identifier = e.getIdentifier();\n return identifier.testId && regex.test(identifier.testId);\n });\n }\n\n // Filter by accessibility label pattern\n if (request.accessibilityLabelPattern) {\n const regex = new RegExp(\n request.accessibilityLabelPattern.replace(/\\*/g, '.*').replace(/\\?/g, '.')\n );\n filtered = filtered.filter((e) => {\n const identifier = e.getIdentifier();\n return (\n identifier.accessibilityLabel && regex.test(identifier.accessibilityLabel)\n );\n });\n }\n\n // Filter by visibility\n if (request.visibleOnly) {\n filtered = filtered.filter((e) => e.getState().visible);\n }\n\n // Apply limit\n if (request.limit && request.limit > 0) {\n filtered = filtered.slice(0, request.limit);\n }\n\n // Map to discovered elements\n const elements: DiscoveredNativeElement[] = filtered.map((e) => ({\n id: e.id,\n type: e.type,\n identifier: e.getIdentifier(),\n state: e.getState(),\n actions: e.actions,\n label: e.label,\n }));\n\n return {\n elements,\n total: elements.length,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n };\n }\n\n /**\n * Wait for element conditions\n */\n async waitForElement(elementId: string, options: WaitOptions): Promise<WaitResult> {\n return this.waitForElementInternal(elementId, options);\n }\n\n /**\n * Internal wait implementation\n */\n private async waitForElementInternal(\n elementId: string,\n options: WaitOptions\n ): Promise<WaitResult> {\n const opts = { ...DEFAULT_WAIT_OPTIONS, ...options };\n const startTime = Date.now();\n\n while (Date.now() - startTime < opts.timeout) {\n const element = this.registry.getElement(elementId);\n\n if (!element) {\n await sleep(opts.interval);\n continue;\n }\n\n const state = element.getState();\n\n // Check conditions\n let conditionsMet = true;\n\n if (opts.visible && !state.visible) {\n conditionsMet = false;\n }\n\n if (opts.enabled && !state.enabled) {\n conditionsMet = false;\n }\n\n if (opts.focused && !state.focused) {\n conditionsMet = false;\n }\n\n // Check custom state conditions\n if (opts.state && Object.keys(opts.state).length > 0) {\n const stateRecord = state as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(opts.state)) {\n if (stateRecord[key] !== value) {\n conditionsMet = false;\n break;\n }\n }\n }\n\n if (conditionsMet) {\n return {\n met: true,\n waitedMs: Date.now() - startTime,\n state,\n };\n }\n\n await sleep(opts.interval);\n }\n\n return {\n met: false,\n waitedMs: Date.now() - startTime,\n error: `Timeout waiting for conditions on element: ${elementId}`,\n };\n }\n}\n\n/**\n * Create a native action executor\n */\nexport function createNativeActionExecutor(\n registry: NativeUIBridgeRegistry\n): NativeActionExecutor {\n return new DefaultNativeActionExecutor(registry);\n}\n","/**\n * UI Bridge Native Provider\n *\n * React context provider for UI Bridge Native functionality.\n */\n\nimport React, {\n createContext,\n useContext,\n useMemo,\n useEffect,\n useCallback,\n useRef,\n useState,\n} from 'react';\nimport type {\n NativeUIBridgeFeatures,\n NativeUIBridgeConfig,\n RegisteredNativeElement,\n RegisteredNativeComponent,\n NativeBridgeSnapshot,\n BridgeEventType,\n BridgeEventListener,\n} from '../core/types';\nimport {\n NativeUIBridgeRegistry,\n setGlobalRegistry,\n resetGlobalRegistry,\n} from '../core/registry';\nimport { createNativeActionExecutor } from '../control/action-executor';\nimport type { NativeActionExecutor } from '../control/types';\n\n/**\n * UI Bridge Native context value\n */\nexport interface UIBridgeNativeContextValue {\n /** Feature flags */\n features: NativeUIBridgeFeatures;\n /** Configuration */\n config: NativeUIBridgeConfig;\n /** Element registry */\n registry: NativeUIBridgeRegistry;\n /** Action executor */\n executor: NativeActionExecutor;\n /** Get all registered elements */\n getElements: () => RegisteredNativeElement[];\n /** Get all registered components */\n getComponents: () => RegisteredNativeComponent[];\n /** Create a snapshot */\n createSnapshot: () => NativeBridgeSnapshot;\n /** Subscribe to events */\n on: <T = unknown>(type: BridgeEventType, listener: BridgeEventListener<T>) => () => void;\n /** Unsubscribe from events */\n off: <T = unknown>(type: BridgeEventType, listener: BridgeEventListener<T>) => void;\n /** Whether the provider is initialized */\n initialized: boolean;\n /** Server running status */\n serverRunning: boolean;\n /** Start the HTTP server */\n startServer: () => Promise<void>;\n /** Stop the HTTP server */\n stopServer: () => void;\n}\n\n/**\n * UI Bridge Native context\n */\nconst UIBridgeNativeContext = createContext<UIBridgeNativeContextValue | null>(null);\n\n/**\n * UI Bridge Native provider props\n */\nexport interface UIBridgeNativeProviderProps {\n /** Child components */\n children: React.ReactNode;\n /** Feature flags */\n features?: NativeUIBridgeFeatures;\n /** Configuration */\n config?: NativeUIBridgeConfig;\n /** Event handler */\n onEvent?: BridgeEventListener;\n}\n\n/**\n * UI Bridge Native Provider\n *\n * Provides UI Bridge Native context to child components.\n *\n * @example\n * ```tsx\n * // app/_layout.tsx\n * import { UIBridgeNativeProvider } from 'ui-bridge-native';\n *\n * export default function RootLayout() {\n * return (\n * <UIBridgeNativeProvider\n * features={{ server: __DEV__, debug: __DEV__ }}\n * config={{ serverPort: 9876 }}\n * >\n * <Stack>{children}</Stack>\n * </UIBridgeNativeProvider>\n * );\n * }\n * ```\n */\nexport function UIBridgeNativeProvider({\n children,\n features = {},\n config = {},\n onEvent,\n}: UIBridgeNativeProviderProps) {\n const registryRef = useRef<NativeUIBridgeRegistry | null>(null);\n const executorRef = useRef<NativeActionExecutor | null>(null);\n const [serverRunning, setServerRunning] = useState(false);\n\n // Initialize on first render\n if (!registryRef.current) {\n registryRef.current = new NativeUIBridgeRegistry({\n verbose: config.verbose,\n onEvent,\n });\n setGlobalRegistry(registryRef.current);\n }\n\n const registry = registryRef.current;\n\n // Create executor (memoized)\n if (!executorRef.current) {\n executorRef.current = createNativeActionExecutor(registry);\n }\n\n const executor = executorRef.current;\n\n // Server management (placeholder - actual implementation depends on RN HTTP server library)\n const startServer = useCallback(async () => {\n if (!features.server) {\n console.warn('[ui-bridge-native] Server feature not enabled');\n return;\n }\n\n // TODO: Implement actual HTTP server using react-native-http-bridge or similar\n // For now, just log that we would start the server\n console.log(\n `[ui-bridge-native] Would start HTTP server on port ${config.serverPort || 9876}`\n );\n setServerRunning(true);\n }, [features.server, config.serverPort]);\n\n const stopServer = useCallback(() => {\n // TODO: Implement actual server stop\n console.log('[ui-bridge-native] Would stop HTTP server');\n setServerRunning(false);\n }, []);\n\n // Auto-start server if enabled\n useEffect(() => {\n if (features.server) {\n startServer();\n return () => stopServer();\n }\n }, [features.server, startServer, stopServer]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n stopServer();\n resetGlobalRegistry();\n };\n }, [stopServer]);\n\n // Context methods\n const getElements = useCallback(() => registry.getAllElements(), [registry]);\n\n const getComponents = useCallback(() => registry.getAllComponents(), [registry]);\n\n const createSnapshot = useCallback(() => registry.createSnapshot(), [registry]);\n\n const on = useCallback(\n <T = unknown,>(type: BridgeEventType, listener: BridgeEventListener<T>) =>\n registry.on(type, listener),\n [registry]\n );\n\n const off = useCallback(\n <T = unknown,>(type: BridgeEventType, listener: BridgeEventListener<T>) =>\n registry.off(type, listener),\n [registry]\n );\n\n const contextValue = useMemo<UIBridgeNativeContextValue>(\n () => ({\n features,\n config,\n registry,\n executor,\n getElements,\n getComponents,\n createSnapshot,\n on,\n off,\n initialized: true,\n serverRunning,\n startServer,\n stopServer,\n }),\n [\n features,\n config,\n registry,\n executor,\n getElements,\n getComponents,\n createSnapshot,\n on,\n off,\n serverRunning,\n startServer,\n stopServer,\n ]\n );\n\n return (\n <UIBridgeNativeContext.Provider value={contextValue}>\n {children}\n </UIBridgeNativeContext.Provider>\n );\n}\n\n/**\n * useUIBridgeNative hook\n *\n * Access the UI Bridge Native context. Throws if used outside provider.\n */\nexport function useUIBridgeNative(): UIBridgeNativeContextValue {\n const context = useContext(UIBridgeNativeContext);\n if (!context) {\n throw new Error('useUIBridgeNative must be used within a UIBridgeNativeProvider');\n }\n return context;\n}\n\n/**\n * useUIBridgeNativeOptional hook\n *\n * Access the UI Bridge Native context, returning null if outside provider.\n */\nexport function useUIBridgeNativeOptional(): UIBridgeNativeContextValue | null {\n return useContext(UIBridgeNativeContext);\n}\n\n/**\n * useUIBridgeNativeRequired hook\n *\n * Alias for useUIBridgeNative (throws if outside provider).\n */\nexport const useUIBridgeNativeRequired = useUIBridgeNative;\n","/**\n * useUIElement Hook for React Native\n *\n * Register a native element with UI Bridge for control and observation.\n */\n\nimport { useRef, useEffect, useCallback, useMemo, useState } from 'react';\nimport type {\n NativeElementType,\n NativeStandardAction,\n NativeCustomAction,\n NativeElementState,\n NativeElementIdentifier,\n RegisteredNativeElement,\n NativeElementRef,\n NativeLayout,\n} from '../core/types';\nimport { useUIBridgeNativeOptional } from './UIBridgeNativeProvider';\n\n/**\n * Local type definition for the layout data we extract from LayoutChangeEvent.\n * We use this internally to avoid type conflicts between different react-native versions\n * (e.g., when ui-bridge-native is used as a file: dependency with a different RN version).\n */\ninterface LayoutEventData {\n nativeEvent: {\n layout: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n };\n}\n\n/**\n * useUIElement options\n */\nexport interface UseUIElementOptions {\n /** Unique identifier for the element */\n id: string;\n /** Element type (defaults to 'custom') */\n type?: NativeElementType;\n /** Human-readable label */\n label?: string;\n /** Override available actions */\n actions?: NativeStandardAction[];\n /** Custom actions */\n customActions?: Record<string, NativeCustomAction>;\n /** Whether to automatically register on mount */\n autoRegister?: boolean;\n /** Callback when state changes */\n onStateChange?: (state: NativeElementState) => void;\n /** Parent component path for tree path generation */\n parentPath?: string;\n}\n\n/**\n * Bridge props to spread onto the component\n */\nexport interface UIBridgeProps {\n /** Test ID for automation */\n testID: string;\n /** Accessibility label */\n accessibilityLabel?: string;\n}\n\n/**\n * useUIElement return value\n */\nexport interface UseUIElementReturn {\n /** Ref to attach to the element */\n ref: React.RefObject<NativeElementRef>;\n /** onLayout handler to spread onto the element - uses generic type for RN version compatibility */\n onLayout: (event: { nativeEvent: { layout: { x: number; y: number; width: number; height: number } } }) => void;\n /** Props to spread onto the element for identification */\n bridgeProps: UIBridgeProps;\n /** Whether the element is registered */\n registered: boolean;\n /** Get current state */\n getState: () => NativeElementState | null;\n /** Get element identifier */\n getIdentifier: () => NativeElementIdentifier | null;\n /** Trigger an action on this element */\n trigger: (action: NativeStandardAction | string, params?: Record<string, unknown>) => Promise<void>;\n /** Manually register the element */\n register: () => void;\n /** Manually unregister the element */\n unregister: () => void;\n /** The registered element info */\n registeredElement: RegisteredNativeElement | null;\n}\n\n/**\n * useUIElement hook for React Native\n *\n * Registers a native element with UI Bridge for programmatic control.\n *\n * @example\n * ```tsx\n * function SubmitButton() {\n * const { ref, onLayout, bridgeProps, trigger } = useUIElement({\n * id: 'submit-btn',\n * type: 'button',\n * label: 'Submit Form',\n * });\n *\n * return (\n * <Pressable\n * ref={ref}\n * onLayout={onLayout}\n * {...bridgeProps}\n * onPress={() => handleSubmit()}\n * >\n * <Text>Submit</Text>\n * </Pressable>\n * );\n * }\n * ```\n */\nexport function useUIElement(options: UseUIElementOptions): UseUIElementReturn {\n const bridge = useUIBridgeNativeOptional();\n const ref = useRef<NativeElementRef>(null);\n const [registered, setRegistered] = useState(false);\n const [_layout, setLayout] = useState<NativeLayout | null>(null);\n const propsRef = useRef<Record<string, unknown>>({});\n\n const {\n id,\n type = 'custom',\n label,\n actions,\n customActions,\n autoRegister = true,\n onStateChange,\n parentPath,\n } = options;\n\n // Build tree path\n const treePath = parentPath ? `${parentPath}/${id}` : id;\n\n // Bridge props to spread onto the element\n const bridgeProps: UIBridgeProps = useMemo(\n () => ({\n testID: id,\n accessibilityLabel: label,\n }),\n [id, label]\n );\n\n // Register the element\n const register = useCallback(() => {\n if (!bridge || registered) return;\n\n bridge.registry.registerElement(id, ref, {\n type,\n label,\n actions,\n customActions,\n treePath,\n testId: id,\n accessibilityLabel: label,\n });\n setRegistered(true);\n }, [bridge, registered, id, type, label, actions, customActions, treePath]);\n\n // Unregister the element\n const unregister = useCallback(() => {\n if (!bridge || !registered) return;\n\n bridge.registry.unregisterElement(id);\n setRegistered(false);\n }, [bridge, registered, id]);\n\n // Handle layout changes\n const onLayout = useCallback(\n (event: LayoutEventData) => {\n const { x, y, width, height } = event.nativeEvent.layout;\n\n // Get absolute position using measureInWindow\n if (ref.current && 'measureInWindow' in ref.current) {\n (ref.current as { measureInWindow: (callback: (pageX: number, pageY: number, w: number, h: number) => void) => void }).measureInWindow(\n (pageX: number, pageY: number) => {\n const newLayout: NativeLayout = {\n x,\n y,\n width,\n height,\n pageX,\n pageY,\n };\n setLayout(newLayout);\n\n // Update state in registry\n if (bridge && registered) {\n const newState: NativeElementState = {\n mounted: true,\n visible: width > 0 && height > 0,\n enabled: true,\n focused: false,\n layout: newLayout,\n };\n bridge.registry.updateElementState(id, newState);\n onStateChange?.(newState);\n }\n }\n );\n } else {\n // Fallback if measureInWindow not available\n const newLayout: NativeLayout = {\n x,\n y,\n width,\n height,\n pageX: x,\n pageY: y,\n };\n setLayout(newLayout);\n\n if (bridge && registered) {\n const newState: NativeElementState = {\n mounted: true,\n visible: width > 0 && height > 0,\n enabled: true,\n focused: false,\n layout: newLayout,\n };\n bridge.registry.updateElementState(id, newState);\n onStateChange?.(newState);\n }\n }\n },\n [bridge, registered, id, onStateChange]\n );\n\n // Auto-register on mount\n useEffect(() => {\n if (autoRegister) {\n register();\n }\n\n return () => {\n unregister();\n };\n }, [autoRegister, register, unregister]);\n\n // Update props for action execution (allows accessing onPress, onChangeText, etc.)\n const _updateProps = useCallback(\n (props: Record<string, unknown>) => {\n propsRef.current = { ...propsRef.current, ...props };\n if (bridge && registered) {\n bridge.registry.updateElementProps(id, props);\n }\n },\n [bridge, registered, id]\n );\n\n // Get state\n const getState = useCallback((): NativeElementState | null => {\n if (!bridge) return null;\n const element = bridge.registry.getElement(id);\n return element?.getState() || null;\n }, [bridge, id]);\n\n // Get identifier\n const getIdentifier = useCallback((): NativeElementIdentifier | null => {\n if (!bridge) return null;\n const element = bridge.registry.getElement(id);\n return element?.getIdentifier() || null;\n }, [bridge, id]);\n\n // Trigger action\n const trigger = useCallback(\n async (action: NativeStandardAction | string, params?: Record<string, unknown>) => {\n if (!bridge) {\n throw new Error('UI Bridge Native not available');\n }\n\n const response = await bridge.executor.executeAction(id, {\n action,\n params,\n });\n\n if (!response.success) {\n throw new Error(response.error || 'Action failed');\n }\n },\n [bridge, id]\n );\n\n // Get registered element\n const registeredElement = useMemo(() => {\n if (!bridge) return null;\n return bridge.registry.getElement(id) || null;\n }, [bridge, id, registered]);\n\n return {\n ref,\n onLayout,\n bridgeProps,\n registered,\n getState,\n getIdentifier,\n trigger,\n register,\n unregister,\n registeredElement,\n };\n}\n\n/**\n * useUIElementWithProps hook\n *\n * Extended version that also captures component props for action execution.\n * Useful when you need the bridge to be able to call onPress, onChangeText, etc.\n *\n * @example\n * ```tsx\n * function TextInputField({ onChangeText, value }) {\n * const { ref, onLayout, bridgeProps, captureProps } = useUIElementWithProps({\n * id: 'email-input',\n * type: 'input',\n * });\n *\n * // Capture props so bridge can call onChangeText\n * captureProps({ onChangeText, value });\n *\n * return (\n * <TextInput\n * ref={ref}\n * onLayout={onLayout}\n * {...bridgeProps}\n * value={value}\n * onChangeText={onChangeText}\n * />\n * );\n * }\n * ```\n */\nexport interface UseUIElementWithPropsReturn extends UseUIElementReturn {\n /** Capture props for action execution */\n captureProps: (props: Record<string, unknown>) => void;\n}\n\nexport function useUIElementWithProps(\n options: UseUIElementOptions\n): UseUIElementWithPropsReturn {\n const elementReturn = useUIElement(options);\n const bridge = useUIBridgeNativeOptional();\n\n const captureProps = useCallback(\n (props: Record<string, unknown>) => {\n if (bridge && elementReturn.registered) {\n bridge.registry.updateElementProps(options.id, props);\n }\n },\n [bridge, elementReturn.registered, options.id]\n );\n\n return {\n ...elementReturn,\n captureProps,\n };\n}\n","/**\n * useUIComponent Hook for React Native\n *\n * Register a component with UI Bridge for component-level actions.\n */\n\nimport { useEffect, useCallback, useRef, useMemo } from 'react';\nimport type { RegisteredNativeComponent } from '../core/types';\nimport { useUIBridgeNativeOptional } from './UIBridgeNativeProvider';\n\n/**\n * Action definition for useUIComponent\n */\nexport interface ComponentActionDef<TParams = unknown, TResult = unknown> {\n /** Action identifier */\n id: string;\n /** Human-readable label */\n label?: string;\n /** Description */\n description?: string;\n /** Handler function */\n handler: (params?: TParams) => TResult | Promise<TResult>;\n}\n\n/**\n * useUIComponent options\n */\nexport interface UseUIComponentOptions {\n /** Unique identifier for the component */\n id: string;\n /** Human-readable name */\n name: string;\n /** Description */\n description?: string;\n /** Actions available on this component */\n actions?: ComponentActionDef[];\n /** Child element IDs owned by this component */\n elementIds?: string[];\n /** Whether to automatically register on mount */\n autoRegister?: boolean;\n}\n\n/**\n * useUIComponent return value\n */\nexport interface UseUIComponentReturn {\n /** Whether the component is registered */\n registered: boolean;\n /** Execute an action on this component */\n executeAction: <TParams = unknown, TResult = unknown>(\n actionId: string,\n params?: TParams\n ) => Promise<TResult>;\n /** Manually register the component */\n register: () => void;\n /** Manually unregister the component */\n unregister: () => void;\n /** Update actions dynamically */\n updateActions: (actions: ComponentActionDef[]) => void;\n /** Add an element ID to this component */\n addElement: (elementId: string) => void;\n /** Remove an element ID from this component */\n removeElement: (elementId: string) => void;\n /** The registered component info */\n registeredComponent: RegisteredNativeComponent | null;\n}\n\n/**\n * useUIComponent hook for React Native\n *\n * Registers a component with UI Bridge for component-level control.\n * Components can expose high-level actions that may orchestrate multiple element interactions.\n *\n * @example\n * ```tsx\n * function LoginForm() {\n * const [email, setEmail] = useState('');\n * const [password, setPassword] = useState('');\n *\n * useUIComponent({\n * id: 'login-form',\n * name: 'Login Form',\n * actions: [\n * {\n * id: 'login',\n * label: 'Submit Login',\n * handler: async ({ email, password }) => {\n * setEmail(email);\n * setPassword(password);\n * await submitLogin();\n * },\n * },\n * {\n * id: 'clear',\n * label: 'Clear Form',\n * handler: () => {\n * setEmail('');\n * setPassword('');\n * },\n * },\n * ],\n * });\n *\n * return (\n * <View>\n * <TextInput value={email} onChangeText={setEmail} />\n * <TextInput value={password} onChangeText={setPassword} secureTextEntry />\n * <Button title=\"Login\" onPress={handleSubmit} />\n * </View>\n * );\n * }\n * ```\n */\nexport function useUIComponent(options: UseUIComponentOptions): UseUIComponentReturn {\n const bridge = useUIBridgeNativeOptional();\n const registeredRef = useRef(false);\n const actionsRef = useRef(options.actions || []);\n const elementIdsRef = useRef(options.elementIds || []);\n\n const { id, name, description, autoRegister = true } = options;\n\n // Update refs when options change\n useEffect(() => {\n actionsRef.current = options.actions || [];\n elementIdsRef.current = options.elementIds || [];\n }, [options.actions, options.elementIds]);\n\n // Register the component\n const register = useCallback(() => {\n if (!bridge || registeredRef.current) return;\n\n bridge.registry.registerComponent(id, {\n name,\n description,\n actions: actionsRef.current.map((a) => ({\n id: a.id,\n label: a.label,\n description: a.description,\n handler: a.handler,\n })),\n elementIds: elementIdsRef.current,\n });\n registeredRef.current = true;\n }, [bridge, id, name, description]);\n\n // Unregister the component\n const unregister = useCallback(() => {\n if (!bridge || !registeredRef.current) return;\n\n bridge.registry.unregisterComponent(id);\n registeredRef.current = false;\n }, [bridge, id]);\n\n // Execute an action\n const executeAction = useCallback(\n async <TParams = unknown, TResult = unknown>(\n actionId: string,\n params?: TParams\n ): Promise<TResult> => {\n if (!bridge) {\n throw new Error('UI Bridge Native not available');\n }\n\n const response = await bridge.executor.executeComponentAction(id, {\n action: actionId,\n params: params as Record<string, unknown>,\n });\n\n if (!response.success) {\n throw new Error(response.error || 'Action failed');\n }\n\n return response.result as TResult;\n },\n [bridge, id]\n );\n\n // Update actions dynamically\n const updateActions = useCallback(\n (actions: ComponentActionDef[]) => {\n actionsRef.current = actions;\n\n // Re-register with updated actions if already registered\n if (registeredRef.current && bridge) {\n bridge.registry.unregisterComponent(id);\n registeredRef.current = false;\n register();\n }\n },\n [bridge, id, register]\n );\n\n // Add element ID\n const addElement = useCallback((elementId: string) => {\n if (!elementIdsRef.current.includes(elementId)) {\n elementIdsRef.current = [...elementIdsRef.current, elementId];\n }\n }, []);\n\n // Remove element ID\n const removeElement = useCallback((elementId: string) => {\n elementIdsRef.current = elementIdsRef.current.filter((eid) => eid !== elementId);\n }, []);\n\n // Auto-register on mount\n useEffect(() => {\n if (autoRegister) {\n register();\n }\n\n return () => {\n unregister();\n };\n }, [autoRegister, register, unregister]);\n\n // Get registered component\n const registeredComponent = useMemo(() => {\n if (!bridge) return null;\n return bridge.registry.getComponent(id) || null;\n }, [bridge, id, registeredRef.current]);\n\n return {\n registered: registeredRef.current,\n executeAction,\n register,\n unregister,\n updateActions,\n addElement,\n removeElement,\n registeredComponent,\n };\n}\n\n/**\n * useUIComponentAction hook\n *\n * Create a stable action handler that can be used with useUIComponent.\n * Useful for memoizing action handlers.\n */\nexport function useUIComponentAction<TParams = unknown, TResult = unknown>(\n handler: (params?: TParams) => TResult | Promise<TResult>,\n deps: React.DependencyList\n): (params?: TParams) => TResult | Promise<TResult> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useCallback(handler, deps);\n}\n","/**\n * useUIBridge Hook for React Native\n *\n * Provides a simplified interface for common UI Bridge operations.\n */\n\nimport { useCallback, useMemo } from 'react';\nimport type {\n NativeActionRequest,\n NativeActionResponse,\n NativeFindRequest,\n NativeFindResponse,\n NativeBridgeSnapshot,\n RegisteredNativeElement,\n RegisteredNativeComponent,\n Workflow,\n} from '../core/types';\nimport { useUIBridgeNativeOptional } from './UIBridgeNativeProvider';\n\n/**\n * Component action request\n */\nexport interface ComponentActionRequest {\n /** Action ID */\n action: string;\n /** Action parameters */\n params?: Record<string, unknown>;\n}\n\n/**\n * Component action response\n */\nexport interface ComponentActionResponse {\n /** Whether the action succeeded */\n success: boolean;\n /** Result of the action */\n result?: unknown;\n /** Error message if failed */\n error?: string;\n /** Duration in milliseconds */\n durationMs: number;\n /** Timestamp */\n timestamp: number;\n}\n\n/**\n * useUIBridge return type\n */\nexport interface UseUIBridgeReturn {\n /** Whether UI Bridge is available */\n available: boolean;\n /** Whether UI Bridge is initialized */\n initialized: boolean;\n /** All registered elements */\n elements: RegisteredNativeElement[];\n /** All registered components */\n components: RegisteredNativeComponent[];\n /** All registered workflows */\n workflows: Workflow[];\n /** Create a snapshot of the current state */\n createSnapshot: () => NativeBridgeSnapshot;\n /** Execute an action on an element */\n executeAction: (\n elementId: string,\n request: NativeActionRequest\n ) => Promise<NativeActionResponse>;\n /** Execute a component action */\n executeComponentAction: (\n componentId: string,\n request: ComponentActionRequest\n ) => Promise<ComponentActionResponse>;\n /** Find elements */\n find: (request?: NativeFindRequest) => Promise<NativeFindResponse>;\n /** Get an element by ID */\n getElement: (id: string) => RegisteredNativeElement | undefined;\n /** Get a component by ID */\n getComponent: (id: string) => RegisteredNativeComponent | undefined;\n /** Get element state by ID */\n getElementState: (id: string) => ReturnType<RegisteredNativeElement['getState']> | null;\n /** Register a workflow */\n registerWorkflow: (workflow: Workflow) => void;\n /** Unregister a workflow */\n unregisterWorkflow: (id: string) => void;\n}\n\n/**\n * useUIBridge hook\n *\n * Provides a simplified interface for accessing UI Bridge functionality.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { available, elements, executeAction, find } = useUIBridge();\n *\n * if (!available) {\n * return <Text>UI Bridge not available</Text>;\n * }\n *\n * const handlePress = async () => {\n * // Find all buttons\n * const result = await find({ types: ['button'] });\n * console.log('Found buttons:', result.elements);\n *\n * // Execute action on specific element\n * await executeAction('submit-btn', { action: 'press' });\n * };\n *\n * return (\n * <View>\n * <Text>Elements: {elements.length}</Text>\n * <Button title=\"Press\" onPress={handlePress} />\n * </View>\n * );\n * }\n * ```\n */\nexport function useUIBridge(): UseUIBridgeReturn {\n const bridge = useUIBridgeNativeOptional();\n\n const available = bridge !== null;\n const initialized = bridge?.initialized ?? false;\n\n // Get elements\n const elements = useMemo(\n () => (bridge ? bridge.getElements() : []),\n [bridge]\n );\n\n // Get components\n const components = useMemo(\n () => (bridge ? bridge.getComponents() : []),\n [bridge]\n );\n\n // Get workflows\n const workflows = useMemo(\n () => (bridge ? bridge.registry.getAllWorkflows() : []),\n [bridge]\n );\n\n // Create snapshot\n const createSnapshot = useCallback((): NativeBridgeSnapshot => {\n if (!bridge) {\n return {\n timestamp: Date.now(),\n elements: [],\n components: [],\n workflows: [],\n };\n }\n return bridge.createSnapshot();\n }, [bridge]);\n\n // Execute action\n const executeAction = useCallback(\n async (\n elementId: string,\n request: NativeActionRequest\n ): Promise<NativeActionResponse> => {\n if (!bridge) {\n return {\n success: false,\n error: 'UI Bridge not available',\n durationMs: 0,\n timestamp: Date.now(),\n };\n }\n return bridge.executor.executeAction(elementId, request);\n },\n [bridge]\n );\n\n // Execute component action\n const executeComponentAction = useCallback(\n async (\n componentId: string,\n request: ComponentActionRequest\n ): Promise<ComponentActionResponse> => {\n if (!bridge) {\n return {\n success: false,\n error: 'UI Bridge not available',\n durationMs: 0,\n timestamp: Date.now(),\n };\n }\n return bridge.executor.executeComponentAction(componentId, request);\n },\n [bridge]\n );\n\n // Find elements\n const find = useCallback(\n async (request?: NativeFindRequest): Promise<NativeFindResponse> => {\n if (!bridge) {\n return {\n elements: [],\n total: 0,\n durationMs: 0,\n timestamp: Date.now(),\n };\n }\n return bridge.executor.find(request || {});\n },\n [bridge]\n );\n\n // Get element\n const getElement = useCallback(\n (id: string) => bridge?.registry.getElement(id),\n [bridge]\n );\n\n // Get component\n const getComponent = useCallback(\n (id: string) => bridge?.registry.getComponent(id),\n [bridge]\n );\n\n // Get element state\n const getElementState = useCallback(\n (id: string) => {\n const element = bridge?.registry.getElement(id);\n return element?.getState() ?? null;\n },\n [bridge]\n );\n\n // Register workflow\n const registerWorkflow = useCallback(\n (workflow: Workflow) => {\n bridge?.registry.registerWorkflow(workflow);\n },\n [bridge]\n );\n\n // Unregister workflow\n const unregisterWorkflow = useCallback(\n (id: string) => {\n bridge?.registry.unregisterWorkflow(id);\n },\n [bridge]\n );\n\n return {\n available,\n initialized,\n elements,\n components,\n workflows,\n createSnapshot,\n executeAction,\n executeComponentAction,\n find,\n getElement,\n getComponent,\n getElementState,\n registerWorkflow,\n unregisterWorkflow,\n };\n}\n\n/**\n * useUIBridgeRequired hook\n *\n * Same as useUIBridge but throws if not available.\n */\nexport function useUIBridgeRequired(): UseUIBridgeReturn {\n const result = useUIBridge();\n if (!result.available) {\n throw new Error('useUIBridgeRequired must be used within a UIBridgeNativeProvider');\n }\n return result;\n}\n","/**\n * useAutoRegister Hook for React Native\n *\n * Enables automatic registration of interactive React Native components.\n * Unlike the web version, this doesn't use MutationObserver (no DOM).\n * Instead, it provides a simple API for components to register themselves.\n *\n * For comprehensive coverage in React Native, components should:\n * 1. Use this hook at the app root to enable the registry\n * 2. Use useUIElement on interactive components (or wrap with Pressable/TouchableOpacity)\n */\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport { useUIBridgeNativeOptional } from './UIBridgeNativeProvider';\nimport type { NativeElementRef } from '../core/types';\nimport type { RegisterElementOptions } from '../core/registry';\n\n/**\n * Options for auto-registration in React Native\n */\nexport interface NativeAutoRegisterOptions {\n /** Enable auto-registration (default: true in dev mode) */\n enabled?: boolean;\n /** Callback when element is registered */\n onRegister?: (id: string) => void;\n /** Callback when element is unregistered */\n onUnregister?: (id: string) => void;\n}\n\n/**\n * Handle returned by useAutoRegister for programmatic registration\n */\nexport interface NativeAutoRegisterHandle {\n /** Register an element programmatically */\n register: (id: string, ref: React.RefObject<NativeElementRef>, options?: RegisterElementOptions) => void;\n /** Unregister an element programmatically */\n unregister: (id: string) => void;\n /** Check if auto-registration is enabled */\n isEnabled: boolean;\n}\n\n/**\n * Hook for enabling automatic element registration in React Native.\n *\n * Since React Native doesn't have a DOM to observe, this hook provides\n * a handle for programmatic registration. For most use cases, you should\n * use useUIElement directly on interactive components.\n *\n * @example\n * ```tsx\n * function App() {\n * const autoRegister = useAutoRegister({ enabled: __DEV__ });\n *\n * // Programmatic registration (rare use case)\n * useEffect(() => {\n * autoRegister.register('custom-element', {\n * type: 'button',\n * label: 'Custom Button',\n * });\n *\n * return () => autoRegister.unregister('custom-element');\n * }, []);\n *\n * return <YourApp />;\n * }\n * ```\n */\nexport function useAutoRegister(\n options: NativeAutoRegisterOptions = {}\n): NativeAutoRegisterHandle {\n // Note: __DEV__ is a React Native global, but TypeScript doesn't know about it by default\n // Using false as a safe default - consumers should explicitly set enabled: __DEV__ in their app\n const { enabled = false, onRegister, onUnregister } = options;\n\n const bridge = useUIBridgeNativeOptional();\n const registeredIdsRef = useRef(new Set<string>());\n\n /**\n * Register an element\n */\n const register = useCallback(\n (id: string, ref: React.RefObject<NativeElementRef>, elementOptions?: RegisterElementOptions): void => {\n if (!enabled || !bridge?.registry) return;\n\n // Avoid duplicate registration\n if (registeredIdsRef.current.has(id)) return;\n\n bridge.registry.registerElement(id, ref, elementOptions);\n registeredIdsRef.current.add(id);\n onRegister?.(id);\n },\n [enabled, bridge, onRegister]\n );\n\n /**\n * Unregister an element\n */\n const unregister = useCallback(\n (id: string): void => {\n if (!bridge?.registry) return;\n\n bridge.registry.unregisterElement(id);\n registeredIdsRef.current.delete(id);\n onUnregister?.(id);\n },\n [bridge, onUnregister]\n );\n\n /**\n * Cleanup on unmount\n */\n useEffect(() => {\n return () => {\n // Unregister all elements on unmount\n registeredIdsRef.current.forEach((id) => {\n bridge?.registry.unregisterElement(id);\n });\n registeredIdsRef.current.clear();\n };\n }, [bridge]);\n\n return {\n register,\n unregister,\n isEnabled: enabled && !!bridge?.registry,\n };\n}\n\nexport default useAutoRegister;\n"]}
|