@qontinui/ui-bridge-native 0.6.12 → 0.6.14

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.
Files changed (66) hide show
  1. package/README.md +36 -16
  2. package/dist/control/action-executor.d.ts +42 -2
  3. package/dist/control/action-executor.d.ts.map +1 -1
  4. package/dist/control/index.js +723 -4
  5. package/dist/control/index.js.map +1 -1
  6. package/dist/control/index.mjs +723 -5
  7. package/dist/control/index.mjs.map +1 -1
  8. package/dist/control/types.d.ts +82 -1
  9. package/dist/control/types.d.ts.map +1 -1
  10. package/dist/core/abortable.d.ts +151 -0
  11. package/dist/core/abortable.d.ts.map +1 -0
  12. package/dist/core/action-effect.d.ts +74 -0
  13. package/dist/core/action-effect.d.ts.map +1 -0
  14. package/dist/core/element-actions.d.ts +38 -0
  15. package/dist/core/element-actions.d.ts.map +1 -0
  16. package/dist/core/index.d.ts +4 -0
  17. package/dist/core/index.d.ts.map +1 -1
  18. package/dist/core/index.js +756 -15
  19. package/dist/core/index.js.map +1 -1
  20. package/dist/core/index.mjs +738 -16
  21. package/dist/core/index.mjs.map +1 -1
  22. package/dist/core/param-schema.d.ts +282 -0
  23. package/dist/core/param-schema.d.ts.map +1 -0
  24. package/dist/core/registry.d.ts +272 -2
  25. package/dist/core/registry.d.ts.map +1 -1
  26. package/dist/core/types.d.ts +231 -32
  27. package/dist/core/types.d.ts.map +1 -1
  28. package/dist/debug/index.js.map +1 -1
  29. package/dist/debug/index.mjs.map +1 -1
  30. package/dist/index.d.ts +10 -5
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1568 -135
  33. package/dist/index.js.map +1 -1
  34. package/dist/index.mjs +1550 -136
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/react/UIBridgeNativeProvider.d.ts +18 -24
  37. package/dist/react/UIBridgeNativeProvider.d.ts.map +1 -1
  38. package/dist/react/index.js +1385 -130
  39. package/dist/react/index.js.map +1 -1
  40. package/dist/react/index.mjs +1385 -130
  41. package/dist/react/index.mjs.map +1 -1
  42. package/dist/react/useUIBridge.d.ts +19 -22
  43. package/dist/react/useUIBridge.d.ts.map +1 -1
  44. package/dist/react/useUIComponent.d.ts +113 -8
  45. package/dist/react/useUIComponent.d.ts.map +1 -1
  46. package/dist/react/useUIElement.d.ts +34 -8
  47. package/dist/react/useUIElement.d.ts.map +1 -1
  48. package/dist/server/handlers.d.ts.map +1 -1
  49. package/dist/server/http-server.d.ts +15 -2
  50. package/dist/server/http-server.d.ts.map +1 -1
  51. package/dist/server/index.js +345 -43
  52. package/dist/server/index.js.map +1 -1
  53. package/dist/server/index.mjs +345 -44
  54. package/dist/server/index.mjs.map +1 -1
  55. package/dist/server/observability.d.ts +40 -0
  56. package/dist/server/observability.d.ts.map +1 -1
  57. package/dist/server/types.d.ts +57 -1
  58. package/dist/server/types.d.ts.map +1 -1
  59. package/dist/transport/CloudRelayClient.d.ts.map +1 -1
  60. package/dist/transport/DeviceAnnouncer.d.ts +35 -7
  61. package/dist/transport/DeviceAnnouncer.d.ts.map +1 -1
  62. package/dist/transport/index.d.ts +1 -1
  63. package/dist/transport/index.d.ts.map +1 -1
  64. package/dist/transport/relay-logging.d.ts +50 -0
  65. package/dist/transport/relay-logging.d.ts.map +1 -0
  66. package/package.json +2 -2
