@easyops-cn/a2ui-react 0.0.6 → 0.0.8

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/README.md CHANGED
@@ -40,8 +40,8 @@ function App() {
40
40
  }
41
41
 
42
42
  return (
43
- <A2UIProvider messages={messages} onAction={handleAction}>
44
- <A2UIRenderer />
43
+ <A2UIProvider messages={messages}>
44
+ <A2UIRenderer onAction={handleAction} />
45
45
  </A2UIProvider>
46
46
  )
47
47
  }
@@ -69,12 +69,8 @@ const ComponentsMap = new Map<string, React.ComponentType<any>>([
69
69
 
70
70
  function App() {
71
71
  return (
72
- <A2UIProvider
73
- components={ComponentsMap}
74
- messages={messages}
75
- onAction={handleAction}
76
- >
77
- <A2UIRenderer />
72
+ <A2UIProvider components={ComponentsMap} messages={messages}>
73
+ <A2UIRenderer onAction={handleAction} />
78
74
  </A2UIProvider>
79
75
  )
80
76
  }
@@ -1,37 +1,11 @@
1
+ import { ActionHandler } from './types';
1
2
  /**
2
- * A2UIRenderer - Component for rendering A2UI surfaces.
3
- *
4
- * This component renders the surfaces from the A2UI context.
5
- * It must be used within an A2UIProvider.
6
- *
7
- * @example
8
- * ```tsx
9
- * import { A2UIProvider, A2UIRenderer, A2UIMessage, A2UIAction } from '@easyops-cn/a2ui-react/0.8'
10
- *
11
- * function App() {
12
- * const messages: A2UIMessage[] = [...]
13
- * const handleAction = (action: A2UIAction) => {
14
- * console.log('Action:', action)
15
- * }
16
- * return (
17
- * <A2UIProvider messages={messages} onAction={handleAction}>
18
- * <A2UIRenderer />
19
- * </A2UIProvider>
20
- * )
21
- * }
22
- *
23
- * // With custom middleware component that uses hooks
24
- * function AppWithMiddleware() {
25
- * return (
26
- * <A2UIProvider messages={messages} onAction={handleAction}>
27
- * <MyCustomMiddleware>
28
- * <A2UIRenderer />
29
- * </MyCustomMiddleware>
30
- * </A2UIProvider>
31
- * )
32
- * }
33
- * ```
3
+ * Props for A2UIRenderer.
34
4
  */
5
+ export interface A2UIRendererProps {
6
+ /** Callback when an action is dispatched */
7
+ onAction?: ActionHandler;
8
+ }
35
9
  /**
36
10
  * Component for rendering A2UI surfaces.
37
11
  *
@@ -40,18 +14,18 @@
40
14
  * @example
41
15
  * ```tsx
42
16
  * // Basic usage
43
- * <A2UIProvider messages={messages} onAction={handleAction}>
44
- * <A2UIRenderer />
17
+ * <A2UIProvider messages={messages}>
18
+ * <A2UIRenderer onAction={handleAction} />
45
19
  * </A2UIProvider>
46
20
  *
47
21
  * // With custom middleware for hooks access
48
- * <A2UIProvider messages={messages} onAction={handleAction}>
22
+ * <A2UIProvider messages={messages}>
49
23
  * <MyCustomComponent />
50
- * <A2UIRenderer />
24
+ * <A2UIRenderer onAction={handleAction} />
51
25
  * </A2UIProvider>
52
26
  * ```
53
27
  */
54
- export declare function A2UIRenderer(): import("react/jsx-runtime").JSX.Element | null;
28
+ export declare function A2UIRenderer({ onAction }: A2UIRendererProps): import("react/jsx-runtime").JSX.Element | null;
55
29
  export declare namespace A2UIRenderer {
56
30
  var displayName: string;
57
31
  }
@@ -1,18 +1,19 @@
1
- import { jsx as t, Fragment as m } from "react/jsx-runtime";
2
- import { useSurfaceContext as i } from "./contexts/SurfaceContext.js";
3
- import { ComponentRenderer as u } from "./components/ComponentRenderer.js";
4
- function f() {
5
- const { surfaces: o } = i(), r = Array.from(o.entries());
6
- return r.length === 0 ? null : /* @__PURE__ */ t(m, { children: r.map(([e, n]) => n.root ? /* @__PURE__ */ t(
7
- u,
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import { useSurfaceContext as m } from "./contexts/SurfaceContext.js";
3
+ import { ActionProvider as f } from "./contexts/ActionContext.js";
4
+ import { ComponentRenderer as p } from "./components/ComponentRenderer.js";
5
+ function u({ onAction: t }) {
6
+ const { surfaces: i } = m(), r = Array.from(i.entries());
7
+ return r.length === 0 ? null : /* @__PURE__ */ n(f, { onAction: t, children: r.map(([e, o]) => o.root ? /* @__PURE__ */ n(
8
+ p,
8
9
  {
9
10
  surfaceId: e,
10
- componentId: n.root
11
+ componentId: o.root
11
12
  },
12
13
  e
13
14
  ) : null) });
14
15
  }
15
- f.displayName = "A2UI.Renderer";
16
+ u.displayName = "A2UI.Renderer";
16
17
  export {
17
- f as A2UIRenderer
18
+ u as A2UIRenderer
18
19
  };
@@ -1,5 +1,5 @@
1
1
  import { ReactNode, ComponentType } from 'react';
2
- import { ActionHandler, A2UIMessage, BaseComponentProps } from '../types';
2
+ import { A2UIMessage, BaseComponentProps } from '../types';
3
3
  /**
4
4
  * Type for custom component map.
5
5
  */
@@ -10,8 +10,6 @@ export type ComponentsMap = Map<string, ComponentType<BaseComponentProps & Recor
10
10
  export interface A2UIProviderProps {
11
11
  /** Array of A2UI messages to render */
12
12
  messages: A2UIMessage[];
13
- /** Callback when an action is dispatched */
14
- onAction?: ActionHandler;
15
13
  /** Custom component overrides */
16
14
  components?: ComponentsMap;
17
15
  children: ReactNode;
@@ -22,20 +20,18 @@ export interface A2UIProviderProps {
22
20
  * Provides:
23
21
  * - SurfaceContext: Component tree management
24
22
  * - DataModelContext: Data model state
25
- * - ActionContext: Action dispatching
26
23
  * - ComponentsMapContext: Custom component overrides
27
24
  *
28
25
  * @param props - Component props
29
26
  * @param props.messages - Array of A2UI messages to render
30
- * @param props.onAction - Optional callback when an action is dispatched
31
27
  * @param props.components - Optional custom component overrides
32
28
  * @param props.children - Child components (typically A2UIRenderer)
33
29
  *
34
30
  * @example
35
31
  * ```tsx
36
32
  * // Basic usage
37
- * <A2UIProvider messages={messages} onAction={handleAction}>
38
- * <A2UIRenderer />
33
+ * <A2UIProvider messages={messages}>
34
+ * <A2UIRenderer onAction={handleAction} />
39
35
  * </A2UIProvider>
40
36
  *
41
37
  * // With custom components
@@ -45,17 +41,16 @@ export interface A2UIProviderProps {
45
41
  * ])
46
42
  * <A2UIProvider
47
43
  * messages={messages}
48
- * onAction={handleAction}
49
44
  * components={customComponents}
50
45
  * >
51
- * <A2UIRenderer />
46
+ * <A2UIRenderer onAction={handleAction} />
52
47
  * </A2UIProvider>
53
48
  *
54
49
  * // With custom middleware for hooks access
55
- * <A2UIProvider messages={messages} onAction={handleAction}>
50
+ * <A2UIProvider messages={messages}>
56
51
  * <MyCustomComponent />
57
- * <A2UIRenderer />
52
+ * <A2UIRenderer onAction={handleAction} />
58
53
  * </A2UIProvider>
59
54
  * ```
60
55
  */
61
- export declare function A2UIProvider({ messages, onAction, components, children, }: A2UIProviderProps): import("react/jsx-runtime").JSX.Element;
56
+ export declare function A2UIProvider({ messages, components, children, }: A2UIProviderProps): import("react/jsx-runtime").JSX.Element;
@@ -1,35 +1,33 @@
1
- import { jsx as o, Fragment as n } from "react/jsx-runtime";
2
- import { useEffect as s } from "react";
3
- import { SurfaceProvider as m } from "./SurfaceContext.js";
4
- import { DataModelProvider as f } from "./DataModelContext.js";
5
- import { ActionProvider as c } from "./ActionContext.js";
6
- import { ComponentsMapProvider as p } from "./ComponentsMapContext.js";
7
- import { componentRegistry as a } from "../components/ComponentRenderer.js";
8
- import { useA2UIMessageHandler as d } from "../hooks/useA2UIMessageHandler.js";
9
- function l({
1
+ import { jsx as e, Fragment as n } from "react/jsx-runtime";
2
+ import { useEffect as i } from "react";
3
+ import { SurfaceProvider as f } from "./SurfaceContext.js";
4
+ import { DataModelProvider as m } from "./DataModelContext.js";
5
+ import { ComponentsMapProvider as a } from "./ComponentsMapContext.js";
6
+ import { componentRegistry as c } from "../components/ComponentRenderer.js";
7
+ import { useA2UIMessageHandler as p } from "../hooks/useA2UIMessageHandler.js";
8
+ function d({
10
9
  messages: r,
11
- children: i
10
+ children: t
12
11
  }) {
13
- const { processMessages: e, clear: t } = d();
14
- return s(() => {
15
- t(), r && r.length > 0 && e(r);
16
- }, [r, e, t]), /* @__PURE__ */ o(n, { children: i });
12
+ const { processMessages: o, clear: s } = p();
13
+ return i(() => {
14
+ s(), r && r.length > 0 && o(r);
15
+ }, [r, o, s]), /* @__PURE__ */ e(n, { children: t });
17
16
  }
18
- function x({
17
+ function A({
19
18
  messages: r,
20
- onAction: i,
21
- components: e,
22
- children: t
19
+ components: t,
20
+ children: o
23
21
  }) {
24
- return /* @__PURE__ */ o(m, { children: /* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(c, { onAction: i, children: /* @__PURE__ */ o(
25
- p,
22
+ return /* @__PURE__ */ e(f, { children: /* @__PURE__ */ e(m, { children: /* @__PURE__ */ e(
23
+ a,
26
24
  {
27
- components: e,
28
- defaultComponents: a,
29
- children: /* @__PURE__ */ o(l, { messages: r ?? [], children: t })
25
+ components: t,
26
+ defaultComponents: c,
27
+ children: /* @__PURE__ */ e(d, { messages: r ?? [], children: o })
30
28
  }
31
- ) }) }) });
29
+ ) }) });
32
30
  }
33
31
  export {
34
- x as A2UIProvider
32
+ A as A2UIProvider
35
33
  };
@@ -1,8 +1,8 @@
1
1
  import { jsx as m } from "react/jsx-runtime";
2
- import { createContext as x, useContext as C, useCallback as p, useMemo as f } from "react";
2
+ import { useContext as x, createContext as C, useCallback as p, useMemo as f } from "react";
3
3
  import { useDataModelContext as v } from "./DataModelContext.js";
4
4
  import { resolveActionContext as A } from "../utils/dataBinding.js";
5
- const s = x(null);
5
+ const s = C(null);
6
6
  function P({ onAction: t, children: c }) {
7
7
  const { getDataModel: o } = v(), e = p(
8
8
  (n, a, r) => {
@@ -29,7 +29,7 @@ function P({ onAction: t, children: c }) {
29
29
  return /* @__PURE__ */ m(s.Provider, { value: i, children: c });
30
30
  }
31
31
  function g() {
32
- const t = C(s);
32
+ const t = x(s);
33
33
  if (!t)
34
34
  throw new Error("useActionContext must be used within an ActionProvider");
35
35
  return t;
@@ -34,9 +34,11 @@
34
34
  */
35
35
  export type { A2UIMessage, ActionPayload as A2UIAction, Action, ValueSource, } from './types';
36
36
  export type { A2UIProviderProps, ComponentsMap } from './contexts/A2UIProvider';
37
+ export type { A2UIRendererProps } from './A2UIRenderer';
37
38
  export { A2UIProvider } from './contexts/A2UIProvider';
38
39
  export { A2UIRenderer } from './A2UIRenderer';
39
40
  export { ComponentRenderer } from './components/ComponentRenderer';
40
41
  export { useDispatchAction } from './hooks/useDispatchAction';
41
42
  export { useDataBinding, useFormBinding } from './hooks/useDataBinding';
42
- export { useA2UIMessageHandler } from './hooks/useA2UIMessageHandler';
43
+ export { useSurfaceContext } from './contexts/SurfaceContext';
44
+ export { useDataModelContext } from './contexts/DataModelContext';
package/dist/0.8/index.js CHANGED
@@ -1,15 +1,17 @@
1
- import { A2UIProvider as o } from "./contexts/A2UIProvider.js";
2
- import { A2UIRenderer as t } from "./A2UIRenderer.js";
1
+ import { A2UIProvider as r } from "./contexts/A2UIProvider.js";
2
+ import { A2UIRenderer as n } from "./A2UIRenderer.js";
3
3
  import { ComponentRenderer as p } from "./components/ComponentRenderer.js";
4
- import { useDispatchAction as s } from "./hooks/useDispatchAction.js";
5
- import { useDataBinding as f, useFormBinding as x } from "./hooks/useDataBinding.js";
6
- import { useA2UIMessageHandler as u } from "./hooks/useA2UIMessageHandler.js";
4
+ import { useDispatchAction as f } from "./hooks/useDispatchAction.js";
5
+ import { useDataBinding as a, useFormBinding as d } from "./hooks/useDataBinding.js";
6
+ import { useSurfaceContext as u } from "./contexts/SurfaceContext.js";
7
+ import { useDataModelContext as A } from "./contexts/DataModelContext.js";
7
8
  export {
8
- o as A2UIProvider,
9
- t as A2UIRenderer,
9
+ r as A2UIProvider,
10
+ n as A2UIRenderer,
10
11
  p as ComponentRenderer,
11
- u as useA2UIMessageHandler,
12
- f as useDataBinding,
13
- s as useDispatchAction,
14
- x as useFormBinding
12
+ a as useDataBinding,
13
+ A as useDataModelContext,
14
+ f as useDispatchAction,
15
+ d as useFormBinding,
16
+ u as useSurfaceContext
15
17
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easyops-cn/a2ui-react",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "A2UI React Renderer",
5
5
  "homepage": "https://easyops-cn.github.io/a2ui-react/",
6
6
  "repository": {
@@ -1,21 +0,0 @@
1
- import { Surface } from '../types';
2
- /**
3
- * Gets a Surface by its ID.
4
- *
5
- * @param surfaceId - The surface ID to look up
6
- * @returns The Surface, or undefined if not found
7
- *
8
- * @example
9
- * ```tsx
10
- * function MySurface({ surfaceId }) {
11
- * const surface = useSurface(surfaceId);
12
- *
13
- * if (!surface) {
14
- * return <div>Surface not found</div>;
15
- * }
16
- *
17
- * return <ComponentRenderer surfaceId={surfaceId} componentId={surface.root} />;
18
- * }
19
- * ```
20
- */
21
- export declare function useSurface(surfaceId: string): Surface | undefined;