Compare commits

..
Author SHA1 Message Date
Chris Tate d944a211cf update registry page 2026-02-06 14:24:18 -06:00
14 changed files with 46 additions and 93 deletions
+2
View File
@@ -24,6 +24,8 @@ jobs:
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 9
- name: Setup Node.js
uses: actions/setup-node@v4
+6 -6
View File
@@ -94,15 +94,15 @@ type Registry = Record<string, React.ComponentType<ComponentRenderProps>>;`}</Co
<h3 className="text-lg font-semibold mt-8 mb-4">useUIStream</h3>
<Code lang="typescript">{`const {
spec, // Spec | null - current UI state
spec, // Spec - current UI state
isStreaming, // boolean - true while streaming
error, // Error | null
send, // (prompt: string, context?: Record<string, unknown>) => Promise<void>
clear, // () => void - reset spec and error
send, // (prompt: string) => void
abort, // () => void
} = useUIStream({
api: string, // API endpoint URL
onComplete?: (spec: Spec) => void, // Called when streaming completes
onError?: (error: Error) => void, // Called when an error occurs
api: string, // API endpoint URL
onChunk?: (chunk: string) => void, // Called for each chunk
onFinish?: (spec: Spec) => void, // Called when streaming completes
});`}</Code>
<h3 className="text-lg font-semibold mt-8 mb-4">useData</h3>
+7 -11
View File
@@ -34,11 +34,11 @@ function App() {
isStreaming, // True while streaming
error, // Any error that occurred
send, // Function to start generation
clear, // Function to reset spec and error
abort, // Function to cancel streaming
} = useUIStream({
api: '/api/generate',
onComplete: (spec) => {}, // Optional: called when streaming completes
onError: (error) => {}, // Optional: called when an error occurs
onChunk: (chunk) => {}, // Optional: called for each chunk
onFinish: (spec) => {}, // Optional: called when complete
});
}`}</Code>
@@ -112,14 +112,8 @@ export async function POST(req: Request) {
}`}</Code>
<h2 className="text-xl font-semibold mt-12 mb-4">Aborting Streams</h2>
<p className="text-sm text-muted-foreground mb-4">
Calling <code className="text-foreground">send</code> again
automatically aborts the previous request. Use{" "}
<code className="text-foreground">clear</code> to reset the spec and
error state:
</p>
<Code lang="tsx">{`function App() {
const { isStreaming, send, clear } = useUIStream({
const { isStreaming, send, abort } = useUIStream({
api: '/api/generate',
});
@@ -128,7 +122,9 @@ export async function POST(req: Request) {
<button onClick={() => send('Create dashboard')}>
Generate
</button>
<button onClick={clear}>Reset</button>
{isStreaming && (
<button onClick={abort}>Cancel</button>
)}
</div>
);
}`}</Code>
+2 -2
View File
@@ -6,8 +6,8 @@
"license": "~~proprietary~~",
"type": "module",
"dependencies": {
"@json-render/core": "workspace:*",
"@json-render/react": "workspace:*",
"@json-render/core": "^0.4.0",
"@json-render/react": "^0.4.0",
"@stripe/ui-extension-sdk": "^9.1.0",
"stripe": "^13.11.0"
},
-17
View File
@@ -1,17 +0,0 @@
# @json-render/codegen
## 0.4.3
### Patch Changes
- 61ee8e5: include remove op in system prompt
- Updated dependencies [61ee8e5]
- @json-render/core@0.4.3
## 0.4.2
### Patch Changes
- 54bce09: add defineRegistry function
- Updated dependencies [54bce09]
- @json-render/core@0.4.2
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@json-render/codegen",
"version": "0.4.3",
"version": "0.4.0",
"license": "Apache-2.0",
"description": "Utilities for generating code from json-render UI trees",
"keywords": [
-13
View File
@@ -1,13 +0,0 @@
# @json-render/core
## 0.4.3
### Patch Changes
- 61ee8e5: include remove op in system prompt
## 0.4.2
### Patch Changes
- 54bce09: add defineRegistry function
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@json-render/core",
"version": "0.4.3",
"version": "0.4.0",
"license": "Apache-2.0",
"description": "JSON becomes real things. Define your catalog, register your components, let AI generate.",
"keywords": [
-2
View File
@@ -502,7 +502,6 @@ export function generateSystemPrompt<
lines.push(
'{"op":"add","path":"/elements/key","value":{"key":"...","type":"...","props":{...},"children":[...]}}',
);
lines.push('{"op":"remove","path":"/elements/key"}');
lines.push("");
// Rules
@@ -510,7 +509,6 @@ export function generateSystemPrompt<
const baseRules = [
"First line sets /root to root element key",
"Add elements with /elements/{key}",
"Remove elements with op:remove - also update the parent's children array to exclude the removed key",
"Children array contains string keys, not objects",
"Parent first, then children",
"Each element needs: key, type, props",
-17
View File
@@ -1,17 +0,0 @@
# @json-render/react
## 0.4.3
### Patch Changes
- 61ee8e5: include remove op in system prompt
- Updated dependencies [61ee8e5]
- @json-render/core@0.4.3
## 0.4.2
### Patch Changes
- 54bce09: add defineRegistry function
- Updated dependencies [54bce09]
- @json-render/core@0.4.2
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@json-render/react",
"version": "0.4.3",
"version": "0.4.0",
"license": "Apache-2.0",
"description": "React renderer for @json-render/core. JSON becomes React components.",
"keywords": [
-17
View File
@@ -1,17 +0,0 @@
# @json-render/remotion
## 0.4.3
### Patch Changes
- 61ee8e5: include remove op in system prompt
- Updated dependencies [61ee8e5]
- @json-render/core@0.4.3
## 0.4.2
### Patch Changes
- 54bce09: add defineRegistry function
- Updated dependencies [54bce09]
- @json-render/core@0.4.2
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@json-render/remotion",
"version": "0.4.3",
"version": "0.4.1",
"license": "Apache-2.0",
"description": "Remotion renderer for @json-render/core. JSON becomes video compositions.",
"keywords": [
+25 -4
View File
@@ -348,11 +348,11 @@ importers:
examples/stripe-app:
dependencies:
'@json-render/core':
specifier: workspace:*
version: link:../../packages/core
specifier: ^0.4.0
version: 0.4.0(zod@4.3.5)
'@json-render/react':
specifier: workspace:*
version: link:../../packages/react
specifier: ^0.4.0
version: 0.4.0(react@18.3.1)(zod@4.3.5)
'@stripe/ui-extension-sdk':
specifier: ^9.1.0
version: 9.1.0(stripe@13.11.0)
@@ -1793,6 +1793,16 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@json-render/core@0.4.0':
resolution: {integrity: sha512-zcmNNetyXoqShG9qfXnipnkaGLn3XC7Kec/t3+C39mXAStg2RX29ciZwsZT+Fzo900LeRHRIGel7L/IHCdktrA==}
peerDependencies:
zod: ^4.0.0
'@json-render/react@0.4.0':
resolution: {integrity: sha512-OAXdWdOrAXHEFzpEF7xV+84D00JEmLMKlt5u0wc+C/P+q4q6TnpAWx2j28PBpDB2mpidkW9VnTUM+SCH9J8Lrw==}
peerDependencies:
react: ^19.0.0
'@manypkg/find-root@1.1.0':
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
@@ -7992,6 +8002,17 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@json-render/core@0.4.0(zod@4.3.5)':
dependencies:
zod: 4.3.5
'@json-render/react@0.4.0(react@18.3.1)(zod@4.3.5)':
dependencies:
'@json-render/core': 0.4.0(zod@4.3.5)
react: 18.3.1
transitivePeerDependencies:
- zod
'@manypkg/find-root@1.1.0':
dependencies:
'@babel/runtime': 7.28.6