Compare commits
3 Commits
760bfc474a
...
hackathon-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83a0c96d95 | ||
|
|
7895f41602 | ||
|
|
04dd5b2173 |
8
app/lang/ht.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"atividades":
|
||||
{
|
||||
"aspirador": {
|
||||
"nome": "Faz 1: Liy Dwat la"
|
||||
}
|
||||
}
|
||||
}
|
||||
8
app/lang/pt.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"atividades":
|
||||
{
|
||||
"aspirador": {
|
||||
"nome": "Fase 1: A Linha Reta"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,7 +80,6 @@
|
||||
"phaser": "^3.90.0",
|
||||
"phaser3-rex-plugins": "^1.80.16",
|
||||
"prop-types": "^15.8.1",
|
||||
"react": "^19.2.0",
|
||||
"react-confetti": "^6.4.0",
|
||||
"react-dom": "^19.2.0",
|
||||
"react-resizable-panels": "^3.0.6",
|
||||
|
||||
285
app/pnpm-lock.yaml
generated
@@ -40,7 +40,7 @@ importers:
|
||||
version: 3.9.1
|
||||
'@uiw/react-codemirror':
|
||||
specifier: 4.25.9
|
||||
version: 4.25.9(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.20.1)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.0)(@codemirror/search@6.5.11)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.41.0)(codemirror@6.0.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
version: 4.25.9(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.20.1)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.0)(@codemirror/search@6.5.11)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.41.0)(codemirror@6.0.2)(react-dom@19.2.0)
|
||||
acorn:
|
||||
specifier: ^8.15.0
|
||||
version: 8.15.0
|
||||
@@ -58,7 +58,7 @@ importers:
|
||||
version: 0.546.0
|
||||
lucide-react:
|
||||
specifier: ^0.546.0
|
||||
version: 0.546.0(react@19.2.0)
|
||||
version: 0.546.0
|
||||
phaser:
|
||||
specifier: ^3.90.0
|
||||
version: 3.90.0
|
||||
@@ -68,24 +68,21 @@ importers:
|
||||
prop-types:
|
||||
specifier: ^15.8.1
|
||||
version: 15.8.1
|
||||
react:
|
||||
specifier: ^19.2.0
|
||||
version: 19.2.0
|
||||
react-confetti:
|
||||
specifier: ^6.4.0
|
||||
version: 6.4.0(react@19.2.0)
|
||||
version: 6.4.0
|
||||
react-dom:
|
||||
specifier: ^19.2.0
|
||||
version: 19.2.0(react@19.2.0)
|
||||
version: 19.2.0
|
||||
react-resizable-panels:
|
||||
specifier: ^3.0.6
|
||||
version: 3.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
version: 3.0.6(react-dom@19.2.0)
|
||||
react-router-dom:
|
||||
specifier: ^7.9.4
|
||||
version: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
version: 7.9.4(react-dom@19.2.0)
|
||||
react-shepherd:
|
||||
specifier: ^6.1.9
|
||||
version: 6.1.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
|
||||
version: 6.1.9(react-dom@19.2.0)(typescript@5.9.3)
|
||||
sentiment:
|
||||
specifier: ^5.0.2
|
||||
version: 5.0.2
|
||||
@@ -107,7 +104,7 @@ importers:
|
||||
version: 6.9.1
|
||||
'@testing-library/react':
|
||||
specifier: ^16.3.1
|
||||
version: 16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
version: 16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0)
|
||||
'@testing-library/user-event':
|
||||
specifier: ^14.6.1
|
||||
version: 14.6.1(@testing-library/dom@10.4.1)
|
||||
@@ -229,18 +226,10 @@ packages:
|
||||
'@asamuzakjp/nwsapi@2.3.9':
|
||||
resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
|
||||
|
||||
'@babel/code-frame@7.27.1':
|
||||
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/code-frame@7.29.0':
|
||||
resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/compat-data@7.28.4':
|
||||
resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/compat-data@7.29.3':
|
||||
resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -249,10 +238,6 @@ packages:
|
||||
resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/generator@7.28.3':
|
||||
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
|
||||
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'}
|
||||
@@ -261,10 +246,6 @@ packages:
|
||||
resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/helper-compilation-targets@7.27.2':
|
||||
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/helper-compilation-targets@7.28.6':
|
||||
resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -294,20 +275,10 @@ packages:
|
||||
resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/helper-module-imports@7.27.1':
|
||||
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
|
||||
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.3':
|
||||
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
peerDependencies:
|
||||
'@babel/core': ^7.0.0
|
||||
|
||||
'@babel/helper-module-transforms@7.28.6':
|
||||
resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -769,18 +740,10 @@ packages:
|
||||
resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/template@7.27.2':
|
||||
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
|
||||
engines: {node: '>=6.9.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.28.4':
|
||||
resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/traverse@7.29.0':
|
||||
resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
@@ -1177,78 +1140,92 @@ packages:
|
||||
resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-libvips-linux-arm@1.2.3':
|
||||
resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-libvips-linux-ppc64@1.2.3':
|
||||
resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-libvips-linux-s390x@1.2.3':
|
||||
resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-libvips-linux-x64@1.2.3':
|
||||
resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-libvips-linuxmusl-arm64@1.2.3':
|
||||
resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@img/sharp-libvips-linuxmusl-x64@1.2.3':
|
||||
resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@img/sharp-linux-arm64@0.34.4':
|
||||
resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==}
|
||||
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-linux-arm@0.34.4':
|
||||
resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==}
|
||||
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-linux-ppc64@0.34.4':
|
||||
resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==}
|
||||
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-linux-s390x@0.34.4':
|
||||
resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==}
|
||||
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-linux-x64@0.34.4':
|
||||
resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==}
|
||||
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@img/sharp-linuxmusl-arm64@0.34.4':
|
||||
resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==}
|
||||
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@img/sharp-linuxmusl-x64@0.34.4':
|
||||
resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==}
|
||||
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@img/sharp-wasm32@0.34.4':
|
||||
resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==}
|
||||
@@ -1462,121 +1439,145 @@ packages:
|
||||
resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@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.52.5':
|
||||
resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@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.52.5':
|
||||
resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@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.52.5':
|
||||
resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@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.52.5':
|
||||
resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@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.52.5':
|
||||
resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@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.52.5':
|
||||
resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@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.52.5':
|
||||
resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@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.52.5':
|
||||
resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rollup/rollup-linux-s390x-gnu@4.60.3':
|
||||
resolution: {integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@rollup/rollup-linux-x64-gnu@4.52.5':
|
||||
resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
|
||||
cpu: [x64]
|
||||
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.52.5':
|
||||
resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@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==}
|
||||
@@ -1687,15 +1688,19 @@ packages:
|
||||
|
||||
'@tsparticles/basic@3.9.1':
|
||||
resolution: {integrity: sha512-ijr2dHMx0IQHqhKW3qA8tfwrR2XYbbWYdaJMQuBo2CkwBVIhZ76U+H20Y492j/NXpd1FUnt2aC0l4CEVGVGdeQ==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/confetti@3.9.1':
|
||||
resolution: {integrity: sha512-S0Q6iBqQvcCaOzmnddmh41RHeLwzSdkLq8hU3Ryokmb9eqoS9MQdYz2tjUHHdTap+YLPlp64SZ15sC4C9ulFbA==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/engine@3.9.1':
|
||||
resolution: {integrity: sha512-DpdgAhWMZ3Eh2gyxik8FXS6BKZ8vyea+Eu5BC4epsahqTGY9V3JGGJcXC6lRJx6cPMAx1A0FaQAojPF3v6rkmQ==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/move-base@3.9.1':
|
||||
resolution: {integrity: sha512-X4huBS27d8srpxwOxliWPUt+NtCwY+8q/cx1DvQxyqmTA8VFCGpcHNwtqiN+9JicgzOvSuaORVqUgwlsc7h4pQ==}
|
||||
deprecated: this package was deprecated in tsparticles v4, replaced by @tsparticles/plugin-move
|
||||
|
||||
'@tsparticles/plugin-emitters@3.9.1':
|
||||
resolution: {integrity: sha512-h7opR8SoFWBmVHceDLJUerLENaPfkJSh2zQYvzmLj2L+V3VLS1QDgty+4QZVeZfqNROmgQw2eLFA5El1E0sqqw==}
|
||||
@@ -1705,63 +1710,83 @@ packages:
|
||||
|
||||
'@tsparticles/plugin-hsl-color@3.9.1':
|
||||
resolution: {integrity: sha512-jJd1iGgRwX6eeNjc1zUXiJivaqC5UE+SC2A3/NtHwwoQrkfxGWmRHOsVyLnOBRcCPgBp/FpdDe6DIDjCMO715w==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/plugin-motion@3.9.1':
|
||||
resolution: {integrity: sha512-I/356NHCiMUgFzWjAHYKO7YvBqKtHSktIPgTRruqlruyrAcwzjkT55ZQ1K5EcJLWETkF1bfG2VpJBRu8ksf9mw==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/plugin-rgb-color@3.9.1':
|
||||
resolution: {integrity: sha512-SBxk7f1KBfXeTnnklbE2Hx4jBgh6I6HOtxb+Os1gTp0oaghZOkWcCD2dP4QbUu7fVNCMOcApPoMNC8RTFcy9wQ==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/shape-cards@3.9.1':
|
||||
resolution: {integrity: sha512-/tQtGh6xC3UmKU2WO7VM5RoAnsvFvPkXcCJJHAQ6AIyWUKVWBrVuewF0ZbJQlNhWCEW/aqE199LuDAewqYAQ5A==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/shape-circle@3.9.1':
|
||||
resolution: {integrity: sha512-DqZFLjbuhVn99WJ+A9ajz9YON72RtCcvubzq6qfjFmtwAK7frvQeb6iDTp6Ze9FUipluxVZWVRG4vWTxi2B+/g==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/shape-emoji@3.9.1':
|
||||
resolution: {integrity: sha512-ifvY63usuT+hipgVHb8gelBHSeF6ryPnMxAAEC1RGHhhXfpSRWMtE6ybr+pSsYU52M3G9+TF84v91pSwNrb9ZQ==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/shape-heart@3.9.1':
|
||||
resolution: {integrity: sha512-h1aYiBVCUAJ14zyK792EuX0332Hus6OgYy/4dk6PhfgdFTQaHk+FzGJjw+jEB8vpxOYtWeysT9uoofPZeDrqBQ==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/shape-image@3.9.1':
|
||||
resolution: {integrity: sha512-fCA5eme8VF3oX8yNVUA0l2SLDKuiZObkijb0z3Ky0qj1HUEVlAuEMhhNDNB9E2iELTrWEix9z7BFMePp2CC7AA==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/shape-polygon@3.9.1':
|
||||
resolution: {integrity: sha512-dA77PgZdoLwxnliH6XQM/zF0r4jhT01pw5y7XTeTqws++hg4rTLV9255k6R6eUqKq0FPSW1/WBsBIl7q/MmrqQ==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/shape-square@3.9.1':
|
||||
resolution: {integrity: sha512-DKGkDnRyZrAm7T2ipqNezJahSWs6xd9O5LQLe5vjrYm1qGwrFxJiQaAdlb00UNrexz1/SA7bEoIg4XKaFa7qhQ==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/shape-star@3.9.1':
|
||||
resolution: {integrity: sha512-kdMJpi8cdeb6vGrZVSxTG0JIjCwIenggqk0EYeKAwtOGZFBgL7eHhF2F6uu1oq8cJAbXPujEoabnLsz6mW8XaA==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/updater-color@3.9.1':
|
||||
resolution: {integrity: sha512-XGWdscrgEMA8L5E7exsE0f8/2zHKIqnTrZymcyuFBw2DCB6BIV+5z6qaNStpxrhq3DbIxxhqqcybqeOo7+Alpg==}
|
||||
deprecated: this package was deprecated in tsparticles v4, replaced by @tsparticles/updater-paint
|
||||
|
||||
'@tsparticles/updater-life@3.9.1':
|
||||
resolution: {integrity: sha512-Oi8aF2RIwMMsjssUkCB6t3PRpENHjdZf6cX92WNfAuqXtQphr3OMAkYFJFWkvyPFK22AVy3p/cFt6KE5zXxwAA==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/updater-opacity@3.9.1':
|
||||
resolution: {integrity: sha512-w778LQuRZJ+IoWzeRdrGykPYSSaTeWfBvLZ2XwYEkh/Ss961InOxZKIpcS6i5Kp/Zfw0fS1ZAuqeHwuj///Osw==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/updater-out-modes@3.9.1':
|
||||
resolution: {integrity: sha512-cKQEkAwbru+hhKF+GTsfbOvuBbx2DSB25CxOdhtW2wRvDBoCnngNdLw91rs+0Cex4tgEeibkebrIKFDDE6kELg==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/updater-roll@3.9.1':
|
||||
resolution: {integrity: sha512-zl4JeM3gUBJ0uttmIsond3lrZ3f3AkItFeS0Lhj/7jiCKfUoRyyOMrcBk8R1AhW7lI+7ko1iBs3jhO0jnxz9vg==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/updater-rotate@3.9.1':
|
||||
resolution: {integrity: sha512-9BfKaGfp28JN82MF2qs6Ae/lJr9EColMfMTHqSKljblwbpVDHte4umuwKl3VjbRt87WD9MGtla66NTUYl+WxuQ==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/updater-size@3.9.1':
|
||||
resolution: {integrity: sha512-3NSVs0O2ApNKZXfd+y/zNhTXSFeG1Pw4peI8e6z/q5+XLbmue9oiEwoPy/tQLaark3oNj3JU7Q903ZijPyXSzw==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/updater-tilt@3.9.1':
|
||||
resolution: {integrity: sha512-PB2yaoyXRmSk4iIVgjtRrzOxXMK9mjeAQHIJGtT4faq46Z8cbIIEFgjTwqrUV8qOrNg/h4sm5NE/s0qsTYjp1Q==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@tsparticles/updater-wobble@3.9.1':
|
||||
resolution: {integrity: sha512-c99Ogy9q4QWO+zsDXol0UnpUwZiY2UucFb8ltuDv9AlbGUeprygoub8jhgT5pEDv+GdzWOJGSgq7rfgv9cHBrg==}
|
||||
deprecated: Please update to version 4.1.1
|
||||
|
||||
'@types/aria-query@5.0.4':
|
||||
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
|
||||
@@ -2894,6 +2919,7 @@ packages:
|
||||
|
||||
glob@10.4.5:
|
||||
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
|
||||
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
|
||||
hasBin: true
|
||||
|
||||
glob@11.1.0:
|
||||
@@ -2904,7 +2930,7 @@ packages:
|
||||
|
||||
glob@7.2.3:
|
||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||
deprecated: Glob versions prior to v9 are no longer supported
|
||||
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
|
||||
|
||||
global-agent@3.0.0:
|
||||
resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
|
||||
@@ -3365,24 +3391,28 @@ packages:
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
lightningcss-linux-arm64-musl@1.30.1:
|
||||
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
lightningcss-linux-x64-gnu@1.30.1:
|
||||
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
lightningcss-linux-x64-musl@1.30.1:
|
||||
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
lightningcss-win32-arm64-msvc@1.30.1:
|
||||
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
|
||||
@@ -3962,10 +3992,6 @@ packages:
|
||||
react-dom: ^18.2.0
|
||||
typescript: ^5.0.0
|
||||
|
||||
react@19.2.0:
|
||||
resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
read-binary-file-arch@1.0.6:
|
||||
resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==}
|
||||
hasBin: true
|
||||
@@ -4736,6 +4762,7 @@ packages:
|
||||
whatwg-encoding@3.1.1:
|
||||
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
|
||||
engines: {node: '>=18'}
|
||||
deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
|
||||
|
||||
whatwg-mimetype@4.0.0:
|
||||
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
|
||||
@@ -4967,33 +4994,25 @@ snapshots:
|
||||
|
||||
'@asamuzakjp/nwsapi@2.3.9': {}
|
||||
|
||||
'@babel/code-frame@7.27.1':
|
||||
dependencies:
|
||||
'@babel/helper-validator-identifier': 7.27.1
|
||||
js-tokens: 4.0.0
|
||||
picocolors: 1.1.1
|
||||
|
||||
'@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.28.4': {}
|
||||
|
||||
'@babel/compat-data@7.29.3': {}
|
||||
|
||||
'@babel/core@7.28.4':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.27.1
|
||||
'@babel/generator': 7.28.3
|
||||
'@babel/helper-compilation-targets': 7.27.2
|
||||
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
|
||||
'@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.28.4)
|
||||
'@babel/helpers': 7.28.4
|
||||
'@babel/parser': 7.28.4
|
||||
'@babel/template': 7.27.2
|
||||
'@babel/traverse': 7.28.4
|
||||
'@babel/types': 7.28.4
|
||||
'@babel/parser': 7.29.0
|
||||
'@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
|
||||
@@ -5003,14 +5022,6 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/generator@7.28.3':
|
||||
dependencies:
|
||||
'@babel/parser': 7.28.4
|
||||
'@babel/types': 7.28.4
|
||||
'@jridgewell/gen-mapping': 0.3.13
|
||||
'@jridgewell/trace-mapping': 0.3.31
|
||||
jsesc: 3.1.0
|
||||
|
||||
'@babel/generator@7.29.1':
|
||||
dependencies:
|
||||
'@babel/parser': 7.29.0
|
||||
@@ -5023,19 +5034,11 @@ snapshots:
|
||||
dependencies:
|
||||
'@babel/types': 7.29.0
|
||||
|
||||
'@babel/helper-compilation-targets@7.27.2':
|
||||
dependencies:
|
||||
'@babel/compat-data': 7.28.4
|
||||
'@babel/helper-validator-option': 7.27.1
|
||||
browserslist: 4.26.3
|
||||
lru-cache: 5.1.1
|
||||
semver: 6.3.1
|
||||
|
||||
'@babel/helper-compilation-targets@7.28.6':
|
||||
dependencies:
|
||||
'@babel/compat-data': 7.29.3
|
||||
'@babel/helper-validator-option': 7.27.1
|
||||
browserslist: 4.26.3
|
||||
browserslist: 4.28.2
|
||||
lru-cache: 5.1.1
|
||||
semver: 6.3.1
|
||||
|
||||
@@ -5079,13 +5082,6 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/helper-module-imports@7.27.1':
|
||||
dependencies:
|
||||
'@babel/traverse': 7.28.4
|
||||
'@babel/types': 7.28.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/helper-module-imports@7.28.6':
|
||||
dependencies:
|
||||
'@babel/traverse': 7.29.0
|
||||
@@ -5093,15 +5089,6 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.4
|
||||
'@babel/helper-module-imports': 7.27.1
|
||||
'@babel/helper-validator-identifier': 7.27.1
|
||||
'@babel/traverse': 7.28.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/helper-module-transforms@7.28.6(@babel/core@7.28.4)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.4
|
||||
@@ -5124,7 +5111,7 @@ snapshots:
|
||||
'@babel/core': 7.28.4
|
||||
'@babel/helper-annotate-as-pure': 7.27.3
|
||||
'@babel/helper-wrap-function': 7.28.6
|
||||
'@babel/traverse': 7.28.4
|
||||
'@babel/traverse': 7.29.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -5139,7 +5126,7 @@ snapshots:
|
||||
|
||||
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
|
||||
dependencies:
|
||||
'@babel/traverse': 7.28.4
|
||||
'@babel/traverse': 7.29.0
|
||||
'@babel/types': 7.29.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -5162,8 +5149,8 @@ snapshots:
|
||||
|
||||
'@babel/helpers@7.28.4':
|
||||
dependencies:
|
||||
'@babel/template': 7.27.2
|
||||
'@babel/types': 7.28.4
|
||||
'@babel/template': 7.28.6
|
||||
'@babel/types': 7.29.0
|
||||
|
||||
'@babel/parser@7.28.4':
|
||||
dependencies:
|
||||
@@ -5364,7 +5351,7 @@ snapshots:
|
||||
'@babel/core': 7.28.4
|
||||
'@babel/helper-compilation-targets': 7.28.6
|
||||
'@babel/helper-plugin-utils': 7.28.6
|
||||
'@babel/traverse': 7.28.4
|
||||
'@babel/traverse': 7.29.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -5391,7 +5378,7 @@ snapshots:
|
||||
'@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.4
|
||||
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
|
||||
'@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.4)
|
||||
'@babel/helper-plugin-utils': 7.28.6
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -5417,7 +5404,7 @@ snapshots:
|
||||
'@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.4
|
||||
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
|
||||
'@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.4)
|
||||
'@babel/helper-plugin-utils': 7.28.6
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -5665,30 +5652,12 @@ snapshots:
|
||||
|
||||
'@babel/runtime@7.28.4': {}
|
||||
|
||||
'@babel/template@7.27.2':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.27.1
|
||||
'@babel/parser': 7.28.4
|
||||
'@babel/types': 7.28.4
|
||||
|
||||
'@babel/template@7.28.6':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.29.0
|
||||
'@babel/parser': 7.29.0
|
||||
'@babel/types': 7.29.0
|
||||
|
||||
'@babel/traverse@7.28.4':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.27.1
|
||||
'@babel/generator': 7.28.3
|
||||
'@babel/helper-globals': 7.28.0
|
||||
'@babel/parser': 7.28.4
|
||||
'@babel/template': 7.27.2
|
||||
'@babel/types': 7.28.4
|
||||
debug: 4.4.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@babel/traverse@7.29.0':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.29.0
|
||||
@@ -5865,7 +5834,7 @@ snapshots:
|
||||
fs-extra: 10.1.0
|
||||
isbinaryfile: 4.0.10
|
||||
minimist: 1.2.8
|
||||
plist: 3.1.0
|
||||
plist: 3.1.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -5888,7 +5857,7 @@ snapshots:
|
||||
dir-compare: 4.2.0
|
||||
fs-extra: 11.3.4
|
||||
minimatch: 9.0.5
|
||||
plist: 3.1.0
|
||||
plist: 3.1.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -6238,7 +6207,7 @@ snapshots:
|
||||
'@rollup/plugin-babel@6.1.0(@babel/core@7.28.4)(@types/babel__core@7.20.5)(rollup@4.60.3)':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.4
|
||||
'@babel/helper-module-imports': 7.27.1
|
||||
'@babel/helper-module-imports': 7.28.6
|
||||
'@rollup/pluginutils': 5.3.0(rollup@4.60.3)
|
||||
optionalDependencies:
|
||||
'@types/babel__core': 7.20.5
|
||||
@@ -6252,7 +6221,7 @@ snapshots:
|
||||
'@types/resolve': 1.20.2
|
||||
deepmerge: 4.3.1
|
||||
is-module: 1.0.0
|
||||
resolve: 1.22.10
|
||||
resolve: 1.22.12
|
||||
optionalDependencies:
|
||||
rollup: 4.60.3
|
||||
|
||||
@@ -6455,12 +6424,11 @@ snapshots:
|
||||
picocolors: 1.1.1
|
||||
redent: 3.0.0
|
||||
|
||||
'@testing-library/react@16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
'@testing-library/react@16.3.1(@testing-library/dom@10.4.1)(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
'@testing-library/dom': 10.4.1
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
react-dom: 19.2.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.2.2
|
||||
'@types/react-dom': 19.2.2(@types/react@19.2.2)
|
||||
@@ -6606,24 +6574,24 @@ snapshots:
|
||||
|
||||
'@types/babel__core@7.20.5':
|
||||
dependencies:
|
||||
'@babel/parser': 7.28.4
|
||||
'@babel/types': 7.28.4
|
||||
'@babel/parser': 7.29.0
|
||||
'@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.28.4
|
||||
'@babel/types': 7.29.0
|
||||
|
||||
'@types/babel__template@7.4.4':
|
||||
dependencies:
|
||||
'@babel/parser': 7.28.4
|
||||
'@babel/types': 7.28.4
|
||||
'@babel/parser': 7.29.0
|
||||
'@babel/types': 7.29.0
|
||||
|
||||
'@types/babel__traverse@7.28.0':
|
||||
dependencies:
|
||||
'@babel/types': 7.28.4
|
||||
'@babel/types': 7.29.0
|
||||
|
||||
'@types/cacheable-request@6.0.3':
|
||||
dependencies:
|
||||
@@ -6703,7 +6671,7 @@ snapshots:
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
|
||||
'@uiw/react-codemirror@4.25.9(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.20.1)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.0)(@codemirror/search@6.5.11)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.41.0)(codemirror@6.0.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
|
||||
'@uiw/react-codemirror@4.25.9(@babel/runtime@7.28.4)(@codemirror/autocomplete@6.20.1)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.0)(@codemirror/search@6.5.11)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.41.0)(codemirror@6.0.2)(react-dom@19.2.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
'@codemirror/commands': 6.10.3
|
||||
@@ -6712,8 +6680,7 @@ snapshots:
|
||||
'@codemirror/view': 6.41.0
|
||||
'@uiw/codemirror-extensions-basic-setup': 4.25.9(@codemirror/autocomplete@6.20.1)(@codemirror/commands@6.10.3)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.0)(@codemirror/search@6.5.11)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)
|
||||
codemirror: 6.0.2
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
react-dom: 19.2.0
|
||||
transitivePeerDependencies:
|
||||
- '@codemirror/autocomplete'
|
||||
- '@codemirror/language'
|
||||
@@ -6807,8 +6774,7 @@ snapshots:
|
||||
|
||||
'@xmldom/xmldom@0.8.13': {}
|
||||
|
||||
'@xmldom/xmldom@0.9.10':
|
||||
optional: true
|
||||
'@xmldom/xmldom@0.9.10': {}
|
||||
|
||||
'@zeit/schemas@2.36.0': {}
|
||||
|
||||
@@ -8561,9 +8527,7 @@ snapshots:
|
||||
dependencies:
|
||||
yallist: 4.0.0
|
||||
|
||||
lucide-react@0.546.0(react@19.2.0):
|
||||
dependencies:
|
||||
react: 19.2.0
|
||||
lucide-react@0.546.0: {}
|
||||
|
||||
lucide@0.546.0: {}
|
||||
|
||||
@@ -8867,7 +8831,6 @@ snapshots:
|
||||
'@xmldom/xmldom': 0.9.10
|
||||
base64-js: 1.5.1
|
||||
xmlbuilder: 15.1.1
|
||||
optional: true
|
||||
|
||||
possible-typed-array-names@1.1.0: {}
|
||||
|
||||
@@ -8974,14 +8937,12 @@ snapshots:
|
||||
minimist: 1.2.8
|
||||
strip-json-comments: 2.0.1
|
||||
|
||||
react-confetti@6.4.0(react@19.2.0):
|
||||
react-confetti@6.4.0:
|
||||
dependencies:
|
||||
react: 19.2.0
|
||||
tween-functions: 1.2.0
|
||||
|
||||
react-dom@19.2.0(react@19.2.0):
|
||||
react-dom@19.2.0:
|
||||
dependencies:
|
||||
react: 19.2.0
|
||||
scheduler: 0.27.0
|
||||
|
||||
react-is@16.13.1: {}
|
||||
@@ -8990,34 +8951,28 @@ snapshots:
|
||||
|
||||
react-refresh@0.17.0: {}
|
||||
|
||||
react-resizable-panels@3.0.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
|
||||
react-resizable-panels@3.0.6(react-dom@19.2.0):
|
||||
dependencies:
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
react-dom: 19.2.0
|
||||
|
||||
react-router-dom@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
|
||||
react-router-dom@7.9.4(react-dom@19.2.0):
|
||||
dependencies:
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
|
||||
react-dom: 19.2.0
|
||||
react-router: 7.9.4(react-dom@19.2.0)
|
||||
|
||||
react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
|
||||
react-router@7.9.4(react-dom@19.2.0):
|
||||
dependencies:
|
||||
cookie: 1.0.2
|
||||
react: 19.2.0
|
||||
set-cookie-parser: 2.7.1
|
||||
optionalDependencies:
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
react-dom: 19.2.0
|
||||
|
||||
react-shepherd@6.1.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3):
|
||||
react-shepherd@6.1.9(react-dom@19.2.0)(typescript@5.9.3):
|
||||
dependencies:
|
||||
react: 19.2.0
|
||||
react-dom: 19.2.0(react@19.2.0)
|
||||
react-dom: 19.2.0
|
||||
shepherd.js: 14.5.1
|
||||
typescript: 5.9.3
|
||||
|
||||
react@19.2.0: {}
|
||||
|
||||
read-binary-file-arch@1.0.6:
|
||||
dependencies:
|
||||
debug: 4.4.3
|
||||
|
||||
@@ -6,11 +6,13 @@
|
||||
|
||||
import { lazy, Suspense, useEffect } from "react";
|
||||
import { HashRouter as Router, Routes, Route, useLocation } from "react-router-dom";
|
||||
import { IntlProvider } from 'react-intl';
|
||||
import "./App.css";
|
||||
import HomePage from "./pages/HomePage/HomePage";
|
||||
import LabPython from "./pages/LabPython/LabPython";
|
||||
import ScrollToTop from "./components/ScrollToTop";
|
||||
import { trackPageView } from "./services/plausible";
|
||||
import { getLocalizedMessages } from "./services/localizedMessages";
|
||||
|
||||
const Playground = lazy(() => import("./pages/Playground/Playground"));
|
||||
const About = lazy(() => import("./pages/About/About"));
|
||||
@@ -116,10 +118,16 @@ function AppRoutes() {
|
||||
}
|
||||
|
||||
export default function App() {
|
||||
const locale = 'ht';
|
||||
const translatedMessages = getLocalizedMessages(locale);
|
||||
// TODO: fazer botão
|
||||
window.localStorage.setItem("locale", 'ht');
|
||||
return (
|
||||
<Router>
|
||||
<Suspense fallback={<LoadingFallback />}>
|
||||
<AppRoutes />
|
||||
<IntlProvider messages={translatedMessages} locale={locale} defaultLocale="pt">
|
||||
<AppRoutes />
|
||||
</IntlProvider>
|
||||
</Suspense>
|
||||
</Router>
|
||||
);
|
||||
|
||||
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 315 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 302 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 284 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 261 KiB |
@@ -42,7 +42,7 @@ export const gameConfig = {
|
||||
// ==========================================
|
||||
{
|
||||
id: 1,
|
||||
nome: "Fase 1: A Linha Reta",
|
||||
nome: "$atividades.aspirador.nome",
|
||||
descricao: "Use o bloco 'Enquanto houver sujeira' e o comando 'Mover' para ligá-lo.",
|
||||
timeout: 10,
|
||||
maxBlocks: 3,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import { translate } from "../../services/localizedMessages";
|
||||
|
||||
function obterDificuldade(dadosFase) {
|
||||
// Usa a dificuldade da fase, se existir, senão calcula pelo número
|
||||
@@ -40,7 +41,7 @@ function GameFaseInfo({ phaseData = {}, phaseNumber }) {
|
||||
{/* Título/Subtítulo */}
|
||||
<div className="flex-1 min-w-0 px-3 lg:px-5">
|
||||
<h3 className="text-base lg:text-2xl font-semibold text-gray-800 truncate">
|
||||
{phaseData.nome}
|
||||
{translate(phaseData.nome)}
|
||||
</h3>
|
||||
{phaseData.descricao && (
|
||||
<p className="text-base lg:text-lg text-gray-600 leading-tight whitespace-pre-wrap mt-1 pr-12 lg:pr-0">
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
* @module pages.HomePage.HomePage
|
||||
*/
|
||||
|
||||
import { useEffect } from "react";
|
||||
import capicodaUrl from "@/vendor/capicoda/capicoda.js?url";
|
||||
import Navbar from "../../components/Navbar";
|
||||
import PropTypes from "prop-types";
|
||||
import Hero from "./Hero";
|
||||
@@ -18,23 +16,6 @@ import StudentsMaterials from "./StudentsMaterials";
|
||||
import TeachersMaterials from "./TeachersMaterials";
|
||||
|
||||
const HomePage = () => {
|
||||
// Mascote Capicoda: injetado apenas na página inicial. O widget é um script
|
||||
// autocontido que se anexa ao body; na saída da home removemos o script e o
|
||||
// nó raiz (#dcs-root) para não vazar para outras rotas.
|
||||
useEffect(() => {
|
||||
// Estamos dentro do próprio DECODA: o widget esconde os links "Acessar o DECODA".
|
||||
window.CAPICODA_ON_DECODA = true;
|
||||
const script = document.createElement("script");
|
||||
script.src = capicodaUrl;
|
||||
script.defer = true;
|
||||
document.body.appendChild(script);
|
||||
return () => {
|
||||
script.remove();
|
||||
const root = document.getElementById("dcs-root");
|
||||
if (root) root.remove();
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className="min-h-screen">
|
||||
{/* Navegação */}
|
||||
|
||||
29
app/src/services/localizedMessages.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import ht from "./../../lang/ht.json";
|
||||
import pt from "./../../lang/pt.json";
|
||||
export function getLocalizedMessages(locale) {
|
||||
console.log('localized import json');
|
||||
return {
|
||||
ht,
|
||||
pt
|
||||
}[locale];
|
||||
}
|
||||
|
||||
export function getUserLocale() {
|
||||
return getLocalizedMessages(window.localStorage.getItem('locale') ?? 'pt');
|
||||
}
|
||||
|
||||
const accessObject = (path, object) => {
|
||||
return path.split('.').reduce((o, i) => o[i], object);
|
||||
}
|
||||
|
||||
export function translate(message) {
|
||||
if (message.match(/^\$/)) {
|
||||
const result = accessObject(message.substr(1), getUserLocale());
|
||||
if(result) {
|
||||
return result;
|
||||
} else {
|
||||
console.error(`path ${message} not found on lang`);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
135
app/src/vendor/capicoda/README.md
vendored
@@ -1,135 +0,0 @@
|
||||
# Capicoda 🚩🦫
|
||||
|
||||
A **capivara comunista** do Núcleo de Tecnologia do MTST. Um widget de chat que
|
||||
aparece na página do Núcleo, conversa com quem visita, identifica se a pessoa é
|
||||
desenvolvedora e a direciona para **contribuir com o [DECODA](https://git.mtst.tec.br/educacao/decoda/)**.
|
||||
|
||||
Projeto do hackathon do Núcleo de Tecnologia do MTST.
|
||||
|
||||
---
|
||||
|
||||
## ✨ O que é
|
||||
|
||||
- Balão de chat no canto inferior direito de qualquer site.
|
||||
- Conversa por **roteiro fixo** (botões) — sem IA, sem backend, sem build.
|
||||
- Faz a triagem do visitante (**dev / aprendiz / curiosx**) e entrega o caminho
|
||||
certo: repositório, como rodar localmente, como abrir um PR, ou como ajudar
|
||||
sem programar.
|
||||
- Um único arquivo: **`capicoda.js`** (CSS, SVG da capivara e diálogo embutidos).
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Rodar o demo
|
||||
|
||||
Não precisa instalar nada. Na pasta do projeto:
|
||||
|
||||
```bash
|
||||
python3 -m http.server 8000
|
||||
```
|
||||
|
||||
Abra **http://localhost:8000/demo.html** e clique no balão da capivara.
|
||||
|
||||
> Também dá pra só abrir o `demo.html` direto no navegador (duplo clique).
|
||||
|
||||
---
|
||||
|
||||
## 🔌 Embutir em outro site
|
||||
|
||||
Copie `capicoda.js` para o site e adicione **uma linha** antes do `</body>`:
|
||||
|
||||
```html
|
||||
<script src="capicoda.js" defer></script>
|
||||
```
|
||||
|
||||
Pronto — o balão se injeta sozinho. Não conflita com o CSS da página (tudo é
|
||||
prefixado com `dcs-` e isolado num `#dcs-root`).
|
||||
|
||||
---
|
||||
|
||||
## 💬 Editar a conversa
|
||||
|
||||
Toda a conversa vive no objeto **`TREE`** no topo do `capicoda.js`. Cada nó:
|
||||
|
||||
```js
|
||||
nome_do_no: {
|
||||
msg: "Texto do balão", // ou um array de balões em sequência
|
||||
options: [
|
||||
{ label: "Botão A", next: "outro_no" }, // navega para outro nó
|
||||
{ label: "Abrir repo", url: URLS.repo }, // abre um link em nova aba
|
||||
{ label: "Destaque", next: "x", primary: true } // botão em vermelho cheio
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Os links reais ficam no objeto `URLS` (repo, página do DECODA, página do Núcleo).
|
||||
|
||||
### Mapa do roteiro
|
||||
|
||||
```
|
||||
start ──┬─ Bora! ───────────────► qualifica
|
||||
└─ O que é o DECODA? ───► oque_decoda ──► qualifica
|
||||
|
||||
qualifica ─┬─ Sou dev ──────► area ─┬─ Front/JS ──► cta_front
|
||||
│ ├─ Back/DevOps ► cta_infra
|
||||
│ └─ Full/outra ─► cta_geral
|
||||
├─ Tô aprendendo ► aprendiz
|
||||
└─ Só curiosx ───► curioso
|
||||
|
||||
cta_* ─┬─ Ver repositório (link)
|
||||
├─ Como rodar localmente ► setup
|
||||
├─ Como mandar um PR ─────► fluxo_pr
|
||||
└─ Voltar ao início ──────► start
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🦫 Poses da capivara (imagens)
|
||||
|
||||
O mascote é uma imagem grande (≈190px) que **substitui o botão** e **troca de pose**
|
||||
conforme o estado da conversa. As 4 poses vivem embutidas como data URI (WebP) no
|
||||
`capicoda.js`, então o widget continua autocontido (1 tag de script).
|
||||
|
||||
| Pose | Quando | Nós do diálogo |
|
||||
|------|--------|----------------|
|
||||
| `start` | acenando, no início | `start` |
|
||||
| `prof` | explicando | `oque_decoda`, `setup`, `fluxo_pr` |
|
||||
| `anot` | pedindo respostas | `qualifica`, `area` |
|
||||
| `end` | encerrando | `cta_*`, `aprendiz`, `curioso` |
|
||||
|
||||
O mapa nó→pose é o objeto **`NODE_IMG`** no topo do `capicoda.js` (fácil de ajustar).
|
||||
Todas as imagens têm o mesmo canvas (768×768), então a capivara não muda de tamanho
|
||||
nem se desloca ao trocar de pose.
|
||||
|
||||
### Regenerar as imagens
|
||||
|
||||
As fontes são `app/src/assets/capicoda_{start,prof,anot,end}.jpeg`. Para remover o
|
||||
fundo e reembutir no widget:
|
||||
|
||||
```bash
|
||||
python3 scripts/build_images.py # requer Pillow
|
||||
```
|
||||
|
||||
O script remove o fundo (flood-fill a partir das bordas), salva os PNGs transparentes
|
||||
em `app/src/assets/capicoda_*.png` e reescreve o bloco `IMGS` entre os marcadores
|
||||
`/* __IMAGES_START__ */ … /* __IMAGES_END__ */`. **Não edite o `IMGS` à mão.**
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Identidade
|
||||
|
||||
Capivara marrom de boina verde com estrela vermelha. Paleta MTST (vermelho `#c1121f`).
|
||||
Tom acolhedor e militante-bem-humorado. Fallback: SVG inline desenhado à mão, usado se
|
||||
as imagens não carregarem.
|
||||
|
||||
---
|
||||
|
||||
## 🔮 Próximos passos (fora do escopo do hackathon)
|
||||
|
||||
- Modo IA opcional (Claude API) para conversa livre.
|
||||
- Captura de contato de quem quer contribuir (onboarding → mutirão).
|
||||
- Puxar "good first issues" dinamicamente da aba de Issues do repositório.
|
||||
- Integração na página real do Núcleo e/ou sobre o app DECODA.
|
||||
|
||||
---
|
||||
|
||||
Desenvolvido com ✊ para o DECODA · Núcleo de Tecnologia do MTST
|
||||
399
app/src/vendor/capicoda/capicoda.js
vendored
69
app/src/vendor/capicoda/demo.html
vendored
@@ -1,69 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Capicoda — demo · Núcleo de Tecnologia do MTST</title>
|
||||
<style>
|
||||
:root { --vermelho: #c1121f; }
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body {
|
||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
||||
color: #1d1d1f; line-height: 1.6; background: #faf6f1;
|
||||
}
|
||||
header {
|
||||
background: var(--vermelho); color: #fff; padding: 18px 24px;
|
||||
display: flex; align-items: center; gap: 12px;
|
||||
}
|
||||
header .star { font-size: 26px; }
|
||||
header h1 { font-size: 19px; font-weight: 700; }
|
||||
.hero {
|
||||
max-width: 760px; margin: 0 auto; padding: 64px 24px 40px; text-align: center;
|
||||
}
|
||||
.hero h2 { font-size: 38px; line-height: 1.2; margin-bottom: 16px; }
|
||||
.hero h2 span { color: var(--vermelho); }
|
||||
.hero p { font-size: 18px; color: #4a4a4a; max-width: 560px; margin: 0 auto; }
|
||||
.grid {
|
||||
max-width: 760px; margin: 0 auto; padding: 24px; display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px;
|
||||
}
|
||||
.card { background: #fff; border: 1px solid #eee; border-radius: 14px; padding: 20px; }
|
||||
.card h3 { font-size: 16px; margin-bottom: 6px; }
|
||||
.card p { font-size: 14px; color: #555; }
|
||||
.hint {
|
||||
max-width: 760px; margin: 12px auto 80px; padding: 16px 20px; border-radius: 12px;
|
||||
background: #fff3cd; border: 1px solid #ffe69c; color: #664d03; font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
footer { text-align: center; padding: 24px; color: #999; font-size: 13px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<span class="star">🚩</span>
|
||||
<h1>Núcleo de Tecnologia · MTST</h1>
|
||||
</header>
|
||||
|
||||
<section class="hero">
|
||||
<h2>Aprenda a programar com o <span>DECODA</span></h2>
|
||||
<p>Plataforma educacional do MTST: lógica de programação através de jogos
|
||||
e blocos visuais. Tecnologia como ferramenta de transformação social.</p>
|
||||
</section>
|
||||
|
||||
<section class="grid">
|
||||
<div class="card"><h3>🎮 Jogos</h3><p>Atividades interativas para aprender programação na prática.</p></div>
|
||||
<div class="card"><h3>🧩 Blocos visuais</h3><p>Programação arrastar-e-soltar com Blockly, sem decorar sintaxe.</p></div>
|
||||
<div class="card"><h3>🆓 Livre e gratuito</h3><p>100% gratuito, sem cadastro, código aberto.</p></div>
|
||||
</section>
|
||||
|
||||
<div class="hint">
|
||||
👉 Página de demonstração. O balão da capivara <b>Capicoda</b> aparece no
|
||||
canto inferior direito — clique pra conversar.
|
||||
</div>
|
||||
|
||||
<footer>Demo do mascote Capicoda · hackathon do Núcleo de Tecnologia do MTST</footer>
|
||||
|
||||
<!-- É só isto que precisa ir na página real do Núcleo: -->
|
||||
<script src="capicoda.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
152
app/src/vendor/capicoda/scripts/build_images.py
vendored
@@ -1,152 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Capicoda — processamento das imagens do mascote.
|
||||
|
||||
Para cada pose (capicoda_<estado>.jpeg em app/src/assets):
|
||||
1. Remove o fundo branco (flood-fill a partir das bordas sobre a máscara de
|
||||
pixels claros — preserva os brancos INTERNOS, cercados pelo contorno escuro:
|
||||
olhos, papel do caderno, brilho dos óculos).
|
||||
2. Salva um PNG transparente em alta (canvas quadrado preservado — todas as
|
||||
poses ficam do MESMO tamanho, então a capivara não "pula" ao trocar).
|
||||
3. Gera uma versão reduzida (EMB x EMB), codifica em base64 (WebP se suportado,
|
||||
senão PNG) e injeta o mapa `IMGS` no capicoda.js entre os marcadores
|
||||
/* __IMAGES_START__ */ ... /* __IMAGES_END__ */.
|
||||
|
||||
Uso: python3 scripts/build_images.py
|
||||
Requisitos: Pillow.
|
||||
"""
|
||||
import base64
|
||||
import io
|
||||
import os
|
||||
import re
|
||||
from collections import deque
|
||||
|
||||
from PIL import Image, features
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
CAPICODA_DIR = os.path.normpath(os.path.join(HERE, ".."))
|
||||
ASSETS = os.path.normpath(os.path.join(HERE, "..", "..", "..", "assets"))
|
||||
CAPICODA_JS = os.path.join(CAPICODA_DIR, "capicoda.js")
|
||||
|
||||
STATES = ["start", "prof", "anot", "end"]
|
||||
WORK = 768 # resolução de processamento/saída do PNG (quadrado, uniforme)
|
||||
EMB = 384 # resolução embutida no JS
|
||||
LIGHT = 190 # canal mínimo p/ considerar um pixel "claro" (fundo/sombra)
|
||||
|
||||
|
||||
def remove_bg(img):
|
||||
"""Torna transparente o fundo claro conectado às bordas."""
|
||||
img = img.convert("RGBA").resize((WORK, WORK), Image.LANCZOS)
|
||||
w, h = img.size
|
||||
px = img.load()
|
||||
|
||||
# 1) máscara de pixels "claros" (fundo branco + sombra clara)
|
||||
light = bytearray(w * h)
|
||||
for y in range(h):
|
||||
row = y * w
|
||||
for x in range(w):
|
||||
r, g, b, _ = px[x, y]
|
||||
if r >= LIGHT and g >= LIGHT and b >= LIGHT:
|
||||
light[row + x] = 1
|
||||
|
||||
# 2) BFS a partir dos pixels claros da borda -> só o fundo EXTERNO
|
||||
visited = bytearray(w * h)
|
||||
dq = deque()
|
||||
|
||||
def seed(x, y):
|
||||
i = y * w + x
|
||||
if light[i] and not visited[i]:
|
||||
visited[i] = 1
|
||||
dq.append((x, y))
|
||||
|
||||
for x in range(w):
|
||||
seed(x, 0)
|
||||
seed(x, h - 1)
|
||||
for y in range(h):
|
||||
seed(0, y)
|
||||
seed(w - 1, y)
|
||||
|
||||
while dq:
|
||||
x, y = dq.popleft()
|
||||
if x > 0:
|
||||
seed(x - 1, y)
|
||||
if x < w - 1:
|
||||
seed(x + 1, y)
|
||||
if y > 0:
|
||||
seed(x, y - 1)
|
||||
if y < h - 1:
|
||||
seed(x, y + 1)
|
||||
|
||||
# 3) zera o alpha do fundo externo
|
||||
cleared = 0
|
||||
for y in range(h):
|
||||
row = y * w
|
||||
for x in range(w):
|
||||
if visited[row + x]:
|
||||
r, g, b, _ = px[x, y]
|
||||
px[x, y] = (r, g, b, 0)
|
||||
cleared += 1
|
||||
return img, cleared
|
||||
|
||||
|
||||
def data_uri(img):
|
||||
"""Reduz para EMB e devolve (data_uri, mime, n_bytes)."""
|
||||
small = img.resize((EMB, EMB), Image.LANCZOS)
|
||||
buf = io.BytesIO()
|
||||
if features.check("webp"):
|
||||
small.save(buf, format="WEBP", quality=90, method=6)
|
||||
mime = "image/webp"
|
||||
else:
|
||||
small.save(buf, format="PNG", optimize=True)
|
||||
mime = "image/png"
|
||||
raw = buf.getvalue()
|
||||
b64 = base64.b64encode(raw).decode("ascii")
|
||||
return "data:%s;base64,%s" % (mime, b64), mime, len(raw)
|
||||
|
||||
|
||||
def patch_js(uris):
|
||||
with open(CAPICODA_JS, "r", encoding="utf-8") as f:
|
||||
src = f.read()
|
||||
lines = [' var IMGS = {']
|
||||
for s in STATES:
|
||||
lines.append(' %s: "%s",' % (s, uris[s]))
|
||||
lines.append(' };')
|
||||
block = "/* __IMAGES_START__ */\n" + "\n".join(lines) + "\n /* __IMAGES_END__ */"
|
||||
new, n = re.subn(
|
||||
r"/\* __IMAGES_START__ \*/.*?/\* __IMAGES_END__ \*/",
|
||||
lambda _: block,
|
||||
src,
|
||||
flags=re.S,
|
||||
)
|
||||
if n != 1:
|
||||
raise SystemExit("ERRO: marcadores __IMAGES_START/END__ não encontrados (n=%d)" % n)
|
||||
with open(CAPICODA_JS, "w", encoding="utf-8") as f:
|
||||
f.write(new)
|
||||
|
||||
|
||||
def main():
|
||||
uris = {}
|
||||
total = 0
|
||||
for s in STATES:
|
||||
src = os.path.join(ASSETS, "capicoda_%s.jpeg" % s)
|
||||
if not os.path.exists(src):
|
||||
raise SystemExit("ERRO: não encontrei %s" % src)
|
||||
img = Image.open(src)
|
||||
out, cleared = remove_bg(img)
|
||||
|
||||
png_path = os.path.join(ASSETS, "capicoda_%s.png" % s)
|
||||
out.save(png_path, format="PNG", optimize=True)
|
||||
|
||||
uri, mime, nbytes = data_uri(out)
|
||||
uris[s] = uri
|
||||
total += nbytes
|
||||
print(" %-6s -> %s (fundo: %d px) | embutido %s %d KB"
|
||||
% (s, os.path.basename(png_path), cleared, mime, nbytes // 1024))
|
||||
|
||||
patch_js(uris)
|
||||
print("PNGs transparentes (%dx%d) em %s" % (WORK, WORK, ASSETS))
|
||||
print("IMGS embutido no capicoda.js — total embutido: %d KB" % (total // 1024))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||