diff --git a/aevatar.slnx b/aevatar.slnx index e18e03e21..216bbcbda 100644 --- a/aevatar.slnx +++ b/aevatar.slnx @@ -26,6 +26,7 @@ + @@ -166,6 +167,7 @@ + diff --git a/demos/Aevatar.Demos.Inspector.Web/index.html b/demos/Aevatar.Demos.Inspector.Web/index.html new file mode 100644 index 000000000..0681d87c5 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector.Web/index.html @@ -0,0 +1,12 @@ + + + + + + Aevatar Inspector + + +
+ + + diff --git a/demos/Aevatar.Demos.Inspector.Web/package.json b/demos/Aevatar.Demos.Inspector.Web/package.json new file mode 100644 index 000000000..c01390a05 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector.Web/package.json @@ -0,0 +1,22 @@ +{ + "name": "aevatar-inspector-web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build --outDir ../Aevatar.Demos.Inspector/wwwroot", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "typescript": "^5.5.3", + "vite": "^5.4.1" + } +} diff --git a/demos/Aevatar.Demos.Inspector.Web/pnpm-lock.yaml b/demos/Aevatar.Demos.Inspector.Web/pnpm-lock.yaml new file mode 100644 index 000000000..107d93666 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector.Web/pnpm-lock.yaml @@ -0,0 +1,1082 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/react': + specifier: ^18.3.3 + version: 18.3.28 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.7(@types/react@18.3.28) + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.7.0(vite@5.4.21) + typescript: + specifier: ^5.5.3 + version: 5.9.3 + vite: + specifier: ^5.4.1 + version: 5.4.21 + +packages: + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.3': + resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + + '@rollup/rollup-android-arm-eabi@4.60.3': + resolution: {integrity: sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.60.3': + resolution: {integrity: sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.60.3': + resolution: {integrity: sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.60.3': + resolution: {integrity: sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.60.3': + resolution: {integrity: sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.60.3': + resolution: {integrity: sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.60.3': + resolution: {integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.60.3': + resolution: {integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.60.3': + resolution: {integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.60.3': + resolution: {integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.60.3': + resolution: {integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.60.3': + resolution: {integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.60.3': + resolution: {integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.60.3': + resolution: {integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.60.3': + resolution: {integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.60.3': + resolution: {integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.60.3': + resolution: {integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.60.3': + resolution: {integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.60.3': + resolution: {integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.60.3': + resolution: {integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.60.3': + resolution: {integrity: sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.60.3': + resolution: {integrity: sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.60.3': + resolution: {integrity: sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.60.3': + resolution: {integrity: sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.60.3': + resolution: {integrity: sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==} + cpu: [x64] + os: [win32] + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} + peerDependencies: + '@types/react': ^18.0.0 + + '@types/react@18.3.28': + resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} + + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + baseline-browser-mapping@2.10.29: + resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + caniuse-lite@1.0.30001792: + resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + electron-to-chromium@1.5.353: + resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-releases@2.0.38: + resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + engines: {node: ^10 || ^12 || >=14} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + rollup@4.60.3: + resolution: {integrity: sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + +snapshots: + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.3': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.3 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.29.2': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@rolldown/pluginutils@1.0.0-beta.27': {} + + '@rollup/rollup-android-arm-eabi@4.60.3': + optional: true + + '@rollup/rollup-android-arm64@4.60.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.60.3': + optional: true + + '@rollup/rollup-darwin-x64@4.60.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.60.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.60.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.60.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.60.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.60.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.60.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.60.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.60.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.60.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.60.3': + optional: true + + '@rollup/rollup-openbsd-x64@4.60.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.60.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.60.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.60.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.60.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.60.3': + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/estree@1.0.8': {} + + '@types/prop-types@15.7.15': {} + + '@types/react-dom@18.3.7(@types/react@18.3.28)': + dependencies: + '@types/react': 18.3.28 + + '@types/react@18.3.28': + dependencies: + '@types/prop-types': 15.7.15 + csstype: 3.2.3 + + '@vitejs/plugin-react@4.7.0(vite@5.4.21)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 5.4.21 + transitivePeerDependencies: + - supports-color + + baseline-browser-mapping@2.10.29: {} + + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.29 + caniuse-lite: 1.0.30001792 + electron-to-chromium: 1.5.353 + node-releases: 2.0.38 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + + caniuse-lite@1.0.30001792: {} + + convert-source-map@2.0.0: {} + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + electron-to-chromium@1.5.353: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + js-tokens@4.0.0: {} + + jsesc@3.1.0: {} + + json5@2.2.3: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + ms@2.1.3: {} + + nanoid@3.3.12: {} + + node-releases@2.0.38: {} + + picocolors@1.1.1: {} + + postcss@8.5.14: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-refresh@0.17.0: {} + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + rollup@4.60.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.60.3 + '@rollup/rollup-android-arm64': 4.60.3 + '@rollup/rollup-darwin-arm64': 4.60.3 + '@rollup/rollup-darwin-x64': 4.60.3 + '@rollup/rollup-freebsd-arm64': 4.60.3 + '@rollup/rollup-freebsd-x64': 4.60.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.3 + '@rollup/rollup-linux-arm-musleabihf': 4.60.3 + '@rollup/rollup-linux-arm64-gnu': 4.60.3 + '@rollup/rollup-linux-arm64-musl': 4.60.3 + '@rollup/rollup-linux-loong64-gnu': 4.60.3 + '@rollup/rollup-linux-loong64-musl': 4.60.3 + '@rollup/rollup-linux-ppc64-gnu': 4.60.3 + '@rollup/rollup-linux-ppc64-musl': 4.60.3 + '@rollup/rollup-linux-riscv64-gnu': 4.60.3 + '@rollup/rollup-linux-riscv64-musl': 4.60.3 + '@rollup/rollup-linux-s390x-gnu': 4.60.3 + '@rollup/rollup-linux-x64-gnu': 4.60.3 + '@rollup/rollup-linux-x64-musl': 4.60.3 + '@rollup/rollup-openbsd-x64': 4.60.3 + '@rollup/rollup-openharmony-arm64': 4.60.3 + '@rollup/rollup-win32-arm64-msvc': 4.60.3 + '@rollup/rollup-win32-ia32-msvc': 4.60.3 + '@rollup/rollup-win32-x64-gnu': 4.60.3 + '@rollup/rollup-win32-x64-msvc': 4.60.3 + fsevents: 2.3.3 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.1: {} + + source-map-js@1.2.1: {} + + typescript@5.9.3: {} + + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + vite@5.4.21: + dependencies: + esbuild: 0.21.5 + postcss: 8.5.14 + rollup: 4.60.3 + optionalDependencies: + fsevents: 2.3.3 + + yallist@3.1.1: {} diff --git a/demos/Aevatar.Demos.Inspector.Web/src/main.tsx b/demos/Aevatar.Demos.Inspector.Web/src/main.tsx new file mode 100644 index 000000000..d694eaa64 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector.Web/src/main.tsx @@ -0,0 +1,178 @@ +import React from 'react' +import { createRoot } from 'react-dom/client' +import './styles.css' + +type ActorGroup = { + type: string + actorIds: string[] + count: number +} + +type ActorItem = { + actorId: string + type: string +} + +type WorkflowRun = { + actorId: string + workflowName: string + status: string + totalSteps: number + completedSteps: number +} + +type ReadModelSummary = { + name: string + latestStateVersion?: number +} + +type TelemetryFrame = { + name: string + traceId: string + tags?: Record +} + +const AgentIdTag = 'aevatar.agent.id' +const AgentParentTag = 'aevatar.agent.parent' + +function App() { + const [actors, setActors] = React.useState([]) + const [workflows, setWorkflows] = React.useState([]) + const [readmodels, setReadmodels] = React.useState([]) + const [events, setEvents] = React.useState([]) + const [filter, setFilter] = React.useState('') + const [selected, setSelected] = React.useState(null) + const [hovered, setHovered] = React.useState(null) + const [activeActors, setActiveActors] = React.useState>({}) + const [live, setLive] = React.useState(false) + + const pulseActors = React.useCallback((frame: TelemetryFrame) => { + const actorIds = [ + frame.tags?.[AgentIdTag], + frame.tags?.[AgentParentTag], + ].filter((actorId): actorId is string => Boolean(actorId)) + if (actorIds.length === 0) return + + const expiresAt = Date.now() + 1200 + setActiveActors((current) => ({ + ...current, + ...Object.fromEntries(actorIds.map((actorId) => [actorId, expiresAt])), + })) + + window.setTimeout(() => { + const now = Date.now() + setActiveActors((current) => Object.fromEntries( + Object.entries(current).filter(([, expires]) => expires > now) + )) + }, 1300) + }, []) + + const refresh = React.useCallback(async () => { + const [actorResponse, workflowResponse, readmodelResponse] = await Promise.all([ + fetch('/api/inspector/actors').then((r) => r.json()), + fetch('/api/inspector/workflow-runs').then((r) => r.json()), + fetch('/api/inspector/readmodels').then((r) => r.json()), + ]) + setActors((actorResponse.groups as ActorGroup[] ?? []).flatMap((group) => + group.actorIds.map((actorId) => ({ actorId, type: group.type })) + )) + setWorkflows(workflowResponse) + setReadmodels(readmodelResponse) + }, []) + + React.useEffect(() => { + refresh() + const interval = window.setInterval(refresh, 5000) + const source = new EventSource('/api/inspector/events') + source.onopen = () => setLive(true) + source.onerror = () => setLive(false) + source.addEventListener('activity', (event) => { + const frame = JSON.parse(event.data) as TelemetryFrame + pulseActors(frame) + setEvents((current) => [frame, ...current].slice(0, 24)) + }) + return () => { + window.clearInterval(interval) + source.close() + } + }, [pulseActors, refresh]) + + const visible = actors.filter((actor) => + actor.actorId.toLowerCase().includes(filter.toLowerCase()) || + actor.type.toLowerCase().includes(filter.toLowerCase())) + const selectedActor = actors.find((actor) => actor.actorId === selected) + + return ( +
+
+
+

Aevatar Inspector

+

{live ? 'Live' : 'Disconnected'}

+
+ setFilter(e.target.value)} placeholder="agent type or id" /> + +
+
+ +
+ {visible.map((actor, index) => ( +
setHovered(actor.actorId)} + onMouseLeave={() => setHovered(null)} + > + + {actor.actorId} +
+ ))} +
+ +
+
+
+
Workflow Runs
+ {workflows.map((run) =>

{run.workflowName || 'unknown'} · {run.status}

)} +
+
+
ReadModels
+ {readmodels.map((model) =>

{model.name} v{model.latestStateVersion ?? 0}

)} +
+
+
+ ) +} + +createRoot(document.getElementById('root')!).render() diff --git a/demos/Aevatar.Demos.Inspector.Web/src/styles.css b/demos/Aevatar.Demos.Inspector.Web/src/styles.css new file mode 100644 index 000000000..cb4b598ab --- /dev/null +++ b/demos/Aevatar.Demos.Inspector.Web/src/styles.css @@ -0,0 +1,161 @@ +:root { + background: #0E0F12; + color: #C8CED4; + font-family: "JetBrains Mono", "SFMono-Regular", Menlo, Consolas, monospace; +} + +body { + margin: 0; + min-width: 1280px; +} + +.topbar { + height: 72px; + display: grid; + grid-template-columns: 1fr 280px auto; + gap: 14px; + align-items: center; + padding: 0 18px; + border-bottom: 1px solid #2A2D32; +} + +h1 { + margin: 0; + font-size: 18px; +} + +p { + margin: 6px 0; + color: #8A929B; +} + +input, +button { + height: 34px; + border: 1px solid #2A2D32; + border-radius: 3px; + background: #101216; + color: #C8CED4; + font: inherit; +} + +button { + color: #E89E5B; + cursor: pointer; +} + +.grid { + display: grid; + grid-template-columns: 300px 1fr 340px; + min-height: calc(100vh - 224px); +} + +aside, +footer section { + background: #15171B; + padding: 16px; + border-right: 1px solid #2A2D32; +} + +.label { + color: #8A929B; + font-size: 11px; + text-transform: uppercase; +} + +.actor { + width: 100%; + display: flex; + justify-content: space-between; + margin-top: 8px; + padding: 0 8px; + transition: border-color 140ms ease, background 140ms ease, color 140ms ease; +} + +.actor.is-hovered, +.actor.is-selected, +.actor.is-active { + border-color: #5B6E78; + background: #1B2026; +} + +.actor.is-active { + color: #F4BE7D; +} + +.canvas { + position: relative; + overflow: hidden; +} + +.node { + position: absolute; + display: flex; + align-items: center; + gap: 8px; + color: #C8CED4; + transition: color 140ms ease, transform 140ms ease; +} + +.node span { + width: 22px; + height: 22px; + border-radius: 50%; + background: #3B4A52; + border: 1px solid #5B6E78; + transition: background 140ms ease, border-color 140ms ease, box-shadow 140ms ease; +} + +.node.is-hovered, +.node.is-selected { + color: #F4BE7D; + transform: translateY(-1px); +} + +.node.is-hovered span, +.node.is-selected span { + border-color: #E89E5B; + box-shadow: 0 0 0 4px rgb(232 158 91 / 12%); +} + +.node.is-active span { + animation: node-pulse 900ms ease-out; + background: #4E645C; + border-color: #7EB78A; +} + +.event { + border: 1px solid #2A2D32; + border-radius: 3px; + padding: 8px; +} + +footer { + height: 152px; + display: grid; + grid-template-columns: 1fr 360px; + border-top: 1px solid #2A2D32; +} + +.ok { + color: #7EB78A; +} + +.bad { + color: #D16B6B; +} + +@keyframes node-pulse { + 0% { + box-shadow: 0 0 0 0 rgb(126 183 138 / 46%); + transform: scale(1); + } + 70% { + box-shadow: 0 0 0 14px rgb(126 183 138 / 0%); + transform: scale(1.12); + } + 100% { + box-shadow: 0 0 0 0 rgb(126 183 138 / 0%); + transform: scale(1); + } +} diff --git a/demos/Aevatar.Demos.Inspector.Web/tsconfig.json b/demos/Aevatar.Demos.Inspector.Web/tsconfig.json new file mode 100644 index 000000000..8c69ba7c7 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector.Web/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ES2020"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"], + "references": [] +} diff --git a/demos/Aevatar.Demos.Inspector.Web/tsconfig.tsbuildinfo b/demos/Aevatar.Demos.Inspector.Web/tsconfig.tsbuildinfo new file mode 100644 index 000000000..d682d0964 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector.Web/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/main.tsx"],"version":"5.9.3"} \ No newline at end of file diff --git a/demos/Aevatar.Demos.Inspector.Web/vite.config.ts b/demos/Aevatar.Demos.Inspector.Web/vite.config.ts new file mode 100644 index 000000000..613d6ed65 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector.Web/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], + build: { + assetsDir: '.', + rollupOptions: { + output: { + entryFileNames: 'app.js', + assetFileNames: 'app.[ext]', + }, + }, + }, +}) diff --git a/demos/Aevatar.Demos.Inspector/Aevatar.Demos.Inspector.csproj b/demos/Aevatar.Demos.Inspector/Aevatar.Demos.Inspector.csproj new file mode 100644 index 000000000..7134073e2 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/Aevatar.Demos.Inspector.csproj @@ -0,0 +1,37 @@ + + + net10.0 + enable + enable + Exe + Aevatar.Demos.Inspector + Aevatar.Demos.Inspector + + + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + diff --git a/demos/Aevatar.Demos.Inspector/Demo/InspectorDemoAgents.cs b/demos/Aevatar.Demos.Inspector/Demo/InspectorDemoAgents.cs new file mode 100644 index 000000000..9e03bfca9 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/Demo/InspectorDemoAgents.cs @@ -0,0 +1,36 @@ +using Aevatar.Demos.Inspector.Messages; +using Aevatar.Foundation.Abstractions.Attributes; + +namespace Aevatar.Demos.Inspector.Demo; + +public sealed class InspectorTransformerAgent : GAgentBase +{ + [EventHandler(Priority = 5)] + public Task OnPing(InspectorPingEvent evt) + { + return PublishAsync(new InspectorPongEvent + { + Reply = $"pong:{evt.Message}", + }, TopologyAudience.Children); + } +} + +public sealed class InspectorCollectorAgent : GAgentBase +{ + [EventHandler] + public Task OnPong(InspectorPongEvent evt) + { + State.Count += 1; + return Task.CompletedTask; + } +} + +public sealed class InspectorCounterAgent : GAgentBase +{ + [EventHandler] + public Task OnIncrement(InspectorIncrementEvent evt) + { + State.Count += evt.Amount; + return Task.CompletedTask; + } +} diff --git a/demos/Aevatar.Demos.Inspector/Demo/InspectorDemoScenarioService.cs b/demos/Aevatar.Demos.Inspector/Demo/InspectorDemoScenarioService.cs new file mode 100644 index 000000000..16ddefad2 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/Demo/InspectorDemoScenarioService.cs @@ -0,0 +1,51 @@ +using Aevatar.Demos.Inspector.Messages; +using Aevatar.Demos.Inspector.ReadModels; + +namespace Aevatar.Demos.Inspector.Demo; + +public sealed class InspectorDemoScenarioService +{ + private readonly IActorRuntime _runtime; + private readonly InspectorGAgentRegistryService _registry; + + public InspectorDemoScenarioService( + IActorRuntime runtime, + InspectorGAgentRegistryService registry) + { + _runtime = runtime ?? throw new ArgumentNullException(nameof(runtime)); + _registry = registry ?? throw new ArgumentNullException(nameof(registry)); + } + + public async Task RunHierarchyAsync(CancellationToken ct = default) + { + var parent = await _runtime.CreateAsync("inspector-parent", ct); + var child = await _runtime.CreateAsync("inspector-child", ct); + await _registry.RegisterActorAsync(nameof(InspectorTransformerAgent), parent.Id, ct); + await _registry.RegisterActorAsync(nameof(InspectorCollectorAgent), child.Id, ct); + await _runtime.LinkAsync(parent.Id, child.Id); + + await ((GAgentBase)parent.Agent).EventPublisher.PublishAsync( + new InspectorPingEvent { Message = "hello-inspector" }, + TopologyAudience.Self, + ct); + + return new InspectorDemoRunResponse( + "hierarchy", + [ + new InspectorDemoActor(parent.Id, nameof(InspectorTransformerAgent)), + new InspectorDemoActor(child.Id, nameof(InspectorCollectorAgent)), + ], + [ + new InspectorDemoLink(parent.Id, child.Id), + ]); + } +} + +public sealed record InspectorDemoRunResponse( + string Scenario, + IReadOnlyList Actors, + IReadOnlyList Links); + +public sealed record InspectorDemoActor(string ActorId, string AgentType); + +public sealed record InspectorDemoLink(string ParentId, string ChildId); diff --git a/demos/Aevatar.Demos.Inspector/GlobalUsings.cs b/demos/Aevatar.Demos.Inspector/GlobalUsings.cs new file mode 100644 index 000000000..8cb902f26 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/GlobalUsings.cs @@ -0,0 +1,2 @@ +global using Aevatar.Foundation.Abstractions; +global using Aevatar.Foundation.Core; diff --git a/demos/Aevatar.Demos.Inspector/InspectorApplication.cs b/demos/Aevatar.Demos.Inspector/InspectorApplication.cs new file mode 100644 index 000000000..57cae07d6 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/InspectorApplication.cs @@ -0,0 +1,244 @@ +using System.Diagnostics; +using System.Text.Json; +using System.Text.Json.Serialization; +using Aevatar.CQRS.Projection.Core.Abstractions; +using Aevatar.CQRS.Projection.Core.DependencyInjection; +using Aevatar.CQRS.Projection.Core.Orchestration; +using Aevatar.CQRS.Projection.Providers.InMemory.DependencyInjection; +using Aevatar.CQRS.Projection.Runtime.DependencyInjection; +using Aevatar.CQRS.Projection.Stores.Abstractions; +using Aevatar.Demos.Inspector.Demo; +using Aevatar.Demos.Inspector.ReadModels; +using Aevatar.Demos.Inspector.Telemetry; +using Aevatar.Foundation.Runtime.Implementations.Local.DependencyInjection; +using Aevatar.Studio.Projection.Metadata; +using Aevatar.Studio.Projection.Orchestration; +using Aevatar.Studio.Projection.Projectors; +using Aevatar.Studio.Projection.ReadModels; +using Aevatar.Workflow.Extensions.Hosting; +using Aevatar.Workflow.Projection.DependencyInjection; +using Microsoft.AspNetCore.Http.Json; +using Microsoft.Extensions.DependencyInjection.Extensions; + +namespace Aevatar.Demos.Inspector; + +public static class InspectorApplication +{ + private const int DefaultPort = 5100; + + public static WebApplication CreateApp(string[] args) + { + var builder = CreateBuilder(args); + return Build(builder); + } + + public static WebApplicationBuilder CreateBuilder(string[] args) + { + var options = InspectorRuntimeOptions.Parse(args, DefaultPort); + var contentRoot = ResolveContentRoot(); + var builder = WebApplication.CreateEmptyBuilder(new WebApplicationOptions + { + Args = args, + ContentRootPath = contentRoot, + WebRootPath = "wwwroot", + }); + builder.WebHost.UseKestrel(); + builder.Services.AddRouting(); + builder.Services.AddSingleton(options); + builder.WebHost.UseUrls(options.Url); + builder.Logging.SetMinimumLevel(LogLevel.Warning); + builder.Configuration.AddInMemoryCollection(new Dictionary + { + ["Projection:Document:Providers:InMemory:Enabled"] = "true", + ["Projection:Graph:Providers:InMemory:Enabled"] = "true", + ["Projection:Policies:Environment"] = "Development", + }); + return builder; + } + + public static WebApplication Build(WebApplicationBuilder builder) + { + ConfigureServices(builder.Services, builder.Configuration); + var app = builder.Build(); + app.UseDefaultFiles(); + app.UseStaticFiles(); + MapEndpoints(app); + + var options = app.Services.GetRequiredService(); + if (options.OpenBrowser) + app.Lifetime.ApplicationStarted.Register(() => OpenBrowser(options.Url)); + + return app; + } + + public static void ConfigureServices(IServiceCollection services, IConfiguration configuration) + { + services.Configure(json => + { + json.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + json.SerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; + json.SerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; + }); + + services.AddAevatarRuntime(); + services.AddProjectionReadModelRuntime(); + services.TryAddSingleton(); + + services.AddProjectionMaterializationRuntimeCore< + StudioMaterializationContext, + StudioMaterializationRuntimeLease, + ProjectionMaterializationScopeGAgent>( + scopeKey => new StudioMaterializationContext + { + RootActorId = scopeKey.RootActorId, + ProjectionKind = scopeKey.ProjectionKind, + }, + context => new StudioMaterializationRuntimeLease(context)); + services.TryAddSingleton(); + services.TryAddSingleton< + IProjectionDocumentMetadataProvider, + GAgentRegistryCurrentStateDocumentMetadataProvider>(); + services.AddCurrentStateProjectionMaterializer< + StudioMaterializationContext, + GAgentRegistryCurrentStateProjector>(); + services.AddInMemoryDocumentProjectionStore( + keySelector: static document => document.ActorId, + keyFormatter: static key => key, + defaultSortSelector: static document => document.UpdatedAt); + + services.AddWorkflowExecutionProjectionCQRS(); + services.AddWorkflowProjectionReadModelProviders(configuration); + + services.TryAddSingleton(); + services.TryAddSingleton(); + services.TryAddSingleton(); + services.TryAddSingleton(); + services.TryAddTransient(); + services.TryAddTransient(); + services.TryAddTransient(); + } + + public static void MapEndpoints(WebApplication app) + { + app.MapGet("/api/inspector/actors", async ( + InspectorGAgentRegistryService registry, + CancellationToken ct) => Results.Ok(await registry.ListActorsAsync(ct))); + + app.MapGet("/api/inspector/workflow-runs", async ( + InspectorReadModelQueryService readModels, + CancellationToken ct) => Results.Ok(await readModels.ListWorkflowRunsAsync(ct))); + + app.MapGet("/api/inspector/readmodels", async ( + InspectorReadModelQueryService readModels, + CancellationToken ct) => Results.Ok(await readModels.ListReadModelsAsync(ct))); + + app.MapGet("/api/inspector/readmodels/{name}", async ( + string name, + InspectorReadModelQueryService readModels, + CancellationToken ct) => + { + var result = await readModels.GetReadModelAsync(name, ct); + return result == null ? Results.NotFound() : Results.Ok(result); + }); + + app.MapGet("/api/inspector/events", async ( + InspectorTelemetryBroadcaster telemetry, + HttpContext context, + CancellationToken ct) => + { + context.Response.Headers.CacheControl = "no-cache"; + context.Response.Headers.Connection = "keep-alive"; + context.Response.ContentType = "text/event-stream"; + + await foreach (var frame in telemetry.ReadAllAsync(ct)) + { + var json = JsonSerializer.Serialize(frame, InspectorJson.Options); + await context.Response.WriteAsync("event: activity\n", ct); + await context.Response.WriteAsync($"data: {json}\n\n", ct); + await context.Response.Body.FlushAsync(ct); + } + }); + + app.MapPost("/api/inspector/demo/hierarchy", async ( + InspectorDemoScenarioService demo, + CancellationToken ct) => Results.Ok(await demo.RunHierarchyAsync(ct))); + } + + public static void PrintStartupBanner(InspectorRuntimeOptions options) + { + Console.WriteLine(); + Console.WriteLine("╔══════════════════════════════════════════════════════════╗"); + Console.WriteLine("║ Aevatar Inspector Demo ║"); + Console.WriteLine("╠══════════════════════════════════════════════════════════╣"); + Console.WriteLine($"║ Web UI: {options.Url,-48}║"); + Console.WriteLine("║ Demo: POST /api/inspector/demo/hierarchy ║"); + Console.WriteLine("║ Press Ctrl+C to stop ║"); + Console.WriteLine("╚══════════════════════════════════════════════════════════╝"); + Console.WriteLine(); + } + + private static void OpenBrowser(string url) + { + try + { + if (OperatingSystem.IsMacOS()) + Process.Start("open", url); + else if (OperatingSystem.IsWindows()) + Process.Start(new ProcessStartInfo(url) { UseShellExecute = true }); + else + Process.Start("xdg-open", url); + } + catch + { + // Opening a local browser is best effort only. + } + } + + private static string ResolveContentRoot() + { + var currentDirectory = Directory.GetCurrentDirectory(); + if (HasWebRoot(currentDirectory)) + return currentDirectory; + + var directory = new DirectoryInfo(AppContext.BaseDirectory); + while (directory != null) + { + if (HasWebRoot(directory.FullName)) + return directory.FullName; + + directory = directory.Parent; + } + + return currentDirectory; + } + + private static bool HasWebRoot(string path) => + File.Exists(Path.Combine(path, "wwwroot", "index.html")); +} + +public sealed record InspectorRuntimeOptions(int Port, string Url, bool OpenBrowser) +{ + public static InspectorRuntimeOptions Parse(string[] args, int defaultPort) + { + var port = defaultPort; + var noBrowser = args.Contains("--no-browser", StringComparer.OrdinalIgnoreCase); + var portIndex = Array.FindIndex(args, x => string.Equals(x, "--port", StringComparison.OrdinalIgnoreCase)); + if (portIndex >= 0 && portIndex + 1 < args.Length && int.TryParse(args[portIndex + 1], out var parsed)) + port = parsed; + + if (port is 5000 or 5050) + throw new InvalidOperationException("Inspector demo must not use port 5000 or 5050."); + + return new InspectorRuntimeOptions(port, $"http://localhost:{port}", !noBrowser); + } +} + +internal static class InspectorJson +{ + public static readonly JsonSerializerOptions Options = new() + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + DictionaryKeyPolicy = JsonNamingPolicy.CamelCase, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + }; +} diff --git a/demos/Aevatar.Demos.Inspector/Program.cs b/demos/Aevatar.Demos.Inspector/Program.cs new file mode 100644 index 000000000..5e10eec35 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/Program.cs @@ -0,0 +1,11 @@ +namespace Aevatar.Demos.Inspector; + +public static class Program +{ + public static async Task Main(string[] args) + { + var app = InspectorApplication.CreateApp(args); + InspectorApplication.PrintStartupBanner(app.Services.GetRequiredService()); + await app.RunAsync(); + } +} diff --git a/demos/Aevatar.Demos.Inspector/README.md b/demos/Aevatar.Demos.Inspector/README.md new file mode 100644 index 000000000..fff18d66d --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/README.md @@ -0,0 +1,26 @@ +# Aevatar Inspector Demo + +Local developer visualizer for the aevatar actor runtime. + +```bash +dotnet run --project demos/Aevatar.Demos.Inspector -- --no-browser +``` + +Default URL: `http://localhost:5100`. + +The backend keeps the plan's two-tier split: + +- Tier 1 REST endpoints read projection readmodels/query ports: + `/api/inspector/actors`, `/workflow-runs`, `/readmodels`, and `/readmodels/{name}`. +- Tier 2 `/api/inspector/events` is live-only SSE fed by `Aevatar.Agents` + OpenTelemetry activities. It is animation data, not a query source. + +To populate the local view without an LLM provider: + +```bash +curl -X POST http://localhost:5100/api/inspector/demo/hierarchy +``` + +The demo creates a parent/child local actor pair, registers them through the +registry actor readmodel path, links them, and sends one message so the SSE +stream can animate the pulse. diff --git a/demos/Aevatar.Demos.Inspector/ReadModels/InspectorActorCommandDispatcher.cs b/demos/Aevatar.Demos.Inspector/ReadModels/InspectorActorCommandDispatcher.cs new file mode 100644 index 000000000..c04451370 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/ReadModels/InspectorActorCommandDispatcher.cs @@ -0,0 +1,31 @@ +using Google.Protobuf; +using Google.Protobuf.WellKnownTypes; + +namespace Aevatar.Demos.Inspector.ReadModels; + +internal static class InspectorActorCommandDispatcher +{ + private const string PublisherActorId = "aevatar.demos.inspector"; + + public static Task SendAsync( + IActorDispatchPort dispatchPort, + IActor actor, + TEvent evt, + CancellationToken ct = default) + where TEvent : IMessage + { + ArgumentNullException.ThrowIfNull(dispatchPort); + ArgumentNullException.ThrowIfNull(actor); + ArgumentNullException.ThrowIfNull(evt); + + var envelope = new EventEnvelope + { + Id = Guid.NewGuid().ToString("N"), + Timestamp = Timestamp.FromDateTime(DateTime.UtcNow), + Payload = Any.Pack(evt), + Route = EnvelopeRouteSemantics.CreateDirect(PublisherActorId, actor.Id), + }; + + return dispatchPort.DispatchAsync(actor.Id, envelope, ct); + } +} diff --git a/demos/Aevatar.Demos.Inspector/ReadModels/InspectorGAgentRegistryService.cs b/demos/Aevatar.Demos.Inspector/ReadModels/InspectorGAgentRegistryService.cs new file mode 100644 index 000000000..de37f4a58 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/ReadModels/InspectorGAgentRegistryService.cs @@ -0,0 +1,108 @@ +using Aevatar.CQRS.Projection.Stores.Abstractions; +using Aevatar.GAgents.Registry; +using Aevatar.Studio.Projection.Orchestration; +using Aevatar.Studio.Projection.ReadModels; +using Google.Protobuf.WellKnownTypes; + +namespace Aevatar.Demos.Inspector.ReadModels; + +public sealed class InspectorGAgentRegistryService +{ + public const string ScopeId = "inspector"; + public const string RegistryActorId = "gagent-registry-inspector"; + + private readonly IActorRuntime _runtime; + private readonly IActorDispatchPort _dispatchPort; + private readonly StudioProjectionPort _projectionPort; + private readonly IProjectionDocumentReader _documentReader; + + public InspectorGAgentRegistryService( + IActorRuntime runtime, + IActorDispatchPort dispatchPort, + StudioProjectionPort projectionPort, + IProjectionDocumentReader documentReader) + { + _runtime = runtime ?? throw new ArgumentNullException(nameof(runtime)); + _dispatchPort = dispatchPort ?? throw new ArgumentNullException(nameof(dispatchPort)); + _projectionPort = projectionPort ?? throw new ArgumentNullException(nameof(projectionPort)); + _documentReader = documentReader ?? throw new ArgumentNullException(nameof(documentReader)); + } + + public async Task RegisterActorAsync( + string agentType, + string actorId, + CancellationToken ct = default) + { + ArgumentException.ThrowIfNullOrWhiteSpace(agentType); + ArgumentException.ThrowIfNullOrWhiteSpace(actorId); + + var registryActor = await EnsureRegistryActorAsync(ct); + await InspectorActorCommandDispatcher.SendAsync( + _dispatchPort, + registryActor, + new ActorRegisteredEvent + { + GagentType = agentType.Trim(), + ActorId = actorId.Trim(), + }, + ct); + } + + public async Task UnregisterActorAsync( + string agentType, + string actorId, + CancellationToken ct = default) + { + ArgumentException.ThrowIfNullOrWhiteSpace(agentType); + ArgumentException.ThrowIfNullOrWhiteSpace(actorId); + + var registryActor = await EnsureRegistryActorAsync(ct); + await InspectorActorCommandDispatcher.SendAsync( + _dispatchPort, + registryActor, + new ActorUnregisteredEvent + { + GagentType = agentType.Trim(), + ActorId = actorId.Trim(), + }, + ct); + } + + public async Task ListActorsAsync(CancellationToken ct = default) + { + var document = await _documentReader.GetAsync(RegistryActorId, ct); + if (document?.StateRoot == null || !document.StateRoot.Is(GAgentRegistryState.Descriptor)) + { + return new InspectorActorsResponse( + ScopeId, + 0, + DateTimeOffset.MinValue, + DateTimeOffset.UtcNow, + []); + } + + var state = document.StateRoot.Unpack(); + var groups = state.Groups + .Select(group => new InspectorActorGroupDto( + string.IsNullOrWhiteSpace(group.GagentType) ? "unknown" : group.GagentType, + group.ActorIds.ToList(), + group.ActorIds.Count)) + .OrderBy(group => group.Type, StringComparer.Ordinal) + .ToList(); + + return new InspectorActorsResponse( + ScopeId, + document.StateVersion, + document.UpdatedAt?.ToDateTimeOffset() ?? DateTimeOffset.MinValue, + DateTimeOffset.UtcNow, + groups); + } + + private async Task EnsureRegistryActorAsync(CancellationToken ct) + { + var actor = await _runtime.GetAsync(RegistryActorId) + ?? await _runtime.CreateAsync(RegistryActorId, ct); + await _projectionPort.EnsureProjectionAsync(RegistryActorId, GAgentRegistryGAgent.ProjectionKind, ct); + return actor; + } +} diff --git a/demos/Aevatar.Demos.Inspector/ReadModels/InspectorReadModelDtos.cs b/demos/Aevatar.Demos.Inspector/ReadModels/InspectorReadModelDtos.cs new file mode 100644 index 000000000..119fb674a --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/ReadModels/InspectorReadModelDtos.cs @@ -0,0 +1,44 @@ +using System.Text.Json; + +namespace Aevatar.Demos.Inspector.ReadModels; + +public sealed record InspectorActorGroupDto( + string Type, + IReadOnlyList ActorIds, + int Count); + +public sealed record InspectorActorsResponse( + string ScopeId, + long StateVersion, + DateTimeOffset UpdatedAt, + DateTimeOffset ObservedAt, + IReadOnlyList Groups); + +public sealed record InspectorWorkflowRunDto( + string ActorId, + string WorkflowName, + string Status, + long StateVersion, + string LastEventId, + DateTimeOffset LastUpdatedAt, + int TotalSteps, + int CompletedSteps); + +public sealed record InspectorReadModelSummaryDto( + string Name, + string DocumentType, + long? TotalCount, + long? LatestStateVersion, + DateTimeOffset? LatestUpdatedAt); + +public sealed record InspectorReadModelDocumentDto( + string Name, + string DocumentType, + JsonElement Document); + +public sealed record InspectorReadModelPageDto( + string Name, + string DocumentType, + int Count, + string? NextCursor, + IReadOnlyList Documents); diff --git a/demos/Aevatar.Demos.Inspector/ReadModels/InspectorReadModelQueryService.cs b/demos/Aevatar.Demos.Inspector/ReadModels/InspectorReadModelQueryService.cs new file mode 100644 index 000000000..c61cce0d5 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/ReadModels/InspectorReadModelQueryService.cs @@ -0,0 +1,154 @@ +using System.Text.Json; +using Aevatar.CQRS.Projection.Stores.Abstractions; +using Aevatar.GAgents.Registry; +using Aevatar.Studio.Projection.ReadModels; +using Aevatar.Workflow.Application.Abstractions.Projections; +using Aevatar.Workflow.Application.Abstractions.Queries; +using Aevatar.Workflow.Projection.ReadModels; +using Google.Protobuf; +using Google.Protobuf.Reflection; + +namespace Aevatar.Demos.Inspector.ReadModels; + +public sealed class InspectorReadModelQueryService +{ + private const int DefaultTake = 200; + private static readonly JsonFormatter Formatter = new( + JsonFormatter.Settings.Default + .WithPreserveProtoFieldNames(true) + .WithFormatDefaultValues(true) + .WithTypeRegistry(TypeRegistry.FromMessages(GAgentRegistryState.Descriptor))); + + private readonly IProjectionDocumentReader _registryReader; + private readonly IProjectionDocumentReader _workflowReader; + private readonly IProjectionDocumentReader _workflowReportReader; + private readonly IWorkflowExecutionCurrentStateQueryPort _workflowQueryPort; + + public InspectorReadModelQueryService( + IProjectionDocumentReader registryReader, + IProjectionDocumentReader workflowReader, + IProjectionDocumentReader workflowReportReader, + IWorkflowExecutionCurrentStateQueryPort workflowQueryPort) + { + _registryReader = registryReader ?? throw new ArgumentNullException(nameof(registryReader)); + _workflowReader = workflowReader ?? throw new ArgumentNullException(nameof(workflowReader)); + _workflowReportReader = workflowReportReader ?? throw new ArgumentNullException(nameof(workflowReportReader)); + _workflowQueryPort = workflowQueryPort ?? throw new ArgumentNullException(nameof(workflowQueryPort)); + } + + public async Task> ListWorkflowRunsAsync(CancellationToken ct = default) + { + var snapshots = await _workflowQueryPort.ListActorSnapshotsAsync(DefaultTake, ct); + return snapshots + .Select(MapWorkflowRun) + .OrderByDescending(run => run.LastUpdatedAt) + .ToList(); + } + + public async Task> ListReadModelsAsync(CancellationToken ct = default) + { + var registry = await QuerySummaryAsync( + "gagent-registry", + typeof(GAgentRegistryCurrentStateDocument), + _registryReader, + ct); + var workflowCurrent = await QuerySummaryAsync( + "workflow-execution-current-state", + typeof(WorkflowExecutionCurrentStateDocument), + _workflowReader, + ct); + var workflowReport = await QuerySummaryAsync( + "workflow-run-insight-report", + typeof(WorkflowRunInsightReportDocument), + _workflowReportReader, + ct); + return [registry, workflowCurrent, workflowReport]; + } + + public async Task GetReadModelAsync(string name, CancellationToken ct = default) + { + return NormalizeName(name) switch + { + "gagent-registry" => await QueryPageAsync( + "gagent-registry", + typeof(GAgentRegistryCurrentStateDocument), + _registryReader, + ct), + "workflow-execution-current-state" => await QueryPageAsync( + "workflow-execution-current-state", + typeof(WorkflowExecutionCurrentStateDocument), + _workflowReader, + ct), + "workflow-run-insight-report" => await QueryPageAsync( + "workflow-run-insight-report", + typeof(WorkflowRunInsightReportDocument), + _workflowReportReader, + ct), + _ => null, + }; + } + + private static InspectorWorkflowRunDto MapWorkflowRun(WorkflowActorSnapshot snapshot) + { + return new InspectorWorkflowRunDto( + snapshot.ActorId, + string.IsNullOrWhiteSpace(snapshot.WorkflowName) ? "unknown" : snapshot.WorkflowName, + snapshot.CompletionStatus.ToString(), + snapshot.StateVersion, + snapshot.LastEventId, + snapshot.LastUpdatedAt, + snapshot.TotalSteps, + snapshot.CompletedSteps); + } + + private static async Task QuerySummaryAsync( + string name, + Type documentType, + IProjectionDocumentReader reader, + CancellationToken ct) + where TDocument : class, IProjectionReadModel, IMessage + { + var result = await reader.QueryAsync(new ProjectionDocumentQuery + { + Take = 1, + IncludeTotalCount = true, + }, ct); + var latest = result.Items.FirstOrDefault(); + return new InspectorReadModelSummaryDto( + name, + documentType.FullName ?? documentType.Name, + result.TotalCount, + latest?.StateVersion, + latest?.UpdatedAt); + } + + private static async Task QueryPageAsync( + string name, + Type documentType, + IProjectionDocumentReader reader, + CancellationToken ct) + where TDocument : class, IProjectionReadModel, IMessage + { + var result = await reader.QueryAsync(new ProjectionDocumentQuery + { + Take = DefaultTake, + IncludeTotalCount = true, + }, ct); + return new InspectorReadModelPageDto( + name, + documentType.FullName ?? documentType.Name, + result.Items.Count, + result.NextCursor, + result.Items.Select(ToJsonElement).ToList()); + } + + private static JsonElement ToJsonElement(IMessage message) + { + var json = Formatter.Format(message); + using var document = JsonDocument.Parse(json); + return document.RootElement.Clone(); + } + + private static string NormalizeName(string name) => + name.Trim().ToLowerInvariant(); +} diff --git a/demos/Aevatar.Demos.Inspector/Telemetry/InspectorTelemetryBroadcaster.cs b/demos/Aevatar.Demos.Inspector/Telemetry/InspectorTelemetryBroadcaster.cs new file mode 100644 index 000000000..52d1169ac --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/Telemetry/InspectorTelemetryBroadcaster.cs @@ -0,0 +1,84 @@ +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Threading.Channels; +using Aevatar.Foundation.Runtime.Observability; + +namespace Aevatar.Demos.Inspector.Telemetry; + +public sealed class InspectorTelemetryBroadcaster : IDisposable +{ + private readonly Channel _frames; + private readonly ActivityListener _listener; + + public InspectorTelemetryBroadcaster() + : this(capacity: 1000) + { + } + + public InspectorTelemetryBroadcaster(int capacity) + { + if (capacity <= 0) + throw new ArgumentOutOfRangeException(nameof(capacity), "Telemetry channel capacity must be positive."); + + _frames = Channel.CreateBounded(new BoundedChannelOptions(capacity) + { + FullMode = BoundedChannelFullMode.DropOldest, + SingleReader = false, + SingleWriter = false, + }); + + _listener = new ActivityListener + { + ShouldListenTo = static source => source.Name == AevatarActivitySource.ActivitySourceName, + Sample = static (ref ActivityCreationOptions _) => + ActivitySamplingResult.AllDataAndRecorded, + ActivityStopped = activity => TryPublish(FromActivity(activity)), + }; + ActivitySource.AddActivityListener(_listener); + } + + public async IAsyncEnumerable ReadAllAsync( + [EnumeratorCancellation] CancellationToken ct = default) + { + while (await _frames.Reader.WaitToReadAsync(ct)) + { + while (_frames.Reader.TryRead(out var frame)) + yield return frame; + } + } + + public bool TryPublish(TelemetryFrame frame) + { + ArgumentNullException.ThrowIfNull(frame); + return _frames.Writer.TryWrite(frame); + } + + public void Dispose() + { + _listener.Dispose(); + } + + private static TelemetryFrame FromActivity(Activity activity) + { + var tags = activity + .TagObjects + .Where(tag => tag.Value != null) + .ToDictionary( + tag => tag.Key, + tag => tag.Value?.ToString() ?? string.Empty, + StringComparer.Ordinal); + + return new TelemetryFrame( + activity.Id ?? Guid.NewGuid().ToString("N"), + activity.TraceId.ToString(), + activity.SpanId.ToString(), + activity.DisplayName, + activity.StartTimeUtc == default + ? DateTimeOffset.UtcNow + : new DateTimeOffset(activity.StartTimeUtc, TimeSpan.Zero), + activity.Duration.TotalMilliseconds, + activity.Status.ToString(), + new ReadOnlyDictionary(tags)); + } +} diff --git a/demos/Aevatar.Demos.Inspector/Telemetry/TelemetryFrame.cs b/demos/Aevatar.Demos.Inspector/Telemetry/TelemetryFrame.cs new file mode 100644 index 000000000..14fce0755 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/Telemetry/TelemetryFrame.cs @@ -0,0 +1,11 @@ +namespace Aevatar.Demos.Inspector.Telemetry; + +public sealed record TelemetryFrame( + string Id, + string TraceId, + string SpanId, + string Name, + DateTimeOffset Timestamp, + double DurationMs, + string Status, + IReadOnlyDictionary Tags); diff --git a/demos/Aevatar.Demos.Inspector/inspector_demo_messages.proto b/demos/Aevatar.Demos.Inspector/inspector_demo_messages.proto new file mode 100644 index 000000000..6e49b7ce8 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/inspector_demo_messages.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; + +option csharp_namespace = "Aevatar.Demos.Inspector.Messages"; + +message InspectorCounterState { + int32 count = 1; +} + +message InspectorPingEvent { + string message = 1; +} + +message InspectorPongEvent { + string reply = 1; +} + +message InspectorIncrementEvent { + int32 amount = 1; +} diff --git a/demos/Aevatar.Demos.Inspector/wwwroot/app.css b/demos/Aevatar.Demos.Inspector/wwwroot/app.css new file mode 100644 index 000000000..abba3ab15 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/wwwroot/app.css @@ -0,0 +1 @@ +:root{background:#0e0f12;color:#c8ced4;font-family:JetBrains Mono,SFMono-Regular,Menlo,Consolas,monospace}body{margin:0;min-width:1280px}.topbar{height:72px;display:grid;grid-template-columns:1fr 280px auto;gap:14px;align-items:center;padding:0 18px;border-bottom:1px solid #2A2D32}h1{margin:0;font-size:18px}p{margin:6px 0;color:#8a929b}input,button{height:34px;border:1px solid #2A2D32;border-radius:3px;background:#101216;color:#c8ced4;font:inherit}button{color:#e89e5b;cursor:pointer}.grid{display:grid;grid-template-columns:300px 1fr 340px;min-height:calc(100vh - 224px)}aside,footer section{background:#15171b;padding:16px;border-right:1px solid #2A2D32}.label{color:#8a929b;font-size:11px;text-transform:uppercase}.actor{width:100%;display:flex;justify-content:space-between;margin-top:8px;padding:0 8px;transition:border-color .14s ease,background .14s ease,color .14s ease}.actor.is-hovered,.actor.is-selected,.actor.is-active{border-color:#5b6e78;background:#1b2026}.actor.is-active{color:#f4be7d}.canvas{position:relative;overflow:hidden}.node{position:absolute;display:flex;align-items:center;gap:8px;color:#c8ced4;transition:color .14s ease,transform .14s ease}.node span{width:22px;height:22px;border-radius:50%;background:#3b4a52;border:1px solid #5B6E78;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease}.node.is-hovered,.node.is-selected{color:#f4be7d;transform:translateY(-1px)}.node.is-hovered span,.node.is-selected span{border-color:#e89e5b;box-shadow:0 0 0 4px #e89e5b1f}.node.is-active span{animation:node-pulse .9s ease-out;background:#4e645c;border-color:#7eb78a}.event{border:1px solid #2A2D32;border-radius:3px;padding:8px}footer{height:152px;display:grid;grid-template-columns:1fr 360px;border-top:1px solid #2A2D32}.ok{color:#7eb78a}.bad{color:#d16b6b}@keyframes node-pulse{0%{box-shadow:0 0 #7eb78a75;transform:scale(1)}70%{box-shadow:0 0 0 14px #7eb78a00;transform:scale(1.12)}to{box-shadow:0 0 #7eb78a00;transform:scale(1)}} diff --git a/demos/Aevatar.Demos.Inspector/wwwroot/app.js b/demos/Aevatar.Demos.Inspector/wwwroot/app.js new file mode 100644 index 000000000..f93024472 --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/wwwroot/app.js @@ -0,0 +1,40 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const u of l)if(u.type==="childList")for(const o of u.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(l){const u={};return l.integrity&&(u.integrity=l.integrity),l.referrerPolicy&&(u.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?u.credentials="include":l.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function r(l){if(l.ep)return;l.ep=!0;const u=n(l);fetch(l.href,u)}})();function rc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Hi={exports:{}},el={},Wi={exports:{}},T={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Xn=Symbol.for("react.element"),lc=Symbol.for("react.portal"),uc=Symbol.for("react.fragment"),oc=Symbol.for("react.strict_mode"),ic=Symbol.for("react.profiler"),sc=Symbol.for("react.provider"),ac=Symbol.for("react.context"),cc=Symbol.for("react.forward_ref"),fc=Symbol.for("react.suspense"),dc=Symbol.for("react.memo"),pc=Symbol.for("react.lazy"),Oo=Symbol.iterator;function mc(e){return e===null||typeof e!="object"?null:(e=Oo&&e[Oo]||e["@@iterator"],typeof e=="function"?e:null)}var Qi={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ki=Object.assign,Yi={};function on(e,t,n){this.props=e,this.context=t,this.refs=Yi,this.updater=n||Qi}on.prototype.isReactComponent={};on.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};on.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Xi(){}Xi.prototype=on.prototype;function Fu(e,t,n){this.props=e,this.context=t,this.refs=Yi,this.updater=n||Qi}var Uu=Fu.prototype=new Xi;Uu.constructor=Fu;Ki(Uu,on.prototype);Uu.isPureReactComponent=!0;var Mo=Array.isArray,Gi=Object.prototype.hasOwnProperty,$u={current:null},Zi={key:!0,ref:!0,__self:!0,__source:!0};function Ji(e,t,n){var r,l={},u=null,o=null;if(t!=null)for(r in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(u=""+t.key),t)Gi.call(t,r)&&!Zi.hasOwnProperty(r)&&(l[r]=t[r]);var i=arguments.length-2;if(i===1)l.children=n;else if(1>>1,G=_[W];if(0>>1;Wl(gl,L))wtl(er,gl)?(_[W]=er,_[wt]=L,W=wt):(_[W]=gl,_[gt]=L,W=gt);else if(wtl(er,L))_[W]=er,_[wt]=L,W=wt;else break e}}return z}function l(_,z){var L=_.sortIndex-z.sortIndex;return L!==0?L:_.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var u=performance;e.unstable_now=function(){return u.now()}}else{var o=Date,i=o.now();e.unstable_now=function(){return o.now()-i}}var s=[],f=[],h=1,m=null,p=3,w=!1,S=!1,E=!1,M=typeof setTimeout=="function"?setTimeout:null,c=typeof clearTimeout=="function"?clearTimeout:null,a=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(_){for(var z=n(f);z!==null;){if(z.callback===null)r(f);else if(z.startTime<=_)r(f),z.sortIndex=z.expirationTime,t(s,z);else break;z=n(f)}}function y(_){if(E=!1,d(_),!S)if(n(s)!==null)S=!0,vl(x);else{var z=n(f);z!==null&&yl(y,z.startTime-_)}}function x(_,z){S=!1,E&&(E=!1,c(N),N=-1),w=!0;var L=p;try{for(d(z),m=n(s);m!==null&&(!(m.expirationTime>z)||_&&!q());){var W=m.callback;if(typeof W=="function"){m.callback=null,p=m.priorityLevel;var G=W(m.expirationTime<=z);z=e.unstable_now(),typeof G=="function"?m.callback=G:m===n(s)&&r(s),d(z)}else r(s);m=n(s)}if(m!==null)var bn=!0;else{var gt=n(f);gt!==null&&yl(y,gt.startTime-z),bn=!1}return bn}finally{m=null,p=L,w=!1}}var v=!1,k=null,N=-1,R=5,P=-1;function q(){return!(e.unstable_now()-P_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):R=0<_?Math.floor(1e3/_):5},e.unstable_getCurrentPriorityLevel=function(){return p},e.unstable_getFirstCallbackNode=function(){return n(s)},e.unstable_next=function(_){switch(p){case 1:case 2:case 3:var z=3;break;default:z=p}var L=p;p=z;try{return _()}finally{p=L}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(_,z){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var L=p;p=_;try{return z()}finally{p=L}},e.unstable_scheduleCallback=function(_,z,L){var W=e.unstable_now();switch(typeof L=="object"&&L!==null?(L=L.delay,L=typeof L=="number"&&0W?(_.sortIndex=L,t(f,_),n(s)===null&&_===n(f)&&(E?(c(N),N=-1):E=!0,yl(y,L-W))):(_.sortIndex=G,t(s,_),S||w||(S=!0,vl(x))),_},e.unstable_shouldYield=q,e.unstable_wrapCallback=function(_){var z=p;return function(){var L=p;p=z;try{return _.apply(this,arguments)}finally{p=L}}}})(ns);ts.exports=ns;var _c=ts.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Nc=Vu,ge=_c;function g(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ql=Object.prototype.hasOwnProperty,Pc=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Fo={},Uo={};function zc(e){return Ql.call(Uo,e)?!0:Ql.call(Fo,e)?!1:Pc.test(e)?Uo[e]=!0:(Fo[e]=!0,!1)}function Lc(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Tc(e,t,n,r){if(t===null||typeof t>"u"||Lc(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ae(e,t,n,r,l,u,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=u,this.removeEmptyString=o}var te={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){te[e]=new ae(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];te[t]=new ae(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){te[e]=new ae(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){te[e]=new ae(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){te[e]=new ae(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){te[e]=new ae(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){te[e]=new ae(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){te[e]=new ae(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){te[e]=new ae(e,5,!1,e.toLowerCase(),null,!1,!1)});var Bu=/[\-:]([a-z])/g;function Hu(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Bu,Hu);te[t]=new ae(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Bu,Hu);te[t]=new ae(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Bu,Hu);te[t]=new ae(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){te[e]=new ae(e,1,!1,e.toLowerCase(),null,!1,!1)});te.xlinkHref=new ae("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){te[e]=new ae(e,1,!1,e.toLowerCase(),null,!0,!0)});function Wu(e,t,n,r){var l=te.hasOwnProperty(t)?te[t]:null;(l!==null?l.type!==0:r||!(2i||l[o]!==u[i]){var s=` +`+l[o].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=o&&0<=i);break}}}finally{kl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?gn(e):""}function Rc(e){switch(e.tag){case 5:return gn(e.type);case 16:return gn("Lazy");case 13:return gn("Suspense");case 19:return gn("SuspenseList");case 0:case 2:case 15:return e=El(e.type,!1),e;case 11:return e=El(e.type.render,!1),e;case 1:return e=El(e.type,!0),e;default:return""}}function Gl(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Dt:return"Fragment";case Mt:return"Portal";case Kl:return"Profiler";case Qu:return"StrictMode";case Yl:return"Suspense";case Xl:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case us:return(e.displayName||"Context")+".Consumer";case ls:return(e._context.displayName||"Context")+".Provider";case Ku:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Yu:return t=e.displayName||null,t!==null?t:Gl(e.type)||"Memo";case qe:t=e._payload,e=e._init;try{return Gl(e(t))}catch{}}return null}function jc(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Gl(t);case 8:return t===Qu?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function dt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function is(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Ic(e){var t=is(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,u=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(o){r=""+o,u.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function rr(e){e._valueTracker||(e._valueTracker=Ic(e))}function ss(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=is(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Tr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Zl(e,t){var n=t.checked;return B({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Ao(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=dt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function as(e,t){t=t.checked,t!=null&&Wu(e,"checked",t,!1)}function Jl(e,t){as(e,t);var n=dt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?ql(e,t.type,n):t.hasOwnProperty("defaultValue")&&ql(e,t.type,dt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Vo(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function ql(e,t,n){(t!=="number"||Tr(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var wn=Array.isArray;function Yt(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=lr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function jn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var En={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Oc=["Webkit","ms","Moz","O"];Object.keys(En).forEach(function(e){Oc.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),En[t]=En[e]})});function ps(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||En.hasOwnProperty(e)&&En[e]?(""+t).trim():t+"px"}function ms(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=ps(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var Mc=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function tu(e,t){if(t){if(Mc[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(g(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(g(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(g(61))}if(t.style!=null&&typeof t.style!="object")throw Error(g(62))}}function nu(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ru=null;function Xu(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var lu=null,Xt=null,Gt=null;function Wo(e){if(e=Jn(e)){if(typeof lu!="function")throw Error(g(280));var t=e.stateNode;t&&(t=ul(t),lu(e.stateNode,e.type,t))}}function hs(e){Xt?Gt?Gt.push(e):Gt=[e]:Xt=e}function vs(){if(Xt){var e=Xt,t=Gt;if(Gt=Xt=null,Wo(e),t)for(e=0;e>>=0,e===0?32:31-(Kc(e)/Yc|0)|0}var ur=64,or=4194304;function Sn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Or(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,u=e.pingedLanes,o=n&268435455;if(o!==0){var i=o&~l;i!==0?r=Sn(i):(u&=o,u!==0&&(r=Sn(u)))}else o=n&~l,o!==0?r=Sn(o):u!==0&&(r=Sn(u));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,u=t&-t,l>=u||l===16&&(u&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Gn(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-je(t),e[t]=n}function Jc(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Cn),bo=" ",ei=!1;function Ds(e,t){switch(e){case"keyup":return Nf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Fs(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ft=!1;function zf(e,t){switch(e){case"compositionend":return Fs(t);case"keypress":return t.which!==32?null:(ei=!0,bo);case"textInput":return e=t.data,e===bo&&ei?null:e;default:return null}}function Lf(e,t){if(Ft)return e==="compositionend"||!no&&Ds(e,t)?(e=Os(),kr=bu=nt=null,Ft=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=li(n)}}function Vs(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Vs(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Bs(){for(var e=window,t=Tr();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Tr(e.document)}return t}function ro(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Uf(e){var t=Bs(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Vs(n.ownerDocument.documentElement,n)){if(r!==null&&ro(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,u=Math.min(r.start,l);r=r.end===void 0?u:Math.min(r.end,l),!e.extend&&u>r&&(l=r,r=u,u=l),l=ui(n,u);var o=ui(n,r);l&&o&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),u>r?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Ut=null,cu=null,Nn=null,fu=!1;function oi(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;fu||Ut==null||Ut!==Tr(r)||(r=Ut,"selectionStart"in r&&ro(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Nn&&Un(Nn,r)||(Nn=r,r=Fr(cu,"onSelect"),0Vt||(e.current=yu[Vt],yu[Vt]=null,Vt--)}function D(e,t){Vt++,yu[Vt]=e.current,e.current=t}var pt={},ue=ht(pt),de=ht(!1),Pt=pt;function en(e,t){var n=e.type.contextTypes;if(!n)return pt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},u;for(u in n)l[u]=t[u];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function pe(e){return e=e.childContextTypes,e!=null}function $r(){U(de),U(ue)}function pi(e,t,n){if(ue.current!==pt)throw Error(g(168));D(ue,t),D(de,n)}function Js(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(g(108,jc(e)||"Unknown",l));return B({},n,r)}function Ar(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||pt,Pt=ue.current,D(ue,e),D(de,de.current),!0}function mi(e,t,n){var r=e.stateNode;if(!r)throw Error(g(169));n?(e=Js(e,t,Pt),r.__reactInternalMemoizedMergedChildContext=e,U(de),U(ue),D(ue,e)):U(de),D(de,n)}var Be=null,ol=!1,Dl=!1;function qs(e){Be===null?Be=[e]:Be.push(e)}function Zf(e){ol=!0,qs(e)}function vt(){if(!Dl&&Be!==null){Dl=!0;var e=0,t=O;try{var n=Be;for(O=1;e>=o,l-=o,He=1<<32-je(t)+l|n<N?(R=k,k=null):R=k.sibling;var P=p(c,k,d[N],y);if(P===null){k===null&&(k=R);break}e&&k&&P.alternate===null&&t(c,k),a=u(P,a,N),v===null?x=P:v.sibling=P,v=P,k=R}if(N===d.length)return n(c,k),$&&St(c,N),x;if(k===null){for(;NN?(R=k,k=null):R=k.sibling;var q=p(c,k,P.value,y);if(q===null){k===null&&(k=R);break}e&&k&&q.alternate===null&&t(c,k),a=u(q,a,N),v===null?x=q:v.sibling=q,v=q,k=R}if(P.done)return n(c,k),$&&St(c,N),x;if(k===null){for(;!P.done;N++,P=d.next())P=m(c,P.value,y),P!==null&&(a=u(P,a,N),v===null?x=P:v.sibling=P,v=P);return $&&St(c,N),x}for(k=r(c,k);!P.done;N++,P=d.next())P=w(k,c,N,P.value,y),P!==null&&(e&&P.alternate!==null&&k.delete(P.key===null?N:P.key),a=u(P,a,N),v===null?x=P:v.sibling=P,v=P);return e&&k.forEach(function(Ae){return t(c,Ae)}),$&&St(c,N),x}function M(c,a,d,y){if(typeof d=="object"&&d!==null&&d.type===Dt&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case nr:e:{for(var x=d.key,v=a;v!==null;){if(v.key===x){if(x=d.type,x===Dt){if(v.tag===7){n(c,v.sibling),a=l(v,d.props.children),a.return=c,c=a;break e}}else if(v.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===qe&&yi(x)===v.type){n(c,v.sibling),a=l(v,d.props),a.ref=hn(c,v,d),a.return=c,c=a;break e}n(c,v);break}else t(c,v);v=v.sibling}d.type===Dt?(a=Nt(d.props.children,c.mode,y,d.key),a.return=c,c=a):(y=Lr(d.type,d.key,d.props,null,c.mode,y),y.ref=hn(c,a,d),y.return=c,c=y)}return o(c);case Mt:e:{for(v=d.key;a!==null;){if(a.key===v)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){n(c,a.sibling),a=l(a,d.children||[]),a.return=c,c=a;break e}else{n(c,a);break}else t(c,a);a=a.sibling}a=Wl(d,c.mode,y),a.return=c,c=a}return o(c);case qe:return v=d._init,M(c,a,v(d._payload),y)}if(wn(d))return S(c,a,d,y);if(cn(d))return E(c,a,d,y);pr(c,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,a!==null&&a.tag===6?(n(c,a.sibling),a=l(a,d),a.return=c,c=a):(n(c,a),a=Hl(d,c.mode,y),a.return=c,c=a),o(c)):n(c,a)}return M}var nn=na(!0),ra=na(!1),Hr=ht(null),Wr=null,Wt=null,io=null;function so(){io=Wt=Wr=null}function ao(e){var t=Hr.current;U(Hr),e._currentValue=t}function Su(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Jt(e,t){Wr=e,io=Wt=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(fe=!0),e.firstContext=null)}function Ne(e){var t=e._currentValue;if(io!==e)if(e={context:e,memoizedValue:t,next:null},Wt===null){if(Wr===null)throw Error(g(308));Wt=e,Wr.dependencies={lanes:0,firstContext:e}}else Wt=Wt.next=e;return t}var xt=null;function co(e){xt===null?xt=[e]:xt.push(e)}function la(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,co(t)):(n.next=l.next,l.next=n),t.interleaved=n,Xe(e,r)}function Xe(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var be=!1;function fo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Qe(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function st(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,I&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,Xe(e,n)}return l=r.interleaved,l===null?(t.next=t,co(r)):(t.next=l.next,l.next=t),r.interleaved=t,Xe(e,n)}function xr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Zu(e,n)}}function gi(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,u=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};u===null?l=u=o:u=u.next=o,n=n.next}while(n!==null);u===null?l=u=t:u=u.next=t}else l=u=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:u,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Qr(e,t,n,r){var l=e.updateQueue;be=!1;var u=l.firstBaseUpdate,o=l.lastBaseUpdate,i=l.shared.pending;if(i!==null){l.shared.pending=null;var s=i,f=s.next;s.next=null,o===null?u=f:o.next=f,o=s;var h=e.alternate;h!==null&&(h=h.updateQueue,i=h.lastBaseUpdate,i!==o&&(i===null?h.firstBaseUpdate=f:i.next=f,h.lastBaseUpdate=s))}if(u!==null){var m=l.baseState;o=0,h=f=s=null,i=u;do{var p=i.lane,w=i.eventTime;if((r&p)===p){h!==null&&(h=h.next={eventTime:w,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var S=e,E=i;switch(p=t,w=n,E.tag){case 1:if(S=E.payload,typeof S=="function"){m=S.call(w,m,p);break e}m=S;break e;case 3:S.flags=S.flags&-65537|128;case 0:if(S=E.payload,p=typeof S=="function"?S.call(w,m,p):S,p==null)break e;m=B({},m,p);break e;case 2:be=!0}}i.callback!==null&&i.lane!==0&&(e.flags|=64,p=l.effects,p===null?l.effects=[i]:p.push(i))}else w={eventTime:w,lane:p,tag:i.tag,payload:i.payload,callback:i.callback,next:null},h===null?(f=h=w,s=m):h=h.next=w,o|=p;if(i=i.next,i===null){if(i=l.shared.pending,i===null)break;p=i,i=p.next,p.next=null,l.lastBaseUpdate=p,l.shared.pending=null}}while(!0);if(h===null&&(s=m),l.baseState=s,l.firstBaseUpdate=f,l.lastBaseUpdate=h,t=l.shared.interleaved,t!==null){l=t;do o|=l.lane,l=l.next;while(l!==t)}else u===null&&(l.shared.lanes=0);Tt|=o,e.lanes=o,e.memoizedState=m}}function wi(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Ul.transition;Ul.transition={};try{e(!1),t()}finally{O=n,Ul.transition=r}}function Ea(){return Pe().memoizedState}function ed(e,t,n){var r=ct(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},xa(e))Ca(t,n);else if(n=la(e,t,n,r),n!==null){var l=ie();Ie(n,e,r,l),_a(n,t,r)}}function td(e,t,n){var r=ct(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(xa(e))Ca(t,l);else{var u=e.alternate;if(e.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var o=t.lastRenderedState,i=u(o,n);if(l.hasEagerState=!0,l.eagerState=i,Oe(i,o)){var s=t.interleaved;s===null?(l.next=l,co(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=la(e,t,l,r),n!==null&&(l=ie(),Ie(n,e,r,l),_a(n,t,r))}}function xa(e){var t=e.alternate;return e===V||t!==null&&t===V}function Ca(e,t){Pn=Yr=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function _a(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Zu(e,n)}}var Xr={readContext:Ne,useCallback:ne,useContext:ne,useEffect:ne,useImperativeHandle:ne,useInsertionEffect:ne,useLayoutEffect:ne,useMemo:ne,useReducer:ne,useRef:ne,useState:ne,useDebugValue:ne,useDeferredValue:ne,useTransition:ne,useMutableSource:ne,useSyncExternalStore:ne,useId:ne,unstable_isNewReconciler:!1},nd={readContext:Ne,useCallback:function(e,t){return De().memoizedState=[e,t===void 0?null:t],e},useContext:Ne,useEffect:ki,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,_r(4194308,4,ya.bind(null,t,e),n)},useLayoutEffect:function(e,t){return _r(4194308,4,e,t)},useInsertionEffect:function(e,t){return _r(4,2,e,t)},useMemo:function(e,t){var n=De();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=De();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ed.bind(null,V,e),[r.memoizedState,e]},useRef:function(e){var t=De();return e={current:e},t.memoizedState=e},useState:Si,useDebugValue:So,useDeferredValue:function(e){return De().memoizedState=e},useTransition:function(){var e=Si(!1),t=e[0];return e=bf.bind(null,e[1]),De().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=V,l=De();if($){if(n===void 0)throw Error(g(407));n=n()}else{if(n=t(),J===null)throw Error(g(349));Lt&30||aa(r,t,n)}l.memoizedState=n;var u={value:n,getSnapshot:t};return l.queue=u,ki(fa.bind(null,r,u,e),[e]),r.flags|=2048,Kn(9,ca.bind(null,r,u,n,t),void 0,null),n},useId:function(){var e=De(),t=J.identifierPrefix;if($){var n=We,r=He;n=(r&~(1<<32-je(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Wn++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=o.createElement(n,{is:r.is}):(e=o.createElement(n),n==="select"&&(o=e,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):e=o.createElementNS(e,n),e[Fe]=t,e[Vn]=r,Ma(e,t,!1,!1),t.stateNode=e;e:{switch(o=nu(n,r),n){case"dialog":F("cancel",e),F("close",e),l=r;break;case"iframe":case"object":case"embed":F("load",e),l=r;break;case"video":case"audio":for(l=0;lun&&(t.flags|=128,r=!0,vn(u,!1),t.lanes=4194304)}else{if(!r)if(e=Kr(o),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),vn(u,!0),u.tail===null&&u.tailMode==="hidden"&&!o.alternate&&!$)return re(t),null}else 2*Q()-u.renderingStartTime>un&&n!==1073741824&&(t.flags|=128,r=!0,vn(u,!1),t.lanes=4194304);u.isBackwards?(o.sibling=t.child,t.child=o):(n=u.last,n!==null?n.sibling=o:t.child=o,u.last=o)}return u.tail!==null?(t=u.tail,u.rendering=t,u.tail=t.sibling,u.renderingStartTime=Q(),t.sibling=null,n=A.current,D(A,r?n&1|2:n&1),t):(re(t),null);case 22:case 23:return No(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?he&1073741824&&(re(t),t.subtreeFlags&6&&(t.flags|=8192)):re(t),null;case 24:return null;case 25:return null}throw Error(g(156,t.tag))}function cd(e,t){switch(uo(t),t.tag){case 1:return pe(t.type)&&$r(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return rn(),U(de),U(ue),ho(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return mo(t),null;case 13:if(U(A),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(g(340));tn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return U(A),null;case 4:return rn(),null;case 10:return ao(t.type._context),null;case 22:case 23:return No(),null;case 24:return null;default:return null}}var hr=!1,le=!1,fd=typeof WeakSet=="function"?WeakSet:Set,C=null;function Qt(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){H(e,t,r)}else n.current=null}function Lu(e,t,n){try{n()}catch(r){H(e,t,r)}}var ji=!1;function dd(e,t){if(du=Mr,e=Bs(),ro(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,u=r.focusNode;r=r.focusOffset;try{n.nodeType,u.nodeType}catch{n=null;break e}var o=0,i=-1,s=-1,f=0,h=0,m=e,p=null;t:for(;;){for(var w;m!==n||l!==0&&m.nodeType!==3||(i=o+l),m!==u||r!==0&&m.nodeType!==3||(s=o+r),m.nodeType===3&&(o+=m.nodeValue.length),(w=m.firstChild)!==null;)p=m,m=w;for(;;){if(m===e)break t;if(p===n&&++f===l&&(i=o),p===u&&++h===r&&(s=o),(w=m.nextSibling)!==null)break;m=p,p=m.parentNode}m=w}n=i===-1||s===-1?null:{start:i,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(pu={focusedElem:e,selectionRange:n},Mr=!1,C=t;C!==null;)if(t=C,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,C=e;else for(;C!==null;){t=C;try{var S=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(S!==null){var E=S.memoizedProps,M=S.memoizedState,c=t.stateNode,a=c.getSnapshotBeforeUpdate(t.elementType===t.type?E:Le(t.type,E),M);c.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(g(163))}}catch(y){H(t,t.return,y)}if(e=t.sibling,e!==null){e.return=t.return,C=e;break}C=t.return}return S=ji,ji=!1,S}function zn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var u=l.destroy;l.destroy=void 0,u!==void 0&&Lu(t,n,u)}l=l.next}while(l!==r)}}function al(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Tu(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Ua(e){var t=e.alternate;t!==null&&(e.alternate=null,Ua(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Fe],delete t[Vn],delete t[vu],delete t[Xf],delete t[Gf])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function $a(e){return e.tag===5||e.tag===3||e.tag===4}function Ii(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||$a(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ru(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Ur));else if(r!==4&&(e=e.child,e!==null))for(Ru(e,t,n),e=e.sibling;e!==null;)Ru(e,t,n),e=e.sibling}function ju(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ju(e,t,n),e=e.sibling;e!==null;)ju(e,t,n),e=e.sibling}var b=null,Te=!1;function Je(e,t,n){for(n=n.child;n!==null;)Aa(e,t,n),n=n.sibling}function Aa(e,t,n){if(Ue&&typeof Ue.onCommitFiberUnmount=="function")try{Ue.onCommitFiberUnmount(tl,n)}catch{}switch(n.tag){case 5:le||Qt(n,t);case 6:var r=b,l=Te;b=null,Je(e,t,n),b=r,Te=l,b!==null&&(Te?(e=b,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):b.removeChild(n.stateNode));break;case 18:b!==null&&(Te?(e=b,n=n.stateNode,e.nodeType===8?Ml(e.parentNode,n):e.nodeType===1&&Ml(e,n),Dn(e)):Ml(b,n.stateNode));break;case 4:r=b,l=Te,b=n.stateNode.containerInfo,Te=!0,Je(e,t,n),b=r,Te=l;break;case 0:case 11:case 14:case 15:if(!le&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var u=l,o=u.destroy;u=u.tag,o!==void 0&&(u&2||u&4)&&Lu(n,t,o),l=l.next}while(l!==r)}Je(e,t,n);break;case 1:if(!le&&(Qt(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(i){H(n,t,i)}Je(e,t,n);break;case 21:Je(e,t,n);break;case 22:n.mode&1?(le=(r=le)||n.memoizedState!==null,Je(e,t,n),le=r):Je(e,t,n);break;default:Je(e,t,n)}}function Oi(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new fd),t.forEach(function(r){var l=kd.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function ze(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=o),r&=~u}if(r=l,r=Q()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*md(r/1960))-r,10e?16:e,rt===null)var r=!1;else{if(e=rt,rt=null,Jr=0,I&6)throw Error(g(331));var l=I;for(I|=4,C=e.current;C!==null;){var u=C,o=u.child;if(C.flags&16){var i=u.deletions;if(i!==null){for(var s=0;sQ()-Co?_t(e,0):xo|=n),me(e,t)}function Xa(e,t){t===0&&(e.mode&1?(t=or,or<<=1,!(or&130023424)&&(or=4194304)):t=1);var n=ie();e=Xe(e,t),e!==null&&(Gn(e,t,n),me(e,n))}function Sd(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Xa(e,n)}function kd(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(g(314))}r!==null&&r.delete(t),Xa(e,n)}var Ga;Ga=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||de.current)fe=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return fe=!1,sd(e,t,n);fe=!!(e.flags&131072)}else fe=!1,$&&t.flags&1048576&&bs(t,Br,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Nr(e,t),e=t.pendingProps;var l=en(t,ue.current);Jt(t,n),l=yo(null,t,r,e,l,n);var u=go();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,pe(r)?(u=!0,Ar(t)):u=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,fo(t),l.updater=sl,t.stateNode=l,l._reactInternals=t,Eu(t,r,e,n),t=_u(null,t,r,!0,u,n)):(t.tag=0,$&&u&&lo(t),oe(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Nr(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=xd(r),e=Le(r,e),l){case 0:t=Cu(null,t,r,e,n);break e;case 1:t=Li(null,t,r,e,n);break e;case 11:t=Pi(null,t,r,e,n);break e;case 14:t=zi(null,t,r,Le(r.type,e),n);break e}throw Error(g(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Le(r,l),Cu(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Le(r,l),Li(e,t,r,l,n);case 3:e:{if(ja(t),e===null)throw Error(g(387));r=t.pendingProps,u=t.memoizedState,l=u.element,ua(e,t),Qr(t,r,null,n);var o=t.memoizedState;if(r=o.element,u.isDehydrated)if(u={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=u,t.memoizedState=u,t.flags&256){l=ln(Error(g(423)),t),t=Ti(e,t,r,n,l);break e}else if(r!==l){l=ln(Error(g(424)),t),t=Ti(e,t,r,n,l);break e}else for(ve=it(t.stateNode.containerInfo.firstChild),ye=t,$=!0,Re=null,n=ra(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(tn(),r===l){t=Ge(e,t,n);break e}oe(e,t,r,n)}t=t.child}return t;case 5:return oa(t),e===null&&wu(t),r=t.type,l=t.pendingProps,u=e!==null?e.memoizedProps:null,o=l.children,mu(r,l)?o=null:u!==null&&mu(r,u)&&(t.flags|=32),Ra(e,t),oe(e,t,o,n),t.child;case 6:return e===null&&wu(t),null;case 13:return Ia(e,t,n);case 4:return po(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=nn(t,null,r,n):oe(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Le(r,l),Pi(e,t,r,l,n);case 7:return oe(e,t,t.pendingProps,n),t.child;case 8:return oe(e,t,t.pendingProps.children,n),t.child;case 12:return oe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,u=t.memoizedProps,o=l.value,D(Hr,r._currentValue),r._currentValue=o,u!==null)if(Oe(u.value,o)){if(u.children===l.children&&!de.current){t=Ge(e,t,n);break e}}else for(u=t.child,u!==null&&(u.return=t);u!==null;){var i=u.dependencies;if(i!==null){o=u.child;for(var s=i.firstContext;s!==null;){if(s.context===r){if(u.tag===1){s=Qe(-1,n&-n),s.tag=2;var f=u.updateQueue;if(f!==null){f=f.shared;var h=f.pending;h===null?s.next=s:(s.next=h.next,h.next=s),f.pending=s}}u.lanes|=n,s=u.alternate,s!==null&&(s.lanes|=n),Su(u.return,n,t),i.lanes|=n;break}s=s.next}}else if(u.tag===10)o=u.type===t.type?null:u.child;else if(u.tag===18){if(o=u.return,o===null)throw Error(g(341));o.lanes|=n,i=o.alternate,i!==null&&(i.lanes|=n),Su(o,n,t),o=u.sibling}else o=u.child;if(o!==null)o.return=u;else for(o=u;o!==null;){if(o===t){o=null;break}if(u=o.sibling,u!==null){u.return=o.return,o=u;break}o=o.return}u=o}oe(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,Jt(t,n),l=Ne(l),r=r(l),t.flags|=1,oe(e,t,r,n),t.child;case 14:return r=t.type,l=Le(r,t.pendingProps),l=Le(r.type,l),zi(e,t,r,l,n);case 15:return La(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Le(r,l),Nr(e,t),t.tag=1,pe(r)?(e=!0,Ar(t)):e=!1,Jt(t,n),Na(t,r,l),Eu(t,r,l,n),_u(null,t,r,!0,e,n);case 19:return Oa(e,t,n);case 22:return Ta(e,t,n)}throw Error(g(156,t.tag))};function Za(e,t){return xs(e,t)}function Ed(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ce(e,t,n,r){return new Ed(e,t,n,r)}function zo(e){return e=e.prototype,!(!e||!e.isReactComponent)}function xd(e){if(typeof e=="function")return zo(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ku)return 11;if(e===Yu)return 14}return 2}function ft(e,t){var n=e.alternate;return n===null?(n=Ce(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Lr(e,t,n,r,l,u){var o=2;if(r=e,typeof e=="function")zo(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case Dt:return Nt(n.children,l,u,t);case Qu:o=8,l|=8;break;case Kl:return e=Ce(12,n,t,l|2),e.elementType=Kl,e.lanes=u,e;case Yl:return e=Ce(13,n,t,l),e.elementType=Yl,e.lanes=u,e;case Xl:return e=Ce(19,n,t,l),e.elementType=Xl,e.lanes=u,e;case os:return fl(n,l,u,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ls:o=10;break e;case us:o=9;break e;case Ku:o=11;break e;case Yu:o=14;break e;case qe:o=16,r=null;break e}throw Error(g(130,e==null?e:typeof e,""))}return t=Ce(o,n,t,l),t.elementType=e,t.type=r,t.lanes=u,t}function Nt(e,t,n,r){return e=Ce(7,e,r,t),e.lanes=n,e}function fl(e,t,n,r){return e=Ce(22,e,r,t),e.elementType=os,e.lanes=n,e.stateNode={isHidden:!1},e}function Hl(e,t,n){return e=Ce(6,e,null,t),e.lanes=n,e}function Wl(e,t,n){return t=Ce(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Cd(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Cl(0),this.expirationTimes=Cl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Cl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Lo(e,t,n,r,l,u,o,i,s){return e=new Cd(e,t,n,i,s),t===1?(t=1,u===!0&&(t|=8)):t=0,u=Ce(3,null,null,t),e.current=u,u.stateNode=e,u.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},fo(u),e}function _d(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(ec)}catch(e){console.error(e)}}ec(),es.exports=we;var Td=es.exports,tc,Bi=Td;tc=Bi.createRoot,Bi.hydrateRoot;const Rd="aevatar.agent.id",jd="aevatar.agent.parent";function Id(){const[e,t]=ke.useState([]),[n,r]=ke.useState([]),[l,u]=ke.useState([]),[o,i]=ke.useState([]),[s,f]=ke.useState(""),[h,m]=ke.useState(null),[p,w]=ke.useState(null),[S,E]=ke.useState({}),[M,c]=ke.useState(!1),a=ke.useCallback(v=>{var R,P;const k=[(R=v.tags)==null?void 0:R[Rd],(P=v.tags)==null?void 0:P[jd]].filter(q=>!!q);if(k.length===0)return;const N=Date.now()+1200;E(q=>({...q,...Object.fromEntries(k.map(Ae=>[Ae,N]))})),window.setTimeout(()=>{const q=Date.now();E(Ae=>Object.fromEntries(Object.entries(Ae).filter(([,yt])=>yt>q)))},1300)},[]),d=ke.useCallback(async()=>{const[v,k,N]=await Promise.all([fetch("/api/inspector/actors").then(R=>R.json()),fetch("/api/inspector/workflow-runs").then(R=>R.json()),fetch("/api/inspector/readmodels").then(R=>R.json())]);t((v.groups??[]).flatMap(R=>R.actorIds.map(P=>({actorId:P,type:R.type})))),r(k),u(N)},[]);ke.useEffect(()=>{d();const v=window.setInterval(d,5e3),k=new EventSource("/api/inspector/events");return k.onopen=()=>c(!0),k.onerror=()=>c(!1),k.addEventListener("activity",N=>{const R=JSON.parse(N.data);a(R),i(P=>[R,...P].slice(0,24))}),()=>{window.clearInterval(v),k.close()}},[a,d]);const y=e.filter(v=>v.actorId.toLowerCase().includes(s.toLowerCase())||v.type.toLowerCase().includes(s.toLowerCase())),x=e.find(v=>v.actorId===h);return j.jsxs("div",{className:"app",children:[j.jsxs("header",{className:"topbar",children:[j.jsxs("div",{children:[j.jsx("h1",{children:"Aevatar Inspector"}),j.jsx("p",{className:M?"ok":"bad",children:M?"Live":"Disconnected"})]}),j.jsx("input",{value:s,onChange:v=>f(v.target.value),placeholder:"agent type or id"}),j.jsx("button",{type:"button",onClick:async()=>{await fetch("/api/inspector/demo/hierarchy",{method:"POST"}),await d()},children:"Run hierarchy"})]}),j.jsxs("main",{className:"grid",children:[j.jsxs("aside",{children:[j.jsx("div",{className:"label",children:"Actors"}),y.map(v=>j.jsxs("button",{type:"button",className:["actor",v.actorId===h?"is-selected":"",v.actorId===p?"is-hovered":"",S[v.actorId]?"is-active":""].filter(Boolean).join(" "),onMouseEnter:()=>w(v.actorId),onMouseLeave:()=>w(null),onFocus:()=>w(v.actorId),onBlur:()=>w(null),onClick:()=>m(v.actorId),children:[j.jsx("span",{children:v.actorId}),j.jsx("span",{children:v.type})]},v.actorId))]}),j.jsx("section",{className:"canvas",children:y.map((v,k)=>j.jsxs("div",{className:["node",v.actorId===h?"is-selected":"",v.actorId===p?"is-hovered":"",S[v.actorId]?"is-active":""].filter(Boolean).join(" "),style:{left:`${16+k%4*21}%`,top:`${18+Math.floor(k/4)*18}%`},onMouseEnter:()=>w(v.actorId),onMouseLeave:()=>w(null),children:[j.jsx("span",{}),j.jsx("strong",{children:v.actorId})]},v.actorId))}),j.jsxs("aside",{children:[j.jsx("div",{className:"label",children:"Inspector"}),x?j.jsxs("dl",{children:[j.jsx("dt",{children:"actor"}),j.jsx("dd",{children:x.actorId}),j.jsx("dt",{children:"type"}),j.jsx("dd",{children:x.type})]}):j.jsx("p",{children:"Select an actor"}),j.jsx("div",{className:"label",children:"Recent Events"}),o.slice(0,8).map((v,k)=>j.jsx("p",{className:"event",children:v.name},`${v.traceId}-${k}`))]})]}),j.jsxs("footer",{children:[j.jsxs("section",{children:[j.jsx("div",{className:"label",children:"Workflow Runs"}),n.map(v=>j.jsxs("p",{children:[v.workflowName||"unknown"," · ",v.status]},v.actorId))]}),j.jsxs("section",{children:[j.jsx("div",{className:"label",children:"ReadModels"}),l.map(v=>j.jsxs("p",{children:[v.name," ",j.jsxs("b",{children:["v",v.latestStateVersion??0]})]},v.name))]})]})]})}tc(document.getElementById("root")).render(j.jsx(Id,{})); diff --git a/demos/Aevatar.Demos.Inspector/wwwroot/index.html b/demos/Aevatar.Demos.Inspector/wwwroot/index.html new file mode 100644 index 000000000..f7469803f --- /dev/null +++ b/demos/Aevatar.Demos.Inspector/wwwroot/index.html @@ -0,0 +1,13 @@ + + + + + + Aevatar Inspector + + + + +
+ + diff --git a/demos/Aevatar.Demos.Workflow.Web/wwwroot/app.js b/demos/Aevatar.Demos.Workflow.Web/wwwroot/app.js index 52bfa2a9f..eab18cd1f 100644 --- a/demos/Aevatar.Demos.Workflow.Web/wwwroot/app.js +++ b/demos/Aevatar.Demos.Workflow.Web/wwwroot/app.js @@ -361,17 +361,17 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `+e.stack):e},0)}}emit(e){this.listeners.forEach(t=>{t(e)})}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}}const MX=new JOe;function EP(n){MX.onUnexpectedError(n)}function ft(n){rc(n)||MX.onUnexpectedError(n)}function hs(n){rc(n)||MX.onUnexpectedExternalError(n)}function YH(n){if(n instanceof Error){const{name:e,message:t,cause:i}=n,s=n.stacktrace||n.stack;return{$isError:!0,name:e,message:t,stack:s,noTelemetry:CS.isErrorNoTelemetry(n),cause:i?YH(i):void 0,code:n.code}}return n}const IP="Canceled";function rc(n){return n instanceof Kc?!0:n instanceof Error&&n.name===IP&&n.message===IP}class Kc extends Error{constructor(){super(IP),this.name=this.message}}function e4e(){const n=new Error(IP);return n.name=n.message,n}function Vc(n){return n?new Error(`Illegal argument: ${n}`):new Error("Illegal argument")}function DP(n){return n?new Error(`Illegal state: ${n}`):new Error("Illegal state")}class t4e extends Error{constructor(e){super("NotSupported"),e&&(this.message=e)}}class CS extends Error{constructor(e){super(e),this.name="CodeExpectedError"}static fromError(e){if(e instanceof CS)return e;const t=new CS;return t.message=e.message,t.stack=e.stack,t}static isErrorNoTelemetry(e){return e.name==="CodeExpectedError"}}class Qe extends Error{constructor(e){super(e||"An unexpected bug occurred."),Object.setPrototypeOf(this,Qe.prototype)}}function Z6(n,e){if(!n)throw new Error(e?`Assertion failed (${e})`:"Assertion Failed")}function vT(n,e="Unreachable"){throw new Error(e)}function gI(n,e="unexpected state"){if(!n)throw typeof e=="string"?new Qe(`Assertion Failed: ${e}`):e}function qne(n,e="Soft Assertion Failed"){n||ft(new Qe(e))}function db(n){if(!n()){debugger;n(),ft(new Qe("Assertion Failed"))}}function wT(n,e){let t=0;for(;t"u"}function lr(n){return!Tc(n)}function Tc(n){return ao(n)||n===null}function Qt(n,e){if(!n)throw new Error(e?`Unexpected type, expected '${e}'`:"Unexpected type")}function n_(n){return gI(n!=null,"Argument is `undefined` or `null`."),n}function e0(n){return typeof n=="function"}function s4e(n,e){const t=Math.min(n.length,e.length);for(let i=0;i{e[t]=i&&typeof i=="object"?Kh(i):i}),e}function o4e(n){if(!n||typeof n!="object")return n;const e=[n];for(;e.length>0;){const t=e.shift();Object.freeze(t);for(const i in t)if(h_e.call(t,i)){const s=t[i];typeof s=="object"&&!Object.isFrozen(s)&&!n4e(s)&&e.push(s)}}return n}const h_e=Object.prototype.hasOwnProperty;function f_e(n,e){return QH(n,e,new Set)}function QH(n,e,t){if(Tc(n))return n;const i=e(n);if(typeof i<"u")return i;if(Array.isArray(n)){const s=[];for(const r of n)s.push(QH(r,e,t));return s}if(Ds(n)){if(t.has(n))throw new Error("Cannot clone recursive data-structure");t.add(n);const s={};for(const r in n)h_e.call(n,r)&&(s[r]=QH(n[r],e,t));return t.delete(n),s}return n}function h8(n,e,t=!0){return Ds(n)?(Ds(e)&&Object.keys(e).forEach(i=>{i in n?t&&(Ds(n[i])&&Ds(e[i])?h8(n[i],e[i],t):n[i]=e[i]):n[i]=e[i]}),n):e}function al(n,e){if(n===e)return!0;if(n==null||e===null||e===void 0||typeof n!=typeof e||typeof n!="object"||Array.isArray(n)!==Array.isArray(e))return!1;let t,i;if(Array.isArray(n)){if(n.length!==e.length)return!1;for(t=0;t=0;function TP(n,e){let t;return e.length===0?t=n:t=n.replace(/\{(\d+)\}/g,(i,s)=>{const r=s[0],o=e[r];let a=i;return typeof o=="string"?a=o:(typeof o=="number"||typeof o=="boolean"||o===void 0||o===null)&&(a=String(o)),a}),a4e&&(t="["+t.replace(/[aouei]/g,"$&$&")+"]"),t}function w(n,e,...t){return TP(typeof n=="number"?p_e(n,e):e,t)}function p_e(n,e){var i;const t=(i=g_e())==null?void 0:i[n];if(typeof t!="string"){if(typeof e=="string")return e;throw new Error(`!!! NLS MISSING: ${n} !!!`)}return t}function se(n,e,...t){let i;typeof n=="number"?i=p_e(n,e):i=e;const s=TP(i,t);return{value:s,original:e===i?s:TP(e,t)}}const o1="en";let pI=!1,mI=!1,SN=!1,m_e=!1,PX=!1,OX=!1,__e=!1,Y2,GM=o1,Kne=o1,l4e,lu;const fp=globalThis;let wo;var Dhe;typeof fp.vscode<"u"&&typeof fp.vscode.process<"u"?wo=fp.vscode.process:typeof process<"u"&&typeof((Dhe=process==null?void 0:process.versions)==null?void 0:Dhe.node)=="string"&&(wo=process);var The;const c4e=typeof((The=wo==null?void 0:wo.versions)==null?void 0:The.electron)=="string",d4e=c4e&&(wo==null?void 0:wo.type)==="renderer";var Rhe;if(typeof wo=="object"){pI=wo.platform==="win32",mI=wo.platform==="darwin",SN=wo.platform==="linux",SN&&wo.env.SNAP&&wo.env.SNAP_REVISION,wo.env.CI||wo.env.BUILD_ARTIFACTSTAGINGDIRECTORY||wo.env.GITHUB_WORKSPACE,Y2=o1,GM=o1;const n=wo.env.VSCODE_NLS_CONFIG;if(n)try{const e=JSON.parse(n);Y2=e.userLocale,Kne=e.osLocale,GM=e.resolvedLanguage||o1,l4e=(Rhe=e.languagePack)==null?void 0:Rhe.translationsConfigFile}catch{}m_e=!0}else typeof navigator=="object"&&!d4e?(lu=navigator.userAgent,pI=lu.indexOf("Windows")>=0,mI=lu.indexOf("Macintosh")>=0,OX=(lu.indexOf("Macintosh")>=0||lu.indexOf("iPad")>=0||lu.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,SN=lu.indexOf("Linux")>=0,__e=(lu==null?void 0:lu.indexOf("Mobi"))>=0,PX=!0,GM=AX()||o1,Y2=navigator.language.toLowerCase(),Kne=Y2):console.error("Unable to resolve platform.");let YM=0;mI?YM=1:pI?YM=3:SN&&(YM=2);const xr=pI,At=mI,Ia=SN,Yu=m_e,Of=PX,u4e=PX&&typeof fp.importScripts=="function",h4e=u4e?fp.origin:void 0,Gc=OX,b_e=__e,Q6=YM,Sf=lu,f4e=GM,g4e=typeof fp.postMessage=="function"&&!fp.importScripts,CT=(()=>{if(g4e){const n=[];fp.addEventListener("message",t=>{if(t.data&&t.data.vscodeScheduleAsyncWork)for(let i=0,s=n.length;i{const i=++e;n.push({id:i,callback:t}),fp.postMessage({vscodeScheduleAsyncWork:i},"*")}}return n=>setTimeout(n)})(),il=mI||OX?2:pI?1:3;let Gne=!0,Yne=!1;function v_e(){if(!Yne){Yne=!0;const n=new Uint8Array(2);n[0]=1,n[1]=2,Gne=new Uint16Array(n.buffer)[0]===513}return Gne}const FX=!!(Sf&&Sf.indexOf("Chrome")>=0),p4e=!!(Sf&&Sf.indexOf("Firefox")>=0),m4e=!!(!FX&&Sf&&Sf.indexOf("Safari")>=0),w_e=!!(Sf&&Sf.indexOf("Edg/")>=0),_4e=!!(Sf&&Sf.indexOf("Android")>=0);function t0(n,e){const t=this;let i=!1,s;return function(){return i||(i=!0,s=n.apply(t,arguments)),s}}var Vt;(function(n){function e(L){return!!L&&typeof L=="object"&&typeof L[Symbol.iterator]=="function"}n.is=e;const t=Object.freeze([]);function i(){return t}n.empty=i;function*s(L){yield L}n.single=s;function r(L){return e(L)?L:s(L)}n.wrap=r;function o(L){return L||t}n.from=o;function*a(L){for(let k=L.length-1;k>=0;k--)yield L[k]}n.reverse=a;function l(L){return!L||L[Symbol.iterator]().next().done===!0}n.isEmpty=l;function c(L){return L[Symbol.iterator]().next().value}n.first=c;function d(L,k){let N=0;for(const I of L)if(k(I,N++))return!0;return!1}n.some=d;function u(L,k){let N=0;for(const I of L)if(!k(I,N++))return!1;return!0}n.every=u;function h(L,k){for(const N of L)if(k(N))return N}n.find=h;function*f(L,k){for(const N of L)k(N)&&(yield N)}n.filter=f;function*g(L,k){let N=0;for(const I of L)yield k(I,N++)}n.map=g;function*m(L,k){let N=0;for(const I of L)yield*k(I,N++)}n.flatMap=m;function*_(...L){for(const k of L)XH(k)?yield*k:yield k}n.concat=_;function b(L,k,N){let I=N;for(const M of L)I=k(I,M);return I}n.reduce=b;function v(L){let k=0;for(const N of L)k++;return k}n.length=v;function*C(L,k,N=L.length){for(k<-L.length&&(k=0),k<0&&(k+=L.length),N<0?N+=L.length:N>L.length&&(N=L.length);k1)throw new AggregateError(e,"Encountered errors while disposing of store");return Array.isArray(n)?[]:n}else if(n)return n.dispose(),n}function Bd(...n){return Ve(()=>gi(n))}class b4e{constructor(e){this._isDisposed=!1,this._fn=e}dispose(){if(!this._isDisposed){if(!this._fn)throw new Error("Unbound disposable context: Need to use an arrow function to preserve the value of this");this._isDisposed=!0,this._fn()}}}function Ve(n){return new b4e(n)}const G5=class G5{constructor(){this._toDispose=new Set,this._isDisposed=!1}dispose(){this._isDisposed||(this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{gi(this._toDispose)}finally{this._toDispose.clear()}}add(e){if(!e||e===Z.None)return e;if(e===this)throw new Error("Cannot register a disposable on itself!");return this._isDisposed?G5.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(e),e}delete(e){if(e){if(e===this)throw new Error("Cannot dispose a disposable on itself!");this._toDispose.delete(e),e.dispose()}}};G5.DISABLE_DISPOSED_WARNING=!1;let re=G5;const Pee=class Pee{constructor(){this._store=new re,this._store}dispose(){this._store.dispose()}_register(e){if(e===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(e)}};Pee.None=Object.freeze({dispose(){}});let Z=Pee;class ci{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(e){var t;this._isDisposed||e===this._value||((t=this._value)==null||t.dispose(),this._value=e)}clear(){this.value=void 0}dispose(){var e;this._isDisposed=!0,(e=this._value)==null||e.dispose(),this._value=void 0}}class v4e{constructor(e){this._disposable=e,this._counter=1}acquire(){return this._counter++,this}release(){return--this._counter===0&&this._disposable.dispose(),this}}class w4e{constructor(e){this.object=e}dispose(){}}class f8{constructor(){this._store=new Map,this._isDisposed=!1}dispose(){this._isDisposed=!0,this.clearAndDisposeAll()}clearAndDisposeAll(){if(this._store.size)try{gi(this._store.values())}finally{this._store.clear()}}get(e){return this._store.get(e)}set(e,t,i=!1){var s;this._isDisposed&&console.warn(new Error("Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!").stack),i||(s=this._store.get(e))==null||s.dispose(),this._store.set(e,t)}deleteAndDispose(e){var t;(t=this._store.get(e))==null||t.dispose(),this._store.delete(e)}values(){return this._store.values()}[Symbol.iterator](){return this._store[Symbol.iterator]()}}var np;let zs=(np=class{constructor(e){this.element=e,this.next=np.Undefined,this.prev=np.Undefined}},np.Undefined=new np(void 0),np);class No{constructor(){this._first=zs.Undefined,this._last=zs.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===zs.Undefined}clear(){let e=this._first;for(;e!==zs.Undefined;){const t=e.next;e.prev=zs.Undefined,e.next=zs.Undefined,e=t}this._first=zs.Undefined,this._last=zs.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){const i=new zs(e);if(this._first===zs.Undefined)this._first=i,this._last=i;else if(t){const r=this._last;this._last=i,i.prev=r,r.next=i}else{const r=this._first;this._first=i,i.next=r,r.prev=i}this._size+=1;let s=!1;return()=>{s||(s=!0,this._remove(i))}}shift(){if(this._first!==zs.Undefined){const e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==zs.Undefined){const e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==zs.Undefined&&e.next!==zs.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===zs.Undefined&&e.next===zs.Undefined?(this._first=zs.Undefined,this._last=zs.Undefined):e.next===zs.Undefined?(this._last=this._last.prev,this._last.next=zs.Undefined):e.prev===zs.Undefined&&(this._first=this._first.next,this._first.prev=zs.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==zs.Undefined;)yield e.element,e=e.next}}const C4e=globalThis.performance.now.bind(globalThis.performance);class er{static create(e){return new er(e)}constructor(e){this._now=e===!1?Date.now:C4e,this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}reset(){this._startTime=this._now(),this._stopTime=-1}elapsed(){return this._stopTime!==-1?this._stopTime-this._startTime:this._now()-this._startTime}}var ye;(function(n){n.None=()=>Z.None;function e(P,H){return h(P,()=>{},0,void 0,!0,void 0,H)}n.defer=e;function t(P){return(H,O=null,A)=>{let z=!1,U;return U=P(W=>{if(!z)return U?U.dispose():z=!0,H.call(O,W)},null,A),z&&U.dispose(),U}}n.once=t;function i(P,H){return n.once(n.filter(P,H))}n.onceIf=i;function s(P,H,O){return d((A,z=null,U)=>P(W=>A.call(z,H(W)),null,U),O)}n.map=s;function r(P,H,O){return d((A,z=null,U)=>P(W=>{H(W),A.call(z,W)},null,U),O)}n.forEach=r;function o(P,H,O){return d((A,z=null,U)=>P(W=>H(W)&&A.call(z,W),null,U),O)}n.filter=o;function a(P){return P}n.signal=a;function l(...P){return(H,O=null,A)=>{const z=Bd(...P.map(U=>U(W=>H.call(O,W))));return u(z,A)}}n.any=l;function c(P,H,O,A){let z=O;return s(P,U=>(z=H(z,U),z),A)}n.reduce=c;function d(P,H){let O;const A={onWillAddFirstListener(){O=P(z.fire,z)},onDidRemoveLastListener(){O==null||O.dispose()}},z=new Y(A);return H==null||H.add(z),z.event}function u(P,H){return H instanceof Array?H.push(P):H&&H.add(P),P}function h(P,H,O=100,A=!1,z=!1,U,W){let F,q,Q,J=0,oe;const pe={leakWarningThreshold:U,onWillAddFirstListener(){F=P($e=>{J++,q=H(q,$e),A&&!Q&&(ke.fire(q),q=void 0),oe=()=>{const Xe=q;q=void 0,Q=void 0,(!A||J>1)&&ke.fire(Xe),J=0},typeof O=="number"?(Q&&clearTimeout(Q),Q=setTimeout(oe,O)):Q===void 0&&(Q=null,queueMicrotask(oe))})},onWillRemoveListener(){z&&J>0&&(oe==null||oe())},onDidRemoveLastListener(){oe=void 0,F.dispose()}},ke=new Y(pe);return W==null||W.add(ke),ke.event}n.debounce=h;function f(P,H=0,O){return n.debounce(P,(A,z)=>A?(A.push(z),A):[z],H,void 0,!0,void 0,O)}n.accumulate=f;function g(P,H=(A,z)=>A===z,O){let A=!0,z;return o(P,U=>{const W=A||!H(U,z);return A=!1,z=U,W},O)}n.latch=g;function m(P,H,O){return[n.filter(P,H,O),n.filter(P,A=>!H(A),O)]}n.split=m;function _(P,H=!1,O=[],A){let z=O.slice(),U=P(q=>{z?z.push(q):F.fire(q)});A&&A.add(U);const W=()=>{z==null||z.forEach(q=>F.fire(q)),z=null},F=new Y({onWillAddFirstListener(){U||(U=P(q=>F.fire(q)),A&&A.add(U))},onDidAddFirstListener(){z&&(H?setTimeout(W):W())},onDidRemoveLastListener(){U&&U.dispose(),U=null}});return A&&A.add(F),F.event}n.buffer=_;function b(P,H){return(A,z,U)=>{const W=H(new C);return P(function(F){const q=W.evaluate(F);q!==v&&A.call(z,q)},void 0,U)}}n.chain=b;const v=Symbol("HaltChainable");class C{constructor(){this.steps=[]}map(H){return this.steps.push(H),this}forEach(H){return this.steps.push(O=>(H(O),O)),this}filter(H){return this.steps.push(O=>H(O)?O:v),this}reduce(H,O){let A=O;return this.steps.push(z=>(A=H(A,z),A)),this}latch(H=(O,A)=>O===A){let O=!0,A;return this.steps.push(z=>{const U=O||!H(z,A);return O=!1,A=z,U?z:v}),this}evaluate(H){for(const O of this.steps)if(H=O(H),H===v)break;return H}}function y(P,H,O=A=>A){const A=(...F)=>W.fire(O(...F)),z=()=>P.on(H,A),U=()=>P.removeListener(H,A),W=new Y({onWillAddFirstListener:z,onDidRemoveLastListener:U});return W.event}n.fromNodeEventEmitter=y;function x(P,H,O=A=>A){const A=(...F)=>W.fire(O(...F)),z=()=>P.addEventListener(H,A),U=()=>P.removeEventListener(H,A),W=new Y({onWillAddFirstListener:z,onDidRemoveLastListener:U});return W.event}n.fromDOMEventEmitter=x;function S(P,H){let O;const A=new Promise((z,U)=>{const W=t(P)(z,null,H);O=()=>W.dispose()});return A.cancel=O,A}n.toPromise=S;function L(P,H){return P(O=>H.fire(O))}n.forward=L;function k(P,H,O){return H(O),P(A=>H(A))}n.runAndSubscribe=k;class N{constructor(H,O){this._observable=H,this._counter=0,this._hasChanged=!1;const A={onWillAddFirstListener:()=>{H.addObserver(this),this._observable.reportChanges()},onDidRemoveLastListener:()=>{H.removeObserver(this)}};this.emitter=new Y(A),O&&O.add(this.emitter)}beginUpdate(H){this._counter++}handlePossibleChange(H){}handleChange(H,O){this._hasChanged=!0}endUpdate(H){this._counter--,this._counter===0&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}function I(P,H){return new N(P,H).emitter.event}n.fromObservable=I;function M(P){return(H,O,A)=>{let z=0,U=!1;const W={beginUpdate(){z++},endUpdate(){z--,z===0&&(P.reportChanges(),U&&(U=!1,H.call(O)))},handlePossibleChange(){},handleChange(){U=!0}};P.addObserver(W),P.reportChanges();const F={dispose(){P.removeObserver(W)}};return A instanceof re?A.add(F):Array.isArray(A)&&A.push(F),F}}n.fromObservableLight=M})(ye||(ye={}));const jy=class jy{constructor(e){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${e}_${jy._idPool++}`,jy.all.add(this)}start(e){this._stopWatch=new er,this.listenerCount=e}stop(){if(this._stopWatch){const e=this._stopWatch.elapsed();this.durations.push(e),this.elapsedOverall+=e,this.invocationCount+=1,this._stopWatch=void 0}}};jy.all=new Set,jy._idPool=0;let JH=jy,y4e=-1;const Y5=class Y5{constructor(e,t,i=(Y5._idPool++).toString(16).padStart(3,"0")){this._errorHandler=e,this.threshold=t,this.name=i,this._warnCountdown=0}dispose(){var e;(e=this._stacks)==null||e.clear()}check(e,t){const i=this.threshold;if(i<=0||t{const r=this._stacks.get(e.value)||0;this._stacks.set(e.value,r-1)}}getMostFrequentStack(){if(!this._stacks)return;let e,t=0;for(const[i,s]of this._stacks)(!e||t{var a,l,c,d,u,h,f;if(this._leakageMon&&this._size>this._leakageMon.threshold**2){const g=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(g);const m=this._leakageMon.getMostFrequentStack()??["UNKNOWN stack",-1],_=new S4e(`${g}. HINT: Stack shows most frequent listener (${m[1]}-times)`,m[0]);return(((a=this._options)==null?void 0:a.onListenerError)||ft)(_),Z.None}if(this._disposed)return Z.None;t&&(e=e.bind(t));const s=new J6(e);let r;this._leakageMon&&this._size>=Math.ceil(this._leakageMon.threshold*.2)&&(s.stack=BX.create(),r=this._leakageMon.check(s.stack,this._size+1)),this._listeners?this._listeners instanceof J6?(this._deliveryQueue??(this._deliveryQueue=new C_e),this._listeners=[this._listeners,s]):this._listeners.push(s):((c=(l=this._options)==null?void 0:l.onWillAddFirstListener)==null||c.call(l,this),this._listeners=s,(u=(d=this._options)==null?void 0:d.onDidAddFirstListener)==null||u.call(d,this)),(f=(h=this._options)==null?void 0:h.onDidAddListener)==null||f.call(h,this),this._size++;const o=Ve(()=>{r==null||r(),this._removeListener(s)});return i instanceof re?i.add(o):Array.isArray(i)&&i.push(o),o}),this._event}_removeListener(e){var r,o,a,l;if((o=(r=this._options)==null?void 0:r.onWillRemoveListener)==null||o.call(r,this),!this._listeners)return;if(this._size===1){this._listeners=void 0,(l=(a=this._options)==null?void 0:a.onDidRemoveLastListener)==null||l.call(a,this),this._size=0;return}const t=this._listeners,i=t.indexOf(e);if(i===-1)throw console.log("disposed?",this._disposed),console.log("size?",this._size),console.log("arr?",JSON.stringify(this._listeners)),new Error("Attempted to dispose unknown listener");this._size--,t[i]=void 0;const s=this._deliveryQueue.current===this;if(this._size*L4e<=t.length){let c=0;for(let d=0;d0}};const k4e=()=>new C_e;class C_e{constructor(){this.i=-1,this.end=0}enqueue(e,t,i){this.i=0,this.end=i,this.current=e,this.value=t}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}class i0 extends Y{constructor(e){super(e),this._isPaused=0,this._eventQueue=new No,this._mergeFn=e==null?void 0:e.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused===0)if(this._mergeFn){if(this._eventQueue.size>0){const e=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(e))}}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(e){this._size&&(this._isPaused!==0?this._eventQueue.push(e):super.fire(e))}}class y_e extends i0{constructor(e){super(e),this._delay=e.delay??100}fire(e){this._handle||(this.pause(),this._handle=setTimeout(()=>{this._handle=void 0,this.resume()},this._delay)),super.fire(e)}}class N4e extends Y{constructor(e){super(e),this._queuedEvents=[],this._mergeFn=e==null?void 0:e.merge}fire(e){this.hasListeners()&&(this._queuedEvents.push(e),this._queuedEvents.length===1&&queueMicrotask(()=>{this._mergeFn?super.fire(this._mergeFn(this._queuedEvents)):this._queuedEvents.forEach(t=>super.fire(t)),this._queuedEvents=[]}))}}class E4e{constructor(){this.hasListeners=!1,this.events=[],this.emitter=new Y({onWillAddFirstListener:()=>this.onFirstListenerAdd(),onDidRemoveLastListener:()=>this.onLastListenerRemove()})}get event(){return this.emitter.event}add(e){const t={event:e,listener:null};return this.events.push(t),this.hasListeners&&this.hook(t),Ve(t0(()=>{this.hasListeners&&this.unhook(t);const s=this.events.indexOf(t);this.events.splice(s,1)}))}onFirstListenerAdd(){this.hasListeners=!0,this.events.forEach(e=>this.hook(e))}onLastListenerRemove(){this.hasListeners=!1,this.events.forEach(e=>this.unhook(e))}hook(e){e.listener=e.event(t=>this.emitter.fire(t))}unhook(e){var t;(t=e.listener)==null||t.dispose(),e.listener=null}dispose(){var e;this.emitter.dispose();for(const t of this.events)(e=t.listener)==null||e.dispose();this.events=[]}}class yT{constructor(){this.data=[]}wrapEvent(e,t,i){return(s,r,o)=>e(a=>{const l=this.data[this.data.length-1];if(!t){l?l.buffers.push(()=>s.call(r,a)):s.call(r,a);return}const c=l;if(!c){s.call(r,t(i,a));return}c.items??(c.items=[]),c.items.push(a),c.buffers.length===0&&l.buffers.push(()=>{c.reducedResult??(c.reducedResult=i?c.items.reduce(t,i):c.items.reduce(t)),s.call(r,c.reducedResult)})},void 0,o)}bufferEvents(e){const t={buffers:new Array};this.data.push(t);const i=e();return this.data.pop(),t.buffers.forEach(s=>s()),i}}class ZL{constructor(){this.listening=!1,this.inputEvent=ye.None,this.inputEventListener=Z.None,this.emitter=new Y({onDidAddFirstListener:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onDidRemoveLastListener:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(e){this.inputEvent=e,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=e(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}const Rc=new class{constructor(){this._zoomLevel=0,this._onDidChangeZoomLevel=new Y,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event}getZoomLevel(){return this._zoomLevel}setZoomLevel(n){n=Math.min(Math.max(-5,n),20),this._zoomLevel!==n&&(this._zoomLevel=n,this._onDidChangeZoomLevel.fire(this._zoomLevel))}},I4e=At?1.5:1.35,e9=8;class n0{static _create(e,t,i,s,r,o,a,l,c){o===0?o=I4e*i:o/?";function A4e(n=""){let e="(-?\\d*\\.\\d\\w*)|([^";for(const t of MP)n.indexOf(t)>=0||(e+="\\"+t);return e+="\\s]+)",new RegExp(e,"g")}const WX=A4e();function HX(n){let e=WX;if(n&&n instanceof RegExp)if(n.global)e=n;else{let t="g";n.ignoreCase&&(t+="i"),n.multiline&&(t+="m"),n.unicode&&(t+="u"),e=new RegExp(n.source,t)}return e.lastIndex=0,e}const L_e=new No;L_e.unshift({maxLen:1e3,windowSize:15,timeBudget:150});function _I(n,e,t,i,s){if(e=HX(e),s||(s=Vt.first(L_e)),t.length>s.maxLen){let c=n-s.maxLen/2;return c<0?c=0:i+=c,t=t.substring(c,n+s.maxLen/2),_I(n,e,t,i,s)}const r=Date.now(),o=n-1-i;let a=-1,l=null;for(let c=1;!(Date.now()-r>=s.timeBudget);c++){const d=o-s.windowSize*c;e.lastIndex=Math.max(0,d);const u=P4e(e,t,o,a);if(!u&&l||(l=u,d<=0))break;a=d}if(l){const c={word:l[0],startColumn:i+1+l.index,endColumn:i+1+l.index+l[0].length};return e.lastIndex=0,c}return null}function P4e(n,e,t,i){let s;for(;s=n.exec(e);){const r=s.index||0;if(r<=t&&n.lastIndex>=t)return s;if(i>0&&r>i)return null}return null}const Ih=8;class k_e{constructor(e){this._values=e}hasChanged(e){return this._values[e]}}class N_e{constructor(){this.stableMinimapLayoutInput=null,this.stableFitMaxMinimapScale=0,this.stableFitRemainingWidth=0}}class _n{constructor(e,t,i,s){this.id=e,this.name=t,this.defaultValue=i,this.schema=s}applyUpdate(e,t){return g8(e,t)}compute(e,t,i){return i}}class LN{constructor(e,t){this.newValue=e,this.didChange=t}}function g8(n,e){if(typeof n!="object"||typeof e!="object"||!n||!e)return new LN(e,n!==e);if(Array.isArray(n)||Array.isArray(e)){const i=Array.isArray(n)&&Array.isArray(e)&&on(n,e);return new LN(e,!i)}let t=!1;for(const i in e)if(e.hasOwnProperty(i)){const s=g8(n[i],e[i]);s.didChange&&(n[i]=s.newValue,t=!0)}return new LN(n,t)}class Rb{constructor(e,t){this.schema=void 0,this.id=e,this.name="_never_",this.defaultValue=t}applyUpdate(e,t){return g8(e,t)}validate(e){return this.defaultValue}}class cL{constructor(e,t,i,s){this.id=e,this.name=t,this.defaultValue=i,this.schema=s}applyUpdate(e,t){return g8(e,t)}compute(e,t,i){return i}}function Ge(n,e){return typeof n>"u"?e:n==="false"?!1:!!n}class Rt extends cL{constructor(e,t,i,s=void 0){typeof s<"u"&&(s.type="boolean",s.default=i),super(e,t,i,s)}validate(e){return Ge(e,this.defaultValue)}}function Ig(n,e,t,i){if(typeof n=="string"&&(n=parseInt(n,10)),typeof n!="number"||isNaN(n))return e;let s=n;return s=Math.max(t,s),s=Math.min(i,s),s|0}class wi extends cL{static clampedInt(e,t,i,s){return Ig(e,t,i,s)}constructor(e,t,i,s,r,o=void 0){typeof o<"u"&&(o.type="integer",o.default=i,o.minimum=s,o.maximum=r),super(e,t,i,o),this.minimum=s,this.maximum=r}validate(e){return wi.clampedInt(e,this.defaultValue,this.minimum,this.maximum)}}function O4e(n,e,t,i){if(typeof n>"u")return e;const s=Sa.float(n,e);return Sa.clamp(s,t,i)}class Sa extends cL{static clamp(e,t,i){return ei?i:e}static float(e,t){return typeof e=="string"&&(e=parseFloat(e)),typeof e!="number"||isNaN(e)?t:e}constructor(e,t,i,s,r,o,a){typeof r<"u"&&(r.type="number",r.default=i,r.minimum=o,r.maximum=a),super(e,t,i,r),this.validationFn=s,this.minimum=o,this.maximum=a}validate(e){return this.validationFn(Sa.float(e,this.defaultValue))}}class xo extends cL{static string(e,t){return typeof e!="string"?t:e}constructor(e,t,i,s=void 0){typeof s<"u"&&(s.type="string",s.default=i),super(e,t,i,s)}validate(e){return xo.string(e,this.defaultValue)}}function Yi(n,e,t,i){return typeof n!="string"?e:i&&n in i?i[n]:t.indexOf(n)===-1?e:n}class pn extends cL{constructor(e,t,i,s,r=void 0){typeof r<"u"&&(r.type="string",r.enum=s.slice(0),r.default=i),super(e,t,i,r),this._allowedValues=s}validate(e){return Yi(e,this.defaultValue,this._allowedValues)}}class QL extends _n{constructor(e,t,i,s,r,o,a=void 0){typeof a<"u"&&(a.type="string",a.enum=r,a.default=s),super(e,t,i,a),this._allowedValues=r,this._convert=o}validate(e){return typeof e!="string"?this.defaultValue:this._allowedValues.indexOf(e)===-1?this.defaultValue:this._convert(e)}}function F4e(n){switch(n){case"none":return 0;case"keep":return 1;case"brackets":return 2;case"advanced":return 3;case"full":return 4}}class B4e extends _n{constructor(){super(2,"accessibilitySupport",0,{type:"string",enum:["auto","on","off"],enumDescriptions:[w(201,"Use platform APIs to detect when a Screen Reader is attached."),w(202,"Optimize for usage with a Screen Reader."),w(203,"Assume a screen reader is not attached.")],default:"auto",tags:["accessibility"],description:w(204,"Controls if the UI should run in a mode where it is optimized for screen readers.")})}validate(e){switch(e){case"auto":return 0;case"off":return 1;case"on":return 2}return this.defaultValue}compute(e,t,i){return i===0?e.accessibilitySupport:i}}class W4e extends _n{constructor(){const e={insertSpace:!0,ignoreEmptyLines:!0};super(29,"comments",e,{"editor.comments.insertSpace":{type:"boolean",default:e.insertSpace,description:w(205,"Controls whether a space character is inserted when commenting.")},"editor.comments.ignoreEmptyLines":{type:"boolean",default:e.ignoreEmptyLines,description:w(206,"Controls if empty lines should be ignored with toggle, add or remove actions for line comments.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{insertSpace:Ge(t.insertSpace,this.defaultValue.insertSpace),ignoreEmptyLines:Ge(t.ignoreEmptyLines,this.defaultValue.ignoreEmptyLines)}}}function H4e(n){switch(n){case"blink":return 1;case"smooth":return 2;case"phase":return 3;case"expand":return 4;case"solid":return 5}}var qs;(function(n){n[n.Line=1]="Line",n[n.Block=2]="Block",n[n.Underline=3]="Underline",n[n.LineThin=4]="LineThin",n[n.BlockOutline=5]="BlockOutline",n[n.UnderlineThin=6]="UnderlineThin"})(qs||(qs={}));function Xne(n){switch(n){case"line":return qs.Line;case"block":return qs.Block;case"underline":return qs.Underline;case"line-thin":return qs.LineThin;case"block-outline":return qs.BlockOutline;case"underline-thin":return qs.UnderlineThin}}class V4e extends Rb{constructor(){super(162,"")}compute(e,t,i){const s=["monaco-editor"];return t.get(48)&&s.push(t.get(48)),e.extraEditorClassName&&s.push(e.extraEditorClassName),t.get(82)==="default"?s.push("mouse-default"):t.get(82)==="copy"&&s.push("mouse-copy"),t.get(127)&&s.push("showUnused"),t.get(157)&&s.push("showDeprecated"),s.join(" ")}}class j4e extends Rt{constructor(){super(45,"emptySelectionClipboard",!0,{description:w(207,"Controls whether copying without a selection copies the current line.")})}compute(e,t,i){return i&&e.emptySelectionClipboard}}class z4e extends _n{constructor(){const e={cursorMoveOnType:!0,findOnType:!0,seedSearchStringFromSelection:"always",autoFindInSelection:"never",globalFindClipboard:!1,addExtraSpaceOnTop:!0,loop:!0,history:"workspace",replaceHistory:"workspace"};super(50,"find",e,{"editor.find.cursorMoveOnType":{type:"boolean",default:e.cursorMoveOnType,description:w(208,"Controls whether the cursor should jump to find matches while typing.")},"editor.find.seedSearchStringFromSelection":{type:"string",enum:["never","always","selection"],default:e.seedSearchStringFromSelection,enumDescriptions:[w(209,"Never seed search string from the editor selection."),w(210,"Always seed search string from the editor selection, including word at cursor position."),w(211,"Only seed search string from the editor selection.")],description:w(212,"Controls whether the search string in the Find Widget is seeded from the editor selection.")},"editor.find.autoFindInSelection":{type:"string",enum:["never","always","multiline"],default:e.autoFindInSelection,enumDescriptions:[w(213,"Never turn on Find in Selection automatically (default)."),w(214,"Always turn on Find in Selection automatically."),w(215,"Turn on Find in Selection automatically when multiple lines of content are selected.")],description:w(216,"Controls the condition for turning on Find in Selection automatically.")},"editor.find.globalFindClipboard":{type:"boolean",default:e.globalFindClipboard,description:w(217,"Controls whether the Find Widget should read or modify the shared find clipboard on macOS."),included:At},"editor.find.addExtraSpaceOnTop":{type:"boolean",default:e.addExtraSpaceOnTop,description:w(218,"Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.")},"editor.find.loop":{type:"boolean",default:e.loop,description:w(219,"Controls whether the search automatically restarts from the beginning (or the end) when no further matches can be found.")},"editor.find.history":{type:"string",enum:["never","workspace"],default:"workspace",enumDescriptions:[w(220,"Do not store search history from the find widget."),w(221,"Store search history across the active workspace")],description:w(222,"Controls how the find widget history should be stored")},"editor.find.replaceHistory":{type:"string",enum:["never","workspace"],default:"workspace",enumDescriptions:[w(223,"Do not store history from the replace widget."),w(224,"Store replace history across the active workspace")],description:w(225,"Controls how the replace widget history should be stored")},"editor.find.findOnType":{type:"boolean",default:e.findOnType,description:w(226,"Controls whether the Find Widget should search as you type.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{cursorMoveOnType:Ge(t.cursorMoveOnType,this.defaultValue.cursorMoveOnType),findOnType:Ge(t.findOnType,this.defaultValue.findOnType),seedSearchStringFromSelection:typeof t.seedSearchStringFromSelection=="boolean"?t.seedSearchStringFromSelection?"always":"never":Yi(t.seedSearchStringFromSelection,this.defaultValue.seedSearchStringFromSelection,["never","always","selection"]),autoFindInSelection:typeof t.autoFindInSelection=="boolean"?t.autoFindInSelection?"always":"never":Yi(t.autoFindInSelection,this.defaultValue.autoFindInSelection,["never","always","multiline"]),globalFindClipboard:Ge(t.globalFindClipboard,this.defaultValue.globalFindClipboard),addExtraSpaceOnTop:Ge(t.addExtraSpaceOnTop,this.defaultValue.addExtraSpaceOnTop),loop:Ge(t.loop,this.defaultValue.loop),history:Yi(t.history,this.defaultValue.history,["never","workspace"]),replaceHistory:Yi(t.replaceHistory,this.defaultValue.replaceHistory,["never","workspace"])}}}const xg=class xg extends _n{constructor(){super(60,"fontLigatures",xg.OFF,{anyOf:[{type:"boolean",description:w(227,"Enables/Disables font ligatures ('calt' and 'liga' font features). Change this to a string for fine-grained control of the 'font-feature-settings' CSS property.")},{type:"string",description:w(228,"Explicit 'font-feature-settings' CSS property. A boolean can be passed instead if one only needs to turn on/off ligatures.")}],description:w(229,"Configures font ligatures or font features. Can be either a boolean to enable/disable ligatures or a string for the value of the CSS 'font-feature-settings' property."),default:!1})}validate(e){return typeof e>"u"?this.defaultValue:typeof e=="string"?e==="false"||e.length===0?xg.OFF:e==="true"?xg.ON:e:e?xg.ON:xg.OFF}};xg.OFF='"liga" off, "calt" off',xg.ON='"liga" on, "calt" on';let Rp=xg;const Sg=class Sg extends _n{constructor(){super(63,"fontVariations",Sg.OFF,{anyOf:[{type:"boolean",description:w(230,"Enables/Disables the translation from font-weight to font-variation-settings. Change this to a string for fine-grained control of the 'font-variation-settings' CSS property.")},{type:"string",description:w(231,"Explicit 'font-variation-settings' CSS property. A boolean can be passed instead if one only needs to translate font-weight to font-variation-settings.")}],description:w(232,"Configures font variations. Can be either a boolean to enable/disable the translation from font-weight to font-variation-settings or a string for the value of the CSS 'font-variation-settings' property."),default:!1})}validate(e){return typeof e>"u"?this.defaultValue:typeof e=="string"?e==="false"?Sg.OFF:e==="true"?Sg.TRANSLATE:e:e?Sg.TRANSLATE:Sg.OFF}compute(e,t,i){return e.fontInfo.fontVariationSettings}};Sg.OFF=x_e,Sg.TRANSLATE=S_e;let tV=Sg;class $4e extends Rb{constructor(){super(59,new RP({pixelRatio:0,fontFamily:"",fontWeight:"",fontSize:0,fontFeatureSettings:"",fontVariationSettings:"",lineHeight:0,letterSpacing:0,isMonospace:!1,typicalHalfwidthCharacterWidth:0,typicalFullwidthCharacterWidth:0,canUseHalfwidthRightwardsArrow:!1,spaceWidth:0,middotWidth:0,wsmiddotWidth:0,maxDigitWidth:0},!1))}compute(e,t,i){return e.fontInfo}}class U4e extends Rb{constructor(){super(161,qs.Line)}compute(e,t,i){return e.inputMode==="overtype"?t.get(92):t.get(34)}}class q4e extends Rb{constructor(){super(170,!1)}compute(e,t){return e.editContextSupported&&t.get(44)}}class K4e extends Rb{constructor(){super(172,!1)}compute(e,t){return e.accessibilitySupport===2?t.get(7):t.get(6)}}class G4e extends cL{constructor(){super(61,"fontSize",ka.fontSize,{type:"number",minimum:6,maximum:100,default:ka.fontSize,description:w(233,"Controls the font size in pixels.")})}validate(e){const t=Sa.float(e,this.defaultValue);return t===0?ka.fontSize:Sa.clamp(t,6,100)}compute(e,t,i){return e.fontInfo.fontSize}}const Fh=class Fh extends _n{constructor(){super(62,"fontWeight",ka.fontWeight,{anyOf:[{type:"number",minimum:Fh.MINIMUM_VALUE,maximum:Fh.MAXIMUM_VALUE,errorMessage:w(234,'Only "normal" and "bold" keywords or numbers between 1 and 1000 are allowed.')},{type:"string",pattern:"^(normal|bold|1000|[1-9][0-9]{0,2})$"},{enum:Fh.SUGGESTION_VALUES}],default:ka.fontWeight,description:w(235,'Controls the font weight. Accepts "normal" and "bold" keywords or numbers between 1 and 1000.')})}validate(e){return e==="normal"||e==="bold"?e:String(wi.clampedInt(e,ka.fontWeight,Fh.MINIMUM_VALUE,Fh.MAXIMUM_VALUE))}};Fh.SUGGESTION_VALUES=["normal","bold","100","200","300","400","500","600","700","800","900"],Fh.MINIMUM_VALUE=1,Fh.MAXIMUM_VALUE=1e3;let iV=Fh;class Y4e extends _n{constructor(){const e={multiple:"peek",multipleDefinitions:"peek",multipleTypeDefinitions:"peek",multipleDeclarations:"peek",multipleImplementations:"peek",multipleReferences:"peek",multipleTests:"peek",alternativeDefinitionCommand:"editor.action.goToReferences",alternativeTypeDefinitionCommand:"editor.action.goToReferences",alternativeDeclarationCommand:"editor.action.goToReferences",alternativeImplementationCommand:"",alternativeReferenceCommand:"",alternativeTestsCommand:""},t={type:"string",enum:["peek","gotoAndPeek","goto"],default:e.multiple,enumDescriptions:[w(236,"Show Peek view of the results (default)"),w(237,"Go to the primary result and show a Peek view"),w(238,"Go to the primary result and enable Peek-less navigation to others")]},i=["","editor.action.referenceSearch.trigger","editor.action.goToReferences","editor.action.peekImplementation","editor.action.goToImplementation","editor.action.peekTypeDefinition","editor.action.goToTypeDefinition","editor.action.peekDeclaration","editor.action.revealDeclaration","editor.action.peekDefinition","editor.action.revealDefinitionAside","editor.action.revealDefinition"];super(67,"gotoLocation",e,{"editor.gotoLocation.multiple":{deprecationMessage:w(239,"This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.")},"editor.gotoLocation.multipleDefinitions":{description:w(240,"Controls the behavior the 'Go to Definition'-command when multiple target locations exist."),...t},"editor.gotoLocation.multipleTypeDefinitions":{description:w(241,"Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist."),...t},"editor.gotoLocation.multipleDeclarations":{description:w(242,"Controls the behavior the 'Go to Declaration'-command when multiple target locations exist."),...t},"editor.gotoLocation.multipleImplementations":{description:w(243,"Controls the behavior the 'Go to Implementations'-command when multiple target locations exist."),...t},"editor.gotoLocation.multipleReferences":{description:w(244,"Controls the behavior the 'Go to References'-command when multiple target locations exist."),...t},"editor.gotoLocation.alternativeDefinitionCommand":{type:"string",default:e.alternativeDefinitionCommand,enum:i,description:w(245,"Alternative command id that is being executed when the result of 'Go to Definition' is the current location.")},"editor.gotoLocation.alternativeTypeDefinitionCommand":{type:"string",default:e.alternativeTypeDefinitionCommand,enum:i,description:w(246,"Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.")},"editor.gotoLocation.alternativeDeclarationCommand":{type:"string",default:e.alternativeDeclarationCommand,enum:i,description:w(247,"Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.")},"editor.gotoLocation.alternativeImplementationCommand":{type:"string",default:e.alternativeImplementationCommand,enum:i,description:w(248,"Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.")},"editor.gotoLocation.alternativeReferenceCommand":{type:"string",default:e.alternativeReferenceCommand,enum:i,description:w(249,"Alternative command id that is being executed when the result of 'Go to Reference' is the current location.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{multiple:Yi(t.multiple,this.defaultValue.multiple,["peek","gotoAndPeek","goto"]),multipleDefinitions:Yi(t.multipleDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleTypeDefinitions:Yi(t.multipleTypeDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleDeclarations:Yi(t.multipleDeclarations,"peek",["peek","gotoAndPeek","goto"]),multipleImplementations:Yi(t.multipleImplementations,"peek",["peek","gotoAndPeek","goto"]),multipleReferences:Yi(t.multipleReferences,"peek",["peek","gotoAndPeek","goto"]),multipleTests:Yi(t.multipleTests,"peek",["peek","gotoAndPeek","goto"]),alternativeDefinitionCommand:xo.string(t.alternativeDefinitionCommand,this.defaultValue.alternativeDefinitionCommand),alternativeTypeDefinitionCommand:xo.string(t.alternativeTypeDefinitionCommand,this.defaultValue.alternativeTypeDefinitionCommand),alternativeDeclarationCommand:xo.string(t.alternativeDeclarationCommand,this.defaultValue.alternativeDeclarationCommand),alternativeImplementationCommand:xo.string(t.alternativeImplementationCommand,this.defaultValue.alternativeImplementationCommand),alternativeReferenceCommand:xo.string(t.alternativeReferenceCommand,this.defaultValue.alternativeReferenceCommand),alternativeTestsCommand:xo.string(t.alternativeTestsCommand,this.defaultValue.alternativeTestsCommand)}}}class X4e extends _n{constructor(){const e={enabled:!0,delay:300,hidingDelay:300,sticky:!0,above:!0};super(69,"hover",e,{"editor.hover.enabled":{type:"boolean",default:e.enabled,description:w(250,"Controls whether the hover is shown.")},"editor.hover.delay":{type:"number",default:e.delay,minimum:0,maximum:1e4,description:w(251,"Controls the delay in milliseconds after which the hover is shown.")},"editor.hover.sticky":{type:"boolean",default:e.sticky,description:w(252,"Controls whether the hover should remain visible when mouse is moved over it.")},"editor.hover.hidingDelay":{type:"integer",minimum:0,default:e.hidingDelay,markdownDescription:w(253,"Controls the delay in milliseconds after which the hover is hidden. Requires `#editor.hover.sticky#` to be enabled.")},"editor.hover.above":{type:"boolean",default:e.above,description:w(254,"Prefer showing hovers above the line, if there's space.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{enabled:Ge(t.enabled,this.defaultValue.enabled),delay:wi.clampedInt(t.delay,this.defaultValue.delay,0,1e4),sticky:Ge(t.sticky,this.defaultValue.sticky),hidingDelay:wi.clampedInt(t.hidingDelay,this.defaultValue.hidingDelay,0,6e5),above:Ge(t.above,this.defaultValue.above)}}}class hx extends Rb{constructor(){super(165,{width:0,height:0,glyphMarginLeft:0,glyphMarginWidth:0,glyphMarginDecorationLaneCount:0,lineNumbersLeft:0,lineNumbersWidth:0,decorationsLeft:0,decorationsWidth:0,contentLeft:0,contentWidth:0,minimap:{renderMinimap:0,minimapLeft:0,minimapWidth:0,minimapHeightIsEditorHeight:!1,minimapIsSampling:!1,minimapScale:1,minimapLineHeight:1,minimapCanvasInnerWidth:0,minimapCanvasInnerHeight:0,minimapCanvasOuterWidth:0,minimapCanvasOuterHeight:0},viewportColumn:0,isWordWrapMinified:!1,isViewportWrapping:!1,wrappingColumn:-1,verticalScrollbarWidth:0,horizontalScrollbarHeight:0,overviewRuler:{top:0,width:0,height:0,right:0}})}compute(e,t,i){return hx.computeLayout(t,{memory:e.memory,outerWidth:e.outerWidth,outerHeight:e.outerHeight,isDominatedByLongLines:e.isDominatedByLongLines,lineHeight:e.fontInfo.lineHeight,viewLineCount:e.viewLineCount,lineNumbersDigitCount:e.lineNumbersDigitCount,typicalHalfwidthCharacterWidth:e.fontInfo.typicalHalfwidthCharacterWidth,maxDigitWidth:e.fontInfo.maxDigitWidth,pixelRatio:e.pixelRatio,glyphMarginDecorationLaneCount:e.glyphMarginDecorationLaneCount})}static computeContainedMinimapLineCount(e){const t=e.height/e.lineHeight,i=Math.floor(e.paddingTop/e.lineHeight);let s=Math.floor(e.paddingBottom/e.lineHeight);e.scrollBeyondLastLine&&(s=Math.max(s,t-1));const r=(i+e.viewLineCount+s)/(e.pixelRatio*e.height),o=Math.floor(e.viewLineCount/r);return{typicalViewportLineCount:t,extraLinesBeforeFirstLine:i,extraLinesBeyondLastLine:s,desiredRatio:r,minimapLineCount:o}}static _computeMinimapLayout(e,t){const i=e.outerWidth,s=e.outerHeight,r=e.pixelRatio;if(!e.minimap.enabled)return{renderMinimap:0,minimapLeft:0,minimapWidth:0,minimapHeightIsEditorHeight:!1,minimapIsSampling:!1,minimapScale:1,minimapLineHeight:1,minimapCanvasInnerWidth:0,minimapCanvasInnerHeight:Math.floor(r*s),minimapCanvasOuterWidth:0,minimapCanvasOuterHeight:s};const o=t.stableMinimapLayoutInput,a=o&&e.outerHeight===o.outerHeight&&e.lineHeight===o.lineHeight&&e.typicalHalfwidthCharacterWidth===o.typicalHalfwidthCharacterWidth&&e.pixelRatio===o.pixelRatio&&e.scrollBeyondLastLine===o.scrollBeyondLastLine&&e.paddingTop===o.paddingTop&&e.paddingBottom===o.paddingBottom&&e.minimap.enabled===o.minimap.enabled&&e.minimap.side===o.minimap.side&&e.minimap.size===o.minimap.size&&e.minimap.showSlider===o.minimap.showSlider&&e.minimap.renderCharacters===o.minimap.renderCharacters&&e.minimap.maxColumn===o.minimap.maxColumn&&e.minimap.scale===o.minimap.scale&&e.verticalScrollbarWidth===o.verticalScrollbarWidth&&e.isViewportWrapping===o.isViewportWrapping,l=e.lineHeight,c=e.typicalHalfwidthCharacterWidth,d=e.scrollBeyondLastLine,u=e.minimap.renderCharacters;let h=r>=2?Math.round(e.minimap.scale*2):e.minimap.scale;const f=e.minimap.maxColumn,g=e.minimap.size,m=e.minimap.side,_=e.verticalScrollbarWidth,b=e.viewLineCount,v=e.remainingWidth,C=e.isViewportWrapping,y=u?2:3;let x=Math.floor(r*s);const S=x/r;let L=!1,k=!1,N=y*h,I=h/r,M=1;if(g==="fill"||g==="fit"){const{typicalViewportLineCount:W,extraLinesBeforeFirstLine:F,extraLinesBeyondLastLine:q,desiredRatio:Q,minimapLineCount:J}=hx.computeContainedMinimapLineCount({viewLineCount:b,scrollBeyondLastLine:d,paddingTop:e.paddingTop,paddingBottom:e.paddingBottom,height:s,lineHeight:l,pixelRatio:r});if(b/J>1)L=!0,k=!0,h=1,N=1,I=h/r;else{let pe=!1,ke=h+1;if(g==="fit"){const $e=Math.ceil((F+b+q)*N);C&&a&&v<=t.stableFitRemainingWidth?(pe=!0,ke=t.stableFitMaxMinimapScale):pe=$e>x}if(g==="fill"||pe){L=!0;const $e=h;N=Math.min(l*r,Math.max(1,Math.floor(1/Q))),C&&a&&v<=t.stableFitRemainingWidth&&(ke=t.stableFitMaxMinimapScale),h=Math.min(ke,Math.max(1,Math.floor(N/y))),h>$e&&(M=Math.min(2,h/$e)),I=h/r/M,x=Math.ceil(Math.max(W,F+b+q)*N),C?(t.stableMinimapLayoutInput=e,t.stableFitRemainingWidth=v,t.stableFitMaxMinimapScale=h):(t.stableMinimapLayoutInput=null,t.stableFitRemainingWidth=0)}}}const P=Math.floor(f*I),H=Math.min(P,Math.max(0,Math.floor((v-_-2)*I/(c+I)))+Ih);let O=Math.floor(r*H);const A=O/r;O=Math.floor(O*M);const z=u?1:2,U=m==="left"?0:i-H-_;return{renderMinimap:z,minimapLeft:U,minimapWidth:H,minimapHeightIsEditorHeight:L,minimapIsSampling:k,minimapScale:h,minimapLineHeight:N,minimapCanvasInnerWidth:O,minimapCanvasInnerHeight:x,minimapCanvasOuterWidth:A,minimapCanvasOuterHeight:S}}static computeLayout(e,t){const i=t.outerWidth|0,s=t.outerHeight|0,r=t.lineHeight|0,o=t.lineNumbersDigitCount|0,a=t.typicalHalfwidthCharacterWidth,l=t.maxDigitWidth,c=t.pixelRatio,d=t.viewLineCount,u=e.get(154),h=u==="inherit"?e.get(153):u,f=h==="inherit"?e.get(149):h,g=e.get(152),m=t.isDominatedByLongLines,_=e.get(66),b=e.get(76).renderType!==0,v=e.get(77),C=e.get(119),y=e.get(96),x=e.get(81),S=e.get(117),L=S.verticalScrollbarSize,k=S.verticalHasArrows,N=S.arrowSize,I=S.horizontalScrollbarSize,M=e.get(52),P=e.get(126)!=="never";let H=e.get(74);M&&P&&(H+=16);let O=0;if(b){const Re=Math.max(o,v);O=Math.round(Re*l)}let A=0;_&&(A=r*t.glyphMarginDecorationLaneCount);let z=0,U=z+A,W=U+O,F=W+H;const q=i-A-O-H;let Q=!1,J=!1,oe=-1;e.get(2)===2&&h==="inherit"&&m?(Q=!0,J=!0):f==="on"||f==="bounded"?J=!0:f==="wordWrapColumn"&&(oe=g);const pe=hx._computeMinimapLayout({outerWidth:i,outerHeight:s,lineHeight:r,typicalHalfwidthCharacterWidth:a,pixelRatio:c,scrollBeyondLastLine:C,paddingTop:y.top,paddingBottom:y.bottom,minimap:x,verticalScrollbarWidth:L,viewLineCount:d,remainingWidth:q,isViewportWrapping:J},t.memory||new N_e);pe.renderMinimap!==0&&pe.minimapLeft===0&&(z+=pe.minimapWidth,U+=pe.minimapWidth,W+=pe.minimapWidth,F+=pe.minimapWidth);const ke=q-pe.minimapWidth,$e=Math.max(1,Math.floor((ke-L-2)/a)),Xe=k?N:0;return J&&(oe=Math.max(1,$e),f==="bounded"&&(oe=Math.min(oe,g))),{width:i,height:s,glyphMarginLeft:z,glyphMarginWidth:A,glyphMarginDecorationLaneCount:t.glyphMarginDecorationLaneCount,lineNumbersLeft:U,lineNumbersWidth:O,decorationsLeft:W,decorationsWidth:H,contentLeft:F,contentWidth:ke,minimap:pe,viewportColumn:$e,isWordWrapMinified:Q,isViewportWrapping:J,wrappingColumn:oe,verticalScrollbarWidth:L,horizontalScrollbarHeight:I,overviewRuler:{top:Xe,width:L,height:s-2*Xe,right:0}}}}class Z4e extends _n{constructor(){super(156,"wrappingStrategy","simple",{"editor.wrappingStrategy":{enumDescriptions:[w(255,"Assumes that all characters are of the same width. This is a fast algorithm that works correctly for monospace fonts and certain scripts (like Latin characters) where glyphs are of equal width."),w(256,"Delegates wrapping points computation to the browser. This is a slow algorithm, that might cause freezes for large files, but it works correctly in all cases.")],type:"string",enum:["simple","advanced"],default:"simple",description:w(257,"Controls the algorithm that computes wrapping points. Note that when in accessibility mode, advanced will be used for the best experience.")}})}validate(e){return Yi(e,"simple",["simple","advanced"])}compute(e,t,i){return t.get(2)===2?"advanced":i}}var Sd;(function(n){n.Off="off",n.OnCode="onCode",n.On="on"})(Sd||(Sd={}));class Q4e extends _n{constructor(){const e={enabled:Sd.OnCode};super(73,"lightbulb",e,{"editor.lightbulb.enabled":{type:"string",enum:[Sd.Off,Sd.OnCode,Sd.On],default:e.enabled,enumDescriptions:[w(258,"Disable the code action menu."),w(259,"Show the code action menu when the cursor is on lines with code."),w(260,"Show the code action menu when the cursor is on lines with code or on empty lines.")],description:w(261,"Enables the Code Action lightbulb in the editor.")}})}validate(e){return!e||typeof e!="object"?this.defaultValue:{enabled:Yi(e.enabled,this.defaultValue.enabled,[Sd.Off,Sd.OnCode,Sd.On])}}}class J4e extends _n{constructor(){const e={enabled:!0,maxLineCount:5,defaultModel:"outlineModel",scrollWithEditor:!0};super(131,"stickyScroll",e,{"editor.stickyScroll.enabled":{type:"boolean",default:e.enabled,description:w(262,"Shows the nested current scopes during the scroll at the top of the editor.")},"editor.stickyScroll.maxLineCount":{type:"number",default:e.maxLineCount,minimum:1,maximum:20,description:w(263,"Defines the maximum number of sticky lines to show.")},"editor.stickyScroll.defaultModel":{type:"string",enum:["outlineModel","foldingProviderModel","indentationModel"],default:e.defaultModel,description:w(264,"Defines the model to use for determining which lines to stick. If the outline model does not exist, it will fall back on the folding provider model which falls back on the indentation model. This order is respected in all three cases.")},"editor.stickyScroll.scrollWithEditor":{type:"boolean",default:e.scrollWithEditor,description:w(265,"Enable scrolling of Sticky Scroll with the editor's horizontal scrollbar.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{enabled:Ge(t.enabled,this.defaultValue.enabled),maxLineCount:wi.clampedInt(t.maxLineCount,this.defaultValue.maxLineCount,1,20),defaultModel:Yi(t.defaultModel,this.defaultValue.defaultModel,["outlineModel","foldingProviderModel","indentationModel"]),scrollWithEditor:Ge(t.scrollWithEditor,this.defaultValue.scrollWithEditor)}}}class e5e extends _n{constructor(){const e={enabled:"on",fontSize:0,fontFamily:"",padding:!1,maximumLength:43};super(159,"inlayHints",e,{"editor.inlayHints.enabled":{type:"string",default:e.enabled,description:w(266,"Enables the inlay hints in the editor."),enum:["on","onUnlessPressed","offUnlessPressed","off"],markdownEnumDescriptions:[w(267,"Inlay hints are enabled"),w(268,"Inlay hints are showing by default and hide when holding {0}",At?"Ctrl+Option":"Ctrl+Alt"),w(269,"Inlay hints are hidden by default and show when holding {0}",At?"Ctrl+Option":"Ctrl+Alt"),w(270,"Inlay hints are disabled")]},"editor.inlayHints.fontSize":{type:"number",default:e.fontSize,markdownDescription:w(271,"Controls font size of inlay hints in the editor. As default the {0} is used when the configured value is less than {1} or greater than the editor font size.","`#editor.fontSize#`","`5`")},"editor.inlayHints.fontFamily":{type:"string",default:e.fontFamily,markdownDescription:w(272,"Controls font family of inlay hints in the editor. When set to empty, the {0} is used.","`#editor.fontFamily#`")},"editor.inlayHints.padding":{type:"boolean",default:e.padding,description:w(273,"Enables the padding around the inlay hints in the editor.")},"editor.inlayHints.maximumLength":{type:"number",default:e.maximumLength,markdownDescription:w(274,"Maximum overall length of inlay hints, for a single line, before they get truncated by the editor. Set to `0` to never truncate")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return typeof t.enabled=="boolean"&&(t.enabled=t.enabled?"on":"off"),{enabled:Yi(t.enabled,this.defaultValue.enabled,["on","off","offUnlessPressed","onUnlessPressed"]),fontSize:wi.clampedInt(t.fontSize,this.defaultValue.fontSize,0,100),fontFamily:xo.string(t.fontFamily,this.defaultValue.fontFamily),padding:Ge(t.padding,this.defaultValue.padding),maximumLength:wi.clampedInt(t.maximumLength,this.defaultValue.maximumLength,0,Number.MAX_SAFE_INTEGER)}}}class t5e extends _n{constructor(){super(74,"lineDecorationsWidth",10)}validate(e){return typeof e=="string"&&/^\d+(\.\d+)?ch$/.test(e)?-parseFloat(e.substring(0,e.length-2)):wi.clampedInt(e,this.defaultValue,0,1e3)}compute(e,t,i){return i<0?wi.clampedInt(-i*e.fontInfo.typicalHalfwidthCharacterWidth,this.defaultValue,0,1e3):i}}class i5e extends Sa{constructor(){super(75,"lineHeight",ka.lineHeight,e=>Sa.clamp(e,0,150),{markdownDescription:w(275,`Controls the line height. +`))}}class x4e extends Error{constructor(e,t){super(e),this.name="ListenerLeakError",this.stack=t}}class S4e extends Error{constructor(e,t){super(e),this.name="ListenerRefusalError",this.stack=t}}class J6{constructor(e){this.value=e}}const L4e=2;let Y=class{constructor(e){var t,i,s,r;this._size=0,this._options=e,this._leakageMon=(t=this._options)!=null&&t.leakWarningThreshold?new eV((e==null?void 0:e.onListenerError)??ft,((i=this._options)==null?void 0:i.leakWarningThreshold)??y4e):void 0,this._perfMon=(s=this._options)!=null&&s._profName?new JH(this._options._profName):void 0,this._deliveryQueue=(r=this._options)==null?void 0:r.deliveryQueue}dispose(){var e,t,i,s;this._disposed||(this._disposed=!0,((e=this._deliveryQueue)==null?void 0:e.current)===this&&this._deliveryQueue.reset(),this._listeners&&(this._listeners=void 0,this._size=0),(i=(t=this._options)==null?void 0:t.onDidRemoveLastListener)==null||i.call(t),(s=this._leakageMon)==null||s.dispose())}get event(){return this._event??(this._event=(e,t,i)=>{var a,l,c,d,u,h,f;if(this._leakageMon&&this._size>this._leakageMon.threshold**2){const g=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(g);const m=this._leakageMon.getMostFrequentStack()??["UNKNOWN stack",-1],_=new S4e(`${g}. HINT: Stack shows most frequent listener (${m[1]}-times)`,m[0]);return(((a=this._options)==null?void 0:a.onListenerError)||ft)(_),Z.None}if(this._disposed)return Z.None;t&&(e=e.bind(t));const s=new J6(e);let r;this._leakageMon&&this._size>=Math.ceil(this._leakageMon.threshold*.2)&&(s.stack=BX.create(),r=this._leakageMon.check(s.stack,this._size+1)),this._listeners?this._listeners instanceof J6?(this._deliveryQueue??(this._deliveryQueue=new C_e),this._listeners=[this._listeners,s]):this._listeners.push(s):((c=(l=this._options)==null?void 0:l.onWillAddFirstListener)==null||c.call(l,this),this._listeners=s,(u=(d=this._options)==null?void 0:d.onDidAddFirstListener)==null||u.call(d,this)),(f=(h=this._options)==null?void 0:h.onDidAddListener)==null||f.call(h,this),this._size++;const o=Ve(()=>{r==null||r(),this._removeListener(s)});return i instanceof re?i.add(o):Array.isArray(i)&&i.push(o),o}),this._event}_removeListener(e){var r,o,a,l;if((o=(r=this._options)==null?void 0:r.onWillRemoveListener)==null||o.call(r,this),!this._listeners)return;if(this._size===1){this._listeners=void 0,(l=(a=this._options)==null?void 0:a.onDidRemoveLastListener)==null||l.call(a,this),this._size=0;return}const t=this._listeners,i=t.indexOf(e);if(i===-1)throw console.log("disposed?",this._disposed),console.log("size?",this._size),console.log("arr?",JSON.stringify(this._listeners)),new Error("Attempted to dispose unknown listener");this._size--,t[i]=void 0;const s=this._deliveryQueue.current===this;if(this._size*L4e<=t.length){let c=0;for(let d=0;d0}};const k4e=()=>new C_e;class C_e{constructor(){this.i=-1,this.end=0}enqueue(e,t,i){this.i=0,this.end=i,this.current=e,this.value=t}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}class i0 extends Y{constructor(e){super(e),this._isPaused=0,this._eventQueue=new No,this._mergeFn=e==null?void 0:e.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused===0)if(this._mergeFn){if(this._eventQueue.size>0){const e=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(e))}}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(e){this._size&&(this._isPaused!==0?this._eventQueue.push(e):super.fire(e))}}class y_e extends i0{constructor(e){super(e),this._delay=e.delay??100}fire(e){this._handle||(this.pause(),this._handle=setTimeout(()=>{this._handle=void 0,this.resume()},this._delay)),super.fire(e)}}class N4e extends Y{constructor(e){super(e),this._queuedEvents=[],this._mergeFn=e==null?void 0:e.merge}fire(e){this.hasListeners()&&(this._queuedEvents.push(e),this._queuedEvents.length===1&&queueMicrotask(()=>{this._mergeFn?super.fire(this._mergeFn(this._queuedEvents)):this._queuedEvents.forEach(t=>super.fire(t)),this._queuedEvents=[]}))}}class E4e{constructor(){this.hasListeners=!1,this.events=[],this.emitter=new Y({onWillAddFirstListener:()=>this.onFirstListenerAdd(),onDidRemoveLastListener:()=>this.onLastListenerRemove()})}get event(){return this.emitter.event}add(e){const t={event:e,listener:null};return this.events.push(t),this.hasListeners&&this.hook(t),Ve(t0(()=>{this.hasListeners&&this.unhook(t);const s=this.events.indexOf(t);this.events.splice(s,1)}))}onFirstListenerAdd(){this.hasListeners=!0,this.events.forEach(e=>this.hook(e))}onLastListenerRemove(){this.hasListeners=!1,this.events.forEach(e=>this.unhook(e))}hook(e){e.listener=e.event(t=>this.emitter.fire(t))}unhook(e){var t;(t=e.listener)==null||t.dispose(),e.listener=null}dispose(){var e;this.emitter.dispose();for(const t of this.events)(e=t.listener)==null||e.dispose();this.events=[]}}class yT{constructor(){this.data=[]}wrapEvent(e,t,i){return(s,r,o)=>e(a=>{const l=this.data[this.data.length-1];if(!t){l?l.buffers.push(()=>s.call(r,a)):s.call(r,a);return}const c=l;if(!c){s.call(r,t(i,a));return}c.items??(c.items=[]),c.items.push(a),c.buffers.length===0&&l.buffers.push(()=>{c.reducedResult??(c.reducedResult=i?c.items.reduce(t,i):c.items.reduce(t)),s.call(r,c.reducedResult)})},void 0,o)}bufferEvents(e){const t={buffers:new Array};this.data.push(t);const i=e();return this.data.pop(),t.buffers.forEach(s=>s()),i}}class ZL{constructor(){this.listening=!1,this.inputEvent=ye.None,this.inputEventListener=Z.None,this.emitter=new Y({onDidAddFirstListener:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onDidRemoveLastListener:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(e){this.inputEvent=e,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=e(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}const Rc=new class{constructor(){this._zoomLevel=0,this._onDidChangeZoomLevel=new Y,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event}getZoomLevel(){return this._zoomLevel}setZoomLevel(n){n=Math.min(Math.max(-5,n),20),this._zoomLevel!==n&&(this._zoomLevel=n,this._onDidChangeZoomLevel.fire(this._zoomLevel))}},I4e=At?1.5:1.35,e9=8;class n0{static _create(e,t,i,s,r,o,a,l,c){o===0?o=I4e*i:o/?";function A4e(n=""){let e="(-?\\d*\\.\\d\\w*)|([^";for(const t of MP)n.indexOf(t)>=0||(e+="\\"+t);return e+="\\s]+)",new RegExp(e,"g")}const WX=A4e();function HX(n){let e=WX;if(n&&n instanceof RegExp)if(n.global)e=n;else{let t="g";n.ignoreCase&&(t+="i"),n.multiline&&(t+="m"),n.unicode&&(t+="u"),e=new RegExp(n.source,t)}return e.lastIndex=0,e}const L_e=new No;L_e.unshift({maxLen:1e3,windowSize:15,timeBudget:150});function _I(n,e,t,i,s){if(e=HX(e),s||(s=Vt.first(L_e)),t.length>s.maxLen){let c=n-s.maxLen/2;return c<0?c=0:i+=c,t=t.substring(c,n+s.maxLen/2),_I(n,e,t,i,s)}const r=Date.now(),o=n-1-i;let a=-1,l=null;for(let c=1;!(Date.now()-r>=s.timeBudget);c++){const d=o-s.windowSize*c;e.lastIndex=Math.max(0,d);const u=P4e(e,t,o,a);if(!u&&l||(l=u,d<=0))break;a=d}if(l){const c={word:l[0],startColumn:i+1+l.index,endColumn:i+1+l.index+l[0].length};return e.lastIndex=0,c}return null}function P4e(n,e,t,i){let s;for(;s=n.exec(e);){const r=s.index||0;if(r<=t&&n.lastIndex>=t)return s;if(i>0&&r>i)return null}return null}const Ih=8;class k_e{constructor(e){this._values=e}hasChanged(e){return this._values[e]}}class N_e{constructor(){this.stableMinimapLayoutInput=null,this.stableFitMaxMinimapScale=0,this.stableFitRemainingWidth=0}}class _n{constructor(e,t,i,s){this.id=e,this.name=t,this.defaultValue=i,this.schema=s}applyUpdate(e,t){return g8(e,t)}compute(e,t,i){return i}}class LN{constructor(e,t){this.newValue=e,this.didChange=t}}function g8(n,e){if(typeof n!="object"||typeof e!="object"||!n||!e)return new LN(e,n!==e);if(Array.isArray(n)||Array.isArray(e)){const i=Array.isArray(n)&&Array.isArray(e)&&on(n,e);return new LN(e,!i)}let t=!1;for(const i in e)if(e.hasOwnProperty(i)){const s=g8(n[i],e[i]);s.didChange&&(n[i]=s.newValue,t=!0)}return new LN(n,t)}class Rb{constructor(e,t){this.schema=void 0,this.id=e,this.name="_never_",this.defaultValue=t}applyUpdate(e,t){return g8(e,t)}validate(e){return this.defaultValue}}class cL{constructor(e,t,i,s){this.id=e,this.name=t,this.defaultValue=i,this.schema=s}applyUpdate(e,t){return g8(e,t)}compute(e,t,i){return i}}function Ge(n,e){return typeof n>"u"?e:n==="false"?!1:!!n}class Rt extends cL{constructor(e,t,i,s=void 0){typeof s<"u"&&(s.type="boolean",s.default=i),super(e,t,i,s)}validate(e){return Ge(e,this.defaultValue)}}function Ig(n,e,t,i){if(typeof n=="string"&&(n=parseInt(n,10)),typeof n!="number"||isNaN(n))return e;let s=n;return s=Math.max(t,s),s=Math.min(i,s),s|0}class wi extends cL{static clampedInt(e,t,i,s){return Ig(e,t,i,s)}constructor(e,t,i,s,r,o=void 0){typeof o<"u"&&(o.type="integer",o.default=i,o.minimum=s,o.maximum=r),super(e,t,i,o),this.minimum=s,this.maximum=r}validate(e){return wi.clampedInt(e,this.defaultValue,this.minimum,this.maximum)}}function O4e(n,e,t,i){if(typeof n>"u")return e;const s=Sa.float(n,e);return Sa.clamp(s,t,i)}class Sa extends cL{static clamp(e,t,i){return ei?i:e}static float(e,t){return typeof e=="string"&&(e=parseFloat(e)),typeof e!="number"||isNaN(e)?t:e}constructor(e,t,i,s,r,o,a){typeof r<"u"&&(r.type="number",r.default=i,r.minimum=o,r.maximum=a),super(e,t,i,r),this.validationFn=s,this.minimum=o,this.maximum=a}validate(e){return this.validationFn(Sa.float(e,this.defaultValue))}}class xo extends cL{static string(e,t){return typeof e!="string"?t:e}constructor(e,t,i,s=void 0){typeof s<"u"&&(s.type="string",s.default=i),super(e,t,i,s)}validate(e){return xo.string(e,this.defaultValue)}}function Yi(n,e,t,i){return typeof n!="string"?e:i&&n in i?i[n]:t.indexOf(n)===-1?e:n}class pn extends cL{constructor(e,t,i,s,r=void 0){typeof r<"u"&&(r.type="string",r.enum=s.slice(0),r.default=i),super(e,t,i,r),this._allowedValues=s}validate(e){return Yi(e,this.defaultValue,this._allowedValues)}}class QL extends _n{constructor(e,t,i,s,r,o,a=void 0){typeof a<"u"&&(a.type="string",a.enum=r,a.default=s),super(e,t,i,a),this._allowedValues=r,this._convert=o}validate(e){return typeof e!="string"?this.defaultValue:this._allowedValues.indexOf(e)===-1?this.defaultValue:this._convert(e)}}function F4e(n){switch(n){case"none":return 0;case"keep":return 1;case"brackets":return 2;case"advanced":return 3;case"full":return 4}}class B4e extends _n{constructor(){super(2,"accessibilitySupport",0,{type:"string",enum:["auto","on","off"],enumDescriptions:[w(201,"Use platform APIs to detect when a Screen Reader is attached."),w(202,"Optimize for usage with a Screen Reader."),w(203,"Assume a screen reader is not attached.")],default:"auto",tags:["accessibility"],description:w(204,"Controls if the UI should run in a mode where it is optimized for screen readers.")})}validate(e){switch(e){case"auto":return 0;case"off":return 1;case"on":return 2}return this.defaultValue}compute(e,t,i){return i===0?e.accessibilitySupport:i}}class W4e extends _n{constructor(){const e={insertSpace:!0,ignoreEmptyLines:!0};super(29,"comments",e,{"editor.comments.insertSpace":{type:"boolean",default:e.insertSpace,description:w(205,"Controls whether a space character is inserted when commenting.")},"editor.comments.ignoreEmptyLines":{type:"boolean",default:e.ignoreEmptyLines,description:w(206,"Controls if empty lines should be ignored with toggle, add or remove actions for line comments.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{insertSpace:Ge(t.insertSpace,this.defaultValue.insertSpace),ignoreEmptyLines:Ge(t.ignoreEmptyLines,this.defaultValue.ignoreEmptyLines)}}}function H4e(n){switch(n){case"blink":return 1;case"smooth":return 2;case"phase":return 3;case"expand":return 4;case"solid":return 5}}var qs;(function(n){n[n.Line=1]="Line",n[n.Block=2]="Block",n[n.Underline=3]="Underline",n[n.LineThin=4]="LineThin",n[n.BlockOutline=5]="BlockOutline",n[n.UnderlineThin=6]="UnderlineThin"})(qs||(qs={}));function Xne(n){switch(n){case"line":return qs.Line;case"block":return qs.Block;case"underline":return qs.Underline;case"line-thin":return qs.LineThin;case"block-outline":return qs.BlockOutline;case"underline-thin":return qs.UnderlineThin}}class V4e extends Rb{constructor(){super(162,"")}compute(e,t,i){const s=["monaco-editor"];return t.get(48)&&s.push(t.get(48)),e.extraEditorClassName&&s.push(e.extraEditorClassName),t.get(82)==="default"?s.push("mouse-default"):t.get(82)==="copy"&&s.push("mouse-copy"),t.get(127)&&s.push("showUnused"),t.get(157)&&s.push("showDeprecated"),s.join(" ")}}class j4e extends Rt{constructor(){super(45,"emptySelectionClipboard",!0,{description:w(207,"Controls whether copying without a selection copies the current line.")})}compute(e,t,i){return i&&e.emptySelectionClipboard}}class z4e extends _n{constructor(){const e={cursorMoveOnType:!0,findOnType:!0,seedSearchStringFromSelection:"always",autoFindInSelection:"never",globalFindClipboard:!1,addExtraSpaceOnTop:!0,loop:!0,history:"workspace",replaceHistory:"workspace"};super(50,"find",e,{"editor.find.cursorMoveOnType":{type:"boolean",default:e.cursorMoveOnType,description:w(208,"Controls whether the cursor should jump to find matches while typing.")},"editor.find.seedSearchStringFromSelection":{type:"string",enum:["never","always","selection"],default:e.seedSearchStringFromSelection,enumDescriptions:[w(209,"Never seed search string from the editor selection."),w(210,"Always seed search string from the editor selection, including word at cursor position."),w(211,"Only seed search string from the editor selection.")],description:w(212,"Controls whether the search string in the Find Widget is seeded from the editor selection.")},"editor.find.autoFindInSelection":{type:"string",enum:["never","always","multiline"],default:e.autoFindInSelection,enumDescriptions:[w(213,"Never turn on Find in Selection automatically (default)."),w(214,"Always turn on Find in Selection automatically."),w(215,"Turn on Find in Selection automatically when multiple lines of content are selected.")],description:w(216,"Controls the condition for turning on Find in Selection automatically.")},"editor.find.globalFindClipboard":{type:"boolean",default:e.globalFindClipboard,description:w(217,"Controls whether the Find Widget should read or modify the shared find clipboard on macOS."),included:At},"editor.find.addExtraSpaceOnTop":{type:"boolean",default:e.addExtraSpaceOnTop,description:w(218,"Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.")},"editor.find.loop":{type:"boolean",default:e.loop,description:w(219,"Controls whether the search automatically restarts from the beginning (or the end) when no further matches can be found.")},"editor.find.history":{type:"string",enum:["never","workspace"],default:"workspace",enumDescriptions:[w(220,"Do not store search history from the find widget."),w(221,"Store search history across the active workspace")],description:w(222,"Controls how the find widget history should be stored")},"editor.find.replaceHistory":{type:"string",enum:["never","workspace"],default:"workspace",enumDescriptions:[w(223,"Do not store history from the replace widget."),w(224,"Store replace history across the active workspace")],description:w(225,"Controls how the replace widget history should be stored")},"editor.find.findOnType":{type:"boolean",default:e.findOnType,description:w(226,"Controls whether the Find Widget should search as you type.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{cursorMoveOnType:Ge(t.cursorMoveOnType,this.defaultValue.cursorMoveOnType),findOnType:Ge(t.findOnType,this.defaultValue.findOnType),seedSearchStringFromSelection:typeof t.seedSearchStringFromSelection=="boolean"?t.seedSearchStringFromSelection?"always":"never":Yi(t.seedSearchStringFromSelection,this.defaultValue.seedSearchStringFromSelection,["never","always","selection"]),autoFindInSelection:typeof t.autoFindInSelection=="boolean"?t.autoFindInSelection?"always":"never":Yi(t.autoFindInSelection,this.defaultValue.autoFindInSelection,["never","always","multiline"]),globalFindClipboard:Ge(t.globalFindClipboard,this.defaultValue.globalFindClipboard),addExtraSpaceOnTop:Ge(t.addExtraSpaceOnTop,this.defaultValue.addExtraSpaceOnTop),loop:Ge(t.loop,this.defaultValue.loop),history:Yi(t.history,this.defaultValue.history,["never","workspace"]),replaceHistory:Yi(t.replaceHistory,this.defaultValue.replaceHistory,["never","workspace"])}}}const xg=class xg extends _n{constructor(){super(60,"fontLigatures",xg.OFF,{anyOf:[{type:"boolean",description:w(227,"Enables/Disables font ligatures ('calt' and 'liga' font features). Change this to a string for fine-grained control of the 'font-feature-settings' CSS property.")},{type:"string",description:w(228,"Explicit 'font-feature-settings' CSS property. A boolean can be passed instead if one only needs to turn on/off ligatures.")}],description:w(229,"Configures font ligatures or font features. Can be either a boolean to enable/disable ligatures or a string for the value of the CSS 'font-feature-settings' property."),default:!1})}validate(e){return typeof e>"u"?this.defaultValue:typeof e=="string"?e==="false"||e.length===0?xg.OFF:e==="true"?xg.ON:e:e?xg.ON:xg.OFF}};xg.OFF='"liga" off, "calt" off',xg.ON='"liga" on, "calt" on';let Rp=xg;const Sg=class Sg extends _n{constructor(){super(63,"fontVariations",Sg.OFF,{anyOf:[{type:"boolean",description:w(230,"Enables/Disables the translation from font-weight to font-variation-settings. Change this to a string for fine-grained control of the 'font-variation-settings' CSS property.")},{type:"string",description:w(231,"Explicit 'font-variation-settings' CSS property. A boolean can be passed instead if one only needs to translate font-weight to font-variation-settings.")}],description:w(232,"Configures font variations. Can be either a boolean to enable/disable the translation from font-weight to font-variation-settings or a string for the value of the CSS 'font-variation-settings' property."),default:!1})}validate(e){return typeof e>"u"?this.defaultValue:typeof e=="string"?e==="false"?Sg.OFF:e==="true"?Sg.TRANSLATE:e:e?Sg.TRANSLATE:Sg.OFF}compute(e,t,i){return e.fontInfo.fontVariationSettings}};Sg.OFF=x_e,Sg.TRANSLATE=S_e;let tV=Sg;class $4e extends Rb{constructor(){super(59,new RP({pixelRatio:0,fontFamily:"",fontWeight:"",fontSize:0,fontFeatureSettings:"",fontVariationSettings:"",lineHeight:0,letterSpacing:0,isMonospace:!1,typicalHalfwidthCharacterWidth:0,typicalFullwidthCharacterWidth:0,canUseHalfwidthRightwardsArrow:!1,spaceWidth:0,middotWidth:0,wsmiddotWidth:0,maxDigitWidth:0},!1))}compute(e,t,i){return e.fontInfo}}class U4e extends Rb{constructor(){super(161,qs.Line)}compute(e,t,i){return e.inputMode==="overtype"?t.get(92):t.get(34)}}class q4e extends Rb{constructor(){super(170,!1)}compute(e,t){return e.editContextSupported&&t.get(44)}}class K4e extends Rb{constructor(){super(172,!1)}compute(e,t){return e.accessibilitySupport===2?t.get(7):t.get(6)}}class G4e extends cL{constructor(){super(61,"fontSize",ka.fontSize,{type:"number",minimum:6,maximum:100,default:ka.fontSize,description:w(233,"Controls the font size in pixels.")})}validate(e){const t=Sa.float(e,this.defaultValue);return t===0?ka.fontSize:Sa.clamp(t,6,100)}compute(e,t,i){return e.fontInfo.fontSize}}const Fh=class Fh extends _n{constructor(){super(62,"fontWeight",ka.fontWeight,{anyOf:[{type:"number",minimum:Fh.MINIMUM_VALUE,maximum:Fh.MAXIMUM_VALUE,errorMessage:w(234,'Only "normal" and "bold" keywords or numbers between 1 and 1000 are allowed.')},{type:"string",pattern:"^(normal|bold|1000|[1-9][0-9]{0,2})$"},{enum:Fh.SUGGESTION_VALUES}],default:ka.fontWeight,description:w(235,'Controls the font weight. Accepts "normal" and "bold" keywords or numbers between 1 and 1000.')})}validate(e){return e==="normal"||e==="bold"?e:String(wi.clampedInt(e,ka.fontWeight,Fh.MINIMUM_VALUE,Fh.MAXIMUM_VALUE))}};Fh.SUGGESTION_VALUES=["normal","bold","100","200","300","400","500","600","700","800","900"],Fh.MINIMUM_VALUE=1,Fh.MAXIMUM_VALUE=1e3;let iV=Fh;class Y4e extends _n{constructor(){const e={multiple:"peek",multipleDefinitions:"peek",multipleTypeDefinitions:"peek",multipleDeclarations:"peek",multipleImplementations:"peek",multipleReferences:"peek",multipleTests:"peek",alternativeDefinitionCommand:"editor.action.goToReferences",alternativeTypeDefinitionCommand:"editor.action.goToReferences",alternativeDeclarationCommand:"editor.action.goToReferences",alternativeImplementationCommand:"",alternativeReferenceCommand:"",alternativeTestsCommand:""},t={type:"string",enum:["peek","gotoAndPeek","goto"],default:e.multiple,enumDescriptions:[w(236,"Show Peek view of the results (default)"),w(237,"Go to the primary result and show a Peek view"),w(238,"Go to the primary result and enable Peek-less navigation to others")]},i=["","editor.action.referenceSearch.trigger","editor.action.goToReferences","editor.action.peekImplementation","editor.action.goToImplementation","editor.action.peekTypeDefinition","editor.action.goToTypeDefinition","editor.action.peekDeclaration","editor.action.revealDeclaration","editor.action.peekDefinition","editor.action.revealDefinitionAside","editor.action.revealDefinition"];super(67,"gotoLocation",e,{"editor.gotoLocation.multiple":{deprecationMessage:w(239,"This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.")},"editor.gotoLocation.multipleDefinitions":{description:w(240,"Controls the behavior the 'Go to Definition'-command when multiple target locations exist."),...t},"editor.gotoLocation.multipleTypeDefinitions":{description:w(241,"Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist."),...t},"editor.gotoLocation.multipleDeclarations":{description:w(242,"Controls the behavior the 'Go to Declaration'-command when multiple target locations exist."),...t},"editor.gotoLocation.multipleImplementations":{description:w(243,"Controls the behavior the 'Go to Implementations'-command when multiple target locations exist."),...t},"editor.gotoLocation.multipleReferences":{description:w(244,"Controls the behavior the 'Go to References'-command when multiple target locations exist."),...t},"editor.gotoLocation.alternativeDefinitionCommand":{type:"string",default:e.alternativeDefinitionCommand,enum:i,description:w(245,"Alternative command id that is being executed when the result of 'Go to Definition' is the current location.")},"editor.gotoLocation.alternativeTypeDefinitionCommand":{type:"string",default:e.alternativeTypeDefinitionCommand,enum:i,description:w(246,"Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.")},"editor.gotoLocation.alternativeDeclarationCommand":{type:"string",default:e.alternativeDeclarationCommand,enum:i,description:w(247,"Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.")},"editor.gotoLocation.alternativeImplementationCommand":{type:"string",default:e.alternativeImplementationCommand,enum:i,description:w(248,"Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.")},"editor.gotoLocation.alternativeReferenceCommand":{type:"string",default:e.alternativeReferenceCommand,enum:i,description:w(249,"Alternative command id that is being executed when the result of 'Go to Reference' is the current location.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{multiple:Yi(t.multiple,this.defaultValue.multiple,["peek","gotoAndPeek","goto"]),multipleDefinitions:Yi(t.multipleDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleTypeDefinitions:Yi(t.multipleTypeDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleDeclarations:Yi(t.multipleDeclarations,"peek",["peek","gotoAndPeek","goto"]),multipleImplementations:Yi(t.multipleImplementations,"peek",["peek","gotoAndPeek","goto"]),multipleReferences:Yi(t.multipleReferences,"peek",["peek","gotoAndPeek","goto"]),multipleTests:Yi(t.multipleTests,"peek",["peek","gotoAndPeek","goto"]),alternativeDefinitionCommand:xo.string(t.alternativeDefinitionCommand,this.defaultValue.alternativeDefinitionCommand),alternativeTypeDefinitionCommand:xo.string(t.alternativeTypeDefinitionCommand,this.defaultValue.alternativeTypeDefinitionCommand),alternativeDeclarationCommand:xo.string(t.alternativeDeclarationCommand,this.defaultValue.alternativeDeclarationCommand),alternativeImplementationCommand:xo.string(t.alternativeImplementationCommand,this.defaultValue.alternativeImplementationCommand),alternativeReferenceCommand:xo.string(t.alternativeReferenceCommand,this.defaultValue.alternativeReferenceCommand),alternativeTestsCommand:xo.string(t.alternativeTestsCommand,this.defaultValue.alternativeTestsCommand)}}}class X4e extends _n{constructor(){const e={enabled:!0,delay:300,hidingDelay:300,sticky:!0,above:!0};super(69,"hover",e,{"editor.hover.enabled":{type:"boolean",default:e.enabled,description:w(250,"Controls whether the hover is shown.")},"editor.hover.delay":{type:"number",default:e.delay,minimum:0,maximum:1e4,description:w(251,"Controls the delay in milliseconds after which the hover is shown.")},"editor.hover.sticky":{type:"boolean",default:e.sticky,description:w(252,"Controls whether the hover should remain visible when mouse is moved over it.")},"editor.hover.hidingDelay":{type:"integer",minimum:0,default:e.hidingDelay,markdownDescription:w(253,"Controls the delay in milliseconds after which the hover is hidden. Requires `#editor.hover.sticky#` to be enabled.")},"editor.hover.above":{type:"boolean",default:e.above,description:w(254,"Prefer showing hovers above the line, if there's space.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{enabled:Ge(t.enabled,this.defaultValue.enabled),delay:wi.clampedInt(t.delay,this.defaultValue.delay,0,1e4),sticky:Ge(t.sticky,this.defaultValue.sticky),hidingDelay:wi.clampedInt(t.hidingDelay,this.defaultValue.hidingDelay,0,6e5),above:Ge(t.above,this.defaultValue.above)}}}class hx extends Rb{constructor(){super(165,{width:0,height:0,glyphMarginLeft:0,glyphMarginWidth:0,glyphMarginDecorationLaneCount:0,lineNumbersLeft:0,lineNumbersWidth:0,decorationsLeft:0,decorationsWidth:0,contentLeft:0,contentWidth:0,minimap:{renderMinimap:0,minimapLeft:0,minimapWidth:0,minimapHeightIsEditorHeight:!1,minimapIsSampling:!1,minimapScale:1,minimapLineHeight:1,minimapCanvasInnerWidth:0,minimapCanvasInnerHeight:0,minimapCanvasOuterWidth:0,minimapCanvasOuterHeight:0},viewportColumn:0,isWordWrapMinified:!1,isViewportWrapping:!1,wrappingColumn:-1,verticalScrollbarWidth:0,horizontalScrollbarHeight:0,overviewRuler:{top:0,width:0,height:0,right:0}})}compute(e,t,i){return hx.computeLayout(t,{memory:e.memory,outerWidth:e.outerWidth,outerHeight:e.outerHeight,isDominatedByLongLines:e.isDominatedByLongLines,lineHeight:e.fontInfo.lineHeight,viewLineCount:e.viewLineCount,lineNumbersDigitCount:e.lineNumbersDigitCount,typicalHalfwidthCharacterWidth:e.fontInfo.typicalHalfwidthCharacterWidth,maxDigitWidth:e.fontInfo.maxDigitWidth,pixelRatio:e.pixelRatio,glyphMarginDecorationLaneCount:e.glyphMarginDecorationLaneCount})}static computeContainedMinimapLineCount(e){const t=e.height/e.lineHeight,i=Math.floor(e.paddingTop/e.lineHeight);let s=Math.floor(e.paddingBottom/e.lineHeight);e.scrollBeyondLastLine&&(s=Math.max(s,t-1));const r=(i+e.viewLineCount+s)/(e.pixelRatio*e.height),o=Math.floor(e.viewLineCount/r);return{typicalViewportLineCount:t,extraLinesBeforeFirstLine:i,extraLinesBeyondLastLine:s,desiredRatio:r,minimapLineCount:o}}static _computeMinimapLayout(e,t){const i=e.outerWidth,s=e.outerHeight,r=e.pixelRatio;if(!e.minimap.enabled)return{renderMinimap:0,minimapLeft:0,minimapWidth:0,minimapHeightIsEditorHeight:!1,minimapIsSampling:!1,minimapScale:1,minimapLineHeight:1,minimapCanvasInnerWidth:0,minimapCanvasInnerHeight:Math.floor(r*s),minimapCanvasOuterWidth:0,minimapCanvasOuterHeight:s};const o=t.stableMinimapLayoutInput,a=o&&e.outerHeight===o.outerHeight&&e.lineHeight===o.lineHeight&&e.typicalHalfwidthCharacterWidth===o.typicalHalfwidthCharacterWidth&&e.pixelRatio===o.pixelRatio&&e.scrollBeyondLastLine===o.scrollBeyondLastLine&&e.paddingTop===o.paddingTop&&e.paddingBottom===o.paddingBottom&&e.minimap.enabled===o.minimap.enabled&&e.minimap.side===o.minimap.side&&e.minimap.size===o.minimap.size&&e.minimap.showSlider===o.minimap.showSlider&&e.minimap.renderCharacters===o.minimap.renderCharacters&&e.minimap.maxColumn===o.minimap.maxColumn&&e.minimap.scale===o.minimap.scale&&e.verticalScrollbarWidth===o.verticalScrollbarWidth&&e.isViewportWrapping===o.isViewportWrapping,l=e.lineHeight,c=e.typicalHalfwidthCharacterWidth,d=e.scrollBeyondLastLine,u=e.minimap.renderCharacters;let h=r>=2?Math.round(e.minimap.scale*2):e.minimap.scale;const f=e.minimap.maxColumn,g=e.minimap.size,m=e.minimap.side,_=e.verticalScrollbarWidth,b=e.viewLineCount,v=e.remainingWidth,C=e.isViewportWrapping,y=u?2:3;let x=Math.floor(r*s);const S=x/r;let L=!1,k=!1,N=y*h,I=h/r,M=1;if(g==="fill"||g==="fit"){const{typicalViewportLineCount:W,extraLinesBeforeFirstLine:F,extraLinesBeyondLastLine:q,desiredRatio:Q,minimapLineCount:J}=hx.computeContainedMinimapLineCount({viewLineCount:b,scrollBeyondLastLine:d,paddingTop:e.paddingTop,paddingBottom:e.paddingBottom,height:s,lineHeight:l,pixelRatio:r});if(b/J>1)L=!0,k=!0,h=1,N=1,I=h/r;else{let pe=!1,ke=h+1;if(g==="fit"){const $e=Math.ceil((F+b+q)*N);C&&a&&v<=t.stableFitRemainingWidth?(pe=!0,ke=t.stableFitMaxMinimapScale):pe=$e>x}if(g==="fill"||pe){L=!0;const $e=h;N=Math.min(l*r,Math.max(1,Math.floor(1/Q))),C&&a&&v<=t.stableFitRemainingWidth&&(ke=t.stableFitMaxMinimapScale),h=Math.min(ke,Math.max(1,Math.floor(N/y))),h>$e&&(M=Math.min(2,h/$e)),I=h/r/M,x=Math.ceil(Math.max(W,F+b+q)*N),C?(t.stableMinimapLayoutInput=e,t.stableFitRemainingWidth=v,t.stableFitMaxMinimapScale=h):(t.stableMinimapLayoutInput=null,t.stableFitRemainingWidth=0)}}}const P=Math.floor(f*I),H=Math.min(P,Math.max(0,Math.floor((v-_-2)*I/(c+I)))+Ih);let O=Math.floor(r*H);const A=O/r;O=Math.floor(O*M);const z=u?1:2,U=m==="left"?0:i-H-_;return{renderMinimap:z,minimapLeft:U,minimapWidth:H,minimapHeightIsEditorHeight:L,minimapIsSampling:k,minimapScale:h,minimapLineHeight:N,minimapCanvasInnerWidth:O,minimapCanvasInnerHeight:x,minimapCanvasOuterWidth:A,minimapCanvasOuterHeight:S}}static computeLayout(e,t){const i=t.outerWidth|0,s=t.outerHeight|0,r=t.lineHeight|0,o=t.lineNumbersDigitCount|0,a=t.typicalHalfwidthCharacterWidth,l=t.maxDigitWidth,c=t.pixelRatio,d=t.viewLineCount,u=e.get(154),h=u==="inherit"?e.get(153):u,f=h==="inherit"?e.get(149):h,g=e.get(152),m=t.isDominatedByLongLines,_=e.get(66),b=e.get(76).renderType!==0,v=e.get(77),C=e.get(119),y=e.get(96),x=e.get(81),S=e.get(117),L=S.verticalScrollbarSize,k=S.verticalHasArrows,N=S.arrowSize,I=S.horizontalScrollbarSize,M=e.get(52),P=e.get(126)!=="never";let H=e.get(74);M&&P&&(H+=16);let O=0;if(b){const Re=Math.max(o,v);O=Math.round(Re*l)}let A=0;_&&(A=r*t.glyphMarginDecorationLaneCount);let z=0,U=z+A,W=U+O,F=W+H;const q=i-A-O-H;let Q=!1,J=!1,oe=-1;e.get(2)===2&&h==="inherit"&&m?(Q=!0,J=!0):f==="on"||f==="bounded"?J=!0:f==="wordWrapColumn"&&(oe=g);const pe=hx._computeMinimapLayout({outerWidth:i,outerHeight:s,lineHeight:r,typicalHalfwidthCharacterWidth:a,pixelRatio:c,scrollBeyondLastLine:C,paddingTop:y.top,paddingBottom:y.bottom,minimap:x,verticalScrollbarWidth:L,viewLineCount:d,remainingWidth:q,isViewportWrapping:J},t.memory||new N_e);pe.renderMinimap!==0&&pe.minimapLeft===0&&(z+=pe.minimapWidth,U+=pe.minimapWidth,W+=pe.minimapWidth,F+=pe.minimapWidth);const ke=q-pe.minimapWidth,$e=Math.max(1,Math.floor((ke-L-2)/a)),Xe=k?N:0;return J&&(oe=Math.max(1,$e),f==="bounded"&&(oe=Math.min(oe,g))),{width:i,height:s,glyphMarginLeft:z,glyphMarginWidth:A,glyphMarginDecorationLaneCount:t.glyphMarginDecorationLaneCount,lineNumbersLeft:U,lineNumbersWidth:O,decorationsLeft:W,decorationsWidth:H,contentLeft:F,contentWidth:ke,minimap:pe,viewportColumn:$e,isWordWrapMinified:Q,isViewportWrapping:J,wrappingColumn:oe,verticalScrollbarWidth:L,horizontalScrollbarHeight:I,overviewRuler:{top:Xe,width:L,height:s-2*Xe,right:0}}}}class Z4e extends _n{constructor(){super(156,"wrappingStrategy","simple",{"editor.wrappingStrategy":{enumDescriptions:[w(255,"Assumes that all characters are of the same width. This is a fast algorithm that works correctly for monospace fonts and certain scripts (like Latin characters) where glyphs are of equal width."),w(256,"Delegates wrapping points computation to the browser. This is a slow algorithm, that might cause freezes for large files, but it works correctly in all cases.")],type:"string",enum:["simple","advanced"],default:"simple",description:w(257,"Controls the algorithm that computes wrapping points. Note that when in accessibility mode, advanced will be used for the best experience.")}})}validate(e){return Yi(e,"simple",["simple","advanced"])}compute(e,t,i){return t.get(2)===2?"advanced":i}}var Sd;(function(n){n.Off="off",n.OnCode="onCode",n.On="on"})(Sd||(Sd={}));class Q4e extends _n{constructor(){const e={enabled:Sd.OnCode};super(73,"lightbulb",e,{"editor.lightbulb.enabled":{type:"string",enum:[Sd.Off,Sd.OnCode,Sd.On],default:e.enabled,enumDescriptions:[w(258,"Disable the code action menu."),w(259,"Show the code action menu when the cursor is on lines with code."),w(260,"Show the code action menu when the cursor is on lines with code or on empty lines.")],description:w(261,"Enables the Code Action lightbulb in the editor.")}})}validate(e){return!e||typeof e!="object"?this.defaultValue:{enabled:Yi(e.enabled,this.defaultValue.enabled,[Sd.Off,Sd.OnCode,Sd.On])}}}class J4e extends _n{constructor(){const e={enabled:!0,maxLineCount:5,defaultModel:"outlineModel",scrollWithEditor:!0};super(131,"stickyScroll",e,{"editor.stickyScroll.enabled":{type:"boolean",default:e.enabled,description:w(262,"Shows the nested current scopes during the scroll at the top of the editor.")},"editor.stickyScroll.maxLineCount":{type:"number",default:e.maxLineCount,minimum:1,maximum:20,description:w(263,"Defines the maximum number of sticky lines to show.")},"editor.stickyScroll.defaultModel":{type:"string",enum:["outlineModel","foldingProviderModel","indentationModel"],default:e.defaultModel,description:w(264,"Defines the model to use for determining which lines to stick. If the outline model does not exist, it will fall back on the folding provider model which falls back on the indentation model. This order is respected in all three cases.")},"editor.stickyScroll.scrollWithEditor":{type:"boolean",default:e.scrollWithEditor,description:w(265,"Enable scrolling of Sticky Scroll with the editor's horizontal scrollbar.")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return{enabled:Ge(t.enabled,this.defaultValue.enabled),maxLineCount:wi.clampedInt(t.maxLineCount,this.defaultValue.maxLineCount,1,20),defaultModel:Yi(t.defaultModel,this.defaultValue.defaultModel,["outlineModel","foldingProviderModel","indentationModel"]),scrollWithEditor:Ge(t.scrollWithEditor,this.defaultValue.scrollWithEditor)}}}class e5e extends _n{constructor(){const e={enabled:"on",fontSize:0,fontFamily:"",padding:!1,maximumLength:43};super(159,"inlayHints",e,{"editor.inlayHints.enabled":{type:"string",default:e.enabled,description:w(266,"Enables the inlay hints in the editor."),enum:["on","onUnlessPressed","offUnlessPressed","off"],markdownEnumDescriptions:[w(267,"Inlay hints are enabled"),w(268,"Inlay hints are showing by default and hide when holding {0}",At?"Ctrl+Option":"Ctrl+Alt"),w(269,"Inlay hints are hidden by default and show when holding {0}",At?"Ctrl+Option":"Ctrl+Alt"),w(270,"Inlay hints are disabled")]},"editor.inlayHints.fontSize":{type:"number",default:e.fontSize,markdownDescription:w(271,"Controls font size of inlay hints in the editor. As default the {0} is used when the configured value is less than {1} or greater than the editor font size.","`#editor.fontSize#`","`5`")},"editor.inlayHints.fontFamily":{type:"string",default:e.fontFamily,markdownDescription:w(272,"Controls font family of inlay hints in the editor. When set to empty, the {0} is used.","`#editor.fontFamily#`")},"editor.inlayHints.padding":{type:"boolean",default:e.padding,description:w(273,"Enables the padding around the inlay hints in the editor.")},"editor.inlayHints.maximumLength":{type:"number",default:e.maximumLength,markdownDescription:w(274,"Maximum overall length of inlay hints, for a single line, before they get truncated by the editor. Set to `0` to never truncate")}})}validate(e){if(!e||typeof e!="object")return this.defaultValue;const t=e;return typeof t.enabled=="boolean"&&(t.enabled=t.enabled?"on":"off"),{enabled:Yi(t.enabled,this.defaultValue.enabled,["on","off","offUnlessPressed","onUnlessPressed"]),fontSize:wi.clampedInt(t.fontSize,this.defaultValue.fontSize,0,100),fontFamily:xo.string(t.fontFamily,this.defaultValue.fontFamily),padding:Ge(t.padding,this.defaultValue.padding),maximumLength:wi.clampedInt(t.maximumLength,this.defaultValue.maximumLength,0,Number.MAX_SAFE_INTEGER)}}}class t5e extends _n{constructor(){super(74,"lineDecorationsWidth",10)}validate(e){return typeof e=="string"&&/^\d+(\.\d+)?ch$/.test(e)?-parseFloat(e.substring(0,e.length-2)):wi.clampedInt(e,this.defaultValue,0,1e3)}compute(e,t,i){return i<0?wi.clampedInt(-i*e.fontInfo.typicalHalfwidthCharacterWidth,this.defaultValue,0,1e3):i}}class i5e extends Sa{constructor(){super(75,"lineHeight",ka.lineHeight,e=>Sa.clamp(e,0,150),{markdownDescription:w(275,`Controls the line height. - Use 0 to automatically compute the line height from the font size. - Values between 0 and 8 will be used as a multiplier with the font size. - Values greater than or equal to 8 will be used as effective values.`)},0,150)}compute(e,t,i){return e.fontInfo.lineHeight}}class n5e extends _n{constructor(){const e={enabled:!0,size:"proportional",side:"right",showSlider:"mouseover",autohide:"none",renderCharacters:!0,maxColumn:120,scale:1,showRegionSectionHeaders:!0,showMarkSectionHeaders:!0,markSectionHeaderRegex:"\\bMARK:\\s*(?-?)\\s*(?