diff --git a/package-lock.json b/package-lock.json index d6a64a4a..6236fe2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "@fortawesome/react-fontawesome": "^0.2.0", "@headlessui/react": "^2.2.8", "@hookform/resolvers": "^3.3.4", + "@nethesis/chat-island": "^0.1.47", "@nethesis/nethesis-solid-svg-icons": "github:nethesis/Font-Awesome#ns-solid", "@nethesis/phone-island": "^1.0.15", "@tailwindcss/forms": "^0.5.7", @@ -97,13 +98,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -112,9 +113,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", "dev": true, "license": "MIT", "engines": { @@ -122,21 +123,21 @@ } }, "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@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.1.0", @@ -163,14 +164,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", - "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.8", - "@babel/types": "^7.29.8", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -193,14 +194,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -220,9 +221,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", "engines": { @@ -230,29 +231,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -272,9 +273,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -282,9 +283,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -292,9 +293,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -302,27 +303,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.29.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz", - "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.8" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", - "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.8" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -406,33 +407,33 @@ } }, "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz", - "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.8", - "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.9", - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.8", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -440,14 +441,14 @@ } }, "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1890,99 +1891,48 @@ "node": ">=18.0.0" } }, - "node_modules/@jest/diff-sequences": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.5.0.tgz", - "integrity": "sha512-OsqBjHXCn8cadasoAZBP6nWYvMsRhpMzGXTpxJ5aO04NlbdhIz+FVe3q49l0AwVhsz/cEmIpBes6gAFl1/dWQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/expect-utils": { - "version": "30.5.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.5.2.tgz", - "integrity": "sha512-d/HOLSrJUlBIl6n3LzOa7cjW3xdePm5H5gQw2lixZ/0h157l9sw3mLblzFqnPcTbhDzhRQdBOX3A3KcG73nm5Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.5.0" + "jest-get-type": "^29.6.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/get-type": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.5.0.tgz", - "integrity": "sha512-9/2VUPitAjmBzbvDvqrxmvB7BzWsBW0WmkkojX1ODuxX1NLGxx9gfaZpHB0z8DtJ9uhGNmZG/VXBhf8uO0OV8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/pattern": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.5.0.tgz", - "integrity": "sha512-HdNQYSdRTEBNrginaqzQtTjG0HRMfrra/z6Ok7uL3S87vSlarIVohEsJsSj5edu3MiHoHjAkvPROz5ZjoKai+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.5.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/react-is-18": { - "name": "react-is", - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/react-is-19": { - "name": "react-is", - "version": "19.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.3.1.tgz", - "integrity": "sha512-RRieF6IyxQBkcK6pP8xOHprLTPW6QjRkbGdImtqNme+/hYVwCZkLQLdlZGOhUqXwkS9IEynaGvPJtv6XB/cz0Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/schemas": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.5.0.tgz", - "integrity": "sha512-/hunigyNpc4RCjC0VaW3f5RCUZVM2+WQ65qP7z083Gmvac7or2LI50XVNOtE4YPgBpV0yxYiAgorAPGniCoJmg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.34.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.5.1.tgz", - "integrity": "sha512-LvVYn83nnXPl+Rg98nvcFgjx6nRMTArhSn6RAX/w3ELn54S8A42TYZvsCMdGUqTM8S0wyXbtlQdU6Hi6dykj9g==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/pattern": "30.5.0", - "@jest/schemas": "30.5.0", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jimp/bmp": { @@ -2558,6 +2508,22 @@ "node": "^22.20 || ^24.12 || >=25" } }, + "node_modules/@nethesis/chat-island": { + "version": "0.1.47", + "resolved": "https://registry.npmjs.org/@nethesis/chat-island/-/chat-island-0.1.47.tgz", + "integrity": "sha512-fYb26n34ZHaecvEOUcKwFyT2iIWy2aAfFrJyPl9JG5q6Ra6nc9QoN78VOwtENDLZGurArHlcTF+6Mk+ho2CaQA==", + "dev": true, + "license": "AGPL-3.0-or-later", + "dependencies": { + "@xmpp/client": "^0.14.0", + "use-sync-external-store": "^1.2.0", + "zustand": "^4.5.7" + }, + "peerDependencies": { + "react": "^18.2.0 || ^19.0.0", + "react-dom": "^18.2.0 || ^19.0.0" + } + }, "node_modules/@nethesis/nethesis-solid-svg-icons": { "version": "6.2.1", "resolved": "git+ssh://git@github.com/nethesis/Font-Awesome.git#1a6b58a7581627785d4a4cbc0314ed3d185a1288", @@ -3562,9 +3528,9 @@ ] }, "node_modules/@sinclair/typebox": { - "version": "0.34.52", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.52.tgz", - "integrity": "sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw==", + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true, "license": "MIT" }, @@ -3863,14 +3829,14 @@ } }, "node_modules/@types/jest": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", - "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "license": "MIT", "dependencies": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, "node_modules/@types/jest/node_modules/ansi-styles": { @@ -3887,19 +3853,18 @@ } }, "node_modules/@types/jest/node_modules/pretty-format": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.5.1.tgz", - "integrity": "sha512-byhRAPguVKMQIj4kjJwJ5lAskVhfuiSdiYl/aLTWpgkGEmic2jYhJh1yE9ih8Ox44Xg9ccCT11/S6QrzSJuNrg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/react-is-18": "npm:react-is@^18.3.1", - "@jest/react-is-19": "npm:react-is@^19.2.5", - "@jest/schemas": "30.5.0", - "ansi-styles": "^5.2.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@types/json-schema": { @@ -4031,9 +3996,9 @@ "optional": true }, "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", "dependencies": { @@ -4434,15 +4399,410 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.15.tgz", - "integrity": "sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==", + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz", + "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==", "devOptional": true, "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/@xmpp/base64": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/base64/-/base64-0.14.0.tgz", + "integrity": "sha512-tz2LuzLMtjGSVVeuXDnDw19H+uOrqhrRFcQKJ3THV0HVjerDewT8WKXdrtBVSQ7n4Ue0k+awYcIE7qDD9rwMMQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/client": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/client/-/client-0.14.0.tgz", + "integrity": "sha512-Y6k77iifYOGuWncOLRr6dVmbsQvcsIFjYI9pXhkSzQDDNnd3hVJGgo/Xx+W/0/o1+kg/tPm/NwX5Yq77NTd9xA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/client-core": "^0.14.0", + "@xmpp/iq": "^0.14.0", + "@xmpp/middleware": "^0.14.0", + "@xmpp/reconnect": "^0.14.0", + "@xmpp/resolve": "^0.14.0", + "@xmpp/resource-binding": "^0.14.0", + "@xmpp/sasl": "^0.14.0", + "@xmpp/sasl-anonymous": "^0.14.0", + "@xmpp/sasl-ht-sha-256-none": "^0.14.0", + "@xmpp/sasl-plain": "^0.14.0", + "@xmpp/sasl-scram-sha-1": "^0.14.0", + "@xmpp/sasl2": "^0.14.0", + "@xmpp/starttls": "^0.14.0", + "@xmpp/stream-features": "^0.14.0", + "@xmpp/stream-management": "^0.14.0", + "@xmpp/tcp": "^0.14.0", + "@xmpp/tls": "^0.14.0", + "@xmpp/websocket": "^0.14.0", + "saslmechanisms": "^0.1.1" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/client-core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/client-core/-/client-core-0.14.0.tgz", + "integrity": "sha512-fW0C6vn4y8Jp1g8uBmCETuOmEDXpjFc/mfY8P0J88nhK2AdPOB5m0ntz0yyAXcPd16smnHVckiOsk9qBjF9dDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/connection": "^0.14.0", + "@xmpp/events": "^0.14.0", + "@xmpp/jid": "^0.14.0", + "@xmpp/sasl": "^0.14.0", + "@xmpp/xml": "^0.14.0", + "saslmechanisms": "^0.1.1" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/connection": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/connection/-/connection-0.14.0.tgz", + "integrity": "sha512-VRnukXwiXWCsRVQVISUiAxHHgRWH37nxdUaz50o0+cUAYyqtlHIJ2zy+ZHMlxkEWtl+XciNLxwkJKbypJFQheQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/error": "^0.14.0", + "@xmpp/events": "^0.14.0", + "@xmpp/jid": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/connection-tcp": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/connection-tcp/-/connection-tcp-0.14.0.tgz", + "integrity": "sha512-gvYyUghuCHW0qalEYaZvbHeTnEoXc+hCCWP/qvoVGjjSQNwkYRUsy1/8RP/sA6RlQ2sR0nhpkJkJE6K/4rsFIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/connection": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/error": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/error/-/error-0.14.0.tgz", + "integrity": "sha512-b4W/MwAZl8basfmYhcemK3De92xBOiSrIz0VY2cnN2ss1VMsa4d32GuaJGBIpa4ulN/2DFb3vPCeTn5jXvHAJw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/events": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/events/-/events-0.14.0.tgz", + "integrity": "sha512-6mKRIEi69sYr8H9SrkJKaXobOgCq/sU6/pKTQS5cuQZCy0qLuyx9uttkOyAYmtUbVD+HSrXYS72KhMpdQQh88Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "events": "^3.3.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/id": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/id/-/id-0.14.0.tgz", + "integrity": "sha512-0n8OFYPWkBYDi5fHGiJT6SLg9ncOflTmINzjHzt5A3NxEMVrYmqxbRB44u3NLMk1gBNqGtEkc2wl0WHjS0tHWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/iq": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/iq/-/iq-0.14.0.tgz", + "integrity": "sha512-0r3QVKR4XAvkZ4shQwPBkSM21sSfj26Cg8+AYBkd0BKJTde7mRQCISBNidt1xiXA5VPH1+6Qx7fmtPzk3uel+Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/events": "^0.14.0", + "@xmpp/id": "^0.14.0", + "@xmpp/middleware": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/jid": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/jid/-/jid-0.14.0.tgz", + "integrity": "sha512-ggiNgjblkeHPbHJ7JLOMIqxc1qQQt0gV+LhXI16afib2wLr120YgvRChY04gjkvQ+IF2sGz7mzPvcAukTmNGHA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/middleware": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/middleware/-/middleware-0.14.0.tgz", + "integrity": "sha512-UGm7ed5NEMapE/z0jqY5daGSBqto/iciDjtyncoXHZdOnR4iFYFF9gSO/65Z1HsL2pbHQpcK0WS+Kn+FGOxPTw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/error": "^0.14.0", + "@xmpp/jid": "^0.14.0", + "@xmpp/xml": "^0.14.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/reconnect": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/reconnect/-/reconnect-0.14.0.tgz", + "integrity": "sha512-XaaT3KrFLf1ZfYZCIx11zauT8bIVXRz9FMaGj4mofq1tC8SiKvIIqJXSgrouhkibb9vPeM9XSiGkH47B/1hc6g==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/events": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/resolve": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/resolve/-/resolve-0.14.0.tgz", + "integrity": "sha512-S4Rhupb2zS4EtT4EFUJLPl2pPSFPfrjp/1bxPil+zBt9sNcbrvIwSNaYeQAAfLD/yYb8/DhaxC/blvdHyM1Xzw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/events": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/resource-binding": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/resource-binding/-/resource-binding-0.14.0.tgz", + "integrity": "sha512-b8EyHUOpkAS25b6cpOQ8fv7cCLfOpJq4dkgs6Td0MdODMmcfWEh38siZKaP0OoNmYWZCxBSANdsBmeidozJxqA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/sasl": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/sasl/-/sasl-0.14.0.tgz", + "integrity": "sha512-C6mWvtRhJCCjv0Q6uuc3FUuDdgUhnX7lCF9afmNT5umy1XB0l1iRmBJYTriSHNBwgErM3i3mydafeRjpuQfP5Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/base64": "^0.14.0", + "@xmpp/error": "^0.14.0", + "@xmpp/events": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/sasl-anonymous": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/sasl-anonymous/-/sasl-anonymous-0.14.0.tgz", + "integrity": "sha512-lZ8jaYuKBpfQ2T5Bv+7yxII9OduV1a+mlNkKtG94WchrVzR8fU6VpbTrez88KajA42ngcVCtiO3i6tPepYyK8Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "sasl-anonymous": "^0.1.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/sasl-ht-sha-256-none": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/sasl-ht-sha-256-none/-/sasl-ht-sha-256-none-0.14.0.tgz", + "integrity": "sha512-LmMSzX35bI/V2lV26k/hYPm8Pn7InsBEX72b86+ugIBQpzD8/jmB1F/Mfm5vrbWkMLl2KWe61gE+L/p0mvLZdA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/sasl-plain": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/sasl-plain/-/sasl-plain-0.14.0.tgz", + "integrity": "sha512-TGQX6gsCi6LP2lPNkkd+HoZ1ynCesRMQrtJrWbDAa6oMyCwie9xuBcG/5lDJ5fn03G7xxRh1YSQp+x8yFK+q4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "sasl-plain": "^0.1.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/sasl-scram-sha-1": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/sasl-scram-sha-1/-/sasl-scram-sha-1-0.14.0.tgz", + "integrity": "sha512-0ZrsMDx9Haou2yTCzDCwvMsYPvHCxF2bkpyBuiPoYAOWRsIQH1TssZK3d88N7wSvvojter905DNwLPizdaF3og==", + "dev": true, + "license": "ISC", + "dependencies": { + "sasl-scram-sha-1": "^1.3.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/sasl2": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/sasl2/-/sasl2-0.14.0.tgz", + "integrity": "sha512-OcDIDr9xwiOO58yqr6hj0eh9CfKOvwBbNDNhC0wByA07cwOsoojLb1dv3WR7pKk1cETv6wHWQ1o/leRoDB/Yzg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/base64": "^0.14.0", + "@xmpp/error": "^0.14.0", + "@xmpp/events": "^0.14.0", + "@xmpp/jid": "^0.14.0", + "@xmpp/sasl": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@xmpp/starttls": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/starttls/-/starttls-0.14.0.tgz", + "integrity": "sha512-n21Oy5pyD6Cipo96SAVI1ASx/5qo/z3W7J1TWZSG3/gGgrTaCB+VSV0xI+FqRexVJysg3lw3cBidYQL+Lp/pHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/events": "^0.14.0", + "@xmpp/tls": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/stream-features": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/stream-features/-/stream-features-0.14.0.tgz", + "integrity": "sha512-XoogP53qv1lzq/TNnzydT0KmmDKsJ7vpbV1c33fcuBDY0LCmPWA2U5th+Atn3JjEMlyznpVDFco9BF1NgFTHzg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/stream-management": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/stream-management/-/stream-management-0.14.0.tgz", + "integrity": "sha512-i7qLB8KXzLtm2TZXgtVlBprI4Vm8lykJ7Gth2TFavBTky+PQFNr2BH4lGxxvZ7/WkYbhx2jsmDT9JjI7sUCRdw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/error": "^0.14.0", + "@xmpp/events": "^0.14.0", + "@xmpp/time": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/tcp": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/tcp/-/tcp-0.14.0.tgz", + "integrity": "sha512-vJb5Y60ub+YClK01l+653+qpIe6vedw/82szuB4IU50eTDTL8voer6eGK7AMJOJzoZzRofbLh8Ow5txAyZ8vXw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/connection-tcp": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/time": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/time/-/time-0.14.0.tgz", + "integrity": "sha512-KlOLwZXXYrRiIZ+Lg0Rg+iDxIBLfCgVQOkIaYG2nieLVtbrHItI5gv2eI2I6m0cPsX8LajGkCpvQTqUCNZclag==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/tls": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/tls/-/tls-0.14.0.tgz", + "integrity": "sha512-nY/nHlHYgs3i2+xwt/5Ff3J4aCdZADdTOH+NwdfgqBIK9kWDJPW43nnIrbrZgmUL3YOjW5sb1lUI20bFUJACww==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/connection": "^0.14.0", + "@xmpp/connection-tcp": "^0.14.0", + "@xmpp/events": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/websocket": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/websocket/-/websocket-0.14.0.tgz", + "integrity": "sha512-mRjpRHtOujrPIT7I/X2xvn8w6X/7J8gGPfGIKNGLJHBQu1OlT5noUd++mslCAcGdCOf5TGwtJvE7a8CPtSnTFg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/connection": "^0.14.0", + "@xmpp/events": "^0.14.0", + "@xmpp/xml": "^0.14.0" + }, + "engines": { + "node": ">= 20.10" + } + }, + "node_modules/@xmpp/xml": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@xmpp/xml/-/xml-0.14.0.tgz", + "integrity": "sha512-1rrj3SaIM51wtJUn1l2n4FK2e1QLfEmma9bsD1utaaosA8elpCyWi12QDPfaYoTyWSXNvQ7mGzvFevUJUs1mcQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@xmpp/events": "^0.14.0", + "ltx": "^3.1.2" + }, + "engines": { + "node": ">= 20.10" + } + }, "node_modules/abbrev": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", @@ -5295,9 +5655,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", - "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -5726,9 +6086,9 @@ "license": "MIT" }, "node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -6315,6 +6675,16 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-compare": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", @@ -6607,9 +6977,9 @@ } }, "node_modules/electron-builder-notarize/node_modules/js-yaml": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", - "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -6640,6 +7010,22 @@ "electron-winstaller": "5.4.0" } }, + "node_modules/electron-builder/node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/electron-builder/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -6826,37 +7212,19 @@ } }, "node_modules/engine.io-client": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.7.tgz", - "integrity": "sha512-GyAvmPA7gnRCpDQbYACAy79Lg4ewevrmaPzySZz0OVvgyZc3gEfLLqPTYk8wVBScjOEpM9ZO4KryyFpVItjGEA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz", + "integrity": "sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==", "dev": true, "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.4.1", + "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.21.0", + "ws": "~8.17.1", "xmlhttprequest-ssl": "~2.1.1" } }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/engine.io-parser": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", @@ -7496,21 +7864,20 @@ "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" }, "node_modules/expect": { - "version": "30.5.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.5.2.tgz", - "integrity": "sha512-0LNuMvs8/5mRYhnCR4k+lGV7fqPMs6Bnksda4S3zsCUmdxBpAn4zU4NNzXdq1pMKe/H4W5t/zVIDSJ/H3e0vDA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.5.2", - "@jest/get-type": "30.5.0", - "jest-matcher-utils": "30.5.2", - "jest-message-util": "30.5.1", - "jest-mock": "30.5.2", - "jest-util": "30.5.1" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/exponential-backoff": { @@ -8108,9 +8475,9 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", - "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -8388,9 +8755,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.3.0.tgz", - "integrity": "sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true, "license": "BSD-2-Clause" }, @@ -9193,19 +9560,19 @@ } }, "node_modules/jest-diff": { - "version": "30.5.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.5.2.tgz", - "integrity": "sha512-rBtHnI6BWTiWj3lM7fOLVfChx7R9B0u9VV3PRHawKs79x6ZjW1QoSrKenaigNGWlvhtoi2BqvDbABDie+Os3xQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.5.0", - "@jest/get-type": "30.5.0", - "chalk": "^4.1.2", - "pretty-format": "30.5.1" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-diff/node_modules/ansi-styles": { @@ -9222,35 +9589,44 @@ } }, "node_modules/jest-diff/node_modules/pretty-format": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.5.1.tgz", - "integrity": "sha512-byhRAPguVKMQIj4kjJwJ5lAskVhfuiSdiYl/aLTWpgkGEmic2jYhJh1yE9ih8Ox44Xg9ccCT11/S6QrzSJuNrg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/react-is-18": "npm:react-is@^18.3.1", - "@jest/react-is-19": "npm:react-is@^19.2.5", - "@jest/schemas": "30.5.0", - "ansi-styles": "^5.2.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "30.5.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.5.2.tgz", - "integrity": "sha512-lFkB365PTIHOhPzwrb9T6gvlDnPpOZ7/c3ewOKKB7bzztqjVrtlyRL2MkyfJXpyY2u2SKw001JKrTx14fBUFcQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.5.0", - "chalk": "^4.1.2", - "jest-diff": "30.5.2", - "pretty-format": "30.5.1" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { @@ -9267,41 +9643,39 @@ } }, "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.5.1.tgz", - "integrity": "sha512-byhRAPguVKMQIj4kjJwJ5lAskVhfuiSdiYl/aLTWpgkGEmic2jYhJh1yE9ih8Ox44Xg9ccCT11/S6QrzSJuNrg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/react-is-18": "npm:react-is@^18.3.1", - "@jest/react-is-19": "npm:react-is@^19.2.5", - "@jest/schemas": "30.5.0", - "ansi-styles": "^5.2.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.5.1.tgz", - "integrity": "sha512-UdQlLdd9wL/Ys7xRErckqwD6wPlSZYueosSWuHc1r2ztGLwlgPvtSJq2+BPEgaEY13WLvfFbmhTj8pba0Sd1jg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.5.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-util": "30.5.1", - "picomatch": "^4.0.3", - "pretty-format": "30.5.1", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", "slash": "^3.0.0", - "stack-utils": "^2.0.6" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util/node_modules/ansi-styles": { @@ -9317,90 +9691,37 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/picomatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", - "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.5.1.tgz", - "integrity": "sha512-byhRAPguVKMQIj4kjJwJ5lAskVhfuiSdiYl/aLTWpgkGEmic2jYhJh1yE9ih8Ox44Xg9ccCT11/S6QrzSJuNrg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/react-is-18": "npm:react-is@^18.3.1", - "@jest/react-is-19": "npm:react-is@^19.2.5", - "@jest/schemas": "30.5.0", - "ansi-styles": "^5.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-mock": { - "version": "30.5.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.5.2.tgz", - "integrity": "sha512-KTHb37Fhj8xY8qPFvTFaFJHcdsumQp+ExsUlgoX232Agmc706gagBs53+CYvulV7MVQo9AgXOUxsqzzVBoJlrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.5.2", - "@jest/types": "30.5.1", - "@types/node": "*", - "jest-util": "30.5.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-regex-util": { - "version": "30.5.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.5.0.tgz", - "integrity": "sha512-Mg0WK7A6xRHLSA1udJ8y9f3lM0uUhFTBnLKzwPmqB9AylvpleJ6BLemR8K9dK27DY+cesDryoA7yLZCAHsPG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-util": { - "version": "30.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.5.1.tgz", - "integrity": "sha512-yKuxmNy2rSbTXw+3SIPanJo+nV4/BS1p26v44IYBFMsswSQySfMMcPHErnOncda7i9HEz0q605rIhSTBVgrZTg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3" + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", - "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jimp": { @@ -9572,6 +9893,13 @@ "json-buffer": "3.0.1" } }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true, + "license": "MIT" + }, "node_modules/koffi": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/koffi/-/koffi-2.16.3.tgz", @@ -9717,6 +10045,16 @@ "yallist": "^3.0.2" } }, + "node_modules/ltx": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/ltx/-/ltx-3.1.2.tgz", + "integrity": "sha512-tFSKojN92FqNK6eRTmKK/ROUTUYVWKAxgohz523TPhF1G3nR3DXQS/I7/705rEPrDSloKDgMdRlh0qgMFQoVYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.4.0" + } + }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -9871,13 +10209,13 @@ } }, "node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -10947,9 +11285,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", - "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -12044,6 +12382,40 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "node_modules/sasl-anonymous": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sasl-anonymous/-/sasl-anonymous-0.1.0.tgz", + "integrity": "sha512-x+0sdsV0Gie2EexxAUsx6ZoB+X6OCthlNBvAQncQxreEWQJByAPntj0EAgTlJc2kZicoc+yFzeR6cl8VfsQGfA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/sasl-plain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sasl-plain/-/sasl-plain-0.1.0.tgz", + "integrity": "sha512-X8mCSfR8y0NryTu0tuVyr4IS2jBunBgyG+3a0gEEkd0nlHGiyqJhlc4EIkzmSwaa7F8S4yo+LS6Cu5qxRkJrmg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/sasl-scram-sha-1": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sasl-scram-sha-1/-/sasl-scram-sha-1-1.4.0.tgz", + "integrity": "sha512-kdP8uAFkak8flnmKTldWnQ98IuC15ASdKxNHWwbqexRj7szHs7y+JEtigLkPoq9gnp/SAxxU4O2huL8OLqSr9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/saslmechanisms": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/saslmechanisms/-/saslmechanisms-0.1.1.tgz", + "integrity": "sha512-pVlvK5ysevz8MzybRnDIa2YMxn0OJ7b9lDiWhMoaKPoJ7YkAg/7YtNjUgaYzElkwHxsw8dBMhaEn7UP6zxEwPg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/sax": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", @@ -12848,6 +13220,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -13963,9 +14351,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index cc85c4e0..e8423a11 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@fortawesome/react-fontawesome": "^0.2.0", "@headlessui/react": "^2.2.8", "@hookform/resolvers": "^3.3.4", + "@nethesis/chat-island": "^0.1.47", "@nethesis/nethesis-solid-svg-icons": "github:nethesis/Font-Awesome#ns-solid", "@nethesis/phone-island": "^1.0.15", "@tailwindcss/forms": "^0.5.7", diff --git a/public/locales/en/translations.json b/public/locales/en/translations.json index d8b17718..8ecbd30d 100644 --- a/public/locales/en/translations.json +++ b/public/locales/en/translations.json @@ -699,6 +699,21 @@ "Z-A label": "Z-A", "EXT label": "Extension" }, + "Chat": { + "No longer active": "No longer active", + "Messages": "Messages", + "Chat": "Chat", + "New chat": "New chat", + "No conversations": "No conversations", + "No messages yet": "No messages yet", + "members": "members", + "You": "You", + "Delete": "Delete", + "Leave": "Leave", + "Delete confirm": "Delete the conversation with \"{{name}}\"? Your copy of the messages is removed.", + "Delete group confirm": "Delete the group \"{{name}}\" for everyone? Its messages are removed for all members.", + "Leave confirm": "Leave the group \"{{name}}\"? You stop receiving its messages and your copy is removed." + }, "LastCalls": { "Last calls": "Last calls", "No calls": "No calls", @@ -992,7 +1007,8 @@ }, "CommandBar": { "Placeholder": "Search contact or dial number...", - "Call": "Call" + "Call": "Call", + "Chat hint": "Chat (Ctrl/⌘+Enter)" }, "Errors": { "browser_permissions": "Browser permissions error", diff --git a/public/locales/it/translations.json b/public/locales/it/translations.json index 7e5bf0d9..75e1efd7 100644 --- a/public/locales/it/translations.json +++ b/public/locales/it/translations.json @@ -699,6 +699,21 @@ "Z-A label": "Z-A", "EXT label": "Interno" }, + "Chat": { + "No longer active": "Non più attivo", + "Messages": "Messaggi", + "Chat": "Chat", + "New chat": "Nuova chat", + "No conversations": "Nessuna conversazione", + "No messages yet": "Nessun messaggio", + "members": "membri", + "You": "Tu", + "Delete": "Elimina", + "Leave": "Abbandona", + "Delete confirm": "Eliminare la conversazione con \"{{name}}\"? La tua copia dei messaggi viene rimossa.", + "Delete group confirm": "Eliminare il gruppo \"{{name}}\" per tutti? I suoi messaggi vengono rimossi per tutti i membri.", + "Leave confirm": "Abbandonare il gruppo \"{{name}}\"? Non riceverai più i suoi messaggi e la tua copia viene rimossa." + }, "LastCalls": { "Last calls": "Ultime chiamate", "No calls": "Nessuna chiamata", @@ -992,7 +1007,8 @@ }, "CommandBar": { "Placeholder": "Cerca contatto o componi numero...", - "Call": "Chiama" + "Call": "Chiama", + "Chat hint": "Chat (Ctrl/⌘+Invio)" }, "Errors": { "browser_permissions": "Errore nei permessi del browser", diff --git a/src/main/classes/controllers/AppController.ts b/src/main/classes/controllers/AppController.ts index 83756f98..76f11a21 100644 --- a/src/main/classes/controllers/AppController.ts +++ b/src/main/classes/controllers/AppController.ts @@ -1,6 +1,7 @@ import { LoginController } from './LoginController' import { NethLinkController } from './NethLinkController' import { PhoneIslandController } from './PhoneIslandController' +import { ChatIslandController } from './ChatIslandController' import { TrayController } from './TrayController' import { Log } from '@shared/utils/logger' import { DevToolsController } from './DevToolsController' @@ -32,6 +33,11 @@ export class AppController { Log.warning('unable to correctly close the PhoneIslandController:', e) } } + try { + await ChatIslandController.instance?.safeQuit() + } catch (e) { + Log.warning('unable to correctly close the ChatIslandController:', e) + } if (NethLinkController.instance) { try { await NethLinkController.instance.safeQuit() diff --git a/src/main/classes/controllers/ChatIslandController.ts b/src/main/classes/controllers/ChatIslandController.ts new file mode 100644 index 00000000..457feb3f --- /dev/null +++ b/src/main/classes/controllers/ChatIslandController.ts @@ -0,0 +1,133 @@ +import { ChatIslandWindow } from '../windows' +import { Log } from '@shared/utils/logger' +import { IPC_EVENTS } from '@shared/constants' +import { screen } from 'electron' + +type Corner = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' +type Rect = { x: number; y: number; w: number; h: number } + +// Between the window's edge and the dock: the island's right-4/left-4 and bottom-8/top-8. +const SIDE = 16 +const END = 32 + +export class ChatIslandController { + static instance: ChatIslandController | undefined + window: ChatIslandWindow + private wantFocus = false + private focusTimer: ReturnType | undefined + // The work area's corner nearest the dock, and the window's distance from its two edges, kept after a drag. + private corner: Corner = 'bottom-right' + private anchor = { x: 0, y: 0 } + private displayId: number | undefined + private size: { w: number; h: number; dock?: Rect; corner?: Corner } = { + w: 0, + h: 0, + } + + constructor() { + ChatIslandController.instance = this + this.window = new ChatIslandWindow() + } + + // Sized to the island, grown from the corner nearest the dock; hidden when there is nothing to show. + resize(size: { w: number; h: number; dock?: Rect; corner?: Corner }) { + try { + this.size = size + // A reloaded island starts from the default corner: tell it the current one. + if (size.corner && size.corner !== this.corner) + this.window.emit( + IPC_EVENTS.CHAT_TO_ISLAND, + 'chat-island-corner', + this.corner, + ) + const window = this.window.getWindow() + if (!window) return + if (size.w < 8 || size.h < 8) { + window.hide() + return + } + const { x, y, width, height } = this.workArea() + const w = Math.min(Math.ceil(size.w), width) + const h = Math.min(Math.ceil(size.h), height) + const left = this.corner.endsWith('left') + ? x + this.anchor.x + : x + width - this.anchor.x - w + const top = this.corner.startsWith('top') + ? y + this.anchor.y + : y + height - this.anchor.y - h + window.setBounds({ + x: Math.min(Math.max(x, left), x + width - w), + y: Math.min(Math.max(y, top), y + height - h), + width: w, + height: h, + }) + if (this.wantFocus) { + this.wantFocus = false + window.show() + window.focus() + } else if (!window.isVisible()) window.showInactive() + } catch (e) { + Log.warning('error during resizing ChatIslandWindow:', e) + } + } + + private workArea() { + const window = this.window.getWindow() + if (window?.isVisible()) + return screen.getDisplayMatching(window.getBounds()).workArea + // Hidden: back on the display it was dragged to, while it is still connected. + const d = screen.getAllDisplays().find((d) => d.id === this.displayId) + return (d ?? screen.getPrimaryDisplay()).workArea + } + + // After a drag: the corner nearest the dock is where the island grows from, as in the CTI. + keepPosition() { + const window = this.window.getWindow() + if (!window) return + const b = window.getBounds() + this.displayId = screen.getDisplayMatching(b).id + const { x, y, width, height } = this.workArea() + // The dock sits in the window's corner: its place follows from the bounds, only its size is measured. + const w = this.size.dock?.w ?? b.width - 2 * SIDE + const h = this.size.dock?.h ?? b.height - 2 * END + const dock = { + x: this.corner.endsWith('left') ? b.x + SIDE : b.x + b.width - SIDE - w, + y: this.corner.startsWith('top') ? b.y + END : b.y + b.height - END - h, + w, + h, + } + const left = dock.x + dock.w / 2 < x + width / 2 + const top = dock.y + dock.h / 2 < y + height / 2 + const corner: Corner = `${top ? 'top' : 'bottom'}-${left ? 'left' : 'right'}` + this.anchor = { + x: Math.max( + 0, + left ? dock.x - SIDE - x : x + width - dock.x - dock.w - SIDE, + ), + y: Math.max( + 0, + top ? dock.y - END - y : y + height - dock.y - dock.h - END, + ), + } + if (corner !== this.corner) { + this.corner = corner + this.window.emit(IPC_EVENTS.CHAT_TO_ISLAND, 'chat-island-corner', corner) + this.resize(this.size) + } + } + + // Focus once the island has sized the window for what it opens. + focus() { + const window = this.window.getWindow() + if (window?.isVisible()) window.focus() + // Only for the resize this open causes: a later one (a message growing the dock) must not steal focus. + this.wantFocus = true + clearTimeout(this.focusTimer) + this.focusTimer = setTimeout(() => (this.wantFocus = false), 1000) + } + + async safeQuit() { + ChatIslandController.instance = undefined + await this.window.quit(true) + } +} diff --git a/src/main/classes/controllers/index.ts b/src/main/classes/controllers/index.ts index fc8760ba..10e6d278 100644 --- a/src/main/classes/controllers/index.ts +++ b/src/main/classes/controllers/index.ts @@ -4,3 +4,4 @@ export * from './PhoneIslandController' export * from './TrayController' export * from './DevToolsController' export * from './CommandBarController' +export * from './ChatIslandController' diff --git a/src/main/classes/windows/ChatIslandWindow.ts b/src/main/classes/windows/ChatIslandWindow.ts new file mode 100644 index 00000000..ae8d6ca4 --- /dev/null +++ b/src/main/classes/windows/ChatIslandWindow.ts @@ -0,0 +1,42 @@ +import { PAGES } from '@shared/types' +import { BaseWindow } from './BaseWindow' + +// Transparent, always on top: the chat stays in view with NethLink closed. +export class ChatIslandWindow extends BaseWindow { + constructor() { + super(PAGES.CHATISLAND, { + width: 440, + height: 600, + show: false, + focusable: true, + acceptFirstMouse: true, + fullscreenable: false, + autoHideMenuBar: true, + closable: false, + alwaysOnTop: true, + minimizable: false, + maximizable: false, + movable: false, + resizable: false, + skipTaskbar: true, + roundedCorners: false, + parent: undefined, + transparent: true, + hiddenInMissionControl: true, + hasShadow: false, + fullscreen: false, + enableLargerThanScreen: false, + frame: false, + thickFrame: false, + trafficLightPosition: { x: 0, y: 0 }, + webPreferences: { + nodeIntegration: true, + backgroundThrottling: false, + }, + }) + + this.addOnBuildListener(() => { + this.getWindow()?.setAlwaysOnTop(true, 'screen-saver') + }) + } +} diff --git a/src/main/classes/windows/index.ts b/src/main/classes/windows/index.ts index 7cc92b28..2c435f92 100644 --- a/src/main/classes/windows/index.ts +++ b/src/main/classes/windows/index.ts @@ -4,3 +4,4 @@ export * from './NethLinkWindow' export * from './PhoneIslandWindow' export * from './DevToolsWindow' export * from './CommandBarWindow' +export * from './ChatIslandWindow' diff --git a/src/main/lib/ipcEvents.ts b/src/main/lib/ipcEvents.ts index ac720809..f2589d63 100644 --- a/src/main/lib/ipcEvents.ts +++ b/src/main/lib/ipcEvents.ts @@ -2,6 +2,7 @@ import { AccountController } from '@/classes/controllers' import { LoginController } from '@/classes/controllers/LoginController' import { PhoneIslandController } from '@/classes/controllers/PhoneIslandController' import { CommandBarController } from '@/classes/controllers/CommandBarController' +import { ChatIslandController } from '@/classes/controllers/ChatIslandController' import { IPC_EVENTS } from '@shared/constants' import { Account, OnDraggingWindow, PAGES } from '@shared/types' import { @@ -236,6 +237,13 @@ export function registerIpcEvents() { const cursorPosition = screen.getCursorScreenPoint() const deltaX = cursorPosition.x - draggingWindow.startMousePosition.x const deltaY = cursorPosition.y - draggingWindow.startMousePosition.y + // A click on a head is not a move: the window stays where it grew from. + if ( + window.title === PAGES.CHATISLAND && + (Math.abs(deltaX) > 3 || Math.abs(deltaY) > 3) + ) { + ChatIslandController.instance?.keepPosition() + } if (window.title === PAGES.PHONEISLAND) { const bounds = window.getBounds() Log.info( @@ -275,6 +283,19 @@ export function registerIpcEvents() { }, false, ) + } else if (window.title === PAGES.CHATISLAND) { + // Kept inside the screen under the cursor, like the phone island. + const { width, height } = window.getBounds() + const wa = screen.getDisplayNearestPoint(cursorPosition).workArea + window.setBounds( + { + x: Math.min(Math.max(newX, wa.x), wa.x + wa.width - width), + y: Math.min(Math.max(newY, wa.y), wa.y + wa.height - height), + width, + height, + }, + false, + ) } else { const [w, h] = window.getContentSize() window.setBounds( @@ -345,6 +366,48 @@ export function registerIpcEvents() { clipboard.writeText(text) }) + // Chat island window: size, and island events between it and NethLink. + ipcMain.on(IPC_EVENTS.CHAT_ISLAND_RESIZE, (_, size) => { + ChatIslandController.instance?.resize(size) + }) + ipcMain.on(IPC_EVENTS.CHAT_TO_ISLAND, (_, name, detail) => { + try { + ChatIslandController.instance?.window.emit( + IPC_EVENTS.CHAT_TO_ISLAND, + name, + detail, + ) + if (name === 'chat-island-open' || name === 'chat-island-new') { + ChatIslandController.instance?.focus() + } + } catch (e) { + Log.warning('chat island unreachable:', e) + } + }) + ipcMain.on(IPC_EVENTS.CHAT_FROM_ISLAND, (_, name, detail) => { + try { + NethLinkController.instance?.window.emit( + IPC_EVENTS.CHAT_FROM_ISLAND, + name, + detail, + ) + } catch (e) { + Log.warning('nethlink unreachable:', e) + } + // The command bar only needs to know whether the chat is there. + if (name === 'chat-island-status') { + try { + CommandBarController.instance?.window.emit( + IPC_EVENTS.CHAT_FROM_ISLAND, + name, + detail, + ) + } catch (e) { + Log.warning('command bar unreachable:', e) + } + } + }) + ipcMain.on(IPC_EVENTS.PHONE_ISLAND_RESIZE, (_, size) => { PhoneIslandController.instance.resize(size) }) diff --git a/src/main/main.ts b/src/main/main.ts index 602595ec..91e20b39 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -21,6 +21,7 @@ import { import { AccountController } from './classes/controllers' import { PhoneIslandController } from './classes/controllers/PhoneIslandController' import { CommandBarController } from './classes/controllers/CommandBarController' +import { ChatIslandController } from './classes/controllers/ChatIslandController' import { Account, AuthAppData, @@ -131,6 +132,7 @@ function startup() { } await PhoneIslandController.instance.logout() + await ChatIslandController.instance?.safeQuit() NethLinkController.instance.logout() AccountController.instance.logout() await delay(1000) @@ -754,6 +756,16 @@ async function attachProtocolListeners() { } break } + case 'chat': { + // The chat opens in its own window, not in NethLink. + ipcMain.emit( + IPC_EVENTS.CHAT_TO_ISLAND, + undefined, + to ? 'chat-island-open' : 'chat-island-new', + to ? { username: to } : undefined, + ) + return new Promise((resolve) => resolve) + } default: Log.warning('Unknown nethlink action:', action) } @@ -954,6 +966,7 @@ async function createNethLink(show: boolean = true) { if (show) NethLinkController.instance.show() await delay(1000) new PhoneIslandController() + new ChatIslandController() checkForUpdate() const account = store.get('account') as Account if (account) { diff --git a/src/renderer/public/locales/en/translations.json b/src/renderer/public/locales/en/translations.json index 16883fba..a6475833 100644 --- a/src/renderer/public/locales/en/translations.json +++ b/src/renderer/public/locales/en/translations.json @@ -698,6 +698,21 @@ "Z-A label": "Z-A", "EXT label": "Extension" }, + "Chat": { + "No longer active": "No longer active", + "Messages": "Messages", + "Chat": "Chat", + "New chat": "New chat", + "No conversations": "No conversations", + "No messages yet": "No messages yet", + "members": "members", + "You": "You", + "Delete": "Delete", + "Leave": "Leave", + "Delete confirm": "Delete the conversation with \"{{name}}\"? Your copy of the messages is removed.", + "Delete group confirm": "Delete the group \"{{name}}\" for everyone? Its messages are removed for all members.", + "Leave confirm": "Leave the group \"{{name}}\"? You stop receiving its messages and your copy is removed." + }, "LastCalls": { "Last calls": "Last calls", "No calls": "No calls", @@ -992,7 +1007,8 @@ }, "CommandBar": { "Placeholder": "Search contact or dial number...", - "Call": "Call" + "Call": "Call", + "Chat hint": "Chat (Ctrl/⌘+Enter)" }, "Errors": { "browser_permissions": "Browser permissions error", diff --git a/src/renderer/public/locales/it/translations.json b/src/renderer/public/locales/it/translations.json index 468aa8de..ce30f9dc 100644 --- a/src/renderer/public/locales/it/translations.json +++ b/src/renderer/public/locales/it/translations.json @@ -698,6 +698,21 @@ "Z-A label": "Z-A", "EXT label": "Interno" }, + "Chat": { + "No longer active": "Non più attivo", + "Messages": "Messaggi", + "Chat": "Chat", + "New chat": "Nuova chat", + "No conversations": "Nessuna conversazione", + "No messages yet": "Nessun messaggio", + "members": "membri", + "You": "Tu", + "Delete": "Elimina", + "Leave": "Abbandona", + "Delete confirm": "Eliminare la conversazione con \"{{name}}\"? La tua copia dei messaggi viene rimossa.", + "Delete group confirm": "Eliminare il gruppo \"{{name}}\" per tutti? I suoi messaggi vengono rimossi per tutti i membri.", + "Leave confirm": "Abbandonare il gruppo \"{{name}}\"? Non riceverai più i suoi messaggi e la tua copia viene rimossa." + }, "LastCalls": { "Last calls": "Ultime chiamate", "No calls": "Nessuna chiamata", @@ -992,7 +1007,8 @@ }, "CommandBar": { "Placeholder": "Cerca contatto o componi numero...", - "Call": "Chiama" + "Call": "Chiama", + "Chat hint": "Chat (Ctrl/⌘+Invio)" }, "Errors": { "browser_permissions": "Errore nei permessi del browser", diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 5140e346..81d1018d 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -14,6 +14,7 @@ import { AvailableThemes, PAGES } from '@shared/types' import { delay } from '@shared/utils/utils' import i18next from 'i18next' import { DevToolsPage } from './pages/DevToolsPage' +import { ChatIslandPage } from './pages/ChatIslandPage' import { parseThemeToClassName } from './utils' import { useRegisterStoreHook, useSharedState } from '@renderer/store' import { PageContext, usePageCtx } from './contexts/pageContext' @@ -143,6 +144,10 @@ const RequestStateComponent = () => { path: PAGES.COMMANDBAR, element: , }, + { + path: PAGES.CHATISLAND, + element: , + }, ], }, ]) @@ -162,6 +167,9 @@ const Layout = ({ theme, page }: { theme?: AvailableThemes; page?: PAGES }) => { if (page === PAGES.PHONEISLAND) { await import('@nethesis/phone-island/dist/index.css') } + if (page === PAGES.CHATISLAND) { + await import('@nethesis/chat-island/dist/index.css') + } setIsCSSLoaded(true) } diff --git a/src/renderer/src/components/Modules/NethVoice/BaseModule/Sidebar.tsx b/src/renderer/src/components/Modules/NethVoice/BaseModule/Sidebar.tsx index 9756fde3..44906a6d 100644 --- a/src/renderer/src/components/Modules/NethVoice/BaseModule/Sidebar.tsx +++ b/src/renderer/src/components/Modules/NethVoice/BaseModule/Sidebar.tsx @@ -5,6 +5,7 @@ import { faInfoCircle as InfoMenuIcon, faStar as FavouriteMenuIcon, faSquareParking as ParkedCallMenuIcon, + faMessage as ChatMenuIcon, } from '@fortawesome/free-solid-svg-icons' import { useNethlinkData, useSharedState } from '@renderer/store' import { ParkingType } from '@shared/types' @@ -27,6 +28,8 @@ export function Sidebar({ onChangeMenu }: SidebarProps): JSX.Element { ) const [, setPhonebookSearchModule] = useNethlinkData('phonebookSearchModule') const [missedCalls] = useNethlinkData('missedCalls') + const [chatStatus] = useNethlinkData('chatStatus') + const [chatUnread] = useNethlinkData('chatUnread') const [notifications] = useSharedState('notifications') const [lastMenu, setLastMenu] = useState( MENU_ELEMENT.FAVOURITES, @@ -99,6 +102,16 @@ export function Sidebar({ onChangeMenu }: SidebarProps): JSX.Element { onClick={() => handleSidebarMenuSelection(MENU_ELEMENT.LAST_CALLS)} isSelected={selectedSidebarMenu === MENU_ELEMENT.LAST_CALLS} /> + {/* CHAT: shown once the chat window is connecting */} + {chatStatus && ( + 0} + onClick={() => handleSidebarMenuSelection(MENU_ELEMENT.CHAT)} + isSelected={selectedSidebarMenu === MENU_ELEMENT.CHAT} + /> + )} {/* PARKED CALLS */} {hasPermission(PERMISSION.PARKINGS) && ( ([name]) + const id = `tooltip-chat-name-${peer}` + return ( + <> +

+ {name} + {children} +

+ {truncated && ( + + )} + + ) +} + +// Like the last calls: "15h ago (30 Sep 2026 18:08)". +const when = (ts: number) => { + const language = i18next.languages?.[0] || 'en' + return `${formatDistanceToNowStrict(ts, { addSuffix: true, locale: shortLocale(language) })} (${format(ts, 'd MMM yyyy HH:mm', { locale: language === 'it' ? it : enGB })})` +} + +// Leaving a group I do not own; deleting a chat, or a group I own for everyone. +const leaves = (c: ChatConversation) => c.kind === 'group' && !c.owner + +function DeleteDialog({ + conversation, + close, +}: { + conversation: ChatConversation + close: () => void +}) { + const [theme] = useSharedState('theme') + const cancelRef = createRef() + const name = truncate(conversation.name, 30) + const confirm = () => { + window.electron.send(IPC_EVENTS.CHAT_TO_ISLAND, 'chat-island-delete', { + username: conversation.peer, + }) + close() + } + return ( + + +
+
+
+