package/README.md CHANGED
@@ -5,9 +5,9 @@ UI Bridge framework for React Native applications. Enables AI-driven UI automati
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install ui-bridge-native
8
+ npm install @qontinui/ui-bridge-native
9
9
  # or
10
- yarn add ui-bridge-native
10
+ yarn add @qontinui/ui-bridge-native
11
11
  ```
12
12
 
13
13
  ## Quick Start
@@ -16,7 +16,7 @@ yarn add ui-bridge-native
16
16
 
17
17
  ```tsx
18
18
  // app/_layout.tsx or App.tsx
19
- import { UIBridgeNativeProvider } from 'ui-bridge-native';
19
+ import { UIBridgeNativeProvider } from '@qontinui/ui-bridge-native';
20
20
 
21
21
  export default function RootLayout() {
22
22
  return (
@@ -33,7 +33,7 @@ export default function RootLayout() {
33
33
  ### 2. Use hooks in your components
34
34
 
35
35
  ```tsx
36
- import { useUIElement } from 'ui-bridge-native';
36
+ import { useUIElement } from '@qontinui/ui-bridge-native';
37
37
 
38
38
  function SubmitButton({ onPress }) {
39
39
  const { ref, onLayout, bridgeProps } = useUIElement({
@@ -180,6 +180,7 @@ await executeAction('submit-button', { action: 'press' });
180
180
  - `focus` - Focus element
181
181
  - `blur` - Blur element
182
182
  - `scroll` - Scroll
183
+ - `scrollIntoView` - Scroll the element's declared `scrollAncestorId` container (vertical ScrollView / FlatList) so the element is on screen; advertised only on elements that declare one
183
184
  - `swipe` - Swipe gesture
184
185
  - `toggle` - Toggle switch/checkbox
185
186
 
@@ -196,16 +197,35 @@ The package includes an embedded HTTP server for external control. Configure wit
196
197
 
197
198
  ### API Endpoints
198
199
 
199
- | Method | Path | Description |
200
- | ------ | --------------------------------------------------- | ------------------------ |
201
- | GET | `/ui-bridge/health` | Health check |
202
- | GET | `/ui-bridge/control/elements` | List all elements |
203
- | GET | `/ui-bridge/control/element/:id` | Get element details |
204
- | POST | `/ui-bridge/control/element/:id/action` | Execute action |
205
- | GET | `/ui-bridge/control/components` | List all components |
206
- | POST | `/ui-bridge/control/component/:id/action/:actionId` | Execute component action |
207
- | POST | `/ui-bridge/control/find` | Find elements |
208
- | GET | `/ui-bridge/control/snapshot` | Get full snapshot |
200
+ The bridge serves **56** method+path pairs. Two of them tell you about the other
201
+ 54, so this README does not try to be the list — it went stale at 7 rows while
202
+ the surface grew, and a partial table read as a complete one is worse than no
203
+ table:
204
+
205
+ | Method | Path | Description |
206
+ | ------ | --------------------- | ------------------------------------------------------------ |
207
+ | GET | `/ui-bridge/_routes` | Every mounted route as `{method, path}` — ask the live server |
208
+ | GET | `/ui-bridge/_help` | The same list plus per-handler descriptions, actions and tips |
209
+
210
+ ```bash
211
+ curl -s http://localhost:8087/ui-bridge/_routes | jq '.data.routes'
212
+ ```
213
+
214
+ Statically, the same contract is the exported `UI_BRIDGE_NATIVE_ROUTES`:
215
+
216
+ ```ts
217
+ import { UI_BRIDGE_NATIVE_ROUTES } from '@qontinui/ui-bridge-native';
218
+ ```
219
+
220
+ Entries carrying `requiresTestHooks: true` are mounted only when the server
221
+ config sets `testHooks`; a production build answers those with a plain 404.
222
+ `route-table-parity.test.ts` pins the exported table against `_routes` in both
223
+ directions, and separately at `testHooks: false`, so neither can drift from the
224
+ router.
225
+
226
+ A wrong verb on a path the bridge does publish answers **405** with an `Allow`
227
+ header naming the verbs it accepts (and the same verbs in the JSON envelope's
228
+ `error`); a path it does not publish answers **404**.
209
229
 
210
230
  ### Custom Server Adapter
211
231
 
@@ -219,7 +239,7 @@ The HTTP server requires a platform-specific adapter. See [documentation](./docs
219
239
  Built-in visual inspector for development:
220
240
 
221
241
  ```tsx
222
- import { UIBridgeInspector } from 'ui-bridge-native/debug';
242
+ import { UIBridgeInspector } from '@qontinui/ui-bridge-native/debug';
223
243
 
224
244
  function App() {
225
245
  return (
@@ -236,7 +256,7 @@ function App() {
236
256
  Full TypeScript support included. Import types as needed:
237
257
 
238
258
  ```tsx
239
- import type { NativeElementState, NativeElementType, UseUIElementOptions } from 'ui-bridge-native';
259
+ import type { NativeElementState, NativeElementType, UseUIElementOptions } from '@qontinui/ui-bridge-native';
240
260
  ```
241
261
 
242
262
  ## License
@@ -7,7 +7,17 @@
7
7
  */
8
8
  import type { NativeUIBridgeRegistry } from '../core/registry';
9
9
  import type { NativeFindRequest, NativeFindResponse, WaitOptions } from '../core/types';
10
- import type { ControlActionRequest, ControlActionResponse, ComponentActionRequest, ComponentActionResponse, WaitResult, NativeActionExecutor, NativeActionListener } from './types';
10
+ import type { ControlActionRequest, ControlActionResponse, ComponentActionRequest, ComponentActionResponse, ComponentActionInvokeOptions, WaitResult, NativeActionExecutor, NativeActionListener } from './types';
11
+ /**
12
+ * An action failure that carries a machine-readable code of its own, so the
13
+ * HTTP handler can report it as that code instead of the generic
14
+ * `ACTION_FAILED`. Used for `NOT_SUPPORTED` — "this element cannot do that",
15
+ * which a caller must not retry with a different request shape.
16
+ */
17
+ export declare class NativeActionError extends Error {
18
+ readonly code: string;
19
+ constructor(message: string, code: string);
20
+ }
11
21
  /**
12
22
  * Default native action executor implementation
13
23
  */
@@ -73,6 +83,36 @@ export declare class DefaultNativeActionExecutor implements NativeActionExecutor
73
83
  * Perform scroll action
74
84
  */
75
85
  private performScroll;
86
+ /**
87
+ * Perform scrollIntoView: scroll the element's DECLARED scroll container so
88
+ * the element sits `padding` dp below the top of its viewport.
89
+ *
90
+ * The container comes from `scrollAncestorId` and nowhere else — the
91
+ * registry keeps no parent chain (`RegisterElementOptions.scrollAncestorId`),
92
+ * so there is no "nearest ScrollView" to find. Nothing here tracks a
93
+ * ScrollView's content offset either (`performScroll` only fakes an
94
+ * `onScroll` event), so the target is measured CONTENT-relative with
95
+ * `measureLayout` against the container's inner content view: stateless,
96
+ * and immune to a stale-offset race.
97
+ *
98
+ * Result shape mirrors the web executor's `scrollIntoView`
99
+ * (`@qontinui/ui-bridge` `control/action-executor.ts`):
100
+ * `{ alreadyVisible, scrolled }`, short-circuiting when the element is
101
+ * already fully inside its clip region. "Fully visible" is only claimed when
102
+ * it is MEASURED — a page-space rect for the element and a known,
103
+ * non-empty clip (window ∩ declared container), both measured at call
104
+ * time. Anything unknown scrolls.
105
+ *
106
+ * Containers: a ScrollView, or a VirtualizedList (FlatList / SectionList)
107
+ * unwrapped through `getNativeScrollRef()` / `getScrollResponder()`.
108
+ * Vertical only — a `horizontal` container is NOT_SUPPORTED. The action
109
+ * returns once `scrollTo` is dispatched; positions settle on the next frame.
110
+ *
111
+ * Prerequisites are checked BEFORE the visibility short-circuit, so whether
112
+ * the element supports the action does not depend on where it happens to be
113
+ * on screen. Each missing prerequisite is a `NOT_SUPPORTED` failure.
114
+ */
115
+ private performScrollIntoView;
76
116
  /**
77
117
  * Perform swipe action
78
118
  */
@@ -88,7 +128,7 @@ export declare class DefaultNativeActionExecutor implements NativeActionExecutor
88
128
  /**
89
129
  * Execute a component action
90
130
  */
91
- executeComponentAction(componentId: string, request: ComponentActionRequest): Promise<ComponentActionResponse>;
131
+ executeComponentAction(componentId: string, request: ComponentActionRequest, options?: ComponentActionInvokeOptions): Promise<ComponentActionResponse>;
92
132
  /**
93
133
  * Find elements
94
134
  */
@@ -1 +1 @@
1
- {"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../../src/control/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAElB,WAAW,EACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACV,oBAAoB,EAEpB,oBAAoB,EAKrB,MAAM,SAAS,CAAC;AAqBjB;;GAEG;AACH,qBAAa,2BAA4B,YAAW,oBAAoB;IAG1D,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,eAAe,CAAmC;gBAEtC,QAAQ,EAAE,sBAAsB;IAEpD,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAO5D,uGAAuG;IACvG,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAwHjC;;OAEG;YACW,aAAa;IAyD3B;;OAEG;YACW,YAAY;IAmB1B;;OAEG;YACW,gBAAgB;IAa9B;;OAEG;YACW,gBAAgB;IAmB9B;;OAEG;YACW,WAAW;IA6CzB;;;;;;;;;;;;;OAaG;YACW,eAAe;IAiC7B;;OAEG;YACW,YAAY;IAkB1B;;OAEG;YACW,YAAY;IAa1B;;OAEG;YACW,WAAW;IAazB;;OAEG;YACW,aAAa;IAc3B;;OAEG;YACW,YAAY;IA4B1B;;OAEG;YACW,aAAa;IAiB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACG,sBAAsB,CAC1B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,uBAAuB,CAAC;IAmDnC;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2DnE;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAIlF;;OAEG;YACW,sBAAsB;CA4DrC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,sBAAsB,GAAG,oBAAoB,CAEjG"}
1
+ {"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../../src/control/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAElB,WAAW,EACZ,MAAM,eAAe,CAAC;AAevB,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,UAAU,EACV,oBAAoB,EAEpB,oBAAoB,EAMrB,MAAM,SAAS,CAAC;AAcjB;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAGxC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBADrB,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,MAAM;CAKxB;AAkID;;GAEG;AACH,qBAAa,2BAA4B,YAAW,oBAAoB;IAG1D,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,eAAe,CAAmC;gBAEtC,QAAQ,EAAE,sBAAsB;IAEpD,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAO5D,uGAAuG;IACvG,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAyHjC;;OAEG;YACW,aAAa;IAmE3B;;OAEG;YACW,YAAY;IAmB1B;;OAEG;YACW,gBAAgB;IAa9B;;OAEG;YACW,gBAAgB;IAmB9B;;OAEG;YACW,WAAW;IA6CzB;;;;;;;;;;;;;OAaG;YACW,eAAe;IAiC7B;;OAEG;YACW,YAAY;IAkB1B;;OAEG;YACW,YAAY;IAa1B;;OAEG;YACW,WAAW;IAazB;;OAEG;YACW,aAAa;IAc3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;YACW,qBAAqB;IA2KnC;;OAEG;YACW,YAAY;IA4B1B;;OAEG;YACW,aAAa;IAiB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACG,sBAAsB,CAC1B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,uBAAuB,CAAC;IAmJnC;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2DnE;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAIlF;;OAEG;YACW,sBAAsB;CA4DrC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,sBAAsB,GAAG,oBAAoB,CAEjG"}