prototypey.org - atproto lexicon typescript toolkit - mirror https://github.com/tylersayshi/prototypey
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

add interactive playground site with Monaco editor and real-time compilation

Tyler 814d692a 21ba4996

+876 -1
+3
package.json
··· 15 15 "scripts": { 16 16 "build": "pnpm -r build", 17 17 "codegen:samples": "node packages/cli/src/index.ts gen-inferred ./generated/inferred './samples/*.json'", 18 + "dev:site": "pnpm -F @prototypekit/site dev", 19 + "build:site": "pnpm -F @prototypekit/site build", 20 + "preview:site": "pnpm -F @prototypekit/site preview", 18 21 "format": "prettier . --list-different", 19 22 "format:fix": "prettier . --write", 20 23 "lint": "pnpm -r lint",
+12
packages/site/index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 + <title>prototypekit - Type-safe lexicon inference for ATProto</title> 7 + </head> 8 + <body> 9 + <div id="root"></div> 10 + <script type="module" src="/src/main.tsx"></script> 11 + </body> 12 + </html>
+25
packages/site/package.json
··· 1 + { 2 + "name": "@prototypekit/site", 3 + "version": "0.0.0", 4 + "private": true, 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite", 8 + "build": "tsc && vite build", 9 + "preview": "vite preview" 10 + }, 11 + "dependencies": { 12 + "@monaco-editor/react": "^4.6.0", 13 + "monaco-editor": "^0.52.2", 14 + "prototypekit": "workspace:*", 15 + "react": "^18.3.1", 16 + "react-dom": "^18.3.1" 17 + }, 18 + "devDependencies": { 19 + "@types/react": "^18.3.18", 20 + "@types/react-dom": "^18.3.5", 21 + "@vitejs/plugin-react": "^4.3.4", 22 + "typescript": "5.8.3", 23 + "vite": "^6.0.5" 24 + } 25 + }
+11
packages/site/src/App.tsx
··· 1 + import { Header } from "./components/Header"; 2 + import { Playground } from "./components/Playground"; 3 + 4 + export function App() { 5 + return ( 6 + <> 7 + <Header /> 8 + <Playground /> 9 + </> 10 + ); 11 + }
+44
packages/site/src/components/Editor.tsx
··· 1 + import MonacoEditor from "@monaco-editor/react"; 2 + 3 + interface EditorProps { 4 + value: string; 5 + onChange: (value: string) => void; 6 + } 7 + 8 + export function Editor({ value, onChange }: EditorProps) { 9 + return ( 10 + <div style={{ flex: 1, display: "flex", flexDirection: "column" }}> 11 + <div 12 + style={{ 13 + padding: "0.75rem 1rem", 14 + backgroundColor: "#f9fafb", 15 + borderBottom: "1px solid #e5e7eb", 16 + fontSize: "0.875rem", 17 + fontWeight: "600", 18 + color: "#374151", 19 + }} 20 + > 21 + Input 22 + </div> 23 + <div style={{ flex: 1 }}> 24 + <MonacoEditor 25 + height="100%" 26 + defaultLanguage="typescript" 27 + value={value} 28 + onChange={(value) => onChange(value || "")} 29 + theme="vs-light" 30 + options={{ 31 + minimap: { enabled: false }, 32 + fontSize: 14, 33 + lineNumbers: "on", 34 + renderLineHighlight: "all", 35 + scrollBeyondLastLine: false, 36 + automaticLayout: true, 37 + tabSize: 2, 38 + padding: { top: 16, bottom: 16 }, 39 + }} 40 + /> 41 + </div> 42 + </div> 43 + ); 44 + }
+31
packages/site/src/components/Header.tsx
··· 1 + export function Header() { 2 + return ( 3 + <header 4 + style={{ 5 + padding: "2rem 2rem 1rem 2rem", 6 + borderBottom: "1px solid #e5e7eb", 7 + }} 8 + > 9 + <div style={{ maxWidth: "1400px", margin: "0 auto" }}> 10 + <h1 11 + style={{ 12 + fontSize: "2.5rem", 13 + fontWeight: "700", 14 + marginBottom: "0.5rem", 15 + }} 16 + > 17 + <span style={{ color: "#6b7280" }}>at://</span>prototypekit 18 + </h1> 19 + <p 20 + style={{ 21 + fontSize: "1.125rem", 22 + color: "#6b7280", 23 + marginTop: "0.5rem", 24 + }} 25 + > 26 + Type-safe lexicon inference for ATProto schemas 27 + </p> 28 + </div> 29 + </header> 30 + ); 31 + }
+95
packages/site/src/components/OutputPanel.tsx
··· 1 + import { useState } from "react"; 2 + import MonacoEditor from "@monaco-editor/react"; 3 + 4 + interface OutputPanelProps { 5 + output: { 6 + json: string; 7 + typeInfo: string; 8 + error: string; 9 + }; 10 + } 11 + 12 + export function OutputPanel({ output }: OutputPanelProps) { 13 + const [activeTab, setActiveTab] = useState<"json" | "types">("json"); 14 + 15 + return ( 16 + <div style={{ flex: 1, display: "flex", flexDirection: "column" }}> 17 + <div 18 + style={{ 19 + display: "flex", 20 + backgroundColor: "#f9fafb", 21 + borderBottom: "1px solid #e5e7eb", 22 + }} 23 + > 24 + <button 25 + onClick={() => setActiveTab("json")} 26 + style={{ 27 + padding: "0.75rem 1rem", 28 + fontSize: "0.875rem", 29 + fontWeight: "600", 30 + color: activeTab === "json" ? "#1f2937" : "#6b7280", 31 + backgroundColor: activeTab === "json" ? "#ffffff" : "transparent", 32 + border: "none", 33 + borderBottom: 34 + activeTab === "json" 35 + ? "2px solid #3b82f6" 36 + : "2px solid transparent", 37 + cursor: "pointer", 38 + }} 39 + > 40 + JSON Output 41 + </button> 42 + <button 43 + onClick={() => setActiveTab("types")} 44 + style={{ 45 + padding: "0.75rem 1rem", 46 + fontSize: "0.875rem", 47 + fontWeight: "600", 48 + color: activeTab === "types" ? "#1f2937" : "#6b7280", 49 + backgroundColor: activeTab === "types" ? "#ffffff" : "transparent", 50 + border: "none", 51 + borderBottom: 52 + activeTab === "types" 53 + ? "2px solid #3b82f6" 54 + : "2px solid transparent", 55 + cursor: "pointer", 56 + }} 57 + > 58 + Type Info 59 + </button> 60 + </div> 61 + <div style={{ flex: 1 }}> 62 + {output.error ? ( 63 + <div 64 + style={{ 65 + padding: "1rem", 66 + color: "#dc2626", 67 + backgroundColor: "#fef2f2", 68 + height: "100%", 69 + overflow: "auto", 70 + }} 71 + > 72 + <strong>Error:</strong> {output.error} 73 + </div> 74 + ) : ( 75 + <MonacoEditor 76 + height="100%" 77 + defaultLanguage={activeTab === "json" ? "json" : "typescript"} 78 + value={activeTab === "json" ? output.json : output.typeInfo} 79 + theme="vs-light" 80 + options={{ 81 + readOnly: true, 82 + minimap: { enabled: false }, 83 + fontSize: 14, 84 + lineNumbers: "on", 85 + renderLineHighlight: "none", 86 + scrollBeyondLastLine: false, 87 + automaticLayout: true, 88 + padding: { top: 16, bottom: 16 }, 89 + }} 90 + /> 91 + )} 92 + </div> 93 + </div> 94 + ); 95 + }
+96
packages/site/src/components/Playground.tsx
··· 1 + import { useState, useEffect } from "react"; 2 + import { Editor } from "./Editor"; 3 + import { OutputPanel } from "./OutputPanel"; 4 + import { lx } from "prototypekit"; 5 + 6 + export function Playground() { 7 + const [code, setCode] = useState(DEFAULT_CODE); 8 + const [output, setOutput] = useState({ json: "", typeInfo: "", error: "" }); 9 + 10 + const handleCodeChange = (newCode: string) => { 11 + setCode(newCode); 12 + }; 13 + 14 + useEffect(() => { 15 + const timeoutId = setTimeout(() => { 16 + try { 17 + const AsyncFunction = async function () {}.constructor as new ( 18 + ...args: string[] 19 + ) => (...args: unknown[]) => Promise<unknown>; 20 + 21 + const wrappedCode = ` 22 + const { lx } = arguments[0]; 23 + ${code} 24 + const exports = {}; 25 + for (const key in this) { 26 + if (this.hasOwnProperty(key) && key !== 'lx') { 27 + exports[key] = this[key]; 28 + } 29 + } 30 + return Object.values(exports)[0]; 31 + `; 32 + 33 + const fn = new AsyncFunction(wrappedCode); 34 + const result = fn.call({}, { lx }); 35 + 36 + if (result && typeof result === "object" && "json" in result) { 37 + const jsonOutput = (result as { json: unknown }).json; 38 + setOutput({ 39 + json: JSON.stringify(jsonOutput, null, 2), 40 + typeInfo: "// Type inference not yet implemented in playground", 41 + error: "", 42 + }); 43 + } else { 44 + setOutput({ 45 + json: JSON.stringify(result, null, 2), 46 + typeInfo: "// Type inference not yet implemented in playground", 47 + error: "", 48 + }); 49 + } 50 + } catch (error) { 51 + setOutput({ 52 + json: "", 53 + typeInfo: "", 54 + error: error instanceof Error ? error.message : "Unknown error", 55 + }); 56 + } 57 + }, 500); 58 + 59 + return () => clearTimeout(timeoutId); 60 + }, [code]); 61 + 62 + return ( 63 + <div 64 + style={{ 65 + flex: 1, 66 + display: "flex", 67 + overflow: "hidden", 68 + }} 69 + > 70 + <div 71 + style={{ 72 + flex: 1, 73 + display: "flex", 74 + borderRight: "1px solid #e5e7eb", 75 + }} 76 + > 77 + <Editor value={code} onChange={handleCodeChange} /> 78 + </div> 79 + <div style={{ flex: 1, display: "flex" }}> 80 + <OutputPanel output={output} /> 81 + </div> 82 + </div> 83 + ); 84 + } 85 + 86 + const DEFAULT_CODE = `import { lx } from "prototypekit"; 87 + 88 + const profileNamespace = lx.namespace("app.bsky.actor.profile", { 89 + main: lx.record({ 90 + key: "self", 91 + record: lx.object({ 92 + displayName: lx.string({ maxLength: 64, maxGraphemes: 64 }), 93 + description: lx.string({ maxLength: 256, maxGraphemes: 256 }), 94 + }), 95 + }), 96 + });`;
+32
packages/site/src/index.css
··· 1 + * { 2 + box-sizing: border-box; 3 + margin: 0; 4 + padding: 0; 5 + } 6 + 7 + :root { 8 + font-family: 9 + -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", 10 + "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; 11 + line-height: 1.5; 12 + font-weight: 400; 13 + color: #213547; 14 + background-color: #ffffff; 15 + font-synthesis: none; 16 + text-rendering: optimizeLegibility; 17 + -webkit-font-smoothing: antialiased; 18 + -moz-osx-font-smoothing: grayscale; 19 + } 20 + 21 + body { 22 + margin: 0; 23 + display: flex; 24 + min-width: 320px; 25 + min-height: 100vh; 26 + } 27 + 28 + #root { 29 + width: 100%; 30 + display: flex; 31 + flex-direction: column; 32 + }
+10
packages/site/src/main.tsx
··· 1 + import { StrictMode } from "react"; 2 + import { createRoot } from "react-dom/client"; 3 + import "./index.css"; 4 + import { App } from "./App.tsx"; 5 + 6 + createRoot(document.getElementById("root")!).render( 7 + <StrictMode> 8 + <App /> 9 + </StrictMode>, 10 + );
+21
packages/site/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2020", 4 + "useDefineForClassFields": true, 5 + "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 + "module": "ESNext", 7 + "skipLibCheck": true, 8 + "moduleResolution": "bundler", 9 + "allowImportingTsExtensions": true, 10 + "isolatedModules": true, 11 + "moduleDetection": "force", 12 + "noEmit": true, 13 + "jsx": "react-jsx", 14 + "strict": true, 15 + "noUnusedLocals": true, 16 + "noUnusedParameters": true, 17 + "noFallthroughCasesInSwitch": true, 18 + "noUncheckedSideEffectImports": true 19 + }, 20 + "include": ["src"] 21 + }
+6
packages/site/vite.config.ts
··· 1 + import { defineConfig } from "vite"; 2 + import react from "@vitejs/plugin-react"; 3 + 4 + export default defineConfig({ 5 + plugins: [react()], 6 + });
+490 -1
pnpm-lock.yaml
··· 64 64 specifier: ^3.2.4 65 65 version: 3.2.4(@types/node@24.0.4)(jiti@2.6.1) 66 66 67 + packages/site: 68 + dependencies: 69 + '@monaco-editor/react': 70 + specifier: ^4.6.0 71 + version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) 72 + monaco-editor: 73 + specifier: ^0.52.2 74 + version: 0.52.2 75 + prototypekit: 76 + specifier: workspace:* 77 + version: link:../prototypekit 78 + react: 79 + specifier: ^18.3.1 80 + version: 18.3.1 81 + react-dom: 82 + specifier: ^18.3.1 83 + version: 18.3.1(react@18.3.1) 84 + devDependencies: 85 + '@types/react': 86 + specifier: ^18.3.18 87 + version: 18.3.26 88 + '@types/react-dom': 89 + specifier: ^18.3.5 90 + version: 18.3.7(@types/react@18.3.26) 91 + '@vitejs/plugin-react': 92 + specifier: ^4.3.4 93 + version: 4.7.0(vite@6.4.0(@types/node@24.0.4)(jiti@2.6.1)) 94 + typescript: 95 + specifier: 5.8.3 96 + version: 5.8.3 97 + vite: 98 + specifier: ^6.0.5 99 + version: 6.4.0(@types/node@24.0.4)(jiti@2.6.1) 100 + 67 101 packages: 68 102 69 103 '@ark/attest@0.49.0': ··· 81 115 '@ark/util@0.49.0': 82 116 resolution: {integrity: sha512-/BtnX7oCjNkxi2vi6y1399b+9xd1jnCrDYhZ61f0a+3X8x8DxlK52VgEEzyuC2UQMPACIfYrmHkhD3lGt2GaMA==} 83 117 118 + '@babel/code-frame@7.27.1': 119 + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 120 + engines: {node: '>=6.9.0'} 121 + 122 + '@babel/compat-data@7.28.4': 123 + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} 124 + engines: {node: '>=6.9.0'} 125 + 126 + '@babel/core@7.28.4': 127 + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} 128 + engines: {node: '>=6.9.0'} 129 + 84 130 '@babel/generator@7.28.3': 85 131 resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} 86 132 engines: {node: '>=6.9.0'} 87 133 134 + '@babel/helper-compilation-targets@7.27.2': 135 + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} 136 + engines: {node: '>=6.9.0'} 137 + 138 + '@babel/helper-globals@7.28.0': 139 + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} 140 + engines: {node: '>=6.9.0'} 141 + 142 + '@babel/helper-module-imports@7.27.1': 143 + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} 144 + engines: {node: '>=6.9.0'} 145 + 146 + '@babel/helper-module-transforms@7.28.3': 147 + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} 148 + engines: {node: '>=6.9.0'} 149 + peerDependencies: 150 + '@babel/core': ^7.0.0 151 + 152 + '@babel/helper-plugin-utils@7.27.1': 153 + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} 154 + engines: {node: '>=6.9.0'} 155 + 88 156 '@babel/helper-string-parser@7.27.1': 89 157 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 90 158 engines: {node: '>=6.9.0'} ··· 93 161 resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 94 162 engines: {node: '>=6.9.0'} 95 163 164 + '@babel/helper-validator-option@7.27.1': 165 + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} 166 + engines: {node: '>=6.9.0'} 167 + 168 + '@babel/helpers@7.28.4': 169 + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} 170 + engines: {node: '>=6.9.0'} 171 + 96 172 '@babel/parser@7.28.4': 97 173 resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} 98 174 engines: {node: '>=6.0.0'} 99 175 hasBin: true 100 176 177 + '@babel/plugin-transform-react-jsx-self@7.27.1': 178 + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} 179 + engines: {node: '>=6.9.0'} 180 + peerDependencies: 181 + '@babel/core': ^7.0.0-0 182 + 183 + '@babel/plugin-transform-react-jsx-source@7.27.1': 184 + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} 185 + engines: {node: '>=6.9.0'} 186 + peerDependencies: 187 + '@babel/core': ^7.0.0-0 188 + 189 + '@babel/template@7.27.2': 190 + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} 191 + engines: {node: '>=6.9.0'} 192 + 193 + '@babel/traverse@7.28.4': 194 + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} 195 + engines: {node: '>=6.9.0'} 196 + 101 197 '@babel/types@7.28.4': 102 198 resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} 103 199 engines: {node: '>=6.9.0'} ··· 328 424 '@jridgewell/gen-mapping@0.3.13': 329 425 resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 330 426 427 + '@jridgewell/remapping@2.3.5': 428 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 429 + 331 430 '@jridgewell/resolve-uri@3.1.2': 332 431 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 333 432 engines: {node: '>=6.0.0'} ··· 338 437 '@jridgewell/trace-mapping@0.3.31': 339 438 resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 340 439 440 + '@monaco-editor/loader@1.6.1': 441 + resolution: {integrity: sha512-w3tEnj9HYEC73wtjdpR089AqkUPskFRcdkxsiSFt3SoUc3OHpmu+leP94CXBm4mHfefmhsdfI0ZQu6qJ0wgtPg==} 442 + 443 + '@monaco-editor/react@4.7.0': 444 + resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} 445 + peerDependencies: 446 + monaco-editor: '>= 0.25.0 < 1' 447 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 448 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 449 + 341 450 '@napi-rs/wasm-runtime@0.2.12': 342 451 resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} 343 452 ··· 430 539 431 540 '@rolldown/pluginutils@1.0.0-beta.11-commit.f051675': 432 541 resolution: {integrity: sha512-TAqMYehvpauLKz7v4TZOTUQNjxa5bUQWw2+51/+Zk3ItclBxgoSWhnZ31sXjdoX6le6OXdK2vZfV3KoyW/O/GA==} 542 + 543 + '@rolldown/pluginutils@1.0.0-beta.27': 544 + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} 433 545 434 546 '@rollup/rollup-android-arm-eabi@4.52.4': 435 547 resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} ··· 544 656 '@tybys/wasm-util@0.10.1': 545 657 resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} 546 658 659 + '@types/babel__core@7.20.5': 660 + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 661 + 662 + '@types/babel__generator@7.27.0': 663 + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} 664 + 665 + '@types/babel__template@7.4.4': 666 + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 667 + 668 + '@types/babel__traverse@7.28.0': 669 + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 670 + 547 671 '@types/chai@5.2.2': 548 672 resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} 549 673 ··· 558 682 559 683 '@types/node@24.0.4': 560 684 resolution: {integrity: sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==} 685 + 686 + '@types/prop-types@15.7.15': 687 + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} 688 + 689 + '@types/react-dom@18.3.7': 690 + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} 691 + peerDependencies: 692 + '@types/react': ^18.0.0 693 + 694 + '@types/react@18.3.26': 695 + resolution: {integrity: sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==} 561 696 562 697 '@typescript-eslint/eslint-plugin@8.35.0': 563 698 resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==} ··· 627 762 peerDependencies: 628 763 typescript: '*' 629 764 765 + '@vitejs/plugin-react@4.7.0': 766 + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} 767 + engines: {node: ^14.18.0 || >=16.0.0} 768 + peerDependencies: 769 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 770 + 630 771 '@vitest/expect@3.2.4': 631 772 resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} 632 773 ··· 698 839 balanced-match@1.0.2: 699 840 resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 700 841 842 + baseline-browser-mapping@2.8.18: 843 + resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==} 844 + hasBin: true 845 + 701 846 birpc@2.6.1: 702 847 resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==} 703 848 ··· 711 856 resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 712 857 engines: {node: '>=8'} 713 858 859 + browserslist@4.26.3: 860 + resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} 861 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 862 + hasBin: true 863 + 714 864 cac@6.7.14: 715 865 resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 716 866 engines: {node: '>=8'} ··· 718 868 callsites@3.1.0: 719 869 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 720 870 engines: {node: '>=6'} 871 + 872 + caniuse-lite@1.0.30001751: 873 + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} 721 874 722 875 chai@5.3.3: 723 876 resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} ··· 748 901 concat-map@0.0.1: 749 902 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 750 903 904 + convert-source-map@2.0.0: 905 + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 906 + 751 907 cross-spawn@7.0.6: 752 908 resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 753 909 engines: {node: '>= 8'} 910 + 911 + csstype@3.1.3: 912 + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 754 913 755 914 debug@4.4.3: 756 915 resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} ··· 783 942 peerDependenciesMeta: 784 943 oxc-resolver: 785 944 optional: true 945 + 946 + electron-to-chromium@1.5.237: 947 + resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} 786 948 787 949 emoji-regex@8.0.0: 788 950 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} ··· 909 1071 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 910 1072 os: [darwin] 911 1073 1074 + gensync@1.0.0-beta.2: 1075 + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1076 + engines: {node: '>=6.9.0'} 1077 + 912 1078 get-caller-file@2.0.5: 913 1079 resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 914 1080 engines: {node: 6.* || 8.* || >= 10.*} ··· 980 1146 resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 981 1147 hasBin: true 982 1148 1149 + js-tokens@4.0.0: 1150 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1151 + 983 1152 js-tokens@9.0.1: 984 1153 resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 985 1154 ··· 1001 1170 json-stable-stringify-without-jsonify@1.0.1: 1002 1171 resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1003 1172 1173 + json5@2.2.3: 1174 + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1175 + engines: {node: '>=6'} 1176 + hasBin: true 1177 + 1004 1178 jsonparse@1.3.1: 1005 1179 resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} 1006 1180 engines: {'0': node >= 0.2.0} ··· 1023 1197 1024 1198 lodash.merge@4.6.2: 1025 1199 resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1200 + 1201 + loose-envify@1.4.0: 1202 + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1203 + hasBin: true 1026 1204 1027 1205 loupe@3.2.1: 1028 1206 resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} 1029 1207 1208 + lru-cache@5.1.1: 1209 + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1210 + 1030 1211 magic-string@0.30.19: 1031 1212 resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} 1032 1213 ··· 1048 1229 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1049 1230 engines: {node: '>=16 || 14 >=14.17'} 1050 1231 1232 + monaco-editor@0.52.2: 1233 + resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} 1234 + 1051 1235 mri@1.2.0: 1052 1236 resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1053 1237 engines: {node: '>=4'} ··· 1063 1247 natural-compare@1.4.0: 1064 1248 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1065 1249 1250 + node-releases@2.0.25: 1251 + resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} 1252 + 1066 1253 optionator@0.9.4: 1067 1254 resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1068 1255 engines: {node: '>= 0.8.0'} ··· 1133 1320 queue-microtask@1.2.3: 1134 1321 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1135 1322 1323 + react-dom@18.3.1: 1324 + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 1325 + peerDependencies: 1326 + react: ^18.3.1 1327 + 1328 + react-refresh@0.17.0: 1329 + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} 1330 + engines: {node: '>=0.10.0'} 1331 + 1332 + react@18.3.1: 1333 + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 1334 + engines: {node: '>=0.10.0'} 1335 + 1136 1336 readable-stream@3.6.2: 1137 1337 resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1138 1338 engines: {node: '>= 6'} ··· 1191 1391 safe-buffer@5.2.1: 1192 1392 resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1193 1393 1394 + scheduler@0.23.2: 1395 + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 1396 + 1397 + semver@6.3.1: 1398 + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1399 + hasBin: true 1400 + 1194 1401 semver@7.7.3: 1195 1402 resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 1196 1403 engines: {node: '>=10'} ··· 1216 1423 1217 1424 stackback@0.0.2: 1218 1425 resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1426 + 1427 + state-local@1.0.7: 1428 + resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} 1219 1429 1220 1430 std-env@3.9.0: 1221 1431 resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} ··· 1330 1540 1331 1541 undici-types@7.8.0: 1332 1542 resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} 1543 + 1544 + update-browserslist-db@1.1.3: 1545 + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1546 + hasBin: true 1547 + peerDependencies: 1548 + browserslist: '>= 4.21.0' 1333 1549 1334 1550 uri-js@4.4.1: 1335 1551 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} ··· 1342 1558 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1343 1559 hasBin: true 1344 1560 1561 + vite@6.4.0: 1562 + resolution: {integrity: sha512-oLnWs9Hak/LOlKjeSpOwD6JMks8BeICEdYMJBf6P4Lac/pO9tKiv/XhXnAM7nNfSkZahjlCZu9sS50zL8fSnsw==} 1563 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1564 + hasBin: true 1565 + peerDependencies: 1566 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1567 + jiti: '>=1.21.0' 1568 + less: '*' 1569 + lightningcss: ^1.21.0 1570 + sass: '*' 1571 + sass-embedded: '*' 1572 + stylus: '*' 1573 + sugarss: '*' 1574 + terser: ^5.16.0 1575 + tsx: ^4.8.1 1576 + yaml: ^2.4.2 1577 + peerDependenciesMeta: 1578 + '@types/node': 1579 + optional: true 1580 + jiti: 1581 + optional: true 1582 + less: 1583 + optional: true 1584 + lightningcss: 1585 + optional: true 1586 + sass: 1587 + optional: true 1588 + sass-embedded: 1589 + optional: true 1590 + stylus: 1591 + optional: true 1592 + sugarss: 1593 + optional: true 1594 + terser: 1595 + optional: true 1596 + tsx: 1597 + optional: true 1598 + yaml: 1599 + optional: true 1600 + 1345 1601 vite@7.1.9: 1346 1602 resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==} 1347 1603 engines: {node: ^20.19.0 || >=22.12.0} ··· 1432 1688 resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1433 1689 engines: {node: '>=10'} 1434 1690 1691 + yallist@3.1.1: 1692 + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1693 + 1435 1694 yargs-parser@20.2.9: 1436 1695 resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1437 1696 engines: {node: '>=10'} ··· 1467 1726 1468 1727 '@ark/util@0.49.0': {} 1469 1728 1729 + '@babel/code-frame@7.27.1': 1730 + dependencies: 1731 + '@babel/helper-validator-identifier': 7.27.1 1732 + js-tokens: 4.0.0 1733 + picocolors: 1.1.1 1734 + 1735 + '@babel/compat-data@7.28.4': {} 1736 + 1737 + '@babel/core@7.28.4': 1738 + dependencies: 1739 + '@babel/code-frame': 7.27.1 1740 + '@babel/generator': 7.28.3 1741 + '@babel/helper-compilation-targets': 7.27.2 1742 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) 1743 + '@babel/helpers': 7.28.4 1744 + '@babel/parser': 7.28.4 1745 + '@babel/template': 7.27.2 1746 + '@babel/traverse': 7.28.4 1747 + '@babel/types': 7.28.4 1748 + '@jridgewell/remapping': 2.3.5 1749 + convert-source-map: 2.0.0 1750 + debug: 4.4.3 1751 + gensync: 1.0.0-beta.2 1752 + json5: 2.2.3 1753 + semver: 6.3.1 1754 + transitivePeerDependencies: 1755 + - supports-color 1756 + 1470 1757 '@babel/generator@7.28.3': 1471 1758 dependencies: 1472 1759 '@babel/parser': 7.28.4 ··· 1475 1762 '@jridgewell/trace-mapping': 0.3.31 1476 1763 jsesc: 3.1.0 1477 1764 1765 + '@babel/helper-compilation-targets@7.27.2': 1766 + dependencies: 1767 + '@babel/compat-data': 7.28.4 1768 + '@babel/helper-validator-option': 7.27.1 1769 + browserslist: 4.26.3 1770 + lru-cache: 5.1.1 1771 + semver: 6.3.1 1772 + 1773 + '@babel/helper-globals@7.28.0': {} 1774 + 1775 + '@babel/helper-module-imports@7.27.1': 1776 + dependencies: 1777 + '@babel/traverse': 7.28.4 1778 + '@babel/types': 7.28.4 1779 + transitivePeerDependencies: 1780 + - supports-color 1781 + 1782 + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': 1783 + dependencies: 1784 + '@babel/core': 7.28.4 1785 + '@babel/helper-module-imports': 7.27.1 1786 + '@babel/helper-validator-identifier': 7.27.1 1787 + '@babel/traverse': 7.28.4 1788 + transitivePeerDependencies: 1789 + - supports-color 1790 + 1791 + '@babel/helper-plugin-utils@7.27.1': {} 1792 + 1478 1793 '@babel/helper-string-parser@7.27.1': {} 1479 1794 1480 1795 '@babel/helper-validator-identifier@7.27.1': {} 1481 1796 1797 + '@babel/helper-validator-option@7.27.1': {} 1798 + 1799 + '@babel/helpers@7.28.4': 1800 + dependencies: 1801 + '@babel/template': 7.27.2 1802 + '@babel/types': 7.28.4 1803 + 1482 1804 '@babel/parser@7.28.4': 1483 1805 dependencies: 1484 1806 '@babel/types': 7.28.4 1485 1807 1808 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': 1809 + dependencies: 1810 + '@babel/core': 7.28.4 1811 + '@babel/helper-plugin-utils': 7.27.1 1812 + 1813 + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': 1814 + dependencies: 1815 + '@babel/core': 7.28.4 1816 + '@babel/helper-plugin-utils': 7.27.1 1817 + 1818 + '@babel/template@7.27.2': 1819 + dependencies: 1820 + '@babel/code-frame': 7.27.1 1821 + '@babel/parser': 7.28.4 1822 + '@babel/types': 7.28.4 1823 + 1824 + '@babel/traverse@7.28.4': 1825 + dependencies: 1826 + '@babel/code-frame': 7.27.1 1827 + '@babel/generator': 7.28.3 1828 + '@babel/helper-globals': 7.28.0 1829 + '@babel/parser': 7.28.4 1830 + '@babel/template': 7.27.2 1831 + '@babel/types': 7.28.4 1832 + debug: 4.4.3 1833 + transitivePeerDependencies: 1834 + - supports-color 1835 + 1486 1836 '@babel/types@7.28.4': 1487 1837 dependencies: 1488 1838 '@babel/helper-string-parser': 7.27.1 ··· 1646 1996 '@jridgewell/sourcemap-codec': 1.5.5 1647 1997 '@jridgewell/trace-mapping': 0.3.31 1648 1998 1999 + '@jridgewell/remapping@2.3.5': 2000 + dependencies: 2001 + '@jridgewell/gen-mapping': 0.3.13 2002 + '@jridgewell/trace-mapping': 0.3.31 2003 + 1649 2004 '@jridgewell/resolve-uri@3.1.2': {} 1650 2005 1651 2006 '@jridgewell/sourcemap-codec@1.5.5': {} ··· 1655 2010 '@jridgewell/resolve-uri': 3.1.2 1656 2011 '@jridgewell/sourcemap-codec': 1.5.5 1657 2012 2013 + '@monaco-editor/loader@1.6.1': 2014 + dependencies: 2015 + state-local: 1.0.7 2016 + 2017 + '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': 2018 + dependencies: 2019 + '@monaco-editor/loader': 1.6.1 2020 + monaco-editor: 0.52.2 2021 + react: 18.3.1 2022 + react-dom: 18.3.1(react@18.3.1) 2023 + 1658 2024 '@napi-rs/wasm-runtime@0.2.12': 1659 2025 dependencies: 1660 2026 '@emnapi/core': 1.5.0 ··· 1727 2093 1728 2094 '@rolldown/pluginutils@1.0.0-beta.11-commit.f051675': {} 1729 2095 2096 + '@rolldown/pluginutils@1.0.0-beta.27': {} 2097 + 1730 2098 '@rollup/rollup-android-arm-eabi@4.52.4': 1731 2099 optional: true 1732 2100 ··· 1798 2166 tslib: 2.8.1 1799 2167 optional: true 1800 2168 2169 + '@types/babel__core@7.20.5': 2170 + dependencies: 2171 + '@babel/parser': 7.28.4 2172 + '@babel/types': 7.28.4 2173 + '@types/babel__generator': 7.27.0 2174 + '@types/babel__template': 7.4.4 2175 + '@types/babel__traverse': 7.28.0 2176 + 2177 + '@types/babel__generator@7.27.0': 2178 + dependencies: 2179 + '@babel/types': 7.28.4 2180 + 2181 + '@types/babel__template@7.4.4': 2182 + dependencies: 2183 + '@babel/parser': 7.28.4 2184 + '@babel/types': 7.28.4 2185 + 2186 + '@types/babel__traverse@7.28.0': 2187 + dependencies: 2188 + '@babel/types': 7.28.4 2189 + 1801 2190 '@types/chai@5.2.2': 1802 2191 dependencies: 1803 2192 '@types/deep-eql': 4.0.2 ··· 1811 2200 '@types/node@24.0.4': 1812 2201 dependencies: 1813 2202 undici-types: 7.8.0 2203 + 2204 + '@types/prop-types@15.7.15': {} 2205 + 2206 + '@types/react-dom@18.3.7(@types/react@18.3.26)': 2207 + dependencies: 2208 + '@types/react': 18.3.26 2209 + 2210 + '@types/react@18.3.26': 2211 + dependencies: 2212 + '@types/prop-types': 15.7.15 2213 + csstype: 3.1.3 1814 2214 1815 2215 '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.29.0(jiti@2.6.1))(typescript@5.8.3)': 1816 2216 dependencies: ··· 1922 2322 transitivePeerDependencies: 1923 2323 - supports-color 1924 2324 2325 + '@vitejs/plugin-react@4.7.0(vite@6.4.0(@types/node@24.0.4)(jiti@2.6.1))': 2326 + dependencies: 2327 + '@babel/core': 7.28.4 2328 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) 2329 + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) 2330 + '@rolldown/pluginutils': 1.0.0-beta.27 2331 + '@types/babel__core': 7.20.5 2332 + react-refresh: 0.17.0 2333 + vite: 6.4.0(@types/node@24.0.4)(jiti@2.6.1) 2334 + transitivePeerDependencies: 2335 + - supports-color 2336 + 1925 2337 '@vitest/expect@3.2.4': 1926 2338 dependencies: 1927 2339 '@types/chai': 5.2.2 ··· 2001 2413 2002 2414 balanced-match@1.0.2: {} 2003 2415 2416 + baseline-browser-mapping@2.8.18: {} 2417 + 2004 2418 birpc@2.6.1: {} 2005 2419 2006 2420 brace-expansion@1.1.12: ··· 2016 2430 dependencies: 2017 2431 fill-range: 7.1.1 2018 2432 2433 + browserslist@4.26.3: 2434 + dependencies: 2435 + baseline-browser-mapping: 2.8.18 2436 + caniuse-lite: 1.0.30001751 2437 + electron-to-chromium: 1.5.237 2438 + node-releases: 2.0.25 2439 + update-browserslist-db: 1.1.3(browserslist@4.26.3) 2440 + 2019 2441 cac@6.7.14: {} 2020 2442 2021 2443 callsites@3.1.0: {} 2022 2444 2445 + caniuse-lite@1.0.30001751: {} 2446 + 2023 2447 chai@5.3.3: 2024 2448 dependencies: 2025 2449 assertion-error: 2.0.1 ··· 2053 2477 2054 2478 concat-map@0.0.1: {} 2055 2479 2480 + convert-source-map@2.0.0: {} 2481 + 2056 2482 cross-spawn@7.0.6: 2057 2483 dependencies: 2058 2484 path-key: 3.1.1 2059 2485 shebang-command: 2.0.0 2060 2486 which: 2.0.2 2487 + 2488 + csstype@3.1.3: {} 2061 2489 2062 2490 debug@4.4.3: 2063 2491 dependencies: ··· 2072 2500 diff@8.0.2: {} 2073 2501 2074 2502 dts-resolver@2.1.2: {} 2503 + 2504 + electron-to-chromium@1.5.237: {} 2075 2505 2076 2506 emoji-regex@8.0.0: {} 2077 2507 ··· 2234 2664 fsevents@2.3.3: 2235 2665 optional: true 2236 2666 2667 + gensync@1.0.0-beta.2: {} 2668 + 2237 2669 get-caller-file@2.0.5: {} 2238 2670 2239 2671 get-tsconfig@4.12.0: ··· 2283 2715 2284 2716 jiti@2.6.1: {} 2285 2717 2718 + js-tokens@4.0.0: {} 2719 + 2286 2720 js-tokens@9.0.1: {} 2287 2721 2288 2722 js-yaml@4.1.0: ··· 2296 2730 json-schema-traverse@0.4.1: {} 2297 2731 2298 2732 json-stable-stringify-without-jsonify@1.0.1: {} 2733 + 2734 + json5@2.2.3: {} 2299 2735 2300 2736 jsonparse@1.3.1: {} 2301 2737 ··· 2319 2755 2320 2756 lodash.merge@4.6.2: {} 2321 2757 2758 + loose-envify@1.4.0: 2759 + dependencies: 2760 + js-tokens: 4.0.0 2761 + 2322 2762 loupe@3.2.1: {} 2763 + 2764 + lru-cache@5.1.1: 2765 + dependencies: 2766 + yallist: 3.1.1 2323 2767 2324 2768 magic-string@0.30.19: 2325 2769 dependencies: ··· 2341 2785 minimatch@9.0.5: 2342 2786 dependencies: 2343 2787 brace-expansion: 2.0.2 2788 + 2789 + monaco-editor@0.52.2: {} 2344 2790 2345 2791 mri@1.2.0: {} 2346 2792 ··· 2350 2796 2351 2797 natural-compare@1.4.0: {} 2352 2798 2799 + node-releases@2.0.25: {} 2800 + 2353 2801 optionator@0.9.4: 2354 2802 dependencies: 2355 2803 deep-is: 0.1.4 ··· 2402 2850 quansync@0.2.11: {} 2403 2851 2404 2852 queue-microtask@1.2.3: {} 2853 + 2854 + react-dom@18.3.1(react@18.3.1): 2855 + dependencies: 2856 + loose-envify: 1.4.0 2857 + react: 18.3.1 2858 + scheduler: 0.23.2 2859 + 2860 + react-refresh@0.17.0: {} 2861 + 2862 + react@18.3.1: 2863 + dependencies: 2864 + loose-envify: 1.4.0 2405 2865 2406 2866 readable-stream@3.6.2: 2407 2867 dependencies: ··· 2494 2954 2495 2955 safe-buffer@5.2.1: {} 2496 2956 2957 + scheduler@0.23.2: 2958 + dependencies: 2959 + loose-envify: 1.4.0 2960 + 2961 + semver@6.3.1: {} 2962 + 2497 2963 semver@7.7.3: {} 2498 2964 2499 2965 shebang-command@2.0.0: ··· 2511 2977 readable-stream: 3.6.2 2512 2978 2513 2979 stackback@0.0.2: {} 2980 + 2981 + state-local@1.0.7: {} 2514 2982 2515 2983 std-env@3.9.0: {} 2516 2984 ··· 2620 3088 2621 3089 undici-types@7.8.0: {} 2622 3090 3091 + update-browserslist-db@1.1.3(browserslist@4.26.3): 3092 + dependencies: 3093 + browserslist: 4.26.3 3094 + escalade: 3.2.0 3095 + picocolors: 1.1.1 3096 + 2623 3097 uri-js@4.4.1: 2624 3098 dependencies: 2625 3099 punycode: 2.3.1 ··· 2632 3106 debug: 4.4.3 2633 3107 es-module-lexer: 1.7.0 2634 3108 pathe: 2.0.3 2635 - vite: 7.1.9(@types/node@24.0.4)(jiti@2.6.1) 3109 + vite: 6.4.0(@types/node@24.0.4)(jiti@2.6.1) 2636 3110 transitivePeerDependencies: 2637 3111 - '@types/node' 2638 3112 - jiti ··· 2647 3121 - tsx 2648 3122 - yaml 2649 3123 3124 + vite@6.4.0(@types/node@24.0.4)(jiti@2.6.1): 3125 + dependencies: 3126 + esbuild: 0.25.10 3127 + fdir: 6.5.0(picomatch@4.0.3) 3128 + picomatch: 4.0.3 3129 + postcss: 8.5.6 3130 + rollup: 4.52.4 3131 + tinyglobby: 0.2.15 3132 + optionalDependencies: 3133 + '@types/node': 24.0.4 3134 + fsevents: 2.3.3 3135 + jiti: 2.6.1 3136 + 2650 3137 vite@7.1.9(@types/node@24.0.4)(jiti@2.6.1): 2651 3138 dependencies: 2652 3139 esbuild: 0.25.10 ··· 2719 3206 strip-ansi: 6.0.1 2720 3207 2721 3208 y18n@5.0.8: {} 3209 + 3210 + yallist@3.1.1: {} 2722 3211 2723 3212 yargs-parser@20.2.9: {} 2724 3213