json-ui-lite-rn 0.12.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/README.md +230 -0
- package/lib/commonjs/GenUINode.js +113 -0
- package/lib/commonjs/GenUINode.js.map +1 -0
- package/lib/commonjs/GenerativeUIView.js +116 -0
- package/lib/commonjs/GenerativeUIView.js.map +1 -0
- package/lib/commonjs/index.js +78 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/parseGenUIProps.js +53 -0
- package/lib/commonjs/parseGenUIProps.js.map +1 -0
- package/lib/commonjs/prompt.js +27 -0
- package/lib/commonjs/prompt.js.map +1 -0
- package/lib/commonjs/registry.js +70 -0
- package/lib/commonjs/registry.js.map +1 -0
- package/lib/commonjs/tools.js +386 -0
- package/lib/commonjs/tools.js.map +1 -0
- package/lib/module/GenUINode.js +108 -0
- package/lib/module/GenUINode.js.map +1 -0
- package/lib/module/GenerativeUIView.js +111 -0
- package/lib/module/GenerativeUIView.js.map +1 -0
- package/lib/module/index.js +9 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/parseGenUIProps.js +49 -0
- package/lib/module/parseGenUIProps.js.map +1 -0
- package/lib/module/prompt.js +23 -0
- package/lib/module/prompt.js.map +1 -0
- package/lib/module/registry.js +66 -0
- package/lib/module/registry.js.map +1 -0
- package/lib/module/tools.js +383 -0
- package/lib/module/tools.js.map +1 -0
- package/lib/typescript/GenUINode.d.ts +12 -0
- package/lib/typescript/GenUINode.d.ts.map +1 -0
- package/lib/typescript/GenerativeUIView.d.ts +23 -0
- package/lib/typescript/GenerativeUIView.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +8 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/parseGenUIProps.d.ts +20 -0
- package/lib/typescript/parseGenUIProps.d.ts.map +1 -0
- package/lib/typescript/prompt.d.ts +12 -0
- package/lib/typescript/prompt.d.ts.map +1 -0
- package/lib/typescript/registry.d.ts +36 -0
- package/lib/typescript/registry.d.ts.map +1 -0
- package/lib/typescript/tools.d.ts +119 -0
- package/lib/typescript/tools.d.ts.map +1 -0
- package/package.json +56 -0
- package/src/GenUINode.tsx +115 -0
- package/src/GenerativeUIView.tsx +137 -0
- package/src/index.ts +25 -0
- package/src/parseGenUIProps.ts +59 -0
- package/src/prompt.ts +49 -0
- package/src/registry.ts +73 -0
- package/src/tools.ts +392 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["tool","z","DEFAULT_GEN_UI_ROOT_ID","GEN_UI_NODE_HINTS","GEN_UI_NODE_NAMES_THAT_SUPPORT_CHILDREN","smartParse","props","JSON","parse","defaultCreateId","Date","now","toString","Math","random","slice","cloneSpec","spec","elements","Object","fromEntries","entries","map","id","element","children","mutationQueue","Promise","resolve","withMutationLock","run","release","pending","previous","then","createGenUITools","contextId","getSpec","updateSpec","createId","rootId","nodeHints","nodeNamesThatSupportChildren","toolWrapper","_","execute","cachedSpec","readSpec","commitSpec","getUIRootNode","description","inputSchema","object","root","type","getUINode","string","optional","describe","node","nodeId","childId","getUILayout","nodes","parentByChild","parentId","keys","getAvailableUINodes","name","setUINodeProps","replace","boolean","propsArg","parsedProps","success","message","current","nextProps","deleteUINode","key","includes","filter","addUINode","console","warn","newId","parent","push","reorderUINodes","offset","number","findParentId","nodeParentId","currentChildren","nodeIndex","indexOf","fromIndex","toIndex","appliedOffset","childIds","maxIndex","length","min","max","splice"],"sourceRoot":"../../src","sources":["tools.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { GenUIStylesConfig } from './parseGenUIProps';
|
|
3
|
+
import { type JsonUISpec } from './registry';
|
|
4
|
+
export type GenUINodeProps = {
|
|
5
|
+
nodeId: string;
|
|
6
|
+
elements: JsonUISpec['elements'];
|
|
7
|
+
styles: GenUIStylesConfig;
|
|
8
|
+
/** When provided by GenerativeUIView, used to render children so custom types are handled at any depth. */
|
|
9
|
+
GenUINodeComponent?: React.ComponentType<GenUINodeProps>;
|
|
10
|
+
};
|
|
11
|
+
export declare function GenUINode({ nodeId, elements, styles: styleValidators, GenUINodeComponent, }: GenUINodeProps): React.JSX.Element | null;
|
|
12
|
+
//# sourceMappingURL=GenUINode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenUINode.d.ts","sourceRoot":"","sources":["../../src/GenUINode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAE/D,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;IAChC,MAAM,EAAE,iBAAiB,CAAA;IACzB,2GAA2G;IAC3G,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;CACzD,CAAA;AAED,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,QAAQ,EACR,MAAM,EAAE,eAAe,EACvB,kBAAkB,GACnB,EAAE,cAAc,4BA6DhB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { GenUINodeProps } from './GenUINode';
|
|
3
|
+
import type { GenUIStylesConfig } from './parseGenUIProps';
|
|
4
|
+
import { GEN_UI_STYLES, type JsonUISpec } from './registry';
|
|
5
|
+
export type GenerativeUIViewProps = {
|
|
6
|
+
/** Normalized spec (root + elements with root node "root"). */
|
|
7
|
+
spec: JsonUISpec | null | undefined;
|
|
8
|
+
loading?: boolean;
|
|
9
|
+
/** Show expandable JSON payload for the current UI spec. */
|
|
10
|
+
showCollapsibleJSON?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Override or extend style validators (zod schemas) for node props.
|
|
13
|
+
* Merged with default GEN_UI_STYLES and passed to GenUINode.
|
|
14
|
+
*/
|
|
15
|
+
styles?: Partial<typeof GEN_UI_STYLES> & GenUIStylesConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Custom node renderer. Receives nodeId, elements, styles (same as default GenUINode).
|
|
18
|
+
* Use for custom component types; delegate to default GenUINode for others.
|
|
19
|
+
*/
|
|
20
|
+
GenUINodeComponent?: React.ComponentType<GenUINodeProps>;
|
|
21
|
+
};
|
|
22
|
+
export declare function GenerativeUIView({ spec, loading, showCollapsibleJSON, styles: stylesOverride, GenUINodeComponent, }: GenerativeUIViewProps): React.JSX.Element;
|
|
23
|
+
//# sourceMappingURL=GenerativeUIView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenerativeUIView.d.ts","sourceRoot":"","sources":["../../src/GenerativeUIView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAE3D,MAAM,MAAM,qBAAqB,GAAG;IAClC,+DAA+D;IAC/D,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,CAAA;IACnC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,aAAa,CAAC,GAAG,iBAAiB,CAAA;IAC1D;;;OAGG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;CACzD,CAAA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,OAAO,EACP,mBAAmB,EACnB,MAAM,EAAE,cAAc,EACtB,kBAAkB,GACnB,EAAE,qBAAqB,qBAuDvB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { GenerativeUIView, type GenerativeUIViewProps, } from './GenerativeUIView';
|
|
2
|
+
export { GenUINode, type GenUINodeProps } from './GenUINode';
|
|
3
|
+
export { type GenUIStylesConfig, type ParsedGenUIProps, parseGenUIElementProps, type ParseGenUIElementPropsOptions, } from './parseGenUIProps';
|
|
4
|
+
export { buildGenUISystemPrompt, type BuildGenUISystemPromptOptions, } from './prompt';
|
|
5
|
+
export type { JsonUIElement, JsonUISpec } from './registry';
|
|
6
|
+
export { DEFAULT_GEN_UI_ROOT_ID, GEN_UI_NODE_HINTS, GEN_UI_NODE_NAMES, GEN_UI_NODE_NAMES_THAT_SUPPORT_CHILDREN, GEN_UI_STYLE_HINTS, GEN_UI_STYLES, } from './registry';
|
|
7
|
+
export { type CreateGenTUIoolsOptions, createGenUITools } from './tools';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,6BAA6B,GACnC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,sBAAsB,EACtB,KAAK,6BAA6B,GACnC,MAAM,UAAU,CAAA;AACjB,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,uCAAuC,EACvC,kBAAkB,EAClB,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,KAAK,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { JsonUIElement } from './registry';
|
|
3
|
+
export type GenUIStylesConfig = Record<string, z.ZodTypeAny>;
|
|
4
|
+
export type ParsedGenUIProps = {
|
|
5
|
+
baseStyle: Record<string, unknown>;
|
|
6
|
+
text: string | undefined;
|
|
7
|
+
label: string | undefined;
|
|
8
|
+
props: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
export type ParseGenUIElementPropsOptions = {
|
|
11
|
+
nodeId?: string;
|
|
12
|
+
type?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Parses a JSON UI element's props into a baseStyle object (validated by style validators)
|
|
16
|
+
* and common fields (text, label). Use this in custom GenUINode implementations to reuse
|
|
17
|
+
* the same style and prop parsing as the default renderer.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseGenUIElementProps(element: JsonUIElement, styleValidators: GenUIStylesConfig, options?: ParseGenUIElementPropsOptions): ParsedGenUIProps;
|
|
20
|
+
//# sourceMappingURL=parseGenUIProps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseGenUIProps.d.ts","sourceRoot":"","sources":["../../src/parseGenUIProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAA;AAE5D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,iBAAiB,EAClC,OAAO,CAAC,EAAE,6BAA6B,GACtC,gBAAgB,CA+BlB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type StyleHints = Record<string, {
|
|
2
|
+
type: 'number' | 'string';
|
|
3
|
+
description?: string;
|
|
4
|
+
}>;
|
|
5
|
+
export type BuildGenUISystemPromptOptions = {
|
|
6
|
+
additionalInstructions?: string;
|
|
7
|
+
requireLayoutReadBeforeAddingNodes?: boolean;
|
|
8
|
+
styleHints?: StyleHints;
|
|
9
|
+
};
|
|
10
|
+
export declare function buildGenUISystemPrompt({ additionalInstructions, requireLayoutReadBeforeAddingNodes, styleHints, }?: BuildGenUISystemPromptOptions): string;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,MAAM,CACtB,MAAM,EACN;IACE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CACF,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,kCAAkC,CAAC,EAAE,OAAO,CAAA;IAC5C,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB,CAAA;AAED,wBAAgB,sBAAsB,CAAC,EACrC,sBAAsB,EACtB,kCAAyC,EACzC,UAA+B,GAChC,GAAE,6BAAkC,UA4BpC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export type JsonUIElement = {
|
|
3
|
+
type: string;
|
|
4
|
+
props: Record<string, unknown>;
|
|
5
|
+
children?: string[];
|
|
6
|
+
};
|
|
7
|
+
export type JsonUISpec = {
|
|
8
|
+
root: string;
|
|
9
|
+
elements: Record<string, JsonUIElement>;
|
|
10
|
+
};
|
|
11
|
+
export declare const DEFAULT_GEN_UI_ROOT_ID = "root";
|
|
12
|
+
export declare const GEN_UI_NODE_NAMES: {
|
|
13
|
+
readonly Text: "Text";
|
|
14
|
+
readonly Paragraph: "Paragraph";
|
|
15
|
+
readonly Label: "Label";
|
|
16
|
+
readonly Heading: "Heading";
|
|
17
|
+
readonly Button: "Button";
|
|
18
|
+
readonly TextInput: "TextInput";
|
|
19
|
+
};
|
|
20
|
+
export declare const GEN_UI_NODE_NAMES_THAT_SUPPORT_CHILDREN: string[];
|
|
21
|
+
export declare const GEN_UI_NODE_HINTS: Record<keyof typeof GEN_UI_NODE_NAMES, string>;
|
|
22
|
+
export declare const GEN_UI_STYLES: {
|
|
23
|
+
flex: z.ZodNumber;
|
|
24
|
+
padding: z.ZodNumber;
|
|
25
|
+
gap: z.ZodNumber;
|
|
26
|
+
backgroundColor: z.ZodString;
|
|
27
|
+
color: z.ZodString;
|
|
28
|
+
fontSize: z.ZodNumber;
|
|
29
|
+
fontWeight: z.ZodString;
|
|
30
|
+
textAlign: z.ZodString;
|
|
31
|
+
};
|
|
32
|
+
export declare const GEN_UI_STYLE_HINTS: Record<keyof typeof GEN_UI_STYLES, {
|
|
33
|
+
type: 'number' | 'string';
|
|
34
|
+
description?: string;
|
|
35
|
+
}>;
|
|
36
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACxC,CAAA;AAED,eAAO,MAAM,sBAAsB,SAAS,CAAA;AAE5C,eAAO,MAAM,iBAAiB;;;;;;;CAOpB,CAAA;AAEV,eAAO,MAAM,uCAAuC,EAAE,MAAM,EAAO,CAAA;AAEnE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,OAAO,iBAAiB,EAAE,MAAM,CAS1E,CAAA;AAEH,eAAO,MAAM,aAAa;;;;;;;;;CASzB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACrC,MAAM,OAAO,aAAa,EAC1B;IAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAsBpD,CAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { type JsonUISpec } from './registry';
|
|
2
|
+
export type CreateGenTUIoolsOptions<TSpec extends JsonUISpec = JsonUISpec> = {
|
|
3
|
+
contextId: string;
|
|
4
|
+
getSpec: (contextId: string) => TSpec | null;
|
|
5
|
+
updateSpec: (contextId: string, spec: TSpec | null) => void;
|
|
6
|
+
createId?: () => string;
|
|
7
|
+
rootId?: string;
|
|
8
|
+
nodeHints?: Record<string, string>;
|
|
9
|
+
nodeNamesThatSupportChildren?: readonly string[];
|
|
10
|
+
toolWrapper?: <TArgs, TResult>(toolName: string, execute: (args: TArgs) => Promise<TResult>) => (args: TArgs) => Promise<TResult>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Creates generative UI tools that read/update a JSON UI spec.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createGenUITools<TSpec extends JsonUISpec = JsonUISpec>({ contextId, getSpec, updateSpec, createId, rootId, nodeHints, nodeNamesThatSupportChildren, toolWrapper, }: CreateGenTUIoolsOptions<TSpec>): {
|
|
16
|
+
getUIRootNode: import("ai").Tool<Record<string, never>, {
|
|
17
|
+
root: null;
|
|
18
|
+
} | {
|
|
19
|
+
root: {
|
|
20
|
+
id: string;
|
|
21
|
+
type: string;
|
|
22
|
+
props: Record<string, unknown>;
|
|
23
|
+
children: {
|
|
24
|
+
id: string;
|
|
25
|
+
type: string;
|
|
26
|
+
}[];
|
|
27
|
+
};
|
|
28
|
+
}>;
|
|
29
|
+
getUINode: import("ai").Tool<{
|
|
30
|
+
id?: string | undefined;
|
|
31
|
+
}, {
|
|
32
|
+
node: null;
|
|
33
|
+
} | {
|
|
34
|
+
node: {
|
|
35
|
+
id: string;
|
|
36
|
+
type: string;
|
|
37
|
+
props: Record<string, unknown>;
|
|
38
|
+
children: {
|
|
39
|
+
id: string;
|
|
40
|
+
type: string;
|
|
41
|
+
}[];
|
|
42
|
+
};
|
|
43
|
+
}>;
|
|
44
|
+
getUILayout: import("ai").Tool<Record<string, never>, {
|
|
45
|
+
root: null;
|
|
46
|
+
nodes: never[];
|
|
47
|
+
} | {
|
|
48
|
+
root: string;
|
|
49
|
+
nodes: {
|
|
50
|
+
id: string;
|
|
51
|
+
type: string;
|
|
52
|
+
parentId: string | null;
|
|
53
|
+
children: string[];
|
|
54
|
+
props: string[];
|
|
55
|
+
}[];
|
|
56
|
+
}>;
|
|
57
|
+
getAvailableUINodes: import("ai").Tool<Record<string, never>, {
|
|
58
|
+
nodes: {
|
|
59
|
+
name: string;
|
|
60
|
+
props: string;
|
|
61
|
+
}[];
|
|
62
|
+
}>;
|
|
63
|
+
setUINodeProps: import("ai").Tool<{
|
|
64
|
+
id: string;
|
|
65
|
+
props: string;
|
|
66
|
+
replace?: boolean | undefined;
|
|
67
|
+
}, {
|
|
68
|
+
success: boolean;
|
|
69
|
+
message: string;
|
|
70
|
+
} | {
|
|
71
|
+
success: boolean;
|
|
72
|
+
message?: undefined;
|
|
73
|
+
}>;
|
|
74
|
+
deleteUINode: import("ai").Tool<{
|
|
75
|
+
id: string;
|
|
76
|
+
}, {
|
|
77
|
+
success: boolean;
|
|
78
|
+
message: string;
|
|
79
|
+
} | {
|
|
80
|
+
success: boolean;
|
|
81
|
+
message?: undefined;
|
|
82
|
+
}>;
|
|
83
|
+
addUINode: import("ai").Tool<{
|
|
84
|
+
type: string;
|
|
85
|
+
parentId?: string | undefined;
|
|
86
|
+
props?: string | undefined;
|
|
87
|
+
}, {
|
|
88
|
+
success: boolean;
|
|
89
|
+
message: string;
|
|
90
|
+
id?: undefined;
|
|
91
|
+
} | {
|
|
92
|
+
success: boolean;
|
|
93
|
+
id: string;
|
|
94
|
+
message?: undefined;
|
|
95
|
+
}>;
|
|
96
|
+
reorderUINodes: import("ai").Tool<{
|
|
97
|
+
nodeId: string;
|
|
98
|
+
offset: number;
|
|
99
|
+
}, {
|
|
100
|
+
success: boolean;
|
|
101
|
+
message: string;
|
|
102
|
+
parentId?: undefined;
|
|
103
|
+
nodeId?: undefined;
|
|
104
|
+
fromIndex?: undefined;
|
|
105
|
+
toIndex?: undefined;
|
|
106
|
+
appliedOffset?: undefined;
|
|
107
|
+
childIds?: undefined;
|
|
108
|
+
} | {
|
|
109
|
+
success: boolean;
|
|
110
|
+
parentId: string;
|
|
111
|
+
nodeId: string;
|
|
112
|
+
fromIndex: number;
|
|
113
|
+
toIndex: number;
|
|
114
|
+
appliedOffset: number;
|
|
115
|
+
childIds: string[];
|
|
116
|
+
message?: undefined;
|
|
117
|
+
}>;
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,YAAY,CAAA;AAcnB,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,IAAI;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,GAAG,IAAI,CAAA;IAC5C,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;IAC3D,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,4BAA4B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,KACvC,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACvC,CAAA;AAmCD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EAAE,EACtE,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAA0B,EAC1B,MAA+B,EAC/B,SAA6B,EAC7B,4BAAsE,EACtE,WAAqC,GACtC,EAAE,uBAAuB,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsThC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "json-ui-lite-rn",
|
|
3
|
+
"version": "0.12.0",
|
|
4
|
+
"description": "Lightweight JSON UI generation for React Native based on tool calling, compatible with Vercel AI SDK",
|
|
5
|
+
"main": "lib/commonjs/index",
|
|
6
|
+
"module": "lib/module/index",
|
|
7
|
+
"types": "lib/typescript/index.d.ts",
|
|
8
|
+
"react-native": "src/index",
|
|
9
|
+
"source": "src/index",
|
|
10
|
+
"files": [
|
|
11
|
+
"src",
|
|
12
|
+
"lib",
|
|
13
|
+
"!**/__tests__",
|
|
14
|
+
"!**/__fixtures__",
|
|
15
|
+
"!**/__mocks__",
|
|
16
|
+
"!**/.*",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"author": "artus9033 <artus9033@gmail.com>",
|
|
20
|
+
"scripts": {
|
|
21
|
+
"clean": "del-cli lib",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"prepare": "bob build"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"ai": "^6.0.0",
|
|
27
|
+
"zod": "^4.0.0"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"react": "*",
|
|
31
|
+
"react-native": "*"
|
|
32
|
+
},
|
|
33
|
+
"react-native-builder-bob": {
|
|
34
|
+
"source": "src",
|
|
35
|
+
"output": "lib",
|
|
36
|
+
"targets": [
|
|
37
|
+
"commonjs",
|
|
38
|
+
"module",
|
|
39
|
+
[
|
|
40
|
+
"typescript",
|
|
41
|
+
{
|
|
42
|
+
"project": "tsconfig.build.json"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"keywords": [
|
|
48
|
+
"react-native",
|
|
49
|
+
"ui",
|
|
50
|
+
"generative",
|
|
51
|
+
"llm",
|
|
52
|
+
"ai",
|
|
53
|
+
"sdk",
|
|
54
|
+
"on-device"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Pressable, StyleSheet, Text, TextInput, View } from 'react-native'
|
|
3
|
+
|
|
4
|
+
import type { GenUIStylesConfig } from './parseGenUIProps'
|
|
5
|
+
import { parseGenUIElementProps } from './parseGenUIProps'
|
|
6
|
+
import { GEN_UI_NODE_NAMES, type JsonUISpec } from './registry'
|
|
7
|
+
|
|
8
|
+
export type GenUINodeProps = {
|
|
9
|
+
nodeId: string
|
|
10
|
+
elements: JsonUISpec['elements']
|
|
11
|
+
styles: GenUIStylesConfig
|
|
12
|
+
/** When provided by GenerativeUIView, used to render children so custom types are handled at any depth. */
|
|
13
|
+
GenUINodeComponent?: React.ComponentType<GenUINodeProps>
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function GenUINode({
|
|
17
|
+
nodeId,
|
|
18
|
+
elements,
|
|
19
|
+
styles: styleValidators,
|
|
20
|
+
GenUINodeComponent,
|
|
21
|
+
}: GenUINodeProps) {
|
|
22
|
+
const element = elements[nodeId]
|
|
23
|
+
if (!element) return null
|
|
24
|
+
|
|
25
|
+
const { type, props, children = [] } = element
|
|
26
|
+
const { baseStyle, text, label } = parseGenUIElementProps(
|
|
27
|
+
element,
|
|
28
|
+
styleValidators,
|
|
29
|
+
{ nodeId, type }
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
const ChildRenderer = GenUINodeComponent ?? GenUINode
|
|
33
|
+
const childProps: Omit<GenUINodeProps, 'nodeId'> = {
|
|
34
|
+
elements,
|
|
35
|
+
styles: styleValidators,
|
|
36
|
+
GenUINodeComponent,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
switch (type) {
|
|
40
|
+
case 'Container':
|
|
41
|
+
return (
|
|
42
|
+
<View style={[styles.container, baseStyle]}>
|
|
43
|
+
{children.map((id) => (
|
|
44
|
+
<ChildRenderer key={id} {...childProps} nodeId={id} />
|
|
45
|
+
))}
|
|
46
|
+
</View>
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
case GEN_UI_NODE_NAMES.Text:
|
|
50
|
+
case GEN_UI_NODE_NAMES.Paragraph:
|
|
51
|
+
case GEN_UI_NODE_NAMES.Label:
|
|
52
|
+
case GEN_UI_NODE_NAMES.Heading:
|
|
53
|
+
return <Text style={[styles.text, baseStyle]}>{text ?? label ?? ''}</Text>
|
|
54
|
+
|
|
55
|
+
case GEN_UI_NODE_NAMES.Button:
|
|
56
|
+
return (
|
|
57
|
+
<Pressable style={[styles.button, baseStyle]}>
|
|
58
|
+
<Text style={[styles.buttonText, baseStyle]}>
|
|
59
|
+
{label ?? text ?? ''}
|
|
60
|
+
</Text>
|
|
61
|
+
</Pressable>
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
case GEN_UI_NODE_NAMES.TextInput:
|
|
65
|
+
return (
|
|
66
|
+
<TextInput
|
|
67
|
+
placeholder={props?.placeholder as string}
|
|
68
|
+
style={[styles.textInput, baseStyle]}
|
|
69
|
+
onChangeText={() => {}}
|
|
70
|
+
/>
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
default:
|
|
74
|
+
return (
|
|
75
|
+
<View style={[styles.container, baseStyle]}>
|
|
76
|
+
{children.map((id) => (
|
|
77
|
+
<ChildRenderer key={id} {...childProps} nodeId={id} />
|
|
78
|
+
))}
|
|
79
|
+
</View>
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const styles = StyleSheet.create({
|
|
85
|
+
container: {
|
|
86
|
+
gap: 8,
|
|
87
|
+
flex: 1,
|
|
88
|
+
},
|
|
89
|
+
text: {
|
|
90
|
+
fontSize: 16,
|
|
91
|
+
color: '#111827',
|
|
92
|
+
flex: 1,
|
|
93
|
+
},
|
|
94
|
+
button: {
|
|
95
|
+
paddingHorizontal: 16,
|
|
96
|
+
paddingVertical: 10,
|
|
97
|
+
backgroundColor: '#3b82f6',
|
|
98
|
+
borderRadius: 8,
|
|
99
|
+
alignSelf: 'flex-start',
|
|
100
|
+
flex: 1,
|
|
101
|
+
},
|
|
102
|
+
buttonText: {
|
|
103
|
+
flex: 1,
|
|
104
|
+
color: 'white',
|
|
105
|
+
},
|
|
106
|
+
textInput: {
|
|
107
|
+
borderWidth: 1,
|
|
108
|
+
borderColor: '#e0e0e0',
|
|
109
|
+
borderRadius: 8,
|
|
110
|
+
padding: 8,
|
|
111
|
+
fontSize: 16,
|
|
112
|
+
color: '#111827',
|
|
113
|
+
flex: 1,
|
|
114
|
+
},
|
|
115
|
+
})
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Pressable, StyleSheet, Text, View } from 'react-native'
|
|
3
|
+
|
|
4
|
+
import type { GenUINodeProps } from './GenUINode'
|
|
5
|
+
import { GenUINode } from './GenUINode'
|
|
6
|
+
import type { GenUIStylesConfig } from './parseGenUIProps'
|
|
7
|
+
import { GEN_UI_STYLES, type JsonUISpec } from './registry'
|
|
8
|
+
|
|
9
|
+
export type GenerativeUIViewProps = {
|
|
10
|
+
/** Normalized spec (root + elements with root node "root"). */
|
|
11
|
+
spec: JsonUISpec | null | undefined
|
|
12
|
+
loading?: boolean
|
|
13
|
+
/** Show expandable JSON payload for the current UI spec. */
|
|
14
|
+
showCollapsibleJSON?: boolean
|
|
15
|
+
/**
|
|
16
|
+
* Override or extend style validators (zod schemas) for node props.
|
|
17
|
+
* Merged with default GEN_UI_STYLES and passed to GenUINode.
|
|
18
|
+
*/
|
|
19
|
+
styles?: Partial<typeof GEN_UI_STYLES> & GenUIStylesConfig
|
|
20
|
+
/**
|
|
21
|
+
* Custom node renderer. Receives nodeId, elements, styles (same as default GenUINode).
|
|
22
|
+
* Use for custom component types; delegate to default GenUINode for others.
|
|
23
|
+
*/
|
|
24
|
+
GenUINodeComponent?: React.ComponentType<GenUINodeProps>
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function GenerativeUIView({
|
|
28
|
+
spec,
|
|
29
|
+
loading,
|
|
30
|
+
showCollapsibleJSON,
|
|
31
|
+
styles: stylesOverride,
|
|
32
|
+
GenUINodeComponent,
|
|
33
|
+
}: GenerativeUIViewProps) {
|
|
34
|
+
const [expanded, setExpanded] = React.useState(false)
|
|
35
|
+
const normalized = React.useMemo(() => {
|
|
36
|
+
if (!spec?.root || !spec.elements) return null
|
|
37
|
+
const rootElement = spec.elements[spec.root]
|
|
38
|
+
if (!rootElement) return null
|
|
39
|
+
return spec
|
|
40
|
+
}, [spec])
|
|
41
|
+
|
|
42
|
+
const styleValidators: GenUIStylesConfig = React.useMemo(
|
|
43
|
+
() => ({ ...GEN_UI_STYLES, ...stylesOverride }),
|
|
44
|
+
[stylesOverride]
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
if (!normalized) {
|
|
48
|
+
return (
|
|
49
|
+
<View style={styles.placeholder}>
|
|
50
|
+
<Text style={styles.placeholderText}>
|
|
51
|
+
{loading
|
|
52
|
+
? 'Loading…'
|
|
53
|
+
: 'Use tools getGenUIRootNode, addNode, etc. to build the UI.'}
|
|
54
|
+
</Text>
|
|
55
|
+
</View>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const NodeRenderer = GenUINodeComponent ?? GenUINode
|
|
60
|
+
return (
|
|
61
|
+
<View style={styles.wrapper}>
|
|
62
|
+
<NodeRenderer
|
|
63
|
+
nodeId={normalized.root}
|
|
64
|
+
elements={normalized.elements}
|
|
65
|
+
styles={styleValidators}
|
|
66
|
+
GenUINodeComponent={GenUINodeComponent}
|
|
67
|
+
/>
|
|
68
|
+
{showCollapsibleJSON ? (
|
|
69
|
+
<View style={styles.jsonPanel}>
|
|
70
|
+
<Pressable
|
|
71
|
+
onPress={() => setExpanded((prev) => !prev)}
|
|
72
|
+
style={styles.jsonHeader}
|
|
73
|
+
>
|
|
74
|
+
<Text style={styles.jsonHeaderText}>UI JSON</Text>
|
|
75
|
+
<Text style={styles.jsonHeaderIcon}>
|
|
76
|
+
{expanded ? '[-]' : '[+]'}
|
|
77
|
+
</Text>
|
|
78
|
+
</Pressable>
|
|
79
|
+
{expanded ? (
|
|
80
|
+
<Text selectable style={styles.jsonText}>
|
|
81
|
+
{JSON.stringify(normalized, null, 2)}
|
|
82
|
+
</Text>
|
|
83
|
+
) : null}
|
|
84
|
+
</View>
|
|
85
|
+
) : null}
|
|
86
|
+
</View>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const styles = StyleSheet.create({
|
|
91
|
+
wrapper: {
|
|
92
|
+
flex: 1,
|
|
93
|
+
justifyContent: 'center',
|
|
94
|
+
gap: 8,
|
|
95
|
+
},
|
|
96
|
+
jsonPanel: {
|
|
97
|
+
borderWidth: 1,
|
|
98
|
+
borderColor: '#e5e7eb',
|
|
99
|
+
borderRadius: 12,
|
|
100
|
+
paddingHorizontal: 12,
|
|
101
|
+
paddingVertical: 10,
|
|
102
|
+
backgroundColor: '#f9fafb',
|
|
103
|
+
},
|
|
104
|
+
jsonHeader: {
|
|
105
|
+
flexDirection: 'row',
|
|
106
|
+
justifyContent: 'space-between',
|
|
107
|
+
alignItems: 'center',
|
|
108
|
+
gap: 8,
|
|
109
|
+
},
|
|
110
|
+
jsonHeaderText: {
|
|
111
|
+
fontSize: 13,
|
|
112
|
+
color: '#4b5563',
|
|
113
|
+
fontWeight: '600',
|
|
114
|
+
},
|
|
115
|
+
jsonHeaderIcon: {
|
|
116
|
+
fontSize: 12,
|
|
117
|
+
color: '#9ca3af',
|
|
118
|
+
fontWeight: '600',
|
|
119
|
+
},
|
|
120
|
+
jsonText: {
|
|
121
|
+
marginTop: 8,
|
|
122
|
+
fontSize: 12,
|
|
123
|
+
lineHeight: 18,
|
|
124
|
+
color: '#374151',
|
|
125
|
+
fontFamily: 'Menlo',
|
|
126
|
+
},
|
|
127
|
+
placeholder: {
|
|
128
|
+
flex: 1,
|
|
129
|
+
justifyContent: 'center',
|
|
130
|
+
padding: 24,
|
|
131
|
+
},
|
|
132
|
+
placeholderText: {
|
|
133
|
+
fontSize: 15,
|
|
134
|
+
color: '#6b7280',
|
|
135
|
+
textAlign: 'center',
|
|
136
|
+
},
|
|
137
|
+
})
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export {
|
|
2
|
+
GenerativeUIView,
|
|
3
|
+
type GenerativeUIViewProps,
|
|
4
|
+
} from './GenerativeUIView'
|
|
5
|
+
export { GenUINode, type GenUINodeProps } from './GenUINode'
|
|
6
|
+
export {
|
|
7
|
+
type GenUIStylesConfig,
|
|
8
|
+
type ParsedGenUIProps,
|
|
9
|
+
parseGenUIElementProps,
|
|
10
|
+
type ParseGenUIElementPropsOptions,
|
|
11
|
+
} from './parseGenUIProps'
|
|
12
|
+
export {
|
|
13
|
+
buildGenUISystemPrompt,
|
|
14
|
+
type BuildGenUISystemPromptOptions,
|
|
15
|
+
} from './prompt'
|
|
16
|
+
export type { JsonUIElement, JsonUISpec } from './registry'
|
|
17
|
+
export {
|
|
18
|
+
DEFAULT_GEN_UI_ROOT_ID,
|
|
19
|
+
GEN_UI_NODE_HINTS,
|
|
20
|
+
GEN_UI_NODE_NAMES,
|
|
21
|
+
GEN_UI_NODE_NAMES_THAT_SUPPORT_CHILDREN,
|
|
22
|
+
GEN_UI_STYLE_HINTS,
|
|
23
|
+
GEN_UI_STYLES,
|
|
24
|
+
} from './registry'
|
|
25
|
+
export { type CreateGenTUIoolsOptions, createGenUITools } from './tools'
|