Compare commits

...
Author SHA1 Message Date
Chris Tate 45c5d02179 fix import 2026-02-22 14:14:52 -06:00
Chris Tate 3cbd88f198 fix changes 2026-02-20 21:24:17 -06:00
Chris Tate e47967da5d fixes 2026-02-20 21:10:14 -06:00
Chris Tate 4dc8d2d5d2 visual 2026-02-20 21:09:02 -06:00
15 changed files with 151 additions and 99 deletions
+2 -9
View File
@@ -6,11 +6,8 @@ node_modules
.pnp.js .pnp.js
# Local env files # Local env files
.env .env*
.env.local !.env.example
.env.development.local
.env.test.local
.env.production.local
# Testing # Testing
coverage coverage
@@ -44,10 +41,6 @@ yarn-error.log*
# opensrc - source code for packages # opensrc - source code for packages
opensrc/ opensrc/
# json-studio (separate repo)
json-studio/
.env*.local
# Stripe apps (generated from template + build artifacts) # Stripe apps (generated from template + build artifacts)
examples/stripe-app/*/stripe-app.json examples/stripe-app/*/stripe-app.json
examples/stripe-app/*/.build examples/stripe-app/*/.build
+107 -28
View File
@@ -16,14 +16,16 @@ import { CopyButton } from "./copy-button";
import { Toaster } from "./ui/sonner"; import { Toaster } from "./ui/sonner";
import { Header } from "./header"; import { Header } from "./header";
import { Sheet, SheetContent, SheetTitle } from "./ui/sheet"; import { Sheet, SheetContent, SheetTitle } from "./ui/sheet";
import { JsonEditor, type JsonValue } from "@visual-json/react";
import { PlaygroundRenderer } from "@/lib/render/renderer"; import { PlaygroundRenderer } from "@/lib/render/renderer";
import { playgroundCatalog } from "@/lib/render/catalog"; import { playgroundCatalog } from "@/lib/render/catalog";
import { buildCatalogDisplayData } from "@/lib/render/catalog-display"; import { buildCatalogDisplayData } from "@/lib/render/catalog-display";
type Tab = "json" | "nested" | "stream" | "catalog"; type Tab = "json" | "visual" | "nested" | "stream" | "catalog";
type RenderView = "preview" | "code"; type RenderView = "preview" | "code";
type MobileView = type MobileView =
| "json" | "json"
| "visual"
| "nested" | "nested"
| "stream" | "stream"
| "catalog" | "catalog"
@@ -161,6 +163,19 @@ export function Playground() {
? streamRawLines ? streamRawLines
: (selectedVersion?.rawLines ?? []); : (selectedVersion?.rawLines ?? []);
const handleVisualChange = useCallback(
(value: JsonValue) => {
const updatedSpec = value as unknown as Spec;
if (!selectedVersionId) return;
setVersions((prev) =>
prev.map((v) =>
v.id === selectedVersionId ? { ...v, tree: updatedSpec } : v,
),
);
},
[selectedVersionId],
);
// Keep the ref updated with the current tree for use in handleSubmit // Keep the ref updated with the current tree for use in handleSubmit
if ( if (
currentTree && currentTree &&
@@ -484,21 +499,23 @@ ${jsx}
const codePane = ( const codePane = (
<div className="h-full flex flex-col border-t border-border"> <div className="h-full flex flex-col border-t border-border">
<div className="border-b border-border px-3 h-9 flex items-center gap-3"> <div className="border-b border-border px-3 h-9 flex items-center gap-3">
{(["json", "nested", "stream", "catalog"] as const).map((tab) => ( {(["json", "visual", "nested", "stream", "catalog"] as const).map(
<button (tab) => (
key={tab} <button
onClick={() => setActiveTab(tab)} key={tab}
className={`text-xs font-mono transition-colors ${ onClick={() => setActiveTab(tab)}
activeTab === tab className={`text-xs font-mono transition-colors ${
? "text-foreground" activeTab === tab
: "text-muted-foreground hover:text-foreground" ? "text-foreground"
}`} : "text-muted-foreground hover:text-foreground"
> }`}
{tab} >
</button> {tab}
))} </button>
),
)}
<div className="flex-1" /> <div className="flex-1" />
{activeTab !== "catalog" && ( {activeTab !== "catalog" && activeTab !== "visual" && (
<CopyButton text={copyText} className="text-muted-foreground" /> <CopyButton text={copyText} className="text-muted-foreground" />
)} )}
</div> </div>
@@ -633,6 +650,36 @@ ${jsx}
{isStreaming ? "streaming..." : "// waiting for generation"} {isStreaming ? "streaming..." : "// waiting for generation"}
</div> </div>
) )
) : activeTab === "visual" ? (
currentTree && currentTree.root ? (
<JsonEditor
key={selectedVersionId}
defaultValue={
JSON.parse(JSON.stringify(currentTree)) as JsonValue
}
onChange={handleVisualChange}
sidebarOpen={false}
height="100%"
style={
{
"--vj-bg": "var(--background)",
"--vj-text": "var(--foreground)",
"--vj-border": "var(--border)",
"--vj-accent": "var(--primary)",
"--vj-bg-selected": "var(--primary)",
"--vj-bg-selected-muted":
"color-mix(in oklch, var(--primary) 50%, transparent)",
"--vj-text-selected": "var(--primary-foreground)",
} as React.CSSProperties
}
/>
) : (
<div className="h-full flex items-center justify-center text-muted-foreground/50 text-sm">
{isStreaming
? "generating..."
: "// enter a prompt to generate UI"}
</div>
)
) : activeTab === "nested" ? ( ) : activeTab === "nested" ? (
<CodeBlock code={nestedCode} lang="json" fillHeight hideCopyButton /> <CodeBlock code={nestedCode} lang="json" fillHeight hideCopyButton />
) : ( ) : (
@@ -735,19 +782,21 @@ ${jsx}
: 0} : 0}
</button> </button>
{/* Code tabs */} {/* Code tabs */}
{(["json", "nested", "stream", "catalog"] as const).map((tab) => ( {(["json", "visual", "nested", "stream", "catalog"] as const).map(
<button (tab) => (
key={tab} <button
onClick={() => setMobileView(tab)} key={tab}
className={`text-xs font-mono transition-colors shrink-0 ${ onClick={() => setMobileView(tab)}
mobileView === tab className={`text-xs font-mono transition-colors shrink-0 ${
? "text-foreground" mobileView === tab
: "text-muted-foreground hover:text-foreground" ? "text-foreground"
}`} : "text-muted-foreground hover:text-foreground"
> }`}
{tab} >
</button> {tab}
))} </button>
),
)}
<div className="flex-1" /> <div className="flex-1" />
{/* Preview / code toggle */} {/* Preview / code toggle */}
{[ {[
@@ -909,6 +958,36 @@ ${jsx}
/> />
) : mobileView === "json" ? ( ) : mobileView === "json" ? (
<CodeBlock code={jsonCode} lang="json" fillHeight hideCopyButton /> <CodeBlock code={jsonCode} lang="json" fillHeight hideCopyButton />
) : mobileView === "visual" ? (
currentTree && currentTree.root ? (
<JsonEditor
key={selectedVersionId}
defaultValue={
JSON.parse(JSON.stringify(currentTree)) as JsonValue
}
onChange={handleVisualChange}
sidebarOpen={false}
height="100%"
style={
{
"--vj-bg": "var(--background)",
"--vj-text": "var(--foreground)",
"--vj-border": "var(--border)",
"--vj-accent": "var(--primary)",
"--vj-bg-selected": "var(--primary)",
"--vj-bg-selected-muted":
"color-mix(in oklch, var(--primary) 50%, transparent)",
"--vj-text-selected": "var(--primary-foreground)",
} as React.CSSProperties
}
/>
) : (
<div className="h-full flex items-center justify-center text-muted-foreground/50 text-sm">
{isStreaming
? "generating..."
: "// enter a prompt to generate UI"}
</div>
)
) : mobileView === "preview" ? ( ) : mobileView === "preview" ? (
currentTree && currentTree.root ? ( currentTree && currentTree.root ? (
<div className="w-full min-h-full flex items-center justify-center p-6"> <div className="w-full min-h-full flex items-center justify-center p-6">
+3 -1
View File
@@ -5,7 +5,7 @@
"private": true, "private": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"scripts": { "scripts": {
"dev": "next dev --turbopack", "dev": "portless json-render next dev --turbopack",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "eslint --max-warnings 0", "lint": "eslint --max-warnings 0",
@@ -28,6 +28,8 @@
"@upstash/redis": "^1.36.1", "@upstash/redis": "^1.36.1",
"@vercel/analytics": "^1.6.1", "@vercel/analytics": "^1.6.1",
"@vercel/speed-insights": "^1.3.1", "@vercel/speed-insights": "^1.3.1",
"@visual-json/core": "0.1.1",
"@visual-json/react": "0.1.1",
"ai": "^6.0.33", "ai": "^6.0.33",
"bash-tool": "1.3.14", "bash-tool": "1.3.14",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
+1 -1
View File
@@ -1,6 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"; import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+1 -1
View File
@@ -4,7 +4,7 @@
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev --turbopack", "dev": "portless chat-demo.json-render next dev --turbopack",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "eslint --max-warnings 0", "lint": "eslint --max-warnings 0",
+1 -1
View File
@@ -1,6 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"; import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+1 -1
View File
@@ -4,7 +4,7 @@
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev --turbopack", "dev": "portless dashboard-demo.json-render next dev --turbopack",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "eslint --max-warnings 0", "lint": "eslint --max-warnings 0",
+1 -1
View File
@@ -1,6 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"; import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+1 -1
View File
@@ -4,7 +4,7 @@
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev --turbopack --port 3003", "dev": "portless no-ai-demo.json-render next dev --turbopack",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "eslint --max-warnings 0", "lint": "eslint --max-warnings 0",
+1 -1
View File
@@ -1,6 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"; import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+1 -1
View File
@@ -4,7 +4,7 @@
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev --turbopack --port 3005", "dev": "portless react-pdf-demo.json-render next dev --turbopack",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"check-types": "tsc --noEmit" "check-types": "tsc --noEmit"
+1 -1
View File
@@ -1,6 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"; import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+1 -1
View File
@@ -4,7 +4,7 @@
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev --turbopack --port 3002", "dev": "portless remotion-demo.json-render next dev --turbopack",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"check-types": "tsc --noEmit" "check-types": "tsc --noEmit"
+1 -1
View File
@@ -1,6 +1,6 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/image-types/global" /> /// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts"; import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited // NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+28 -50
View File
@@ -98,6 +98,12 @@ importers:
'@vercel/speed-insights': '@vercel/speed-insights':
specifier: ^1.3.1 specifier: ^1.3.1
version: 1.3.1(next@16.1.1(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) version: 1.3.1(next@16.1.1(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
'@visual-json/core':
specifier: 0.1.1
version: 0.1.1
'@visual-json/react':
specifier: 0.1.1
version: 0.1.1(react@19.2.3)
ai: ai:
specifier: ^6.0.33 specifier: ^6.0.33
version: 6.0.33(zod@4.3.5) version: 6.0.33(zod@4.3.5)
@@ -442,7 +448,7 @@ importers:
version: 0.563.0(react@19.2.4) version: 0.563.0(react@19.2.4)
next: next:
specifier: 16.1.6 specifier: 16.1.6
version: 16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
radix-ui: radix-ui:
specifier: ^1.4.3 specifier: ^1.4.3
version: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) version: 1.4.3(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -716,7 +722,7 @@ importers:
version: 6.0.91(zod@4.3.5) version: 6.0.91(zod@4.3.5)
next: next:
specifier: ^16.1.6 specifier: ^16.1.6
version: 16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react: react:
specifier: ^19.1.0 specifier: ^19.1.0
version: 19.2.4 version: 19.2.4
@@ -5009,6 +5015,14 @@ packages:
vue-router: vue-router:
optional: true optional: true
'@visual-json/core@0.1.1':
resolution: {integrity: sha512-VLARpQnjJU1SnnYk1NiXScGfp2FyAwyZS2kA8hIJV5OzkaH2oS1dTHsaB8vOiyi14/L7jsbpA4g/EwzRWbxQmg==}
'@visual-json/react@0.1.1':
resolution: {integrity: sha512-KCpFYmBhH5F+xctfvxxVX7mVZK/iwvDwh/ITNkGPzEKXTIJQ16fau+hrG7m7QoTAOxvsdhHtHoCUiEjNHXboUQ==}
peerDependencies:
react: ^18.0.0 || ^19.0.0
'@vitest/expect@4.0.17': '@vitest/expect@4.0.17':
resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==} resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==}
@@ -12537,7 +12551,6 @@ snapshots:
- graphql - graphql
- supports-color - supports-color
- utf-8-validate - utf-8-validate
optional: true
'@expo/code-signing-certificates@0.0.6': '@expo/code-signing-certificates@0.0.6':
dependencies: dependencies:
@@ -12602,7 +12615,6 @@ snapshots:
optionalDependencies: optionalDependencies:
react: 19.2.4 react: 19.2.4
react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4) react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4)
optional: true
'@expo/env@2.0.8': '@expo/env@2.0.8':
dependencies: dependencies:
@@ -12672,7 +12684,7 @@ snapshots:
postcss: 8.4.49 postcss: 8.4.49
resolve-from: 5.0.0 resolve-from: 5.0.0
optionalDependencies: optionalDependencies:
expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4)
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- supports-color - supports-color
@@ -12753,7 +12765,7 @@ snapshots:
'@expo/json-file': 10.0.8 '@expo/json-file': 10.0.8
'@react-native/normalize-colors': 0.81.5 '@react-native/normalize-colors': 0.81.5
debug: 4.4.3 debug: 4.4.3
expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4)
resolve-from: 5.0.0 resolve-from: 5.0.0
semver: 7.7.3 semver: 7.7.3
xml2js: 0.6.0 xml2js: 0.6.0
@@ -12781,7 +12793,6 @@ snapshots:
expo-font: 14.0.11(expo@54.0.33)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4) expo-font: 14.0.11(expo@54.0.33)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4)
react: 19.2.4 react: 19.2.4
react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4) react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4)
optional: true
'@expo/ws-tunnel@1.0.6': {} '@expo/ws-tunnel@1.0.6': {}
@@ -15372,7 +15383,6 @@ snapshots:
react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4) react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4)
optionalDependencies: optionalDependencies:
'@types/react': 19.2.3 '@types/react': 19.2.3
optional: true
'@react-navigation/bottom-tabs@7.12.0(@react-navigation/native@7.1.28(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.4.0(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.11.1(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': '@react-navigation/bottom-tabs@7.12.0(@react-navigation/native@7.1.28(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.4.0(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.11.1(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies: dependencies:
@@ -15993,7 +16003,7 @@ snapshots:
'@stripe/ui-extension-tools@0.0.1(@babel/core@7.29.0)(babel-jest@27.5.1(@babel/core@7.29.0))': '@stripe/ui-extension-tools@0.0.1(@babel/core@7.29.0)(babel-jest@27.5.1(@babel/core@7.29.0))':
dependencies: dependencies:
'@types/jest': 28.1.8 '@types/jest': 28.1.8
'@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@2.6.1))(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)
'@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5)
eslint: 8.57.1 eslint: 8.57.1
eslint-plugin-react: 7.37.5(eslint@8.57.1) eslint-plugin-react: 7.37.5(eslint@8.57.1)
@@ -16330,7 +16340,7 @@ snapshots:
'@types/node': 22.19.6 '@types/node': 22.19.6
optional: true optional: true
'@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@2.6.1))(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)': '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.2 '@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5) '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@4.9.5)
@@ -16551,6 +16561,13 @@ snapshots:
next: 16.1.1(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) next: 16.1.1(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
react: 19.2.3 react: 19.2.3
'@visual-json/core@0.1.1': {}
'@visual-json/react@0.1.1(react@19.2.3)':
dependencies:
'@visual-json/core': 0.1.1
react: 19.2.3
'@vitest/expect@4.0.17': '@vitest/expect@4.0.17':
dependencies: dependencies:
'@standard-schema/spec': 1.1.0 '@standard-schema/spec': 1.1.0
@@ -17072,7 +17089,7 @@ snapshots:
resolve-from: 5.0.0 resolve-from: 5.0.0
optionalDependencies: optionalDependencies:
'@babel/runtime': 7.28.6 '@babel/runtime': 7.28.6
expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4)
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
- supports-color - supports-color
@@ -18399,7 +18416,6 @@ snapshots:
react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4) react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
optional: true
expo-clipboard@8.0.8(expo@54.0.33)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): expo-clipboard@8.0.8(expo@54.0.33)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies: dependencies:
@@ -18424,7 +18440,6 @@ snapshots:
react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4) react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
optional: true
expo-file-system@19.0.21(expo@54.0.33)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)): expo-file-system@19.0.21(expo@54.0.33)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)):
dependencies: dependencies:
@@ -18435,7 +18450,6 @@ snapshots:
dependencies: dependencies:
expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4) expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4)
react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4) react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4)
optional: true
expo-font@14.0.11(expo@54.0.33)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): expo-font@14.0.11(expo@54.0.33)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies: dependencies:
@@ -18450,7 +18464,6 @@ snapshots:
fontfaceobserver: 2.3.0 fontfaceobserver: 2.3.0
react: 19.2.4 react: 19.2.4
react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4) react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4)
optional: true
expo-keep-awake@15.0.8(expo@54.0.33)(react@19.1.0): expo-keep-awake@15.0.8(expo@54.0.33)(react@19.1.0):
dependencies: dependencies:
@@ -18461,7 +18474,6 @@ snapshots:
dependencies: dependencies:
expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4) expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4))(react@19.2.4)
react: 19.2.4 react: 19.2.4
optional: true
expo-linking@8.0.11(expo@54.0.33)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): expo-linking@8.0.11(expo@54.0.33)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies: dependencies:
@@ -18503,7 +18515,6 @@ snapshots:
invariant: 2.2.4 invariant: 2.2.4
react: 19.2.4 react: 19.2.4
react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4) react-native: 0.83.1(@babel/core@7.29.0)(@types/react@19.2.3)(react@19.2.4)
optional: true
expo-router@6.0.23(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(expo-constants@18.0.13)(expo-linking@8.0.11)(expo@54.0.33)(react-dom@19.2.4(react@19.1.0))(react-native-reanimated@4.2.1(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.4.0(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.11.1(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): expo-router@6.0.23(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(expo-constants@18.0.13)(expo-linking@8.0.11)(expo@54.0.33)(react-dom@19.2.4(react@19.1.0))(react-native-reanimated@4.2.1(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.4.0(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.11.1(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.4(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies: dependencies:
@@ -18666,7 +18677,6 @@ snapshots:
- graphql - graphql
- supports-color - supports-color
- utf-8-validate - utf-8-validate
optional: true
exponential-backoff@3.1.3: {} exponential-backoff@3.1.3: {}
@@ -21278,32 +21288,6 @@ snapshots:
- '@babel/core' - '@babel/core'
- babel-plugin-macros - babel-plugin-macros
next@16.1.6(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
'@next/env': 16.1.6
'@swc/helpers': 0.5.15
baseline-browser-mapping: 2.9.14
caniuse-lite: 1.0.30001764
postcss: 8.4.31
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
styled-jsx: 5.1.6(react@19.2.4)
optionalDependencies:
'@next/swc-darwin-arm64': 16.1.6
'@next/swc-darwin-x64': 16.1.6
'@next/swc-linux-arm64-gnu': 16.1.6
'@next/swc-linux-arm64-musl': 16.1.6
'@next/swc-linux-x64-gnu': 16.1.6
'@next/swc-linux-x64-musl': 16.1.6
'@next/swc-win32-arm64-msvc': 16.1.6
'@next/swc-win32-x64-msvc': 16.1.6
'@opentelemetry/api': 1.9.0
babel-plugin-react-compiler: 1.0.0
sharp: 0.34.5
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
node-abi@3.87.0: node-abi@3.87.0:
dependencies: dependencies:
semver: 7.7.3 semver: 7.7.3
@@ -22270,7 +22254,6 @@ snapshots:
- bufferutil - bufferutil
- supports-color - supports-color
- utf-8-validate - utf-8-validate
optional: true
react-reconciler@0.29.0(react@18.3.1): react-reconciler@0.29.0(react@18.3.1):
dependencies: dependencies:
@@ -23344,11 +23327,6 @@ snapshots:
client-only: 0.0.1 client-only: 0.0.1
react: 19.2.3 react: 19.2.3
styled-jsx@5.1.6(react@19.2.4):
dependencies:
client-only: 0.0.1
react: 19.2.4
sucrase@3.35.1: sucrase@3.35.1:
dependencies: dependencies:
'@jridgewell/gen-mapping': 0.3.13 '@jridgewell/gen-mapping': 0.3.13