jaml-ui 0.22.2 → 0.22.4
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/dist/components/JamlCurator.d.ts +3 -3
- package/dist/components/JamlCurator.js +2 -2
- package/dist/hooks/useAnalyzer.d.ts +2 -12
- package/dist/hooks/useAnalyzer.js +14 -14
- package/dist/hooks/useSearch.js +3 -2
- package/dist/index.d.ts +1 -1
- package/dist/lib/hooks/useSeedAnalyzer.d.ts +2 -6
- package/dist/lib/hooks/useSeedAnalyzer.js +4 -4
- package/package.json +145 -144
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Motely } from "motely-wasm";
|
|
2
2
|
export interface JamlCuratorProps {
|
|
3
|
-
|
|
3
|
+
motely: typeof Motely | null;
|
|
4
4
|
}
|
|
5
|
-
export declare function JamlCurator({
|
|
5
|
+
export declare function JamlCurator({ motely }: JamlCuratorProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -11,11 +11,11 @@ import { useSearch } from "../hooks/useSearch.js";
|
|
|
11
11
|
import { useAnalyzer } from "../hooks/useAnalyzer.js";
|
|
12
12
|
import { JamlSpeedometer } from "./JamlSpeedometer.js";
|
|
13
13
|
const C = JimboColorOption;
|
|
14
|
-
export function JamlCurator({
|
|
14
|
+
export function JamlCurator({ motely }) {
|
|
15
15
|
// Use map editor by default to generate JAML
|
|
16
16
|
const [jamlText, setJamlText] = useState("");
|
|
17
17
|
const search = useSearch();
|
|
18
|
-
const analyzer = useAnalyzer(
|
|
18
|
+
const analyzer = useAnalyzer(motely);
|
|
19
19
|
// Search results pagination
|
|
20
20
|
const [resultIndex, setResultIndex] = useState(0);
|
|
21
21
|
const isSearching = search.status === "running";
|
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
import { Motely } from "motely-wasm";
|
|
1
|
+
import { type Motely } from "motely-wasm";
|
|
2
2
|
import type { AnalyzerAnteView } from "../components/AnalyzerExplorer.js";
|
|
3
3
|
export type AnalyzerStatus = "idle" | "running" | "done" | "error";
|
|
4
4
|
export type MotelyJsRunState = {
|
|
5
5
|
voucherBitfield: number;
|
|
6
6
|
bossBitfield: number;
|
|
7
7
|
};
|
|
8
|
-
/**
|
|
9
|
-
* Runtime handle for motely-wasm. Consumers boot motely-wasm once and pass
|
|
10
|
-
* `{ MotelyWasm, Motely }` to hooks that need it. This keeps jaml-ui free of
|
|
11
|
-
* static motely-wasm imports so consumer bundlers don't pull the 12MB engine
|
|
12
|
-
* into their main bundle.
|
|
13
|
-
*/
|
|
14
|
-
export interface MotelyRuntime {
|
|
15
|
-
MotelyWasm: typeof Motely.MotelyWasm;
|
|
16
|
-
Motely: typeof Motely;
|
|
17
|
-
}
|
|
18
8
|
export interface AnalyzerLive {
|
|
19
9
|
ctx: ReturnType<typeof Motely.MotelyWasm.createSearchContext>;
|
|
20
10
|
Motely: typeof Motely;
|
|
@@ -24,7 +14,7 @@ export interface AnalyzerLive {
|
|
|
24
14
|
deck: string;
|
|
25
15
|
stake: string;
|
|
26
16
|
}
|
|
27
|
-
export declare function useAnalyzer(
|
|
17
|
+
export declare function useAnalyzer(motely: typeof Motely | null): {
|
|
28
18
|
antes: AnalyzerAnteView[];
|
|
29
19
|
status: AnalyzerStatus;
|
|
30
20
|
error: string | null;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { useState, useCallback } from "react";
|
|
3
3
|
import { extractVisualJamlItems } from "../utils/jamlMapPreview.js";
|
|
4
4
|
import { motelyItemDisplayNameFromValue } from "../motelyDisplay.js";
|
|
5
|
-
export function useAnalyzer(
|
|
5
|
+
export function useAnalyzer(motely) {
|
|
6
6
|
const [antes, setAntes] = useState([]);
|
|
7
7
|
const [status, setStatus] = useState("idle");
|
|
8
8
|
const [error, setError] = useState(null);
|
|
@@ -10,12 +10,12 @@ export function useAnalyzer(runtime) {
|
|
|
10
10
|
const [tallyColumns, setTallyColumns] = useState([]);
|
|
11
11
|
const [tallyLabels, setTallyLabels] = useState([]);
|
|
12
12
|
const analyze = useCallback(async (seed, deck, stake, jaml) => {
|
|
13
|
-
if (!
|
|
14
|
-
setError("motely-wasm
|
|
13
|
+
if (!motely) {
|
|
14
|
+
setError("motely-wasm not ready");
|
|
15
15
|
setStatus("error");
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
-
const
|
|
18
|
+
const MotelyWasm = motely.MotelyWasm;
|
|
19
19
|
setAntes([]);
|
|
20
20
|
setLive(null);
|
|
21
21
|
setTallyColumns([]);
|
|
@@ -23,8 +23,8 @@ export function useAnalyzer(runtime) {
|
|
|
23
23
|
setStatus("running");
|
|
24
24
|
setError(null);
|
|
25
25
|
try {
|
|
26
|
-
const deckEnum =
|
|
27
|
-
const stakeEnum =
|
|
26
|
+
const deckEnum = motely.MotelyDeck[deck] ?? motely.MotelyDeck.Red;
|
|
27
|
+
const stakeEnum = motely.MotelyStake[stake] ?? motely.MotelyStake.White;
|
|
28
28
|
const desiredNames = new Set();
|
|
29
29
|
if (jaml) {
|
|
30
30
|
const groups = extractVisualJamlItems(jaml);
|
|
@@ -41,10 +41,10 @@ export function useAnalyzer(runtime) {
|
|
|
41
41
|
const runStates = {};
|
|
42
42
|
for (let ante = 1; ante <= 39; ante++) {
|
|
43
43
|
const bossResult = ctx.getNextBossForAnte(bossStream, ante, runState);
|
|
44
|
-
const bossName =
|
|
44
|
+
const bossName = motely.MotelyBossBlind[bossResult.boss] ?? `Unknown(${bossResult.boss})`;
|
|
45
45
|
runState = bossResult.runState;
|
|
46
46
|
const voucherResult = ctx.getAnteFirstVoucher(ante, runState);
|
|
47
|
-
const voucherName =
|
|
47
|
+
const voucherName = motely.MotelyVoucher[voucherResult.voucher] ?? `Unknown(${voucherResult.voucher})`;
|
|
48
48
|
runState = voucherResult.runState;
|
|
49
49
|
runStates[ante] = { ...runState };
|
|
50
50
|
const tagStream = ctx.createTagStream(ante);
|
|
@@ -54,9 +54,9 @@ export function useAnalyzer(runtime) {
|
|
|
54
54
|
const packs = [];
|
|
55
55
|
for (let p = 0; p < 2; p++) {
|
|
56
56
|
const packResult = ctx.getNextBoosterPack(packStream);
|
|
57
|
-
packs.push(
|
|
57
|
+
packs.push(motely.MotelyBoosterPack[packResult.pack] ?? `Unknown(${packResult.pack})`);
|
|
58
58
|
}
|
|
59
|
-
const shopStream = ctx.createShopItemStream(ante, runState,
|
|
59
|
+
const shopStream = ctx.createShopItemStream(ante, runState, motely.MotelyShopStreamFlags.Default, motely.MotelyJokerStreamFlags.Default);
|
|
60
60
|
const shop = [];
|
|
61
61
|
for (let i = 0; i < 4; i++) {
|
|
62
62
|
const itemResult = ctx.getNextShopItem(shopStream);
|
|
@@ -68,21 +68,21 @@ export function useAnalyzer(runtime) {
|
|
|
68
68
|
ante,
|
|
69
69
|
boss: bossName,
|
|
70
70
|
voucher: voucherName,
|
|
71
|
-
smallBlindTag:
|
|
72
|
-
bigBlindTag:
|
|
71
|
+
smallBlindTag: motely.MotelyTag[tag1.tag] ?? `Unknown(${tag1.tag})`,
|
|
72
|
+
bigBlindTag: motely.MotelyTag[tag2.tag] ?? `Unknown(${tag2.tag})`,
|
|
73
73
|
packs,
|
|
74
74
|
shop,
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
setAntes(results);
|
|
78
|
-
setLive({ ctx, Motely, runStates, desiredNames, seed, deck, stake });
|
|
78
|
+
setLive({ ctx, Motely: motely, runStates, desiredNames, seed, deck, stake });
|
|
79
79
|
setStatus("done");
|
|
80
80
|
}
|
|
81
81
|
catch (e) {
|
|
82
82
|
setError(e instanceof Error ? e.message : String(e));
|
|
83
83
|
setStatus("error");
|
|
84
84
|
}
|
|
85
|
-
}, [
|
|
85
|
+
}, [motely]);
|
|
86
86
|
const clearError = useCallback(() => {
|
|
87
87
|
setError(null);
|
|
88
88
|
setStatus((s) => (s === "error" ? "idle" : s));
|
package/dist/hooks/useSearch.js
CHANGED
|
@@ -21,8 +21,9 @@ self.addEventListener('message', async function(e) {
|
|
|
21
21
|
try {
|
|
22
22
|
const mod = await import(msg.url);
|
|
23
23
|
await mod.default.boot();
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const motely = mod.Motely;
|
|
25
|
+
MotelyWasm = motely.MotelyWasm;
|
|
26
|
+
MotelyWasmEvents = motely.MotelyWasmEvents;
|
|
26
27
|
self.postMessage({ type: 'ready' });
|
|
27
28
|
} catch (err) {
|
|
28
29
|
self.postMessage({ type: 'error', message: String(err) });
|
package/dist/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export { Showcase, type ShowcaseFilter, type ShowcaseLiveStats, type ShowcasePro
|
|
|
21
21
|
export { extractVisualJamlItems, type JamlPreviewGroups, type JamlPreviewItem, type JamlPreviewSection, type JamlPreviewVisualType, } from "./utils/jamlMapPreview.js";
|
|
22
22
|
export { useMotelyStream, type StreamItem, type StreamState } from "./hooks/useShopStream.js";
|
|
23
23
|
export { useSearch, type SearchResult, type SearchStatus, type UseSearchState, } from "./hooks/useSearch.js";
|
|
24
|
-
export { useAnalyzer, type AnalyzerStatus, type AnalyzerLive, type MotelyJsRunState,
|
|
24
|
+
export { useAnalyzer, type AnalyzerStatus, type AnalyzerLive, type MotelyJsRunState, } from "./hooks/useAnalyzer.js";
|
|
25
25
|
export { setMotelyEnums as setMotelyDisplayEnums } from "./motelyDisplay.js";
|
|
26
26
|
export { setMotelyEnums as setMotelyDecoderEnums } from "./decode/motelyItemDecoder.js";
|
|
27
27
|
export { JamlAestheticSelector, type JamlAestheticSelectorProps, type JamlAestheticOption, } from "./components/JamlAestheticSelector.js";
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import { Motely } from "motely-wasm";
|
|
2
|
-
export
|
|
3
|
-
MotelyWasm: typeof Motely.MotelyWasm;
|
|
4
|
-
Motely: typeof Motely;
|
|
5
|
-
}
|
|
6
|
-
export declare function useSeedAnalyzer(runtime: MotelyRuntime | null, seed: string | null): {
|
|
1
|
+
import { type Motely } from "motely-wasm";
|
|
2
|
+
export declare function useSeedAnalyzer(motely: typeof Motely | null, seed: string | null): {
|
|
7
3
|
data: Motely.Analysis.MotelyLegacyTextAnalyzer | null | undefined;
|
|
8
4
|
loading: boolean;
|
|
9
5
|
error: string | null;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useState, useEffect } from "react";
|
|
3
|
-
export function useSeedAnalyzer(
|
|
3
|
+
export function useSeedAnalyzer(motely, seed) {
|
|
4
4
|
const [data, setData] = useState(null);
|
|
5
5
|
const [loading, setLoading] = useState(false);
|
|
6
6
|
const [error, setError] = useState(null);
|
|
7
7
|
useEffect(() => {
|
|
8
|
-
if (!seed || seed === "LOCKED" || !
|
|
8
|
+
if (!seed || seed === "LOCKED" || !motely) {
|
|
9
9
|
setData(null);
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
@@ -15,7 +15,7 @@ export function useSeedAnalyzer(runtime, seed) {
|
|
|
15
15
|
setError(null);
|
|
16
16
|
try {
|
|
17
17
|
const jaml = `version: 1\nconfig:\n deck: Erratic\n stake: White\n`;
|
|
18
|
-
const rawResult =
|
|
18
|
+
const rawResult = motely.MotelyWasm.analyzeJamlSeeds(jaml, [seed]);
|
|
19
19
|
if (abortController.signal.aborted)
|
|
20
20
|
return;
|
|
21
21
|
if (rawResult && rawResult.seeds.length > 0) {
|
|
@@ -39,6 +39,6 @@ export function useSeedAnalyzer(runtime, seed) {
|
|
|
39
39
|
};
|
|
40
40
|
runAnalysis();
|
|
41
41
|
return () => abortController.abort();
|
|
42
|
-
}, [
|
|
42
|
+
}, [motely, seed]);
|
|
43
43
|
return { data, loading, error };
|
|
44
44
|
}
|
package/package.json
CHANGED
|
@@ -1,144 +1,145 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "jaml-ui",
|
|
3
|
-
"version": "0.22.
|
|
4
|
-
"description": "Balatro rendering components, sprite metadata, and optional Motely helpers for React apps.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/index.js",
|
|
11
|
-
"require": "./dist/index.js",
|
|
12
|
-
"types": "./dist/index.d.ts",
|
|
13
|
-
"default": "./dist/index.js"
|
|
14
|
-
},
|
|
15
|
-
"./motely": {
|
|
16
|
-
"import": "./dist/motely.js",
|
|
17
|
-
"require": "./dist/motely.js",
|
|
18
|
-
"types": "./dist/motely.d.ts",
|
|
19
|
-
"default": "./dist/motely.js"
|
|
20
|
-
},
|
|
21
|
-
"./fonts.css": "./fonts.css",
|
|
22
|
-
"./jaml.schema.json": "./jaml.schema.json"
|
|
23
|
-
},
|
|
24
|
-
"sideEffects": [
|
|
25
|
-
"./fonts.css"
|
|
26
|
-
],
|
|
27
|
-
"files": [
|
|
28
|
-
"dist",
|
|
29
|
-
"assets/*.png",
|
|
30
|
-
"assets/fonts",
|
|
31
|
-
"fonts.css",
|
|
32
|
-
"dist/ui/jimbo.css",
|
|
33
|
-
"jaml.schema.json",
|
|
34
|
-
"README.md",
|
|
35
|
-
"DESIGN.md",
|
|
36
|
-
"LICENSE"
|
|
37
|
-
],
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
},
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"@react-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
"
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
"
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
"@
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
"@
|
|
107
|
-
"@
|
|
108
|
-
"@
|
|
109
|
-
"@
|
|
110
|
-
"@
|
|
111
|
-
"@
|
|
112
|
-
"@
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"react
|
|
118
|
-
"react-
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
"
|
|
127
|
-
"
|
|
128
|
-
"
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
},
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
"
|
|
142
|
-
"
|
|
143
|
-
|
|
144
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "jaml-ui",
|
|
3
|
+
"version": "0.22.4",
|
|
4
|
+
"description": "Balatro rendering components, sprite metadata, and optional Motely helpers for React apps.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./motely": {
|
|
16
|
+
"import": "./dist/motely.js",
|
|
17
|
+
"require": "./dist/motely.js",
|
|
18
|
+
"types": "./dist/motely.d.ts",
|
|
19
|
+
"default": "./dist/motely.js"
|
|
20
|
+
},
|
|
21
|
+
"./fonts.css": "./fonts.css",
|
|
22
|
+
"./jaml.schema.json": "./jaml.schema.json"
|
|
23
|
+
},
|
|
24
|
+
"sideEffects": [
|
|
25
|
+
"./fonts.css"
|
|
26
|
+
],
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"assets/*.png",
|
|
30
|
+
"assets/fonts",
|
|
31
|
+
"fonts.css",
|
|
32
|
+
"dist/ui/jimbo.css",
|
|
33
|
+
"jaml.schema.json",
|
|
34
|
+
"README.md",
|
|
35
|
+
"DESIGN.md",
|
|
36
|
+
"LICENSE"
|
|
37
|
+
],
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsc --pretty false && node -e \"const fs=require('fs');fs.mkdirSync('dist/ui',{recursive:true});fs.copyFileSync('src/ui/jimbo.css','dist/ui/jimbo.css');fs.copyFileSync('node_modules/motely-wasm/jaml.schema.json','jaml.schema.json');\"",
|
|
40
|
+
"dev": "tsc --watch",
|
|
41
|
+
"demo": "vite --config demo/vite.config.ts",
|
|
42
|
+
"typecheck": "tsc --noEmit --pretty false",
|
|
43
|
+
"prepack": "npm run build",
|
|
44
|
+
"storybook": "storybook dev -p 6006",
|
|
45
|
+
"build-storybook": "storybook build",
|
|
46
|
+
"lint": "eslint ."
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=18"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
},
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "https://github.com/OptimusPi/jaml-ui"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://github.com/OptimusPi/jaml-ui#readme",
|
|
59
|
+
"bugs": {
|
|
60
|
+
"url": "https://github.com/OptimusPi/jaml-ui/issues"
|
|
61
|
+
},
|
|
62
|
+
"keywords": [
|
|
63
|
+
"balatro",
|
|
64
|
+
"jaml",
|
|
65
|
+
"motely",
|
|
66
|
+
"seed",
|
|
67
|
+
"card",
|
|
68
|
+
"sprite",
|
|
69
|
+
"ui"
|
|
70
|
+
],
|
|
71
|
+
"author": "pifreak",
|
|
72
|
+
"license": "MIT",
|
|
73
|
+
"peerDependencies": {
|
|
74
|
+
"@monaco-editor/react": ">=4.0.0",
|
|
75
|
+
"@react-spring/three": ">=9.0.0",
|
|
76
|
+
"@react-three/drei": ">=9.0.0",
|
|
77
|
+
"@react-three/fiber": ">=8.0.0",
|
|
78
|
+
"monaco-editor": ">=0.50.0",
|
|
79
|
+
"motely-wasm": "^14.4.0",
|
|
80
|
+
"react": "^18.2.0 || ^19.0.0",
|
|
81
|
+
"react-dom": "^18.2.0 || ^19.0.0",
|
|
82
|
+
"react-icons": ">=5.0.0",
|
|
83
|
+
"three": ">=0.150.0"
|
|
84
|
+
},
|
|
85
|
+
"peerDependenciesMeta": {
|
|
86
|
+
"@react-spring/three": {
|
|
87
|
+
"optional": true
|
|
88
|
+
},
|
|
89
|
+
"@react-three/fiber": {
|
|
90
|
+
"optional": true
|
|
91
|
+
},
|
|
92
|
+
"motely-wasm": {
|
|
93
|
+
"optional": true
|
|
94
|
+
},
|
|
95
|
+
"react-icons": {
|
|
96
|
+
"optional": true
|
|
97
|
+
},
|
|
98
|
+
"three": {
|
|
99
|
+
"optional": true
|
|
100
|
+
},
|
|
101
|
+
"@react-three/drei": {
|
|
102
|
+
"optional": true
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"devDependencies": {
|
|
106
|
+
"@chromatic-com/storybook": "^5.1.2",
|
|
107
|
+
"@google/design.md": "^0.1.1",
|
|
108
|
+
"@monaco-editor/react": "^4.7.0",
|
|
109
|
+
"@react-spring/three": "^10.0.3",
|
|
110
|
+
"@react-three/fiber": "^9.6.0",
|
|
111
|
+
"@storybook/addon-a11y": "^10.3.6",
|
|
112
|
+
"@storybook/addon-docs": "^10.3.6",
|
|
113
|
+
"@storybook/addon-onboarding": "^10.3.6",
|
|
114
|
+
"@storybook/addon-vitest": "^10.3.6",
|
|
115
|
+
"@storybook/react-vite": "^10.3.6",
|
|
116
|
+
"@types/node": "^25.6.0",
|
|
117
|
+
"@types/react": "^19.2.14",
|
|
118
|
+
"@types/react-dom": "^19.2.3",
|
|
119
|
+
"@types/three": "^0.184.0",
|
|
120
|
+
"@vitejs/plugin-react": "^5.0.4",
|
|
121
|
+
"@vitest/browser-playwright": "^4.1.5",
|
|
122
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
123
|
+
"monaco-editor": "^0.55.1",
|
|
124
|
+
"motely-wasm": "^14.4.0",
|
|
125
|
+
"playwright": "^1.59.1",
|
|
126
|
+
"react": "^19.2.4",
|
|
127
|
+
"react-dom": "^19.2.4",
|
|
128
|
+
"react-icons": "^5.6.0",
|
|
129
|
+
"storybook": "^10.3.6",
|
|
130
|
+
"three": "^0.184.0",
|
|
131
|
+
"typescript": "^5.9.3",
|
|
132
|
+
"vite": "^8.0.9",
|
|
133
|
+
"vitest": "^4.1.5"
|
|
134
|
+
},
|
|
135
|
+
"dependencies": {
|
|
136
|
+
"@json-render/core": "^0.18.0",
|
|
137
|
+
"@react-three/drei": ">=9.0.0",
|
|
138
|
+
"@types/js-yaml": "^4.0.9",
|
|
139
|
+
"clsx": "^2.1.1",
|
|
140
|
+
"js-yaml": "^4.1.1",
|
|
141
|
+
"lucide-react": "^1.14.0",
|
|
142
|
+
"tailwind-merge": "^2.6.1",
|
|
143
|
+
"zustand": "^5.0.0"
|
|
144
|
+
}
|
|
145
|
+
}
|