+ {leaves(conversation) ? t('Chat.Leave') : t('Chat.Delete')} +

+

+ {conversation.kind === 'group' + ? conversation.owner + ? t('Chat.Delete group confirm', { name }) + : t('Chat.Leave confirm', { name }) + : t('Chat.Delete confirm', { name })} +

+
+
+ + + + +
+ ) +} + +export function ChatModule() { + const [conversations] = useNethlinkData('chatConversations') + const [operators] = useNethlinkData('operators') + const [toDelete, setToDelete] = useState() + const nameOf = (u: string) => operators?.operators?.[u]?.name || u + + return ( + <> + openChat()} + actionIcon={NewChatIcon} + actionText={t('Chat.New chat')} + /> + + + {conversations?.length ? ( + conversations.map((c, idx) => ( +
openChat(c.peer)} + className='group cursor-pointer dark:hover:bg-hoverDark hover:bg-hoverLight hover:shadow-[0px_-1px_0px_0px_#E5E7EB] dark:hover:shadow-[0px_-1px_0px_0px_#374151]' + > +
+
+ {/* Same layout as the last calls */} +
+
+ {c.kind === 'group' && !c.avatar ? ( + // As in the CTI: operator groups (cti-…) blue, a queue's chat with the Queues icon, other groups purple. + + + + ) : ( + + )} +
+
+ + {c.inactive && ( + + {t('Chat.No longer active')} + + )} + + {/* As in the CTI: a group's size under its name, "No messages yet" until the first one. */} + {c.kind === 'group' && c.members && ( +

+ {c.members.length} {t('Chat.members')} +

+ )} +

+ {c.last && + (c.last.mine + ? `${t('Chat.You')}: ` + : c.kind === 'group' && c.last.nick + ? `${nameOf(c.last.nick)}: ` + : '')} + {c.last ? ( + c.last.body + ) : ( + + {t('Chat.No messages yet')} + + )} +

+ {c.last && ( +

+ {when(c.last.ts)} +

+ )} +
+
+ {c.unread > 0 && ( + + {c.unread} + + )} + {/* The CTI groups' rooms follow the CTI: nobody leaves or deletes them here, as in the CTI. */} + {!c.peer.startsWith('cti-') && ( + + )} +
+
+
+
+
+ )) + ) : ( + + )} +
+ {toDelete && ( + setToDelete(undefined)} + /> + )} + + ) +} diff --git a/src/renderer/src/components/Modules/NethVoice/Chat/icons.ts b/src/renderer/src/components/Modules/NethVoice/Chat/icons.ts new file mode 100644 index 00000000..da12a543 --- /dev/null +++ b/src/renderer/src/components/Modules/NethVoice/Chat/icons.ts @@ -0,0 +1,7 @@ +import type { IconDefinition } from '@fortawesome/fontawesome-svg-core' + +export const faNewChat = { + prefix: 'fas', + iconName: 'new-chat', + icon: [512, 512, [], '', 'M0 352L0 128C0 75 43 32 96 32l320 0c53 0 96 43 96 96l0 224c0 53-43 96-96 96l-120 0c-5.2 0-10.2 1.7-14.4 4.8L166.4 539.2c-4.2 3.1-9.2 4.8-14.4 4.8-13.3 0-24-10.7-24-24l0-72-32 0c-53 0-96-43-96-96zM232 152v64h-64v48h64v64h48v-64h64v-48h-64v-64z'], +} as unknown as IconDefinition diff --git a/src/renderer/src/components/Modules/NethVoice/SearchResults/SearchNumber.tsx b/src/renderer/src/components/Modules/NethVoice/SearchResults/SearchNumber.tsx index 6f5dab7f..ea888fd4 100644 --- a/src/renderer/src/components/Modules/NethVoice/SearchResults/SearchNumber.tsx +++ b/src/renderer/src/components/Modules/NethVoice/SearchResults/SearchNumber.tsx @@ -7,6 +7,9 @@ import { usePhonebookSearchModule } from './hook/usePhoneBookSearchModule' import { ContactNameAndActions } from '@renderer/components/Modules/NethVoice/BaseModule/ContactNameAndAction' import { useFavouriteModule } from '../Speeddials/hook/useFavouriteModule' import { ClassNames } from '@renderer/utils' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { faMessage } from '@fortawesome/free-solid-svg-icons' +import { openChat } from '@renderer/hooks/useChatBridge' export interface SearchNumberProps { user: SearchData @@ -18,6 +21,7 @@ export function SearchNumber({ user, className, onClick }: SearchNumberProps) { const phoneBookModule = usePhonebookSearchModule() const [searchText] = phoneBookModule.searchTextState const [operators] = useNethlinkData('operators') + const [chatStatus] = useNethlinkData('chatStatus') const { isSearchAlsoAFavourite } = useFavouriteModule() const getUsernameFromPhoneNumber = (number: string) => { @@ -126,6 +130,17 @@ export function SearchNumber({ user, className, onClick }: SearchNumberProps) { } /> + {/* An operator: chat with them */} + {username && chatStatus === 'online' && ( + + )} {onClick && ( + )} ) })} diff --git a/src/renderer/src/pages/NethLinkPage.tsx b/src/renderer/src/pages/NethLinkPage.tsx index a9b4d040..8b84f3cb 100644 --- a/src/renderer/src/pages/NethLinkPage.tsx +++ b/src/renderer/src/pages/NethLinkPage.tsx @@ -13,6 +13,7 @@ import { debouncer } from '@shared/utils/utils' import { useAccount } from '@renderer/hooks/useAccount' import { Sidebar } from '@renderer/components/Modules/NethVoice/BaseModule/Sidebar' import { sendNotification } from '@renderer/utils' +import { useChatBridge } from '@renderer/hooks/useChatBridge' export interface NethLinkPageProps { handleRefreshConnection: () => void @@ -38,6 +39,7 @@ export function NethLinkPage({ handleRefreshConnection }: NethLinkPageProps) { const { NethVoiceAPI } = useLoggedNethVoiceAPI() const accountMeInterval = useRef() + useChatBridge(account?.username) useInitialize(() => { Log.info('INITIALIZE NETHLINK FRONTEND') diff --git a/src/renderer/src/store.ts b/src/renderer/src/store.ts index 807622ca..a078e2ce 100644 --- a/src/renderer/src/store.ts +++ b/src/renderer/src/store.ts @@ -178,6 +178,9 @@ export const useNethlinkData = createGlobalStateHook({ }, showAddContactModule: false, showPhonebookSearchModule: false, + chatStatus: undefined, + chatUnread: 0, + chatConversations: [], } as NethLinkPageData).useGlobalState export const useLoginPageData = createGlobalStateHook({ diff --git a/src/shared/constants.ts b/src/shared/constants.ts index d864c871..af0bb29a 100644 --- a/src/shared/constants.ts +++ b/src/shared/constants.ts @@ -38,6 +38,7 @@ export enum MENU_ELEMENT { LAST_CALLS, PARKED_CALLS, ABOUT, + CHAT, } export enum IPC_EVENTS { LOGIN = 'LOGIN', @@ -45,6 +46,9 @@ export enum IPC_EVENTS { START_CALL = 'START_CALL', EMIT_START_CALL = 'EMIT_START_CALL', PHONE_ISLAND_RESIZE = 'PHONE_ISLAND_RESIZE', + CHAT_ISLAND_RESIZE = 'CHAT_ISLAND_RESIZE', + CHAT_TO_ISLAND = 'CHAT_TO_ISLAND', + CHAT_FROM_ISLAND = 'CHAT_FROM_ISLAND', LOGIN_WINDOW_RESIZE = 'LOGIN_WINDOW_RESIZE', CHANGE_THEME = 'CHANGE_THEME', OPEN_DEV_TOOLS = 'OPEN_DEV_TOOLS', diff --git a/src/shared/types.ts b/src/shared/types.ts index 50298a61..c147951e 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -21,6 +21,7 @@ export enum PAGES { NETHLINK = 'NethLink', DEVTOOLS = 'devtoolspage', COMMANDBAR = 'commandbarpage', + CHATISLAND = 'chatislandpage', } export type StateType = [T | undefined, (value: T | undefined) => void] @@ -503,6 +504,23 @@ export type NethLinkPageData = { speeddialsModule?: SpeedDialModuleData phonebookSearchModule?: PhonebookSearchModuleData phonebookModule?: PhonebookModuleData + chatStatus?: string + chatUnread?: number + chatConversations?: ChatConversation[] +} + +// One row of the chat-island-conversations event. +export type ChatConversation = { + peer: string + kind: 'chat' | 'group' + name: string + avatar?: string + online: boolean + inactive?: boolean + owner?: boolean + unread: number + members?: string[] + last?: { body: string; ts: number; mine: boolean; nick?: string } } export type SpeedDialModuleData = { diff --git a/tsconfig.node.tsbuildinfo b/tsconfig.node.tsbuildinfo new file mode 100644 index 00000000..ce18f9c1 --- /dev/null +++ b/tsconfig.node.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.esnext.full.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseast.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/types.d-agj9qkwt.d.ts","./node_modules/esbuild/lib/main.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/vite/dist/node/runtime.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@types/babel__generator/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@types/babel__template/index.d.ts","./node_modules/@types/babel__traverse/index.d.ts","./node_modules/@types/babel__core/index.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./node_modules/electron-vite/dist/index.d.ts","./electron.vite.config.ts","./node_modules/electron/electron.d.ts","./src/shared/constants.ts","./src/shared/types.ts","./node_modules/moment/ts3.1-typings/moment.d.ts","./src/shared/utils/utils.ts","./src/shared/utils/logger.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./src/main/lib/mainstore.ts","./src/shared/phonebook.ts","./node_modules/axios/index.d.ts","./src/shared/usenetwork.ts","./src/shared/utils/jwt.ts","./src/shared/usenethvoiceapi.ts","./src/shared/uselogin.ts","./src/main/classes/controllers/networkcontroller.ts","./src/main/classes/controllers/accountcontroller.ts","./node_modules/@electron-toolkit/utils/dist/index.d.ts","./node_modules/i18next-electron-fs-backend/lib/index.d.ts","./src/main/lib/windowconstructor.ts","./src/main/classes/windows/basewindow.ts","./src/main/classes/windows/loginwindow.ts","./src/main/classes/windows/splashscreenwindow.ts","./src/main/classes/controllers/nethlinkcontroller.ts","./src/main/classes/controllers/phoneislandcontroller.ts","./src/main/classes/controllers/chatislandcontroller.ts","./src/main/classes/controllers/devtoolscontroller.ts","./src/main/classes/controllers/appcontroller.ts","./node_modules/i18next/index.d.ts","./src/main/classes/controllers/traycontroller.ts","./src/main/classes/windows/nethlinkwindow.ts","./src/main/classes/windows/phoneislandwindow.ts","./src/main/classes/windows/devtoolswindow.ts","./src/main/classes/windows/commandbarwindow.ts","./src/main/classes/windows/chatislandwindow.ts","./src/main/classes/windows/index.ts","./src/main/classes/controllers/logincontroller.ts","./src/main/lib/windowsfocus.ts","./src/main/classes/controllers/commandbarcontroller.ts","./src/main/classes/controllers/index.ts","./src/main/lib/commandbarshortcut.ts","./src/main/lib/ipcevents.ts","./src/main/classes/controllers/splashscreencontroller.ts","./node_modules/i18next-fs-backend/cjs/index.d.ts","./src/main/main.ts","./node_modules/@electron-toolkit/preload/dist/index.d.ts","./src/preload/index.ts","./src/preload/types.d.ts","./node_modules/vite/types/importmeta.d.ts","./node_modules/vite/client.d.ts","./src/shared/env.d.ts","./node_modules/electron-vite/node.d.ts"],"fileIdsList":[[92,134,155,220,221],[92,134,214],[92,134],[92,134,223],[92,134,214,215,216,217,218],[92,134,214,216],[92,134,229,231,232,233,234,235,236,237,238,239,240,241],[92,134,229,230,232,233,234,235,236,237,238,239,240,241],[92,134,230,231,232,233,234,235,236,237,238,239,240,241],[92,134,229,230,231,233,234,235,236,237,238,239,240,241],[92,134,229,230,231,232,234,235,236,237,238,239,240,241],[92,134,229,230,231,232,233,235,236,237,238,239,240,241],[92,134,229,230,231,232,233,234,236,237,238,239,240,241],[92,134,229,230,231,232,233,234,235,237,238,239,240,241],[92,134,229,230,231,232,233,234,235,236,238,239,240,241],[92,134,229,230,231,232,233,234,235,236,237,239,240,241],[92,134,229,230,231,232,233,234,235,236,237,238,240,241],[92,134,229,230,231,232,233,234,235,236,237,238,239,241],[92,134,229,230,231,232,233,234,235,236,237,238,239,240],[92,131,134],[92,133,134],[134],[92,134,139,166],[92,134,135,145,153,163,174],[92,134,135,136,145,153],[87,88,89,92,134],[92,134,137,175],[92,134,138,139,146,154],[92,134,139,163,171],[92,134,140,142,145,153],[92,133,134,141],[92,134,142,143],[92,134,144,145],[92,133,134,145],[92,134,145,146,147,163,174],[92,134,145,146,147,160,163,166],[92,134,142,145,148,153,163,174],[92,134,145,146,148,149,153,163,171,174],[92,134,148,150,163,171,174],[90,91,92,93,94,95,96,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180],[92,134,145,151],[92,134,152,174,179],[92,134,142,145,153,163],[92,134,154],[92,134,155],[92,133,134,156],[92,134,157,173,179],[92,134,158],[92,134,159],[92,134,145,160,161],[92,134,160,162,175,177],[92,134,145,163,164,166],[92,134,165,166],[92,134,163,164],[92,134,166],[92,134,167],[92,134,163,168],[92,134,145,169,170],[92,134,169,170],[92,134,139,153,163,171],[92,134,172],[92,134,153,173],[92,134,148,159,174],[92,134,139,175],[92,134,163,176],[92,134,152,177],[92,134,178],[92,129,134],[92,129,134,145,147,156,163,166,174,177,179],[92,134,163,180],[92,134,213,219],[92,134,181,213],[92,134,179],[92,134,145,146,181],[92,134,262],[92,134,205],[92,134,203,205],[92,134,194,202,203,204,206,208],[92,134,192],[92,134,195,200,205,208],[92,134,191,208],[92,134,195,196,199,200,201,208],[92,134,195,196,197,199,200,208],[92,134,192,193,194,195,196,200,201,202,204,205,206,208],[92,134,208],[92,134,190,192,193,194,195,196,197,199,200,201,202,203,204,205,206,207],[92,134,190,208],[92,134,195,197,198,200,201,208],[92,134,199,208],[92,134,200,201,205,208],[92,134,193,203],[92,134,183,212],[92,134,182,183],[92,106,110,134,174],[92,106,134,163,174],[92,101,134],[92,103,106,134,171,174],[92,134,153,171],[92,134,181],[92,101,134,181],[92,103,106,134,153,174],[92,98,99,102,105,134,145,163,174],[92,98,104,134],[92,102,106,134,166,174,181],[92,122,134,181],[92,100,101,134,181],[92,106,134],[92,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,134],[92,106,113,114,134],[92,104,106,114,115,134],[92,105,134],[92,98,101,106,134],[92,106,110,114,115,134],[92,110,134],[92,104,106,109,134,174],[92,98,103,104,106,110,113,134],[92,134,163],[92,101,106,122,134,179,181],[92,134,282],[92,134,145,146,148,149,150,153,163,171,174,180,181,183,184,185,186,187,188,189,209,210,211,212],[92,134,185,186,187,188],[92,134,185,186,187],[92,134,185],[92,134,186],[92,134,187,211],[92,134,183],[92,134,223,225,227,228,242,246,247,248,249],[92,134,227,228,242,257,258,259,260,263,270],[92,134,223,228,269],[92,134,223,224,227,228,269,271],[92,134,269],[92,134,250,258,259,260,263,270,272],[92,134,228,269],[92,134,224,228,269],[92,134,228,244],[92,134,223,224,225,227,228,250,269,275],[92,134,155,223,227,228,242,257,260,261,262,270],[92,134,223,224,227,228,253],[92,134,225,254],[92,134,255,256,264,265,266,267,268],[92,134,224,225,227,228,254,273],[92,134,223,224,225,227,228,254,263,273],[92,134,223,225,254],[92,134,225,228,254,273],[92,134,228],[92,134,148,154,223,224,225,227,228,242,248,249,257,258,259,261,269,270,272,273,274],[92,134,146,155,223,224,225,228,241],[92,134,146,155,223,227,251,252],[92,134,223,228],[92,134,146,155,174,223,224,225,227,228,241,242,247,249,257,258,259,261,262,263,270,272,273,274,275,276,277],[92,134,154,223,224,225,252,279],[92,134,279,280],[92,134,225],[92,134,283],[92,134,224],[92,134,224,225,226,228,243,245,246],[92,134,223,226,227],[92,134,225,228]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"bde31fd423cd93b0eff97197a3f66df7c93e8c0c335cbeb113b7ff1ac35c23f4","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cb3140d0e9cee0aea7264fd6a1d297394052a18eb05ca0220d133e6c043fb5","affectsGlobalScope":true,"impliedFormat":1},{"version":"362d474eb9feae178a83ead94d757c21e42d6d7090e4182f0c12e92830a3d25e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc27badd4bf4a2b0024a0cd32a9bbf0be7073902c5177a58be14242e7d8bf2c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","impliedFormat":1},{"version":"3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","impliedFormat":1},{"version":"e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","impliedFormat":1},{"version":"471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","impliedFormat":1},{"version":"c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","impliedFormat":1},{"version":"40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","impliedFormat":1},{"version":"8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","impliedFormat":1},{"version":"4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1","impliedFormat":1},{"version":"b972357e61ef2e072f8a88b9f4f5a70984c417237e6106f6b2390414a09ce523","affectsGlobalScope":true,"impliedFormat":1},{"version":"076cac5898bd833255def0f7c5717b83534212873505c9c958f1926d49f9bec6","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"75eb536b960b85f75e21490beeab53ea616646a995ad203e1af532d67a774fb6","impliedFormat":1},{"version":"36d0976d3dad74078f707af107b5082dbe42ffcadb3442ff140c36c8a33b4887","affectsGlobalScope":true,"impliedFormat":1},{"version":"86e0d632e9ef88593e8724ffb6af05104e13a08f9d8df733a30f9991ac387fff","impliedFormat":1},{"version":"7646ad748a9ca15bf43d4c88f83cc851c67f8ec9c1186295605b59ba6bb36dcb","impliedFormat":1},{"version":"cef8931bc129687165253f0642427c2a72705a4613b3ac461b9fa78c7cdaef32","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"47b62c294beb69daa5879f052e416b02e6518f3e4541ae98adbfb27805dd6711","impliedFormat":1},{"version":"f8375506002c556ec412c7e2a5a9ece401079ee5d9eb2c1372e9f5377fac56c7","impliedFormat":1},{"version":"8edd6482bd72eca772f9df15d05c838dd688cdbd4d62690891fca6578cfda6fe","impliedFormat":1},{"version":"07ba29a1a495b710aea48a4cf19ae12b3cbda2a8e9ac62192af477027a99e8de","impliedFormat":1},{"version":"6dead64c944504250dd2fc9095231f36887cfc1534f1ff57737c19f92d165c91","impliedFormat":1},{"version":"b9a4824bb83f25d6d227394db2ed99985308cf2a3a35f0d6d39aa72b15473982","impliedFormat":1},{"version":"6e9948b1e396106601365283680c319a9103c71a5725e7d03e26fe246df60c4c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e8e284b3832911aeede987e4d74cf0a00f2b03896b2fd3bf924344cc0f96b3c","impliedFormat":1},{"version":"37d37474a969ab1b91fc332eb6a375885dfd25279624dfa84dea48c9aedf4472","impliedFormat":1},{"version":"1ddd8c1a3ae1f8ab28affd53b13910be4afe0b35f28517b7f14c268e9e42647a","impliedFormat":1},{"version":"f1a79b6047d006548185e55478837dfbcdd234d6fe51532783f5dffd401cfb2b","impliedFormat":1},{"version":"cbc91187014fb1e738ef252751a9f84abf2989ec1c3b1637ec23b5b39cdf3d25","impliedFormat":1},{"version":"e822320b448edce0c7ede9cbeada034c72e1f1c8c8281974817030564c63dcb1","impliedFormat":1},{"version":"9d65568cba17c9db40251023406668695ad698ea4a34542364af3e78edd37811","affectsGlobalScope":true,"impliedFormat":1},{"version":"f23e3d484de54d235bf702072100b541553a1df2550bad691fe84995e15cf7be","impliedFormat":1},{"version":"821c79b046e40d54a447bebd9307e70b86399a89980a87bbc98114411169e274","impliedFormat":1},{"version":"17bc38afc78d40b2f54af216c0cc31a4bd0c6897a5945fa39945dfc43260be2c","impliedFormat":1},{"version":"d201b44ff390c220a94fb0ff6a534fe9fa15b44f8a86d0470009cdde3a3e62ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"d44445141f204d5672c502a39c1124bcf1df225eba05df0d2957f79122be87b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"de905bc5f7e7a81cb420e212b95ab5e3ab840f93e0cfa8ce879f6e7fa465d4a2","impliedFormat":1},{"version":"bc2ff43214898bc6d53cab92fb41b5309efec9cbb59a0650525980aee994de2b","impliedFormat":1},{"version":"bede3143eeddca3b8ec3592b09d7eb02042f9e195251040c5146eac09b173236","impliedFormat":1},{"version":"64a40cf4ec8a7a29db2b4bc35f042e5be8537c4be316e5221f40f30ca8ed7051","impliedFormat":1},{"version":"294c082d609e6523520290db4f1d54114ebc83643fb42abd965be5bcc5d9416b","impliedFormat":1},{"version":"cf7d740e39bd8adbdc7840ee91bef0af489052f6467edfcefb7197921757ec3b","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"b9f0681c4d2cb00a5cfe08a7be9662627b912de562926819ebddfe2ef6a9b5ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"b85151402164ab7cb665e58df5c1a29aa25ea4ed3a367f84a15589e7d7a9c8ca","impliedFormat":1},{"version":"89eb8abe2b5c146fbb8f3bf72f4e91de3541f2fb559ad5fed4ad5bf223a3dedb","impliedFormat":1},{"version":"bc6cb10764a82f3025c0f4822b8ad711c16d1a5c75789be2d188d553b69b2d48","affectsGlobalScope":true,"impliedFormat":1},{"version":"41d510caf7ed692923cb6ef5932dc9cf1ed0f57de8eb518c5bab8358a21af674","impliedFormat":1},{"version":"2751c5a6b9054b61c9b03b3770b2d39b1327564672b63e3485ac03ffeb28b4f6","impliedFormat":1},{"version":"dc058956a93388aab38307b7b3b9b6379e1021e73a244aab6ac9427dc3a252a7","impliedFormat":1},{"version":"f33302cf240672359992c356f2005d395b559e176196d03f31a28cc7b01e69bc","impliedFormat":1},{"version":"3ce25041ff6ae06c08fcaccd5fcd9baf4ca6e80e6cb5a922773a1985672e74c2","affectsGlobalScope":true,"impliedFormat":1},{"version":"652c0de14329a834ff06af6ad44670fac35849654a464fd9ae36edb92a362c12","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b1e178016d3fc554505ae087c249b205b1c50624d482c542be9d4682bab81fc","impliedFormat":1},{"version":"5db7c5bb02ef47aaaec6d262d50c4e9355c80937d649365c343fa5e84569621d","impliedFormat":1},{"version":"cf45d0510b661f1da461479851ff902f188edb111777c37055eff12fa986a23a","impliedFormat":1},{"version":"6831f13f06a15391dfeb2477d48ac58311ab675f85846a05499ee92d6e856933","affectsGlobalScope":true,"impliedFormat":1},{"version":"37bef1064b7d015aeaa7c0716fe23a0b3844abe2c0a3df7144153ca8445fe0da","impliedFormat":1},{"version":"83178a1174286d5f5178c5c75067e36c41b975c26be7b86d99cb18393eb30a41","impliedFormat":1},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"1687ffc301558b6088bb048945a81c0cc5318b889e2bc8b4eee26f66b0e56685","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"282f98006ed7fa9bb2cd9bdbe2524595cfc4bcd58a0bb3232e4519f2138df811","impliedFormat":1},{"version":"6222e987b58abfe92597e1273ad7233626285bc2d78409d4a7b113d81a83496b","impliedFormat":1},{"version":"cbe726263ae9a7bf32352380f7e8ab66ee25b3457137e316929269c19e18a2be","impliedFormat":1},{"version":"8b96046bf5fb0a815cba6b0880d9f97b7f3a93cf187e8dcfe8e2792e97f38f87","impliedFormat":99},{"version":"bacf2c84cf448b2cd02c717ad46c3d7fd530e0c91282888c923ad64810a4d511","affectsGlobalScope":true,"impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"38cb107048cd8ba54a70014ef9a30cf57bee0d9f10a0ca4cefa974056e1ee460","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"3cc8a3d123b6b232d48d34b51b785f9da8d193f5b5817fa521fcd2f3b9315c55","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"9a195d8476f48523446ece812e5450b5b1ec8c3b6abf99efb8ee2479524f6f56","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"354a7f8e1287d9d6b7561bc97fdd8cbc2f7c1dd79e4cb37b942e8a5cfaff1085","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"82e687ebd99518bc63ea04b0c3810fb6e50aa6942decd0ca6f7a56d9b9a212a6","impliedFormat":99},{"version":"7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","impliedFormat":1},{"version":"8f07f2b6514744ac96e51d7cb8518c0f4de319471237ea10cf688b8d0e9d0225","impliedFormat":1},{"version":"257b83faa134d971c738a6b9e4c47e59bb7b23274719d92197580dd662bfafc3","impliedFormat":99},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"26e0ffceb2198feb1ef460d5d14111c69ad07d44c5a67fd4bfeb74c969aa9afb","impliedFormat":99},{"version":"bd0e57158bd69732d3199a1d287435d52057e1687c760ae2c21af234b2ec7672","impliedFormat":99},"1bbeacb0504d9f820a9f48b83ed5a1a07cdbe5421bcd858b8aee3132253c200b",{"version":"7bad40dc76076678d55ac14ab5856aa608a84c1ae999434e80e1f70a5e3f6841","affectsGlobalScope":true,"impliedFormat":1},"e53acaa02df8a0ec6d7580932dd7610519b8f87613be9e41b1c36aa2159b8b13","7f04c61fe8ebb6c3723b411c9d8b708dd31d3eef4cfa1882cc9e2e0124a5a124",{"version":"4051f6311deb0ce6052329eeb1cd4b1b104378fe52f882f483130bea75f92197","impliedFormat":1},"89d612acc4f9ac92f4528f5e4fadd0ce00c7b084881e9d770781f673657f23b6","032f9efb08f8d179856e2a38e93961ff98a46fe193fb8676389a0d7c3d08d0f8",{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"40de86ced5175a6ffe84a52abe6ac59ac0efbc604a5975a8c6476c3ddc682ff1","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"5a0b15210129310cee9fa6af9200714bb4b12af4a04d890e15f34dbea1cf1852","impliedFormat":1},{"version":"0244119dbcbcf34faf3ffdae72dab1e9bc2bc9efc3c477b2240ffa94af3bca56","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},"514c39aa32102018b2027fb4a841764ef046608a3ca7257cb8ec9f35776fbc00","9ff0631d3303eb7e742acb6f7c011b20a30764f28ba202763b7107c33543712f",{"version":"2368a31d44ccc59758e3b3c682fee74e820b08fad98623905a85092018c06e3b","impliedFormat":99},"da4b7afbbfdf95882adbc260ebe7c4409364ab2b1ac98710d7c996c249182643","8748ffe2d1f3f44974377e318fedf123a3f2121486af1763e06562bd4c4a5e60","9e1fad3fba1b4622c974b1e333a2d43a7ff020a3f4c168c31578780b9906630c","f590d82a25c33c40fd25a45069b0d6df951d2b3766148c0dd81b6b39b9a64a0b","e61603ab6ae047fbd3755b6a675ad04eaae0fb9720f54845f4c473fba597651b","d7554541da7ddbd7625f6b2008c5338be1954aaf74ae479b657f58cce45642a6",{"version":"a2885552d05eef8f56b5cc6aa822deec70107daa6a283ecc2b517bc731057110","impliedFormat":1},{"version":"1b9fd1b4c71eeaa15c1a92e6a9794475720477635b5bac10515b118a8cf7b41c","impliedFormat":1},"5f698499d598e64ab9f42b155ff871b0cdeb768f07dc0724644c32aab8d53031","634fec30e5eee5101e0fbd22996c430db019634687d694584629fe0520905c39","eee26e17193cc014d1c2c96680fdcfecea7920343f5f37c9261ad970e9ebb800","ea43ebffb01f785682c229cd6a41b9baad824b4e3dfcc675693a183ed6a6a9a4","7145815e69cad4c4d8d5ec02f8a8e326ff7168efed477b26f1315f1e94fadf23","15b51ce40da7fadabe7c138931fdc2f47771d3ad8d7911a29ec7433eeacf61ea","380bafe427268fe8f82a7a5f983de4cd35b4647953d50a0d0f99e628c37c03d3","b1d92f237ce61bacdb45276fd8304f23c55bedc0432db6e7efb9f2eafb8ad365","9d6a89d19c554d569809df1621cfe6b9475bccbbad8cbdb45d611bbcc7531a46",{"version":"3d9241250ff79102e2eee92162852175846a82f759d53b1ed989cca72bca4f08","impliedFormat":1},"198cb2e66303919b6ac016b03b50122b9ccf1a9fa060a09780ead5caba132554","7e11b7c81f3aebe447adccf34e739e11b8480e9d0795a73096e3a567eb27f8b6","6f1da52075dc33087c2dce53b795af41710f6c1eafbb3436aece07f15daf7973","05a5e5e2432bbc30372c08a4f477a909fd2437f9d00c5f42fff94e65d1b87280","7cb0b77317ea0de925f97e3adab573044c33f645497e65ae3079e16c150369f2","0ab808f2310a9c741dfbe5f2cebdb2b2e4532468fc8beb4327c21a250ede545d","64cd6497f5ceb48759d22c8728accef31e3520594b306d15c4ecc26bd0d3f88f","093f20623b02b6d2966dc83f21fae6dce09fe78964f2cdd36ba87169ed8cf743","2362cbc1b5acda06d2ce7ac4df906caa5741377f0e00d1484e9917a973e9ce3a","be85856cc8f738689a9d08e6e58ab09cee68c0445a2006e1beec5bf3ce8912ce","6bbebb9ccf796f859acec98ecf7830d0044d1087d0aade0dfb7cd1ab39c9b96b","32ef0af788093a6fda3597fa80383190fd1d38d0ac4446b3e62423f55bda2829","cf35819046064d253b04b99217d4cde423c2570fa3206e5e28a42a2b8daffeae","7fdf190d0f484424cc848bd4343b6bb26cbe5f1c873e4f0c29754bf0c9bc8b06",{"version":"72c21a2ec6a19177a1de1340985f3a79f0d99435e2129132046714b2ba3026ac","impliedFormat":1},"d297702ace4b64395c58c129473d919c016a310e2dc54f8838397eaa91da9c6e",{"version":"2329508bb462ba8f17cc60c4ed5b346618a42eefcaaddcbb0fcbf7f09cfd0a87","impliedFormat":1},"ba6869428c1d850ae10aff358a9bb556de0322a0ac32bcabfa2b5ddc7322e782",{"version":"0378fac74bb9e31ea296e369b27857675ff9a62bf7037ab4fa6426277fd69d17","affectsGlobalScope":true},{"version":"4025a454b1ca489b179ee8c684bdd70ff8c1967e382076ade53e7e4653e1daec","affectsGlobalScope":true,"impliedFormat":1},{"version":"984c09345059b76fc4221c2c54e53511f4c27a0794dfd6e9f81dc60f0b564e05","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b6ae0eba583a0b1a12aee34811f324ee85b1c2423b5d674c59242a229e74440","affectsGlobalScope":true},{"version":"2efbc5086f10635b6507392c3d9d073e94d9308a5cf08af5ae4389c250d1791c","affectsGlobalScope":true,"impliedFormat":99}],"root":[222,224,225,227,228,242,243,[245,250],[253,261],[263,276],278,280,281,284],"options":{"composite":true,"esModuleInterop":true,"jsx":1,"module":99,"noImplicitAny":false,"noImplicitReturns":false,"noUnusedLocals":false,"noUnusedParameters":false,"skipLibCheck":true,"sourceMap":false,"strict":true,"target":99},"referencedMap":[[222,1],[216,2],[214,3],[279,4],[251,4],[219,5],[215,2],[217,6],[218,2],[182,3],[230,7],[231,8],[229,9],[232,10],[233,11],[234,12],[235,13],[236,14],[237,15],[238,16],[239,17],[240,18],[241,19],[131,20],[132,20],[133,21],[92,22],[134,23],[135,24],[136,25],[87,3],[90,26],[88,3],[89,3],[137,27],[138,28],[139,29],[140,30],[141,31],[142,32],[143,32],[144,33],[145,34],[146,35],[147,36],[93,3],[91,3],[148,37],[149,38],[150,39],[181,40],[151,41],[152,42],[153,43],[154,44],[155,45],[156,46],[157,47],[158,48],[159,49],[160,50],[161,50],[162,51],[163,52],[165,53],[164,54],[166,55],[167,56],[168,57],[169,58],[170,59],[171,60],[172,61],[173,62],[174,63],[175,64],[176,65],[177,66],[178,67],[94,3],[95,3],[96,3],[130,68],[179,69],[180,70],[220,71],[244,3],[97,3],[221,72],[285,73],[223,74],[189,3],[252,3],[277,75],[262,3],[226,3],[206,76],[204,77],[205,78],[193,79],[194,77],[201,80],[192,81],[197,82],[207,3],[198,83],[203,84],[209,85],[208,86],[191,87],[199,88],[200,89],[195,90],[202,76],[196,91],[184,92],[183,93],[190,3],[84,3],[85,3],[15,3],[13,3],[14,3],[19,3],[18,3],[2,3],[20,3],[21,3],[22,3],[23,3],[24,3],[25,3],[26,3],[27,3],[3,3],[28,3],[29,3],[4,3],[30,3],[34,3],[31,3],[32,3],[33,3],[35,3],[36,3],[37,3],[5,3],[38,3],[39,3],[40,3],[41,3],[6,3],[45,3],[42,3],[43,3],[44,3],[46,3],[7,3],[47,3],[52,3],[53,3],[48,3],[49,3],[50,3],[51,3],[8,3],[57,3],[54,3],[55,3],[56,3],[58,3],[9,3],[59,3],[60,3],[61,3],[63,3],[62,3],[64,3],[65,3],[10,3],[66,3],[67,3],[68,3],[11,3],[69,3],[70,3],[71,3],[72,3],[73,3],[1,3],[74,3],[75,3],[12,3],[79,3],[77,3],[82,3],[81,3],[86,3],[76,3],[80,3],[78,3],[83,3],[17,3],[16,3],[113,94],[120,95],[112,94],[127,96],[104,97],[103,98],[126,99],[121,100],[124,101],[106,102],[105,103],[101,104],[100,99],[123,105],[102,106],[107,107],[108,3],[111,107],[98,3],[129,108],[128,107],[115,109],[116,110],[118,111],[114,112],[117,113],[122,99],[109,114],[110,115],[119,116],[99,117],[125,118],[283,119],[213,120],[210,121],[188,122],[186,123],[185,3],[187,124],[211,3],[282,125],[212,126],[250,127],[261,128],[259,129],[272,130],[260,131],[273,132],[270,133],[257,134],[249,135],[258,136],[276,133],[263,137],[254,138],[268,139],[267,139],[266,139],[269,140],[255,141],[264,142],[265,143],[256,144],[274,145],[275,146],[242,147],[253,148],[271,149],[278,150],[280,151],[281,152],[224,153],[284,154],[243,153],[225,155],[248,153],[247,156],[245,135],[246,3],[228,157],[227,158]],"affectedFilesPendingEmit":[[222,17],[250,17],[261,17],[259,17],[272,17],[260,17],[273,17],[270,17],[257,17],[249,17],[258,17],[276,17],[263,17],[254,17],[268,17],[267,17],[266,17],[269,17],[255,17],[264,17],[265,17],[256,17],[274,17],[275,17],[242,17],[253,17],[271,17],[278,17],[280,17],[224,17],[243,17],[225,17],[248,17],[247,17],[245,17],[246,17],[228,17],[227,17]],"emitSignatures":[222,224,225,227,228,242,243,245,246,247,248,249,250,253,254,255,256,257,258,259,260,261,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,280],"version":"5.9.3"} \ No newline at end of file