diff --git a/package-lock.json b/package-lock.json index df32786..b9a1a50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,14 @@ "dependencies": { "@ckeditor/ckeditor5-build-classic": "^41.4.2", "@ckeditor/ckeditor5-react": "^11.0.0", + "@fortawesome/fontawesome-svg-core": "^7.1.0", + "@fortawesome/free-solid-svg-icons": "^7.1.0", + "@fortawesome/react-fontawesome": "^3.1.0", + "@fullcalendar/core": "^6.1.19", + "@fullcalendar/daygrid": "^6.1.19", + "@fullcalendar/interaction": "^6.1.19", + "@fullcalendar/react": "^6.1.19", + "@fullcalendar/timegrid": "^6.1.19", "@jitsi/react-sdk": "^1.4.0", "@sweetalert2/theme-dark": "^5.0.27", "@testing-library/dom": "^10.4.1", @@ -25,7 +33,7 @@ "bootstrap": "^5.3.8", "bootstrap-icons": "^1.13.1", "cors": "^2.8.5", - "dayjs": "^1.11.18", + "dayjs": "^1.11.19", "dotenv": "^17.2.3", "express": "^5.1.0", "firebase": "^12.5.0", @@ -49,6 +57,7 @@ "react-quill": "^2.0.0", "react-router-dom": "^7.9.2", "react-scripts": "5.0.1", + "react-toastify": "^11.0.5", "recharts": "^3.1.2", "sweetalert2": "^11.22.4", "tiptap": "^1.32.2", @@ -2538,56 +2547,56 @@ } }, "node_modules/@ckeditor/ckeditor5-alignment": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.1.0.tgz", - "integrity": "sha512-oE6PLT5MRBayw87jOv5DgR0p6TU7mX18MJkaGEz98vuLW3npo1GEdkBtw72+05FwkKr2QCCZUZpg12DTf9Mc/g==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.2.0.tgz", + "integrity": "sha512-lfcJAC8yJOQux3t33ikJrWRsZvywLr2zmU6mDR96SuCmeCyAN3UGXzCNa8kWPExpFGV01ZR61EZkjTah8LP2sQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-alignment/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-alignment/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-alignment/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -2596,13 +2605,13 @@ } }, "node_modules/@ckeditor/ckeditor5-alignment/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -3052,55 +3061,55 @@ } }, "node_modules/@ckeditor/ckeditor5-autosave": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.1.0.tgz", - "integrity": "sha512-3wjI/RNSgXZhG4RMTwl/LByaZyHLV+cixKN0hRqkjULj/i0H05A4Gu485v62FDwBlil1NhPTfKyrmiM/N/7n8g==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.2.0.tgz", + "integrity": "sha512-44nGL/M0qLURA1BEFkqZg6JzpjtvGyWJEluv728vb29JNQUGx0iNykjHBgtPX5s1Ztblx5ZwqFiuNiLkpmHptg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-autosave/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-autosave/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-autosave/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -3109,13 +3118,13 @@ } }, "node_modules/@ckeditor/ckeditor5-autosave/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -3977,112 +3986,112 @@ } }, "node_modules/@ckeditor/ckeditor5-bookmark": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.1.0.tgz", - "integrity": "sha512-B7Q0IzaN6iA80B3YkXihXo7gRad5TpKyhTI9x3XvbpCDzO+sBNyOEAy6d6CWmlhQsIZ6mn+hUn2q9N4nACybiw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.2.0.tgz", + "integrity": "sha512-FDFDZXm8MqktIt3x0WVrYFuXy9sxcCH31Cpa0/mV19lW8CzoCZCAfvXNzPWsz2eFo8qOsna2c/e55ax8OM/Ncg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-link": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-link": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-bookmark/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-bookmark/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-bookmark/node_modules/@ckeditor/ckeditor5-image": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.1.0.tgz", - "integrity": "sha512-BoVwiXD/l0yUxUsF9wLajo5p3b7TKamkKP7wAA/dkCUlWYzvzjQKwLwYoknNf3GgHLYuY5n6iRPvYQGvNsn6hg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.2.0.tgz", + "integrity": "sha512-XbXvRS++kFku0l7GABhsribmQTBC/SOAfimDNKjg5rayhAXCfovys7YmmU0eicydpo4//fAaa8zvDYc8uXWZGA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-undo": "47.1.0", - "@ckeditor/ckeditor5-upload": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-undo": "47.2.0", + "@ckeditor/ckeditor5-upload": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-bookmark/node_modules/@ckeditor/ckeditor5-link": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.1.0.tgz", - "integrity": "sha512-8XwnVPnp2GaNzcyXEahDYM8Qjh/qkU/R1VyjMh7EKSnlZOdget/jKXltNNwJpX0ofPMcY0CnvqGGF42gM3Tlcg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.2.0.tgz", + "integrity": "sha512-ijaF1Ic23FH9qulW2ZuaxecmdT0JuK/4XNkdaoRntloHiVZ/tFAu+o/6st/pDXfutDBmnEXwrNGVtzO/JTPhrw==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-image": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-image": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-bookmark/node_modules/@ckeditor/ckeditor5-typing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.1.0.tgz", - "integrity": "sha512-teg0UA6AWEMraXAsXYB8372ogIXfFaakOv6Vz8ppIsuKPZfHKJC5ixUd+oUzk03nv3QdtalQAALY8I8dnwl6dQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.2.0.tgz", + "integrity": "sha512-BDJLlaX9SHFUfZegOEW7ZeJ0o/TBgabINNxa3CwtGuGBLHUAQ3IAFJ0Cd6jHq12J2kRDwiXZzvvgMyCH7jeeUQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-bookmark/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -4091,13 +4100,13 @@ } }, "node_modules/@ckeditor/ckeditor5-bookmark/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -7147,57 +7156,57 @@ } }, "node_modules/@ckeditor/ckeditor5-clipboard": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.1.0.tgz", - "integrity": "sha512-xxF9TuV6pWfos1okaS20CFTQN1CD3lOSyZXIJ/IodznpF7f9GYzhhvyOYXJO5fH6T8F0BbR5P94gon8QnAMivg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.2.0.tgz", + "integrity": "sha512-x/ehXk+ga5tnumA8TenrZRU684DvpzzhTLfZScRxX3/3BJPYlFp7BWx60KJPQHKXYgb+I0qkQrgxuBXp83ed2g==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-clipboard/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-clipboard/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-clipboard/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -7206,13 +7215,13 @@ } }, "node_modules/@ckeditor/ckeditor5-clipboard/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -7662,59 +7671,59 @@ } }, "node_modules/@ckeditor/ckeditor5-code-block": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.1.0.tgz", - "integrity": "sha512-FGQD/B5BXHesqgijjBV3wm4tBDNKMjGodsTPjW++NkezgBgzOWdBnl6svpMns+xjtEVFnhkjA9hQt6vbHevJmA==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.2.0.tgz", + "integrity": "sha512-8SH10L7i+wirkouDmg4MdBN4R3AZDyutsuSCwDPALoKSHQs7KlYB+8TJxcejt/dSBd0JWgrBi7rVu9Arkk3I1A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-code-block/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-code-block/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-code-block/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -7723,13 +7732,13 @@ } }, "node_modules/@ckeditor/ckeditor5-code-block/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -8190,57 +8199,57 @@ } }, "node_modules/@ckeditor/ckeditor5-editor-balloon": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.1.0.tgz", - "integrity": "sha512-M/d8zWQgGbtQPKAyYOBZdEeDBaQXiXmwUIi1rMULL7IGxQDvfHAHB6T7mu3GU39oay0HkM+LGWnz5GZ8oG7HNw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.2.0.tgz", + "integrity": "sha512-szIx59pnw6kgxYuAyqecMnSlwtwWu2q23XV4TpKF/V3NlHs9ZeIFusTX3icO8JLQR4ExsYa0bsYpabGdZdx2Ug==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-balloon/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-balloon/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-balloon/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -8249,13 +8258,13 @@ } }, "node_modules/@ckeditor/ckeditor5-editor-balloon/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -8706,57 +8715,57 @@ } }, "node_modules/@ckeditor/ckeditor5-editor-decoupled": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.1.0.tgz", - "integrity": "sha512-rqTmzMot1rjCz3cqtQkVRou8RgVFItRXeCNY0Ljg3aLcAaNcbwYSYSeJtQpMoyhasSh3cCUqyG9PRnfNYpzTNQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.2.0.tgz", + "integrity": "sha512-h1Yw6/XHeEe5aW/4VV0njAGe5nsuIBkARCun039noA+b2bq+Qb9bAExzaSHULf7nZW4HHVJMcYvb2HwcX8MZ6g==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-decoupled/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-decoupled/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-decoupled/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -8765,13 +8774,13 @@ } }, "node_modules/@ckeditor/ckeditor5-editor-decoupled/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -8809,57 +8818,57 @@ } }, "node_modules/@ckeditor/ckeditor5-editor-inline": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.1.0.tgz", - "integrity": "sha512-By4mi4p7oReWx8SAyUtq7cIhF1BH63DABJLbj7kaT3MsFlMXOp4FheZpGEMFJbOt8jKx9Du1EU/PFWlUeNoPLw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.2.0.tgz", + "integrity": "sha512-6kGG8Q4ggOim7KU/J3iMvmf5/faNjYL/ucg2RPMvzhH/eTqlZBlMdDid86b0YAW0fbKPvIIACifoOBHIGlcZyA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-inline/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-inline/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-inline/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -8868,13 +8877,13 @@ } }, "node_modules/@ckeditor/ckeditor5-editor-inline/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -8912,57 +8921,57 @@ } }, "node_modules/@ckeditor/ckeditor5-editor-multi-root": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.1.0.tgz", - "integrity": "sha512-BjAOWtAOg8g1E8WJoRj73RoRpyTb1nLtHU2AgxLlaYubGcXfokVvyPz4VU2cDTUq3Zg6chjPeRw74ybLmI2LBg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.2.0.tgz", + "integrity": "sha512-bIkPzkpLGznNnDLAuSkVNP+LfICLbUj80IdkVLB9KeXnuZ1WKYkLqBGfDv6y70iJnANAiiP6Z8EaucBNzfjS7g==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-multi-root/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-multi-root/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-editor-multi-root/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -8971,13 +8980,13 @@ } }, "node_modules/@ckeditor/ckeditor5-editor-multi-root/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -9015,73 +9024,73 @@ } }, "node_modules/@ckeditor/ckeditor5-emoji": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.1.0.tgz", - "integrity": "sha512-8Kicj1md0PfdGtlUxK0kTrLJncYnrhj7OzVqen42ygxiU3PrZrdSApDBg0a8DVb0Skvjb2GhOcBCN7UZptK7LQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.2.0.tgz", + "integrity": "sha512-pS1G0QVFOK2Z+BLrVmm6pVjFZRpkC95YgQeASuuIySLZBllYD3+tlys2lPt3el5PAd0IQB7s85XuTdbCXDFr6A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-mention": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-mention": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5", "fuzzysort": "3.1.0" } }, "node_modules/@ckeditor/ckeditor5-emoji/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-emoji/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-emoji/node_modules/@ckeditor/ckeditor5-typing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.1.0.tgz", - "integrity": "sha512-teg0UA6AWEMraXAsXYB8372ogIXfFaakOv6Vz8ppIsuKPZfHKJC5ixUd+oUzk03nv3QdtalQAALY8I8dnwl6dQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.2.0.tgz", + "integrity": "sha512-BDJLlaX9SHFUfZegOEW7ZeJ0o/TBgabINNxa3CwtGuGBLHUAQ3IAFJ0Cd6jHq12J2kRDwiXZzvvgMyCH7jeeUQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-emoji/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -9090,13 +9099,13 @@ } }, "node_modules/@ckeditor/ckeditor5-emoji/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -9144,54 +9153,54 @@ } }, "node_modules/@ckeditor/ckeditor5-enter": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.1.0.tgz", - "integrity": "sha512-Vkm4rPCTrimJ3LcdPPXQZc86Wb920kish6ckXTSkoPPAe9Ef2fVlKZYggWrXBI4VZ6tegTepSFpZiMqa1/a00w==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.2.0.tgz", + "integrity": "sha512-7ZHfrxDSs55IXgs5yAX6Nl8COY1dqefZ5HiWT/UM0cOP/4aMffp5I1yYYP7NVfBkTW9DlUoeAkHFTv2miTwclQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-enter/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-enter/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-enter/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -9200,13 +9209,13 @@ } }, "node_modules/@ckeditor/ckeditor5-enter/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -9656,57 +9665,57 @@ } }, "node_modules/@ckeditor/ckeditor5-find-and-replace": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.1.0.tgz", - "integrity": "sha512-H3c69XM7fLdlnt20gdNSU1fMwA+1yYfboFWQ07PlA8M/D9H7ZKUmBlI846flSssFp1kPLGhPDTryun6c7zERPg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.2.0.tgz", + "integrity": "sha512-34Uzpbxi+/eJx/0CR9/T92wDaw67KLaYcm39+RY4OUCxC9EywEFruIJEg/M/Xu4iTVjdVKbpQ3ovGBuciiL1vQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-find-and-replace/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-find-and-replace/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-find-and-replace/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -9715,13 +9724,13 @@ } }, "node_modules/@ckeditor/ckeditor5-find-and-replace/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -9759,57 +9768,57 @@ } }, "node_modules/@ckeditor/ckeditor5-font": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.1.0.tgz", - "integrity": "sha512-QiKlsqbcMAAlVAoxrBBxe062adBfTfTKHBLJ/VbBMBYszYaWNoG5VJKLQbXnKBVGWD07rE7rXa/vnenCvpT8hQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.2.0.tgz", + "integrity": "sha512-X/AYeNHc3Hibd56OfPwOEdYRIGX3eWtGQ/qIAEVkS2xCEDPhM0fTHpLTEpDsMukw9NRAqmhnQHIp2amGaOwY8g==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-font/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-font/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-font/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -9818,13 +9827,13 @@ } }, "node_modules/@ckeditor/ckeditor5-font/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -9862,73 +9871,73 @@ } }, "node_modules/@ckeditor/ckeditor5-fullscreen": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.1.0.tgz", - "integrity": "sha512-LSC62HAW2cmThX2bJOPXcUrxy3sULGStj5G//PdTuxz1z6WbPbF4xst1ockHmaRJeoJUcdt89Qv7C0WFl3j4lw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.2.0.tgz", + "integrity": "sha512-Kf//0eQIuslGNVSbNkHXBELn/jZT+OsTIeo8PulZEbVI5do0vB/52w0F40rhgk8EudlGTxEmMOi0x/jrdR0MHg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-classic": "47.1.0", - "@ckeditor/ckeditor5-editor-decoupled": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-classic": "47.2.0", + "@ckeditor/ckeditor5-editor-decoupled": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-fullscreen/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-fullscreen/node_modules/@ckeditor/ckeditor5-editor-classic": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.1.0.tgz", - "integrity": "sha512-x4aegRral5LTV1kURmjnp/tLSE1nttH+MsVkrVLWJd0j2A0qj88BLSccmY71ybFgMcDKlwJD6kVT0ZNKsvRogw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.2.0.tgz", + "integrity": "sha512-fYy4RKmvM4kYvUgCRuBdUqVLE8ts1Kj4q1Caaq5VZyBudmaj/RZqQBSdiu5pZgKMdj1oMaIQ5Gextg96iJ3LTw==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-fullscreen/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-fullscreen/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -9937,13 +9946,13 @@ } }, "node_modules/@ckeditor/ckeditor5-fullscreen/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -10393,56 +10402,56 @@ } }, "node_modules/@ckeditor/ckeditor5-highlight": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.1.0.tgz", - "integrity": "sha512-K5sO/etY+Nh67r3dsXArPWI5UjOGKQdbS4k5AU30m0vCK9IfGO9BLCUzBnxo6JM91lfOhY96yCqg3zaOU/C0wg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.2.0.tgz", + "integrity": "sha512-Fp59HRybXJpJl/DtliMTjiVrIA95jmm0SptvXtIucD0hdP9ZX6TOFPTzrRl29LZGITNuYDulPqvNTpFoechRmQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-highlight/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-highlight/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-highlight/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -10451,13 +10460,13 @@ } }, "node_modules/@ckeditor/ckeditor5-highlight/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -10495,57 +10504,57 @@ } }, "node_modules/@ckeditor/ckeditor5-horizontal-line": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.1.0.tgz", - "integrity": "sha512-ex+g4L0QvteKHtXGJXMu72wjCrMhQw+mEBWLZm20jLeaPf0eSkQ34ilTRFGwZTw/zfgqy69vMTbVV/SIDiYxvg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.2.0.tgz", + "integrity": "sha512-/DHVMhI9vNs/NI+NQBbUXdzsXHj9hGKihtNDmbV5UP3Hy7l32Gv8k9nJVnBlDbBbHI6Wpxjj6GUxAiLZ46mc1Q==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-horizontal-line/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-horizontal-line/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-horizontal-line/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -10554,13 +10563,13 @@ } }, "node_modules/@ckeditor/ckeditor5-horizontal-line/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -10598,57 +10607,57 @@ } }, "node_modules/@ckeditor/ckeditor5-html-embed": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.1.0.tgz", - "integrity": "sha512-HMfnHzSRrpKDealBWtq3cpvRGZuODBssw7f1paQxML2W/pRLd6eSb/Rc9a0O3DB2/NhXq8Bbl9aDv9ungz+SLg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.2.0.tgz", + "integrity": "sha512-VhI789/KDKmQhz9nQqq64odOtLpwjJbPQ/Pf54J2d7AGDvbuNVkjAMVdj5xXXzb/nXdys6zM8lPQZfQGI/Ya8A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-html-embed/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-html-embed/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-html-embed/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -10657,13 +10666,13 @@ } }, "node_modules/@ckeditor/ckeditor5-html-embed/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -10701,164 +10710,164 @@ } }, "node_modules/@ckeditor/ckeditor5-html-support": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.1.0.tgz", - "integrity": "sha512-TBnmlJ1JjMO973Q4A/e+UEv99CMhBezUAdLKqQ3+EztivTEeEb6YV+pmli8HPf7n0DI6UbkU0Kj/mdFUNiIzog==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.2.0.tgz", + "integrity": "sha512-IwaFBdv0qQQXfnA1LHL2BVQoioNJa9T8NIKDq2OG3mXg02jJvhJl84QADJ0ro36igjKsyfttsl8lM1pf00XAhA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-heading": "47.1.0", - "@ckeditor/ckeditor5-image": "47.1.0", - "@ckeditor/ckeditor5-list": "47.1.0", - "@ckeditor/ckeditor5-remove-format": "47.1.0", - "@ckeditor/ckeditor5-table": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-heading": "47.2.0", + "@ckeditor/ckeditor5-image": "47.2.0", + "@ckeditor/ckeditor5-list": "47.2.0", + "@ckeditor/ckeditor5-remove-format": "47.2.0", + "@ckeditor/ckeditor5-table": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-heading": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.1.0.tgz", - "integrity": "sha512-HD+mWG5W5kk5fE2G9TFP/ktiU1CU8sA6mOyO6epd+0nsSwacTynKJkszgTVsd9HeY6wZopdqTHa1Dun/9wsxPA==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.2.0.tgz", + "integrity": "sha512-m1zSERVh7gdVXwLLYgcAsy7lkIOuadmA5YuwyPpR/g3oa0j1gcuNm5y/73MTOPflPUn0g0Y9DzocF2G1WY2NiQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-paragraph": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-paragraph": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-image": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.1.0.tgz", - "integrity": "sha512-BoVwiXD/l0yUxUsF9wLajo5p3b7TKamkKP7wAA/dkCUlWYzvzjQKwLwYoknNf3GgHLYuY5n6iRPvYQGvNsn6hg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.2.0.tgz", + "integrity": "sha512-XbXvRS++kFku0l7GABhsribmQTBC/SOAfimDNKjg5rayhAXCfovys7YmmU0eicydpo4//fAaa8zvDYc8uXWZGA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-undo": "47.1.0", - "@ckeditor/ckeditor5-upload": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-undo": "47.2.0", + "@ckeditor/ckeditor5-upload": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-list": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.1.0.tgz", - "integrity": "sha512-P18ZXzJcAGoA6+nIoXkZ27/Ny80HCcrH36ay1MwSxsuQKO8S894kEZb+QS/HvePsX2tso+bQsWw4WWBzbLfP2g==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.2.0.tgz", + "integrity": "sha512-PDjTQLn2CqrZ4XuAAJWY2vA5bkVu8UHKQZa1+ddfS4FbvfF2QR3eDX5axywpuaCb2Dm2ZQoqxpA5GQmt1fUehg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-font": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-font": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-paragraph": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.1.0.tgz", - "integrity": "sha512-B1tY1+kEncLFrGoD3YkpJIMNFSQvB4t8SVSei6+upD3YGkyf/VhmtYlnqBLRK2znQTlg76EJJcWlGv9zCJ9edw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.2.0.tgz", + "integrity": "sha512-x6nqRQjlAcOhirOE9umNdK8WckWcz7JPVU7IlPTzlrVAYCq+wiz6rgpuh4COUHnee4c31fF21On+OVyqgu7JvQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-table": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.1.0.tgz", - "integrity": "sha512-49g66He4BFzfh/8m23BBhfxk/0FnJnEZ07SiQBWdAMfZSFubTz0/tCm38imf79h4bawUcaLSGP+UJBc6x/gg4w==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.2.0.tgz", + "integrity": "sha512-zxNHpl4L7HsOLCYiKrbyyHoM2dMGetgP4eTjYyWfn9gf+ydVs7o+LJVN5bsWt3J4ToamCj5G7VHZUmqUcPbN6A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-typing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.1.0.tgz", - "integrity": "sha512-teg0UA6AWEMraXAsXYB8372ogIXfFaakOv6Vz8ppIsuKPZfHKJC5ixUd+oUzk03nv3QdtalQAALY8I8dnwl6dQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.2.0.tgz", + "integrity": "sha512-BDJLlaX9SHFUfZegOEW7ZeJ0o/TBgabINNxa3CwtGuGBLHUAQ3IAFJ0Cd6jHq12J2kRDwiXZzvvgMyCH7jeeUQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -10867,13 +10876,13 @@ } }, "node_modules/@ckeditor/ckeditor5-html-support/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -10911,9 +10920,9 @@ } }, "node_modules/@ckeditor/ckeditor5-icons": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.1.0.tgz", - "integrity": "sha512-2tlGXuQrXiQFxb2U+67kzlkl4/4IlDEt6R+sPQnP+QR7wJNXQnK9zk4M2bc30r91/91iuCjx+AIzKerm0VwFJg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.2.0.tgz", + "integrity": "sha512-9rxAWNQEjZBHyMBQ8XXwfa+ubPBzQntd+nkWBAGTK6ddqHZIaQLsiLrUAdR5tyKKK9tnTkwyx1jycGRspZnoxw==", "license": "SEE LICENSE IN LICENSE.md", "peer": true }, @@ -11756,55 +11765,55 @@ } }, "node_modules/@ckeditor/ckeditor5-language": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.1.0.tgz", - "integrity": "sha512-nZJlfefKtf0sWvyQdTB361mQMSGSlYj2WbHV3gpabkgkE/ZCbL/Tr5aCJ2ulQo2/ksL2s7nDHFIWu8UUEeVhbw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.2.0.tgz", + "integrity": "sha512-kc5MqQnvQtUPuvRJfdqXHQZNQyHVy/ZZv5laPY1AKrsKqc5SJO4y3v//4yHvdn45V4QKLwMOy4yC365Sdq0UpA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-language/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-language/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-language/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -11813,13 +11822,13 @@ } }, "node_modules/@ckeditor/ckeditor5-language/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -12683,17 +12692,17 @@ } }, "node_modules/@ckeditor/ckeditor5-markdown-gfm": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.1.0.tgz", - "integrity": "sha512-oZh2sUX7VvI24ijosvilRqfrRkmUYdDaKdKxDfH8OBKiLnCPOccAhOMVy2LSBY1yvEEIUe2yq79nTC3i0uUkdg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.2.0.tgz", + "integrity": "sha512-mt47/GMxrsAL3u/aBjOuH5ETSLH0knoYJpchYb7sXzIuQlY7xPqvcONyD9700TAN30FV7qpOVKUqI7tRyLL5uA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", "@types/hast": "3.0.4", - "ckeditor5": "47.1.0", + "ckeditor5": "47.2.0", "hast-util-from-dom": "5.0.1", "hast-util-to-html": "9.0.5", "hast-util-to-mdast": "10.1.2", @@ -12711,42 +12720,42 @@ } }, "node_modules/@ckeditor/ckeditor5-markdown-gfm/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-markdown-gfm/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-markdown-gfm/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -12755,13 +12764,13 @@ } }, "node_modules/@ckeditor/ckeditor5-markdown-gfm/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -13212,70 +13221,70 @@ } }, "node_modules/@ckeditor/ckeditor5-mention": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.1.0.tgz", - "integrity": "sha512-5Bsf9224WU/ORVoOZnWWqaGA06DTs/+VLQvZhu5qmh17zL1o/JpSA0SrS9mQcf2StCW4HhX89MZhFSLb+2oOvQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.2.0.tgz", + "integrity": "sha512-ZPvVwEQxcCUI0SvJa28JUULww/SCXiiZpfnMtaneMxsIOqesAFxPqMXA9HkyLotikuK1sezu5XzgJ2S5gdqw3A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-mention/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-mention/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-mention/node_modules/@ckeditor/ckeditor5-typing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.1.0.tgz", - "integrity": "sha512-teg0UA6AWEMraXAsXYB8372ogIXfFaakOv6Vz8ppIsuKPZfHKJC5ixUd+oUzk03nv3QdtalQAALY8I8dnwl6dQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.2.0.tgz", + "integrity": "sha512-BDJLlaX9SHFUfZegOEW7ZeJ0o/TBgabINNxa3CwtGuGBLHUAQ3IAFJ0Cd6jHq12J2kRDwiXZzvvgMyCH7jeeUQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-mention/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -13284,13 +13293,13 @@ } }, "node_modules/@ckeditor/ckeditor5-mention/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -13328,56 +13337,56 @@ } }, "node_modules/@ckeditor/ckeditor5-minimap": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.1.0.tgz", - "integrity": "sha512-fh3f0WTrULjd8rm/VWhVem/VYJgPjf+h+Zrnu8MeX0DHqRsNINdIUHNtYk2wUbIzQSgGtIVktK0LhLlN/XxRTA==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.2.0.tgz", + "integrity": "sha512-Th6HspywP3JeGBMRUmpAuIyFa8XtrpMiGdsjazlKcHaitT6bHBTzaTjaWVnOuVY3gBdFAKsalv2ZEk8vIPqkhg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-minimap/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-minimap/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-minimap/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -13386,13 +13395,13 @@ } }, "node_modules/@ckeditor/ckeditor5-minimap/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -13430,57 +13439,57 @@ } }, "node_modules/@ckeditor/ckeditor5-page-break": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.1.0.tgz", - "integrity": "sha512-PrCugSPny2icLp/ZKx1r6mkgtP1jJmc+kB4w56Dsmgf1ZorWniI53wmemaTDhIgGwnNfO9CjYdSy8Vb4vyB1ZA==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.2.0.tgz", + "integrity": "sha512-DosfUorg3wZ3a6yM/ymsJQ1E2Rbqi08RFOQ4oQLPPAi2VRdTLt0BiqQPFMKJmy2T2k5K4TLc7bs0s3E96aQyXg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-page-break/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-page-break/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-page-break/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -13489,13 +13498,13 @@ } }, "node_modules/@ckeditor/ckeditor5-page-break/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -13969,56 +13978,56 @@ } }, "node_modules/@ckeditor/ckeditor5-remove-format": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.1.0.tgz", - "integrity": "sha512-JShEW29roO0PyQKBCDUS6cACGuYWxnUhCRcBt+DFUhS5t51XPpDXasdYfGfeUJ9DeNL/0iPjKtQxcGUoMa5NtQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.2.0.tgz", + "integrity": "sha512-CRWs7Osok8k3Oi2N7RvA12ECxi47wIyrDTsJ3lJYo8zDIbZdOXlv5o+In+mbsZ7lzNKLhKMAgRcF/PrGWcAaUg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-remove-format/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-remove-format/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-remove-format/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -14027,13 +14036,13 @@ } }, "node_modules/@ckeditor/ckeditor5-remove-format/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -14071,57 +14080,57 @@ } }, "node_modules/@ckeditor/ckeditor5-restricted-editing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.1.0.tgz", - "integrity": "sha512-vEBZKc3vkvFKOVfPn56Wl76YPCn73QmkkUMLGN2tf2ntvSoVEmlk+HTWaXYRG8bsbj2JtdijgW3wckCvNRW8ow==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.2.0.tgz", + "integrity": "sha512-ziFgoZCHaHzzrLeQ6XIlrcEazoGF6IC2+qzxGnO1A1NKY/8WVLmokKFLmUgDMnPLrhvz5Qqldj0dSS2pKhj6QQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-restricted-editing/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-restricted-editing/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-restricted-editing/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -14130,13 +14139,13 @@ } }, "node_modules/@ckeditor/ckeditor5-restricted-editing/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -14174,56 +14183,56 @@ } }, "node_modules/@ckeditor/ckeditor5-select-all": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.1.0.tgz", - "integrity": "sha512-3k7TgWjcx7FFm0t6bS8Uc6YOhqehf815SsmtFN+JISoL9Ojm1yqLEUOOYuYPy0Voed70Mk2HBQvdEnuP9m6X1g==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.2.0.tgz", + "integrity": "sha512-4kswe9jmKp6y1hTwWfJBxF8XuX1pgZxraAlm+ugJLhjsus/vGBVXBFNN7kH+RoNxC6tf1ZXly69dGTG4P/nXrg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-select-all/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-select-all/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-select-all/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -14232,13 +14241,13 @@ } }, "node_modules/@ckeditor/ckeditor5-select-all/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -14276,56 +14285,56 @@ } }, "node_modules/@ckeditor/ckeditor5-show-blocks": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.1.0.tgz", - "integrity": "sha512-8ogD671z7j2DwlOa1W0KX7jcorTHbrLxqLYtiCeJljJv/sfHMtzfXc8PL81eiKDfSZwoNY2k5pwTWPyv30MRAg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.2.0.tgz", + "integrity": "sha512-eIzvA5zQEWNGVXhkCTYVfw32tpsFEx4nTPAVpsFEv0hb1sAMaOv5fIoFmwcx/C8CmN9sBiZtuovXGM5i/pwoTQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-show-blocks/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-show-blocks/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-show-blocks/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -14334,13 +14343,13 @@ } }, "node_modules/@ckeditor/ckeditor5-show-blocks/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -14378,57 +14387,57 @@ } }, "node_modules/@ckeditor/ckeditor5-source-editing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.1.0.tgz", - "integrity": "sha512-/UzbN04b3gK4FdY9nS6bdmh1KlkhHTOglCnvKDlx6XvC+E6qW2OzfU7D1b/k7sINSmVRGkt5L2NuZCHeAgX2/Q==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.2.0.tgz", + "integrity": "sha512-B82fbUiTBWYR3XTfUk/30Hsk9PAmPkmraKNJKGDoch0NXduPz8ehpCwbnrJdIvm7pozbgB11RjWzq56VcBX2Qw==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-theme-lark": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-theme-lark": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-source-editing/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-source-editing/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-source-editing/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -14437,13 +14446,13 @@ } }, "node_modules/@ckeditor/ckeditor5-source-editing/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -14481,70 +14490,70 @@ } }, "node_modules/@ckeditor/ckeditor5-special-characters": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.1.0.tgz", - "integrity": "sha512-r/FW9Xz589nLcr5pXOyhCPNLQp7XkjR17PgHTgJcQmJuEo396UTvoPz7eBfGkCDMjINmZj1cTNdJSL7/Xpqk5g==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.2.0.tgz", + "integrity": "sha512-aH1E1SEMRUF6gMdqPuFeDZvZRCUNJ/n8RWwXHFicsJArYDGOiATxVZQZbwk50duAsWcxxj0uTSHGwFXBL9evyQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-special-characters/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-special-characters/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-special-characters/node_modules/@ckeditor/ckeditor5-typing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.1.0.tgz", - "integrity": "sha512-teg0UA6AWEMraXAsXYB8372ogIXfFaakOv6Vz8ppIsuKPZfHKJC5ixUd+oUzk03nv3QdtalQAALY8I8dnwl6dQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.2.0.tgz", + "integrity": "sha512-BDJLlaX9SHFUfZegOEW7ZeJ0o/TBgabINNxa3CwtGuGBLHUAQ3IAFJ0Cd6jHq12J2kRDwiXZzvvgMyCH7jeeUQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-special-characters/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -14553,13 +14562,13 @@ } }, "node_modules/@ckeditor/ckeditor5-special-characters/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -14597,110 +14606,110 @@ } }, "node_modules/@ckeditor/ckeditor5-style": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.1.0.tgz", - "integrity": "sha512-Mt40tqRfgebkbHVXq+8nD19gyIsNgnITiQoT+tFZynSlQieaifDo+9D3Aq70KdrxlHW4Muw5ryYe14Xy7Y+rwA==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.2.0.tgz", + "integrity": "sha512-XAIl8oNHpFxTRbGIE+2vpKLgrP3VnknUTyasvL/HeS3iUHKLDRlh9d3ghozhuUqQaF5rnkzUQEBv/fv+4u3Y7A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-html-support": "47.1.0", - "@ckeditor/ckeditor5-list": "47.1.0", - "@ckeditor/ckeditor5-table": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-html-support": "47.2.0", + "@ckeditor/ckeditor5-list": "47.2.0", + "@ckeditor/ckeditor5-table": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-style/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-style/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-style/node_modules/@ckeditor/ckeditor5-list": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.1.0.tgz", - "integrity": "sha512-P18ZXzJcAGoA6+nIoXkZ27/Ny80HCcrH36ay1MwSxsuQKO8S894kEZb+QS/HvePsX2tso+bQsWw4WWBzbLfP2g==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.2.0.tgz", + "integrity": "sha512-PDjTQLn2CqrZ4XuAAJWY2vA5bkVu8UHKQZa1+ddfS4FbvfF2QR3eDX5axywpuaCb2Dm2ZQoqxpA5GQmt1fUehg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-font": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-font": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-style/node_modules/@ckeditor/ckeditor5-table": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.1.0.tgz", - "integrity": "sha512-49g66He4BFzfh/8m23BBhfxk/0FnJnEZ07SiQBWdAMfZSFubTz0/tCm38imf79h4bawUcaLSGP+UJBc6x/gg4w==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.2.0.tgz", + "integrity": "sha512-zxNHpl4L7HsOLCYiKrbyyHoM2dMGetgP4eTjYyWfn9gf+ydVs7o+LJVN5bsWt3J4ToamCj5G7VHZUmqUcPbN6A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-style/node_modules/@ckeditor/ckeditor5-typing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.1.0.tgz", - "integrity": "sha512-teg0UA6AWEMraXAsXYB8372ogIXfFaakOv6Vz8ppIsuKPZfHKJC5ixUd+oUzk03nv3QdtalQAALY8I8dnwl6dQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.2.0.tgz", + "integrity": "sha512-BDJLlaX9SHFUfZegOEW7ZeJ0o/TBgabINNxa3CwtGuGBLHUAQ3IAFJ0Cd6jHq12J2kRDwiXZzvvgMyCH7jeeUQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-style/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -14709,13 +14718,13 @@ } }, "node_modules/@ckeditor/ckeditor5-style/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -15167,52 +15176,52 @@ } }, "node_modules/@ckeditor/ckeditor5-theme-lark": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.1.0.tgz", - "integrity": "sha512-gUAPApFbsViLKGgwHtCLigBYziFUmXDBa9UFmZUNSTZPWpTz/uxOOhwjrQvGqwAH/0W9pKR5TsxWaE2sJZaJPQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.2.0.tgz", + "integrity": "sha512-5Guefuo+Nllq4FMaFnLJlU/fICy2IQYw3T+0PTYjFqd59xTx6suwjv2ou41HKPfJ1b6NCbmkbhuaC59lGIfBtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0" + "@ckeditor/ckeditor5-ui": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-theme-lark/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-theme-lark/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-theme-lark/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -15221,13 +15230,13 @@ } }, "node_modules/@ckeditor/ckeditor5-theme-lark/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -15291,56 +15300,56 @@ } }, "node_modules/@ckeditor/ckeditor5-undo": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.1.0.tgz", - "integrity": "sha512-e+GyEZLlx2LhHbaegWri3p1zgX6fjvQH7fzmFG2NZ5h1bgbsCW/+vHv5/r9cwU2/SudJqOeoQRXGQ8PHBp6/ZA==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.2.0.tgz", + "integrity": "sha512-smq5O3GdqJXB+9o54BTn/LyB52OHiW9ekzacOuMNxtuA/KBwHpdsPFMcGFGH04W9O0qUtSdt3fYC0i+SJjYAww==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-undo/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-undo/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-undo/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -15349,13 +15358,13 @@ } }, "node_modules/@ckeditor/ckeditor5-undo/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -15393,53 +15402,53 @@ } }, "node_modules/@ckeditor/ckeditor5-upload": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.1.0.tgz", - "integrity": "sha512-JP6Ao5xbNPoxKv4zWgYbVBA6u8CmOSkvLYp+P3+i4MCcwva4NH/dKwJL+Wqk8XxZ8eavhXNgMGs22Oqq2v18/Q==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.2.0.tgz", + "integrity": "sha512-uE4FwVtmJ6UACDC9N+H6HHGhlpAF8Fk2QCF/iBboh4VqhlFbFjMbXCAbsWrDik6C/p9r4Iv+IEmbpjsRTD+9SQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0" } }, "node_modules/@ckeditor/ckeditor5-upload/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-upload/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-upload/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -15448,13 +15457,13 @@ } }, "node_modules/@ckeditor/ckeditor5-upload/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -15501,56 +15510,56 @@ } }, "node_modules/@ckeditor/ckeditor5-watchdog": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.1.0.tgz", - "integrity": "sha512-3cK0GKi8Et3dHln1E36Wmk30SzgLd2dgWDGaNUvfygQT9hBeKnWZ//cp/ZlBwbfEwJth/jAlcXUHsFR9T2Uwjw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.2.0.tgz", + "integrity": "sha512-C1AT7OqLBkPCUm4pjJe4n64qj+5vvMdQb2+lLMSz0SMsBqmYFrVYMlZWW4LjpaYUAYEmvTPcyDoqukBKRWNrRQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-watchdog/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-watchdog/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-watchdog/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -15559,13 +15568,13 @@ } }, "node_modules/@ckeditor/ckeditor5-watchdog/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -15603,72 +15612,72 @@ } }, "node_modules/@ckeditor/ckeditor5-widget": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.1.0.tgz", - "integrity": "sha512-S04Ry1eVMyLV7yyc8bpmAY/7/bmD8FsrV5Gfk3ftL+voJi0+3B1WmptOcpkyiCC5PbbgjNX3f0NPYufEjjPNtQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.2.0.tgz", + "integrity": "sha512-1vhfdeVPNc6UtCPAC+aKDNIi0EDxpAJ7TudepJVLXnS752V5rnArjPrYBfH6dkpHYV920CuxxsoS1sSuVVMrkA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-widget/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-widget/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-widget/node_modules/@ckeditor/ckeditor5-typing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.1.0.tgz", - "integrity": "sha512-teg0UA6AWEMraXAsXYB8372ogIXfFaakOv6Vz8ppIsuKPZfHKJC5ixUd+oUzk03nv3QdtalQAALY8I8dnwl6dQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.2.0.tgz", + "integrity": "sha512-BDJLlaX9SHFUfZegOEW7ZeJ0o/TBgabINNxa3CwtGuGBLHUAQ3IAFJ0Cd6jHq12J2kRDwiXZzvvgMyCH7jeeUQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-widget/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -15677,13 +15686,13 @@ } }, "node_modules/@ckeditor/ckeditor5-widget/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -15721,56 +15730,56 @@ } }, "node_modules/@ckeditor/ckeditor5-word-count": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.1.0.tgz", - "integrity": "sha512-e9sx/EUONwbdZFGU6bcJmrLMw18Fugecs3LiMQVVoVrFpMEywPhzzeRZUN6XX70qPXWHkDRQRnNSQXqhJ2lpxg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.2.0.tgz", + "integrity": "sha512-1ouy59G1Qxf6hTRnW9tSL7Xjsx8kGfTJvrH9mZWGIpmNo0pIM6Ts96U/qgr5RB0LbhYtqhbDq87F9QjMcfYUjQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-word-count/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-word-count/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/@ckeditor/ckeditor5-word-count/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -15779,13 +15788,13 @@ } }, "node_modules/@ckeditor/ckeditor5-word-count/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -16821,6 +16830,102 @@ "license": "MIT", "optional": true }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-7.1.0.tgz", + "integrity": "sha512-l/BQM7fYntsCI//du+6sEnHOP6a74UixFyOYUyz2DLMXKx+6DEhfR3F2NYGE45XH1JJuIamacb4IZs9S0ZOWLA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.1.0.tgz", + "integrity": "sha512-fNxRUk1KhjSbnbuBxlWSnBLKLBNun52ZBTcs22H/xEEzM6Ap81ZFTQ4bZBxVQGQgVY0xugKGoRcCbaKjLQ3XZA==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-7.1.0.tgz", + "integrity": "sha512-Udu3K7SzAo9N013qt7qmm22/wo2hADdheXtBfxFTecp+ogsc0caQNRKEb7pkvvagUGOpG9wJC1ViH6WXs8oXIA==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-3.1.0.tgz", + "integrity": "sha512-5OUQH9aDH/xHJwnpD4J7oEdGvFGJgYnGe0UebaPIdMW9UxYC/f5jv2VjVEgnikdJN0HL8yQxp9Nq+7gqGZpIIA==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~6 || ~7", + "react": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@fullcalendar/core": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.19.tgz", + "integrity": "sha512-z0aVlO5e4Wah6p6mouM0UEqtRf1MZZPt4mwzEyU6kusaNL+dlWQgAasF2cK23hwT4cmxkEmr4inULXgpyeExdQ==", + "license": "MIT", + "dependencies": { + "preact": "~10.12.1" + } + }, + "node_modules/@fullcalendar/daygrid": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.19.tgz", + "integrity": "sha512-IAAfnMICnVWPjpT4zi87i3FEw0xxSza0avqY/HedKEz+l5MTBYvCDPOWDATpzXoLut3aACsjktIyw9thvIcRYQ==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, + "node_modules/@fullcalendar/interaction": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.19.tgz", + "integrity": "sha512-GOciy79xe8JMVp+1evAU3ytdwN/7tv35t5i1vFkifiuWcQMLC/JnLg/RA2s4sYmQwoYhTw/p4GLcP0gO5B3X5w==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, + "node_modules/@fullcalendar/react": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.19.tgz", + "integrity": "sha512-FP78vnyylaL/btZeHig8LQgfHgfwxLaIG6sKbNkzkPkKEACv11UyyBoTSkaavPsHtXvAkcTED1l7TOunAyPEnA==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19", + "react": "^16.7.0 || ^17 || ^18 || ^19", + "react-dom": "^16.7.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/@fullcalendar/timegrid": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.19.tgz", + "integrity": "sha512-OuzpUueyO9wB5OZ8rs7TWIoqvu4v3yEqdDxZ2VcsMldCpYJRiOe7yHWKr4ap5Tb0fs7Rjbserc/b6Nt7ol6BRg==", + "license": "MIT", + "dependencies": { + "@fullcalendar/daygrid": "~6.1.19" + }, + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, "node_modules/@grpc/grpc-js": { "version": "1.9.15", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", @@ -21452,433 +21557,433 @@ "license": "MIT" }, "node_modules/ckeditor5": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-47.1.0.tgz", - "integrity": "sha512-Vnmt6eKIpiM+EpJSwxzCjJC5/9ykUhegwqWS9znAuAz2ZgBiVUFt54Y+CBhVpMru3z4zQ+NncVgCqoiU3ocHGQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-47.2.0.tgz", + "integrity": "sha512-mrG9UdpT4JC0I44vK1DV5UwfGhruEG/FMXIWwGv+LWYrKt4aLL/5NyNpW86UDO9YAFSaw6IdEcbJGC/WkMJJjA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-adapter-ckfinder": "47.1.0", - "@ckeditor/ckeditor5-alignment": "47.1.0", - "@ckeditor/ckeditor5-autoformat": "47.1.0", - "@ckeditor/ckeditor5-autosave": "47.1.0", - "@ckeditor/ckeditor5-basic-styles": "47.1.0", - "@ckeditor/ckeditor5-block-quote": "47.1.0", - "@ckeditor/ckeditor5-bookmark": "47.1.0", - "@ckeditor/ckeditor5-ckbox": "47.1.0", - "@ckeditor/ckeditor5-ckfinder": "47.1.0", - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-cloud-services": "47.1.0", - "@ckeditor/ckeditor5-code-block": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-easy-image": "47.1.0", - "@ckeditor/ckeditor5-editor-balloon": "47.1.0", - "@ckeditor/ckeditor5-editor-classic": "47.1.0", - "@ckeditor/ckeditor5-editor-decoupled": "47.1.0", - "@ckeditor/ckeditor5-editor-inline": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-emoji": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-essentials": "47.1.0", - "@ckeditor/ckeditor5-find-and-replace": "47.1.0", - "@ckeditor/ckeditor5-font": "47.1.0", - "@ckeditor/ckeditor5-fullscreen": "47.1.0", - "@ckeditor/ckeditor5-heading": "47.1.0", - "@ckeditor/ckeditor5-highlight": "47.1.0", - "@ckeditor/ckeditor5-horizontal-line": "47.1.0", - "@ckeditor/ckeditor5-html-embed": "47.1.0", - "@ckeditor/ckeditor5-html-support": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-image": "47.1.0", - "@ckeditor/ckeditor5-indent": "47.1.0", - "@ckeditor/ckeditor5-language": "47.1.0", - "@ckeditor/ckeditor5-link": "47.1.0", - "@ckeditor/ckeditor5-list": "47.1.0", - "@ckeditor/ckeditor5-markdown-gfm": "47.1.0", - "@ckeditor/ckeditor5-media-embed": "47.1.0", - "@ckeditor/ckeditor5-mention": "47.1.0", - "@ckeditor/ckeditor5-minimap": "47.1.0", - "@ckeditor/ckeditor5-page-break": "47.1.0", - "@ckeditor/ckeditor5-paragraph": "47.1.0", - "@ckeditor/ckeditor5-paste-from-office": "47.1.0", - "@ckeditor/ckeditor5-remove-format": "47.1.0", - "@ckeditor/ckeditor5-restricted-editing": "47.1.0", - "@ckeditor/ckeditor5-select-all": "47.1.0", - "@ckeditor/ckeditor5-show-blocks": "47.1.0", - "@ckeditor/ckeditor5-source-editing": "47.1.0", - "@ckeditor/ckeditor5-special-characters": "47.1.0", - "@ckeditor/ckeditor5-style": "47.1.0", - "@ckeditor/ckeditor5-table": "47.1.0", - "@ckeditor/ckeditor5-theme-lark": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-undo": "47.1.0", - "@ckeditor/ckeditor5-upload": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "@ckeditor/ckeditor5-word-count": "47.1.0" + "@ckeditor/ckeditor5-adapter-ckfinder": "47.2.0", + "@ckeditor/ckeditor5-alignment": "47.2.0", + "@ckeditor/ckeditor5-autoformat": "47.2.0", + "@ckeditor/ckeditor5-autosave": "47.2.0", + "@ckeditor/ckeditor5-basic-styles": "47.2.0", + "@ckeditor/ckeditor5-block-quote": "47.2.0", + "@ckeditor/ckeditor5-bookmark": "47.2.0", + "@ckeditor/ckeditor5-ckbox": "47.2.0", + "@ckeditor/ckeditor5-ckfinder": "47.2.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-cloud-services": "47.2.0", + "@ckeditor/ckeditor5-code-block": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-easy-image": "47.2.0", + "@ckeditor/ckeditor5-editor-balloon": "47.2.0", + "@ckeditor/ckeditor5-editor-classic": "47.2.0", + "@ckeditor/ckeditor5-editor-decoupled": "47.2.0", + "@ckeditor/ckeditor5-editor-inline": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-emoji": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-essentials": "47.2.0", + "@ckeditor/ckeditor5-find-and-replace": "47.2.0", + "@ckeditor/ckeditor5-font": "47.2.0", + "@ckeditor/ckeditor5-fullscreen": "47.2.0", + "@ckeditor/ckeditor5-heading": "47.2.0", + "@ckeditor/ckeditor5-highlight": "47.2.0", + "@ckeditor/ckeditor5-horizontal-line": "47.2.0", + "@ckeditor/ckeditor5-html-embed": "47.2.0", + "@ckeditor/ckeditor5-html-support": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-image": "47.2.0", + "@ckeditor/ckeditor5-indent": "47.2.0", + "@ckeditor/ckeditor5-language": "47.2.0", + "@ckeditor/ckeditor5-link": "47.2.0", + "@ckeditor/ckeditor5-list": "47.2.0", + "@ckeditor/ckeditor5-markdown-gfm": "47.2.0", + "@ckeditor/ckeditor5-media-embed": "47.2.0", + "@ckeditor/ckeditor5-mention": "47.2.0", + "@ckeditor/ckeditor5-minimap": "47.2.0", + "@ckeditor/ckeditor5-page-break": "47.2.0", + "@ckeditor/ckeditor5-paragraph": "47.2.0", + "@ckeditor/ckeditor5-paste-from-office": "47.2.0", + "@ckeditor/ckeditor5-remove-format": "47.2.0", + "@ckeditor/ckeditor5-restricted-editing": "47.2.0", + "@ckeditor/ckeditor5-select-all": "47.2.0", + "@ckeditor/ckeditor5-show-blocks": "47.2.0", + "@ckeditor/ckeditor5-source-editing": "47.2.0", + "@ckeditor/ckeditor5-special-characters": "47.2.0", + "@ckeditor/ckeditor5-style": "47.2.0", + "@ckeditor/ckeditor5-table": "47.2.0", + "@ckeditor/ckeditor5-theme-lark": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-undo": "47.2.0", + "@ckeditor/ckeditor5-upload": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "@ckeditor/ckeditor5-word-count": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-adapter-ckfinder": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.1.0.tgz", - "integrity": "sha512-h/ClAZBbqz0q5332OPLCQXBOx5EH3GHykJrGAK2+Wtx3CuhzJV+RhgEj3KLMQ2SaAR4DaLKamzCAiR2jIH6Y6Q==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.2.0.tgz", + "integrity": "sha512-zzuINBzWuheU76Ans9m59VCVMiljESoKxzpMh0aYu+M3YB5IDctOPU8pdOpXPIdBwoYv64+ioZE/T5TyZDckSw==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-upload": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-upload": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-autoformat": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.1.0.tgz", - "integrity": "sha512-vnP5CNEDriVgFwUVocXyQ++yGrJnkp8V5YCQZv76nZPSed02soL62MRm6M9A4GOAXpEJMe7d5NWom73ieRfcVA==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.2.0.tgz", + "integrity": "sha512-d9ZwAB8JwWlgLK2Um+u3ctiCtv5bkBHGk/rSdXB6D/V7QHCl31NyPFYByxTyCOY9SsoNn1l/8zbJfvp89LJm2w==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-heading": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-heading": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-basic-styles": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.1.0.tgz", - "integrity": "sha512-WxiFFKUlisz8B3ymeBFijshDWmqX649TEA+1nxgjXHr0L0UONCJfBExanrRUJND6AwHIh1n2IIAXwXvYMdqZbw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.2.0.tgz", + "integrity": "sha512-a8pPHq3CXmyxPPXPQZ8C92OOyBoCfpY8M30dS7et/dLXW3nuVo9VVLMw0vR1j+zcKXClp3+/odyw2/rxP+qntA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-block-quote": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.1.0.tgz", - "integrity": "sha512-h+p/pFm0wNmozhFZcxxh6DmkGQCE3Jpukju0ovxiPnRO49PN+0cUsdbHuKYtJK6jxLfqwjfdHVOn1m+LyRRmkg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.2.0.tgz", + "integrity": "sha512-BlFFfunyWpYcGhLsOmCR0yEz5VgrOmHREHQZIRcL6fKzXJwdpA/VFWPirotwF/QErJjguhhDZ5a3PBEnUAmW/A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-ckbox": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.1.0.tgz", - "integrity": "sha512-DgTxePr5fE7yaQCjaSMlKNf5j38NGjywg9//l7XeVvxLmJJgQrN7G7xaX/vl55H2jGZF0LrM4IyS9mbyfUj1bQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.2.0.tgz", + "integrity": "sha512-Cu+nJTXhcmdE8DWHoTY1nrrjxyG4pfxMrEcO/PNV28cojwtOQaWGt4EbWlXOfZZTEWlZO18JIw/YrxYXwx5mTA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-cloud-services": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-image": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-upload": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-cloud-services": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-image": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-upload": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "blurhash": "2.0.5", - "ckeditor5": "47.1.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-ckfinder": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.1.0.tgz", - "integrity": "sha512-eQPgvW+cSA2p5EVyoJv0NIOYorS5DoAxKdcBcxrKc433yuC7fKsZ1awp5aWJOUOfRzGLAa1WYikR7OKvmTjzYg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.2.0.tgz", + "integrity": "sha512-nsxn9weZNwdplW/BHfEJ/rvb+wZj0KECN2Av9zFRekTxE1mp0hTShQ9MNlKImRQ4X2UV6bGN6+DXwJJIU0smlQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-image": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-image": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-cloud-services": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.1.0.tgz", - "integrity": "sha512-yLH1eTxWMrzF16CFdu/RJAwzcGYaKKS+gQfX3aRjIphtkY9ebnS1SbelP12ZXUBp/vcTguSYjUrPUwnstoadew==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.2.0.tgz", + "integrity": "sha512-794mxJ8MFhz2SxSjlMSp4cZbyBBpVjinQ3GxOS5VqO7H4m/iT2hdSPJaWpML53soxpEoG/6ax4vVKe5d0+xoqA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-core": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.1.0.tgz", - "integrity": "sha512-CKE/cxzyAECL9rXMCTiQfNtIwy8x24zSyjQgU44FB59H/eUksw9FYaDdRgNs/PvW/gdW7JdCPiaOI3m28wYmHg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.2.0.tgz", + "integrity": "sha512-NwUNa25g//ScxaVPASalcGfMDhUSv7nIpxC07oVv99zJjk64RTBr4TZHpjKLCVqN9gAn3phAtjtkxa2KOgOMtQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-watchdog": "47.1.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-watchdog": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-easy-image": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.1.0.tgz", - "integrity": "sha512-V/8nSXle8D/XzC6NSmNatcYoZzy7SXOsNFbLgXN+2gOFguhexmgVagBAiHgGCUpZTNTmkQRTI5VpiI5mfAHt+g==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.2.0.tgz", + "integrity": "sha512-lSnbiGDzYdu9GeOaYjVpowaZWDJbrb7NHCuUN5Af2474jXTDyYmG7qOm39fWEBlcxjMTzDR8fFzPcRNhOvSRRA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-cloud-services": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-upload": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-cloud-services": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-upload": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-editor-classic": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.1.0.tgz", - "integrity": "sha512-x4aegRral5LTV1kURmjnp/tLSE1nttH+MsVkrVLWJd0j2A0qj88BLSccmY71ybFgMcDKlwJD6kVT0ZNKsvRogw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.2.0.tgz", + "integrity": "sha512-fYy4RKmvM4kYvUgCRuBdUqVLE8ts1Kj4q1Caaq5VZyBudmaj/RZqQBSdiu5pZgKMdj1oMaIQ5Gextg96iJ3LTw==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-engine": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.1.0.tgz", - "integrity": "sha512-uXlD+UKSb6wC5OBzQm5Sn0PYTYNpa4Jccdk61Z6U9h1lAZI4KV4SU12vRL5XG20bI0PIQvBo7Lhy7Va635kiqw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.2.0.tgz", + "integrity": "sha512-T3pFgycam60ytkbLOo2r99UPkbalLfzp4e6QrDVdZnloY7BO46zAbU5p3TqgfCdxODPhZh7srFGzANh6IsLMeg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-essentials": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.1.0.tgz", - "integrity": "sha512-lpXxfBQ7GocQ4klO2GTZYSxJFhymI2WwxaKklI+rh729dcxsIsjih1sXwSLM6kqwPbveF/9WgDBy3I6kqzRmqg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.2.0.tgz", + "integrity": "sha512-d3hHtkuLhvI+RvsDU7cKFc/K9uD27Tvi4NVjALcN1Ybr0k8dkJFGU1nUwXuo6zcdqRnkIJMWxIR+cwteuMCGQg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-select-all": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-undo": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-select-all": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-undo": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-heading": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.1.0.tgz", - "integrity": "sha512-HD+mWG5W5kk5fE2G9TFP/ktiU1CU8sA6mOyO6epd+0nsSwacTynKJkszgTVsd9HeY6wZopdqTHa1Dun/9wsxPA==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.2.0.tgz", + "integrity": "sha512-m1zSERVh7gdVXwLLYgcAsy7lkIOuadmA5YuwyPpR/g3oa0j1gcuNm5y/73MTOPflPUn0g0Y9DzocF2G1WY2NiQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-paragraph": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-paragraph": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-image": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.1.0.tgz", - "integrity": "sha512-BoVwiXD/l0yUxUsF9wLajo5p3b7TKamkKP7wAA/dkCUlWYzvzjQKwLwYoknNf3GgHLYuY5n6iRPvYQGvNsn6hg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.2.0.tgz", + "integrity": "sha512-XbXvRS++kFku0l7GABhsribmQTBC/SOAfimDNKjg5rayhAXCfovys7YmmU0eicydpo4//fAaa8zvDYc8uXWZGA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-undo": "47.1.0", - "@ckeditor/ckeditor5-upload": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-undo": "47.2.0", + "@ckeditor/ckeditor5-upload": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-indent": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.1.0.tgz", - "integrity": "sha512-iqYlsdOGsTjuJ+xUx0ee8aAVh9sDPishKx1UHJbwetlPyM1kUADvVNONVBHV5YLgT0M7Bk5/MzGwlyQAuVipxg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.2.0.tgz", + "integrity": "sha512-Q85+b+o+nonhJ/I9K9wB9XeZ5W8rS9k66VvoDHxL3jJ6g6C+oyEAOomooTDCvJvBgDN6vGpcwzznKp0Q8baoCQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-heading": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-list": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-heading": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-list": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-link": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.1.0.tgz", - "integrity": "sha512-8XwnVPnp2GaNzcyXEahDYM8Qjh/qkU/R1VyjMh7EKSnlZOdget/jKXltNNwJpX0ofPMcY0CnvqGGF42gM3Tlcg==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.2.0.tgz", + "integrity": "sha512-ijaF1Ic23FH9qulW2ZuaxecmdT0JuK/4XNkdaoRntloHiVZ/tFAu+o/6st/pDXfutDBmnEXwrNGVtzO/JTPhrw==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-image": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-image": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-list": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.1.0.tgz", - "integrity": "sha512-P18ZXzJcAGoA6+nIoXkZ27/Ny80HCcrH36ay1MwSxsuQKO8S894kEZb+QS/HvePsX2tso+bQsWw4WWBzbLfP2g==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.2.0.tgz", + "integrity": "sha512-PDjTQLn2CqrZ4XuAAJWY2vA5bkVu8UHKQZa1+ddfS4FbvfF2QR3eDX5axywpuaCb2Dm2ZQoqxpA5GQmt1fUehg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-enter": "47.1.0", - "@ckeditor/ckeditor5-font": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-enter": "47.2.0", + "@ckeditor/ckeditor5-font": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-media-embed": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.1.0.tgz", - "integrity": "sha512-ZbCYrJpEoKnXFLIwTeCqL6au/irByQq4UhElWFECMUchk3ZlJiSbTrVgrMxtzNdYxvlRGkNIizqPlukt4Xf5ig==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.2.0.tgz", + "integrity": "sha512-lATTMej9pBsZk4qm8cOqLXhmrCq/t+HpP/zg3DWnYbiD6zclO69PSJxD09l9NsyOo0YZb8SYAsVISoKNaIOr0A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-typing": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-undo": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-typing": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-undo": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-paragraph": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.1.0.tgz", - "integrity": "sha512-B1tY1+kEncLFrGoD3YkpJIMNFSQvB4t8SVSei6+upD3YGkyf/VhmtYlnqBLRK2znQTlg76EJJcWlGv9zCJ9edw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.2.0.tgz", + "integrity": "sha512-x6nqRQjlAcOhirOE9umNdK8WckWcz7JPVU7IlPTzlrVAYCq+wiz6rgpuh4COUHnee4c31fF21On+OVyqgu7JvQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0" + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-paste-from-office": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.1.0.tgz", - "integrity": "sha512-+96rw8TkId8o/im4zvq2EtdDzHHaP/+29PMcJ5ACmvq32tJgFsLCyo10asEWV+U/SiWUHNKBPgGLJeh/MdzlAw==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.2.0.tgz", + "integrity": "sha512-DGGNGNhl25ub8dFBKJF4jfMBoSSbF5uKzFShMNIaAVAagV6kkDWR0HJWAir5CuFrElzWTkPd0ZC5RNL76yTbtg==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "ckeditor5": "47.1.0" + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "ckeditor5": "47.2.0" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-table": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.1.0.tgz", - "integrity": "sha512-49g66He4BFzfh/8m23BBhfxk/0FnJnEZ07SiQBWdAMfZSFubTz0/tCm38imf79h4bawUcaLSGP+UJBc6x/gg4w==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.2.0.tgz", + "integrity": "sha512-zxNHpl4L7HsOLCYiKrbyyHoM2dMGetgP4eTjYyWfn9gf+ydVs7o+LJVN5bsWt3J4ToamCj5G7VHZUmqUcPbN6A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-clipboard": "47.1.0", - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-ui": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", - "@ckeditor/ckeditor5-widget": "47.1.0", - "ckeditor5": "47.1.0", + "@ckeditor/ckeditor5-clipboard": "47.2.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-ui": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", + "@ckeditor/ckeditor5-widget": "47.2.0", + "ckeditor5": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-typing": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.1.0.tgz", - "integrity": "sha512-teg0UA6AWEMraXAsXYB8372ogIXfFaakOv6Vz8ppIsuKPZfHKJC5ixUd+oUzk03nv3QdtalQAALY8I8dnwl6dQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.2.0.tgz", + "integrity": "sha512-BDJLlaX9SHFUfZegOEW7ZeJ0o/TBgabINNxa3CwtGuGBLHUAQ3IAFJ0Cd6jHq12J2kRDwiXZzvvgMyCH7jeeUQ==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "es-toolkit": "1.39.5" } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-ui": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.1.0.tgz", - "integrity": "sha512-fV/9LPGZgnWBFQcHq29idZI34OZoO5ej72asf0X+A2rMgdCrHPlVeVwiy6THLRE5CFn9qdramYB27eESxOPi6A==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.2.0.tgz", + "integrity": "sha512-/yd1/JmIqJybqBRZvk/QGzeY6DZlJvPtyEqq9Ay+U4bUftr2DOrfOikM62okepYRCCtMQ4nQk3c2eFmacfym2A==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-core": "47.1.0", - "@ckeditor/ckeditor5-editor-multi-root": "47.1.0", - "@ckeditor/ckeditor5-engine": "47.1.0", - "@ckeditor/ckeditor5-icons": "47.1.0", - "@ckeditor/ckeditor5-utils": "47.1.0", + "@ckeditor/ckeditor5-core": "47.2.0", + "@ckeditor/ckeditor5-editor-multi-root": "47.2.0", + "@ckeditor/ckeditor5-engine": "47.2.0", + "@ckeditor/ckeditor5-icons": "47.2.0", + "@ckeditor/ckeditor5-utils": "47.2.0", "@types/color-convert": "2.0.4", "color-convert": "3.1.0", "color-parse": "2.0.2", @@ -21887,13 +21992,13 @@ } }, "node_modules/ckeditor5/node_modules/@ckeditor/ckeditor5-utils": { - "version": "47.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.1.0.tgz", - "integrity": "sha512-tx2AHkx8dqVp4YKieGbNmSZy88ekmsMIQyHMD04n6oMFz16a3mmqFCm9WJRpTaNvniGKh6TCxA48Kf2zwn7EmQ==", + "version": "47.2.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.2.0.tgz", + "integrity": "sha512-1b9SWtGuPZApm9065swh+fivxQMvuAsVXHuo26OGV2EnQK//w7kHsxKhVGJMzfHeuev5KvhJ2zdo8SUvePfBoA==", "license": "SEE LICENSE IN LICENSE.md", "peer": true, "dependencies": { - "@ckeditor/ckeditor5-ui": "47.1.0", + "@ckeditor/ckeditor5-ui": "47.2.0", "es-toolkit": "1.39.5" } }, @@ -31747,6 +31852,16 @@ "spawno": "^1.0.0" } }, + "node_modules/preact": { + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz", + "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -31756,6 +31871,23 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -32881,6 +33013,33 @@ "node": ">=14.0.0" } }, + "node_modules/react-scripts/node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/react-toastify": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-11.0.5.tgz", + "integrity": "sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA==", + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": "^18 || ^19", + "react-dom": "^18 || ^19" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", diff --git a/package.json b/package.json index 07df497..b12170f 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,14 @@ "dependencies": { "@ckeditor/ckeditor5-build-classic": "^41.4.2", "@ckeditor/ckeditor5-react": "^11.0.0", + "@fortawesome/fontawesome-svg-core": "^7.1.0", + "@fortawesome/free-solid-svg-icons": "^7.1.0", + "@fortawesome/react-fontawesome": "^3.1.0", + "@fullcalendar/core": "^6.1.19", + "@fullcalendar/daygrid": "^6.1.19", + "@fullcalendar/interaction": "^6.1.19", + "@fullcalendar/react": "^6.1.19", + "@fullcalendar/timegrid": "^6.1.19", "@jitsi/react-sdk": "^1.4.0", "@sweetalert2/theme-dark": "^5.0.27", "@testing-library/dom": "^10.4.1", @@ -20,7 +28,7 @@ "bootstrap": "^5.3.8", "bootstrap-icons": "^1.13.1", "cors": "^2.8.5", - "dayjs": "^1.11.18", + "dayjs": "^1.11.19", "dotenv": "^17.2.3", "express": "^5.1.0", "firebase": "^12.5.0", @@ -44,6 +52,7 @@ "react-quill": "^2.0.0", "react-router-dom": "^7.9.2", "react-scripts": "5.0.1", + "react-toastify": "^11.0.5", "recharts": "^3.1.2", "sweetalert2": "^11.22.4", "tiptap": "^1.32.2", diff --git a/src/PagesMedico/DoctorAgendamentoManager.jsx b/src/PagesMedico/DoctorAgendamentoManager.jsx index efd7e21..7f0d77e 100644 --- a/src/PagesMedico/DoctorAgendamentoManager.jsx +++ b/src/PagesMedico/DoctorAgendamentoManager.jsx @@ -1,477 +1,654 @@ -import React, { useState, useMemo, useEffect } from 'react'; +import React, { useState, useMemo, useEffect, useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; import API_KEY from '../components/utils/apiKeys.js'; import AgendamentoCadastroManager from '../pages/AgendamentoCadastroManager.jsx'; -import TabelaAgendamentoDia from '../components/AgendarConsulta/TabelaAgendamentoDia'; -import TabelaAgendamentoSemana from '../components/AgendarConsulta/TabelaAgendamentoSemana'; -import TabelaAgendamentoMes from '../components/AgendarConsulta/TabelaAgendamentoMes'; -import FormNovaConsulta from '../components/AgendarConsulta/FormNovaConsulta'; -import { GetPatientByID } from '../components/utils/Functions-Endpoints/Patient.js'; -import { GetAllDoctors, GetDoctorByID } from '../components/utils/Functions-Endpoints/Doctor.js'; - +// Removidos imports não utilizados no novo fluxo +import { GetAllDoctors } from '../components/utils/Functions-Endpoints/Doctor.js'; import { useAuth } from '../components/utils/AuthProvider.js'; -// ✨ NOVO: Caminho de importação corrigido com base na sua estrutura de pastas -import AgendamentosMes from '../components/AgendarConsulta/DadosConsultasMock.js'; - -import { UserInfos } from '../components/utils/Functions-Endpoints/General.js'; import dayjs from 'dayjs'; +import 'dayjs/locale/pt-br'; +import isBetween from 'dayjs/plugin/isBetween'; +import localeData from 'dayjs/plugin/localeData'; +import { Search, ChevronLeft, ChevronRight, Edit, Trash2, CheckCircle } from 'lucide-react'; import "../pages/style/Agendamento.css"; import '../pages/style/FilaEspera.css'; -import { Search } from 'lucide-react'; +import Spinner from '../components/Spinner.jsx'; +dayjs.locale('pt-br'); +dayjs.extend(isBetween); +dayjs.extend(localeData); -const Agendamento = ({setDictInfo}) => { - const navigate = useNavigate(); - const [selectedID, setSelectedId] = useState('0') - const [filaEsperaData, setfilaEsperaData] = useState([]) +const Agendamento = () => { + const navigate = useNavigate(); + const { getAuthorizationHeader, user } = useAuth(); + const authHeader = getAuthorizationHeader(); + + // ID do médico que você quer visualizar + const ID_MEDICO_ESPECIFICO = "078d2a67-b4c1-43c8-ae32-c1e75bb5b3df"; + + const [listaTodosAgendamentos, setListaTodosAgendamentos] = useState([]); + const [selectedID, setSelectedId] = useState('0'); + const [filaEsperaData, setFilaEsperaData] = useState([]); const [FiladeEspera, setFiladeEspera] = useState(false); - const [tabela, setTabela] = useState('diario'); - const [PageNovaConsulta, setPageConsulta] = useState(false); - const [searchTerm, setSearchTerm] = useState(''); - const [agendamentos, setAgendamentos] = useState() - const {getAuthorizationHeader} = useAuth() - const [DictAgendamentosOrganizados, setAgendamentosOrganizados ] = useState({}) + const [PageNovaConsulta, setPageConsulta] = useState(false); + const [DictAgendamentosOrganizados, setAgendamentosOrganizados] = useState({}); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const [ListaDeMedicos, setListaDeMedicos] = useState([]); + const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([]); + const [searchTermDoctor, setSearchTermDoctor] = useState(''); + const [MedicoFiltrado, setMedicoFiltrado] = useState({ id: "vazio" }); + const [motivoCancelamento, setMotivoCancelamento] = useState(""); + const [showSpinner, setShowSpinner] = useState(true); + const [waitlistSearch, setWaitlistSearch] = useState(''); + const [waitSortKey, setWaitSortKey] = useState(null); + const [waitSortDir, setWaitSortDir] = useState('asc'); + const [waitPage, setWaitPage] = useState(1); + const [waitPerPage, setWaitPerPage] = useState(10); + const [cacheMedicos, setCacheMedicos] = useState({}); + const [cachePacientes, setCachePacientes] = useState({}); + const [currentDate, setCurrentDate] = useState(dayjs()); + const [selectedDay, setSelectedDay] = useState(dayjs()); + const [agendamentoParaEdicao, setAgendamentoParaEdicao] = useState(null); + const [quickJump, setQuickJump] = useState({ + month: currentDate.month(), + year: currentDate.year() + }); - const [showDeleteModal, setShowDeleteModal] = useState(false) - const [showConfirmModal, setShowConfirmModal] = useState(false) - - const [coresConsultas, setCoresConsultas] = useState([]) + // ✨ ALTERAÇÃO PRINCIPAL: A busca agora filtra pelo ID do médico direto na API + const fetchAppointments = useCallback(async () => { + if (!authHeader) return; + setShowSpinner(true); + const myHeaders = new Headers(); + myHeaders.append("Authorization", authHeader); + myHeaders.append("apikey", API_KEY); + const requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; - const [listaConsultasID, setListaConsultaID] = useState([]) + // A URL agora contém o filtro para o ID do médico específico + const apiUrl = `https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?doctor_id=eq.${ID_MEDICO_ESPECIFICO}&select=*`; - const [motivoCancelamento, setMotivoCancelamento] = useState("") - - const [user, setUser] = useState({}) + try { + const res = await fetch(apiUrl, requestOptions); + const data = await res.json(); + setListaTodosAgendamentos(data || []); + } catch (err) { + console.error('Erro ao buscar agendamentos', err); + setListaTodosAgendamentos([]); + } finally { + setShowSpinner(false); + } + }, [authHeader, ID_MEDICO_ESPECIFICO]); - let authHeader = getAuthorizationHeader() - - const FiltrarAgendamentos = async (listaTodosAgendamentos) => { - const ConfigurarFiladeEspera = async (patient_id, doctor_id, agendamento) => { - // Assumindo que GetDoctorByID e GetPatientByID estão definidos no seu escopo - let medico = await GetDoctorByID(doctor_id, authHeader); - let paciente = await GetPatientByID(patient_id, authHeader); - - let dicionario = { - ...agendamento, - - nome_medico: medico[0].full_name, - doctor_id: medico.id, - patient_id: paciente[0].id, - paciente_nome: paciente[0].full_name, - paciente_cpf: paciente[0].cpf - - }; - return dicionario; - }; - - let DictAgendamentosOrganizados = {}; - let ListaFilaDeEspera = []; - - // 1. Agrupamento (igual ao seu código original) - for (const agendamento of listaTodosAgendamentos) { - if (agendamento.status === 'requested') { - - let v = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento); - ListaFilaDeEspera.push(v); - } else { - - const DiaAgendamento = agendamento.scheduled_at?.split("T")[0]; - - let novoAgendamento = await ConfigurarFiladeEspera(agendamento.patient_id, agendamento.doctor_id, agendamento); - - if (DiaAgendamento in DictAgendamentosOrganizados) { - DictAgendamentosOrganizados[DiaAgendamento].push(novoAgendamento); + const updateAppointmentStatus = useCallback(async (id, updates) => { + setShowSpinner(true); + const myHeaders = new Headers(); + myHeaders.append("Authorization", authHeader); + myHeaders.append("apikey", API_KEY); + myHeaders.append("Content-Type", "application/json"); + myHeaders.append("Prefer", "return=representation"); + const requestOptions = { method: 'PATCH', headers: myHeaders, body: JSON.stringify(updates) }; + try { + const response = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${id}`, requestOptions); + if (response.ok) { + await fetchAppointments(); + return true; } else { - DictAgendamentosOrganizados[DiaAgendamento] = [novoAgendamento]; + console.error('Erro ao atualizar agendamento:', await response.text()); + return false; + } + } catch (error) { + console.error('Erro de rede/servidor:', error); + return false; + } finally { + setShowSpinner(false); + } + }, [authHeader, fetchAppointments]); + + + const deleteConsulta = useCallback(async (id) => { + const success = await updateAppointmentStatus(id, { status: "cancelled", cancellation_reason: motivoCancelamento, updated_at: new Date().toISOString() }); + if (success) { + setShowDeleteModal(false); + setMotivoCancelamento(""); + setSelectedId('0'); + } else { + alert("Falha ao cancelar a consulta."); + } + }, [motivoCancelamento, updateAppointmentStatus]); + + + const confirmConsulta = useCallback(async (id) => { + const success = await updateAppointmentStatus(id, { status: "agendado", cancellation_reason: null, updated_at: new Date().toISOString() }); + if (success) { + setSelectedId('0'); + } else { + alert("Falha ao reverter o cancelamento."); + } + }, [updateAppointmentStatus]); + + useEffect(() => { + if(authHeader) { + fetchAppointments(); + // A busca de todos os médicos pode continuar caso a secretária precise ver a lista + if (user?.role !== 'doctor') { + GetAllDoctors(authHeader).then(docs => { + if (docs) { + setListaDeMedicos(docs.map(d => ({ nomeMedico: d.full_name, idMedico: d.id }))); + } + }); } } - } + }, [authHeader, fetchAppointments, user?.role]); -// ---------------------------------------------------------------------- - // 2. Ordenação Interna: Ordenar os agendamentos por HORÁRIO (do menor para o maior) - for (const DiaAgendamento in DictAgendamentosOrganizados) { - DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => { - // Compara as strings de data/hora (ISO 8601) diretamente, - // que funcionam para ordenação cronológica. - if (a.scheduled_at < b.scheduled_at) return -1; - if (a.scheduled_at > b.scheduled_at) return 1; + useEffect(() => { + const processData = async () => { + // Como os dados já vêm filtrados da API, não precisamos mais da verificação de 'user' aqui + if (!listaTodosAgendamentos.length) { + setAgendamentosOrganizados({}); + setFilaEsperaData([]); + return; + } + + setShowSpinner(true); + + // ✨ SIMPLIFICAÇÃO: Não é mais necessário filtrar por `user.role`, + // pois a API já retornou apenas os agendamentos do médico desejado. + const appointmentsToShow = listaTodosAgendamentos; + + const patientIdsToFetch = new Set(); + const doctorIdsToFetch = new Set(); + + appointmentsToShow.forEach(ag => { + if (ag.patient_id && !cachePacientes[ag.patient_id]) { + patientIdsToFetch.add(ag.patient_id); + } + if (ag.doctor_id && !cacheMedicos[ag.doctor_id]) { + doctorIdsToFetch.add(ag.doctor_id); + } + }); + + const fetchPromises = []; + + if (patientIdsToFetch.size > 0) { + const query = `id=in.(${Array.from(patientIdsToFetch).join(',')})`; + fetchPromises.push( + fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/patients?${query}&select=*`, { + headers: { apikey: API_KEY, Authorization: authHeader } + }).then(res => res.json()) + ); + } else { + fetchPromises.push(Promise.resolve(null)); // Mantém a ordem do Promise.all + } + + if (doctorIdsToFetch.size > 0) { + const query = `id=in.(${Array.from(doctorIdsToFetch).join(',')})`; + fetchPromises.push( + fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors?${query}&select=id,full_name`, { + headers: { apikey: API_KEY, Authorization: authHeader } + }).then(res => res.json()) + ); + } else { + fetchPromises.push(Promise.resolve(null)); + } + + const [newPatients, newDoctors] = await Promise.all(fetchPromises); + + const updatedPatientCache = { ...cachePacientes }; + if (newPatients) newPatients.forEach(p => updatedPatientCache[p.id] = p); + + const updatedDoctorCache = { ...cacheMedicos }; + if (newDoctors) newDoctors.forEach(d => updatedDoctorCache[d.id] = d); + + setCachePacientes(updatedPatientCache); + setCacheMedicos(updatedDoctorCache); + + const newDict = {}; + const newFila = []; + + for (const agendamento of appointmentsToShow) { + const medico = updatedDoctorCache[agendamento.doctor_id]; + const paciente = updatedPatientCache[agendamento.patient_id]; + + if (!medico || !paciente) continue; + + const agendamentoMelhorado = { + ...agendamento, + medico_nome: medico.full_name || 'N/A', + paciente_nome: paciente.full_name || 'N/A', + paciente_cpf: paciente.cpf || 'N/A' + }; + + if (agendamento.status === "requested") { + newFila.push({ agendamento: agendamentoMelhorado, Infos: agendamentoMelhorado }); + } else { + const DiaAgendamento = dayjs(agendamento.scheduled_at).format("YYYY-MM-DD"); + if (!newDict[DiaAgendamento]) newDict[DiaAgendamento] = []; + newDict[DiaAgendamento].push(agendamentoMelhorado); + } + } + + for (const key in newDict) { + newDict[key].sort((a, b) => new Date(a.scheduled_at) - new Date(b.scheduled_at)); + } + + setAgendamentosOrganizados(newDict); + setFilaEsperaData(newFila); + setShowSpinner(false); + }; + + processData(); + }, [listaTodosAgendamentos, authHeader]); // Removido 'user' das dependências pois não é mais usado aqui + + // O restante do código permanece o mesmo... + + const handleEditConsulta = (agendamento) => { + setAgendamentoParaEdicao(agendamento); + setPageConsulta(true); + }; + + const handleSearchMedicos = (term) => { + setSearchTermDoctor(term); + if (term.trim()) { + const filtered = ListaDeMedicos.filter(medico => + medico.nomeMedico.toLowerCase().includes(term.toLowerCase()) + ); + setFiltredTodosMedicos(filtered); + } else { + setFiltredTodosMedicos([]); + setMedicoFiltrado({ id: "vazio" }); + } + }; + + const generateDateGrid = () => { + const grid = []; + const startOfMonth = currentDate.startOf('month'); + let currentDay = startOfMonth.subtract(startOfMonth.day(), 'day'); + for (let i = 0; i < 42; i++) { + grid.push(currentDay); + currentDay = currentDay.add(1, 'day'); + } + return grid; + }; + + const dateGrid = useMemo(() => generateDateGrid(), [currentDate]); + const weekDays = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb']; + const handleDateClick = (day) => setSelectedDay(day); +const DeleteModal = () => ( +
+
+
+
+
Confirmação de Cancelamento
+ +
+
+

Qual o motivo do cancelamento? (Opcional)

+ +
+
+ + {/* ✨ Botão sempre ativo ✨ */} + +
+
+
+
+); + + + useEffect(() => { + setQuickJump({ + month: currentDate.month(), + year: currentDate.year() + }); + }, [currentDate]); + + const filaEsperaFiltrada = useMemo(() => { + if (!waitlistSearch.trim()) return filaEsperaData; + const term = waitlistSearch.toLowerCase(); + return filaEsperaData.filter(item => + (item?.Infos?.paciente_nome?.toLowerCase() || '').includes(term) || + (item?.Infos?.paciente_cpf?.toLowerCase() || '').includes(term) || + (item?.Infos?.medico_nome?.toLowerCase() || '').includes(term) + ); + }, [waitlistSearch, filaEsperaData]); + + const applySortingWaitlist = useCallback((arr) => { + if (!Array.isArray(arr) || !waitSortKey) return arr; + const copy = [...arr]; + const key = waitSortKey; + const dir = waitSortDir === 'asc' ? 1 : -1; + copy.sort((a, b) => { + const valA = key === 'data' ? new Date(a.agendamento.scheduled_at) : (a.Infos?.[`${key}_nome`] || ''); + const valB = key === 'data' ? new Date(b.agendamento.scheduled_at) : (b.Infos?.[`${key}_nome`] || ''); + if (valA < valB) return -1 * dir; + if (valA > valB) return 1 * dir; return 0; }); - } + return copy; + }, [waitSortKey, waitSortDir]); -// ---------------------------------------------------------------------- - // 3. Ordenação Externa: Ordenar os DIAS (as chaves do objeto) - // Para garantir que as chaves fiquem na sequência cronológica correta. + const filaEsperaOrdenada = useMemo(() => applySortingWaitlist(filaEsperaFiltrada), [filaEsperaFiltrada, applySortingWaitlist]); + const waitTotalPages = Math.ceil(filaEsperaOrdenada.length / waitPerPage) || 1; + const waitIndiceInicial = (waitPage - 1) * waitPerPage; + const waitIndiceFinal = waitIndiceInicial + waitPerPage; + const filaEsperaPaginada = filaEsperaOrdenada.slice(waitIndiceInicial, waitIndiceFinal); - // Pega as chaves (datas) - const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort((a, b) => { - // Compara as chaves de data (strings 'YYYY-MM-DD') - if (a < b) return -1; - if (a > b) return 1; - return 0; - }); - - // Cria um novo objeto no formato desejado, garantindo a ordem das chaves - let DictAgendamentosFinal = {}; - for (const data of chavesOrdenadas) { - DictAgendamentosFinal[data] = DictAgendamentosOrganizados[data]; - } - setAgendamentosOrganizados(DictAgendamentosFinal); // Use o objeto final ordenado - setfilaEsperaData(ListaFilaDeEspera); -}; - -useEffect(() => { - -console.log(user, "usuario") - -}, [user]) - - // Requisição inicial para mostrar os agendamentos do banco de dados - useEffect(() => { - - async function fetchDadosUser (){ - let dado = await UserInfos(authHeader) - setUser(dado) - } - - fetchDadosUser() - - - var myHeaders = new Headers(); - myHeaders.append("Authorization", authHeader); - myHeaders.append("apikey", API_KEY) - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' + const gerarNumerosWaitPages = () => { + const paginas = []; + const paginasParaMostrar = 5; + let inicio = Math.max(1, waitPage - Math.floor(paginasParaMostrar / 2)); + let fim = Math.min(waitTotalPages, inicio + paginasParaMostrar - 1); + inicio = Math.max(1, fim - paginasParaMostrar + 1); + for (let i = inicio; i <= fim; i++) paginas.push(i); + return paginas; }; - fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?doctor_id=eq.${"078d2a67-b4c1-43c8-ae32-c1e75bb5b3df"}`, requestOptions) - .then(response => response.json()) - .then(result => {FiltrarAgendamentos(result); console.log(result, "RESULTRADO DA API")}) - .catch(error => console.log('error', error)); + useEffect(() => { setWaitPage(1); }, [waitlistSearch, waitSortKey, waitSortDir]); - - - }, []) - - -const deleteConsulta = (selectedPatientId) => { - var myHeaders = new Headers(); - myHeaders.append("Content-Type", "application/json"); - myHeaders.append('apikey', API_KEY) - myHeaders.append("authorization", authHeader) - - - var raw = JSON.stringify({ "status":"cancelled", - "cancellation_reason": motivoCancelamento - }); - - - var requestOptions = { - method: 'PATCH', - headers: myHeaders, - body: raw, - redirect: 'follow' + const handleQuickJumpChange = (type, value) => { + setQuickJump(prev => ({ ...prev, [type]: Number(value) })); }; - fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${selectedPatientId}`, requestOptions) - .then(response => {if(response.status !== 200)(console.log(response))}) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -} - - + const applyQuickJump = () => { + let newDate = dayjs().year(quickJump.year).month(quickJump.month).date(1); + setCurrentDate(newDate); + setSelectedDay(newDate); + }; - // Lógica para filtrar os dados da AGENDA (AgendamentosMes) - const filteredAgendamentos = useMemo(() => { - if (!searchTerm.trim()) { - return AgendamentosMes; - } - const lowerCaseSearchTerm = searchTerm.toLowerCase(); - const filteredData = {}; - - for (const semana in AgendamentosMes) { - filteredData[semana] = {}; - for (const dia in AgendamentosMes[semana]) { - filteredData[semana][dia] = AgendamentosMes[semana][dia].filter(agendamento => - agendamento.status === 'vazio' || - (agendamento.paciente && agendamento.paciente.toLowerCase().includes(lowerCaseSearchTerm)) - ); - } - } - return filteredData; - }, [searchTerm]); - - const ListarDiasdoMes = (ano, mes) => { - let segundas = []; let tercas = []; let quartas = []; let quintas = []; let sextas = [] - const base = dayjs(`${ano}-${mes}-01`) - const DiasnoMes = base.daysInMonth() - for (let d = 1; d <= DiasnoMes; d++) { - const data = dayjs(`${ano}-${mes}-${d}`) - const dia = data.format('dddd') - switch (dia) { - case 'Monday': segundas.push(d); break - case 'Tuesday': tercas.push(d); break - case 'Wednesday': quartas.push(d); break - case 'Thursday': quintas.push(d); break - case 'Friday': sextas.push(d); break - default: break - } - } - let ListaDiasDatas = {segundas:segundas,tercas:tercas,quartas: quartas,quintas: quintas,sextas: sextas} - return ListaDiasDatas - } - - -const confirmConsulta = (selectedPatientId) => { - var myHeaders = new Headers(); - myHeaders.append("Content-Type", "application/json"); - myHeaders.append('apikey', API_KEY) - myHeaders.append("authorization", authHeader) - - - var raw = JSON.stringify({ "status":"confirmed" - }); - - - var requestOptions = { - method: 'PATCH', - headers: myHeaders, - body: raw, - redirect: 'follow' - }; - - fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${selectedPatientId}`, requestOptions) - .then(response => {if(response.status !== 200)(console.log(response))}) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -} - - const handleClickCancel = () => setPageConsulta(false) - - return ( -
-

Agendar nova consulta

- - - - - - {!PageNovaConsulta ? ( -
- -
-
- -
- -
-
-
-
- - - -
-
-
Realizado
-
Confirmado
-
Agendado
-
Cancelado
-
+ return ( +
+

Agendar nova consulta

+
+ + + +
+ {!PageNovaConsulta ? ( +
+ {user?.role !== 'doctor' && ( +
+
+
+
+
+ handleSearchMedicos(e.target.value)} /> +
+
+ {searchTermDoctor && FiltredTodosMedicos.length > 0 && ( +
+ {FiltredTodosMedicos.map((medico) => ( +
{ + setSearchTermDoctor(medico.nomeMedico); + setFiltredTodosMedicos([]); + setMedicoFiltrado({ id: medico.idMedico }); + }} + > +

{medico.nomeMedico}

+
+ ))} +
+ )} +
+
+
+ )} +
+ + +
+
+ {!FiladeEspera ? ( +
+
+
{selectedDay.format('MMM')}{selectedDay.format('DD')}
+

{selectedDay.format('dddd')}

{selectedDay.format('D [de] MMMM [de] YYYY')}

+
+

Consultas para {selectedDay.format('DD/MM')}

+ {showSpinner ? : (DictAgendamentosOrganizados[selectedDay.format('YYYY-MM-DD')]?.filter(app => MedicoFiltrado.id === "vazio" || app.doctor_id === MedicoFiltrado.id).length > 0) ? ( + DictAgendamentosOrganizados[selectedDay.format('YYYY-MM-DD')] + .filter(app => MedicoFiltrado.id === "vazio" || app.doctor_id === MedicoFiltrado.id) + .map(app => ( +
+
{dayjs(app.scheduled_at).format('HH:mm')}
+
{app.paciente_nome}Dr(a). {app.medico_nome}
+
+ {app.status === 'cancelled' ? ( + + ) : ( + + )} + {app.status !== 'cancelled' && ( + + )} +
+
+ )) + ) : (

Nenhuma consulta agendada.

)} +
+
+
+
+
Realizado
+
Confirmado
+
Agendado
+
Cancelado
+
+
+
+

{currentDate.format('MMMM [de] YYYY')}

+
+ + + +
+
+
+ + + +
+
+
+ {weekDays.map(day =>
{day}
)} + {dateGrid.map((day, index) => { + const dayString = day.format('YYYY-MM-DD'); + const appointmentsOnDay = DictAgendamentosOrganizados[dayString] || []; + const filteredAppointments = appointmentsOnDay.filter(app => MedicoFiltrado.id === "vazio" || app.doctor_id === MedicoFiltrado.id); + const cellClasses = `day-cell ${day.isSame(currentDate, 'month') ? 'current-month' : 'other-month'} ${day.isSame(dayjs(), 'day') ? 'today' : ''} ${day.isSame(selectedDay, 'day') ? 'selected' : ''}`; + return ( +
handleDateClick(day)}> + {day.format('D')} + {filteredAppointments.length > 0 &&
{filteredAppointments.length}
} +
+ ); + })} +
+
+
+ ) : ( +
+
+
+
+

Fila de Espera

+
+
+
Filtros
+
setWaitlistSearch(e.target.value)} />Digite o nome do paciente, CPF ou nome do médico
+
+
+ Ordenar por: + +
+
+
+
{filaEsperaFiltrada.length} DE {filaEsperaData.length} SOLICITAÇÕES ENCONTRADAS
+
+
+
+ + + + + + + + + + + + {filaEsperaPaginada.length > 0 ? ( + filaEsperaPaginada.map((item, index) => ( + + + + + + + + )) + ) : ( + + + + )} + +
Nome do PacienteCPFMédico SolicitadoData da SolicitaçãoAções
{item?.Infos?.paciente_nome}{item?.Infos?.paciente_cpf}{item?.Infos?.medico_nome}{dayjs(item.agendamento.scheduled_at).format('DD/MM/YYYY')} + +
+
+ {showSpinner ? : (<>

Nenhuma solicitação encontrada.

)} +
+
+ {filaEsperaFiltrada.length > 0 && ( +
+
+ Itens por página: + +
+
+ Página {waitPage} de {waitTotalPages} • Mostrando {waitIndiceInicial + 1}-{Math.min(waitIndiceFinal, filaEsperaFiltrada.length)} de {filaEsperaFiltrada.length} + +
+
+ )} +
+
+
+
+
+
+ )}
- - {tabela === "diario" && } - - - {tabela === 'semanal' && } - - - {tabela === 'mensal' && } -
- -
+ ) : ( + { + setPageConsulta(false); + fetchAppointments(); + }} + /> + )} + {showDeleteModal && }
- ) : ( - - )} - - - {showConfirmModal &&( -
- e.target.classList.contains("modal") && setShowDeleteModal(false) - } - > -
-
- -
-
- Confirmação de edição -
- -
- -
-

- Tem certeza que deseja retirar o cancelamento ? -

-
- -
- - - - - -
-
-
-
)} - - {showDeleteModal && ( -
- e.target.classList.contains("modal") && setShowDeleteModal(false) - } - > -
-
- -
-
- Confirmação de Cancelamento -
- -
- -
-

- Qual o motivo do cancelamento? -

-
- - +
+
+ + +
+
+
+ )} + {}
) } -export default ConsultasPaciente; \ No newline at end of file + +export default Agendamento; diff --git a/src/components/AgendarConsulta/CalendarComponent.jsx b/src/components/AgendarConsulta/CalendarComponent.jsx new file mode 100644 index 0000000..6d690f3 --- /dev/null +++ b/src/components/AgendarConsulta/CalendarComponent.jsx @@ -0,0 +1,165 @@ +import React, { useMemo } from 'react'; +import dayjs from 'dayjs'; +import { ChevronLeft, ChevronRight, Edit, Trash2 } from 'lucide-react'; +import Spinner from '../Spinner.jsx'; // Certifique-se de que o caminho está correto + +const CalendarComponent = ({ + currentDate, + setCurrentDate, + selectedDay, + setSelectedDay, + DictAgendamentosOrganizados, + showSpinner, + setSelectedId, + setShowDeleteModal, + setShowConfirmModal, + quickJump, + handleQuickJumpChange, + applyQuickJump +}) => { + + // Gera os 42 dias para o grid do calendário + const generateDateGrid = () => { + const grid = []; + const startOfMonth = currentDate.startOf('month'); + // Começa no domingo da semana em que o mês começa (day() retorna 0 para domingo) + let currentDay = startOfMonth.subtract(startOfMonth.day(), 'day'); + + // Gera 6 semanas (6*7 = 42 dias) + for (let i = 0; i < 42; i++) { + grid.push(currentDay); + currentDay = currentDay.add(1, 'day'); + } + return grid; + }; + + const dateGrid = useMemo(() => generateDateGrid(), [currentDate]); + const weekDays = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb']; + + const handleDateClick = (day) => { + setSelectedDay(day); + // Opcional: Adicionar lógica para abrir o agendamento do dia/semana/mês (sua primeira imagem) + // Se você quiser que o clique abra a tela de agendamento de slots: + // Exemplo: onSelectDate(day); + }; + + // Função para obter o status de agendamentos para o indicador (ponto azul) + const getAppointmentCount = (day) => { + return DictAgendamentosOrganizados[day.format('YYYY-MM-DD')]?.length || 0; + }; + + return ( +
+ {/* Painel lateral de informações */} +
+
+ {selectedDay.format('MMM')} + {selectedDay.format('DD')} +
+
+

{selectedDay.format('dddd')}

+

{selectedDay.format('D [de] MMMM [de] YYYY')}

+
+
+

Consultas para {selectedDay.format('DD/MM')}

+ {showSpinner ? : (DictAgendamentosOrganizados[selectedDay.format('YYYY-MM-DD')]?.length > 0) ? ( + DictAgendamentosOrganizados[selectedDay.format('YYYY-MM-DD')].map(app => ( +
+
{dayjs(app.scheduled_at).format('HH:mm')}
+
+ {app.paciente_nome} + Dr(a). {app.medico_nome} +
+
+ {app.status === 'cancelled' ? ( + + ) : ( + + )} +
+
+ )) + ) : ( +

Nenhuma consulta agendada.

+ )} +
+
+ + {/* Calendário Principal */} +
+ {/* Legenda */} +
+
Realizado
+
Confirmado
+
Agendado
+
Cancelado
+
+ + {/* Controles de navegação e Jump */} +
+
+

{currentDate.format('MMMM [de] YYYY')}

+
+ + + +
+
+ +
+ + + +
+
+ + {/* Grid dos dias */} +
+ {weekDays.map(day =>
{day}
)} + {dateGrid.map((day, index) => { + const count = getAppointmentCount(day); + const cellClasses = `day-cell ${day.isSame(currentDate, 'month') ? 'current-month' : 'other-month'} ${day.isSame(dayjs(), 'day') ? 'today' : ''} ${day.isSame(selectedDay, 'day') ? 'selected' : ''}`; + return ( +
handleDateClick(day)} + > + {day.format('D')} + {count > 0 &&
{count}
} +
+ ); + })} +
+
+
+ ); +}; + +export default CalendarComponent; \ No newline at end of file diff --git a/src/components/AgendarConsulta/FormNovaConsulta.jsx b/src/components/AgendarConsulta/FormNovaConsulta.jsx index 39575c2..0e84fa5 100644 --- a/src/components/AgendarConsulta/FormNovaConsulta.jsx +++ b/src/components/AgendarConsulta/FormNovaConsulta.jsx @@ -1,11 +1,12 @@ import InputMask from "react-input-mask"; import "./style/formagendamentos.css"; import { useState, useEffect, useCallback } from "react"; -import { GetPatientByCPF } from "../utils/Functions-Endpoints/Patient"; +import { GetPatientByCPF, GetAllPatients } from "../utils/Functions-Endpoints/Patient"; import { GetAllDoctors } from "../utils/Functions-Endpoints/Doctor"; import { useAuth } from "../utils/AuthProvider"; import API_KEY from "../utils/apiKeys"; + const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) => { const { getAuthorizationHeader } = useAuth(); @@ -19,6 +20,10 @@ const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) => const [horarioTermino, setHorarioTermino] = useState(''); const [horariosDisponiveis, sethorariosDisponiveis] = useState([]); + const [todosPacientes, setTodosPacientes] = useState([]) + const [pacientesFiltrados, setPacientesFiltrados] = useState([]) + const [isDropdownPacienteOpen, setIsDropdownPacienteOpen] = useState(false) + const [status, setStatus] = useState("confirmed") let authHeader = getAuthorizationHeader() @@ -70,6 +75,13 @@ const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) => setTodosProfissionais(Medicos); }, [authHeader]); + const ChamarPacientes = useCallback (async () => { + const Pacientes = await GetAllPatients(authHeader); + setTodosPacientes(Pacientes) + console.log("pacientes") + console.log(Pacientes) + }, [authHeader]) + useEffect(() => { console.log("Horario","tessssste" ) @@ -82,6 +94,11 @@ const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) => ChamarMedicos(); }, [ChamarMedicos]); + useEffect(() => { + + ChamarPacientes() + }, [ChamarPacientes]) + useEffect(() => { if (!agendamento.dataAtendimento || !agendamento.doctor_id) return; @@ -126,6 +143,25 @@ const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) => setIsDropdownOpen(filtered.length > 0); }; + const handleSearchPaciente = (e) => { + const term = e.target.value; + handleChange(e); + + if (term.trim() === '') { + setPacientesFiltrados([]); + setIsDropdownPacienteOpen(false); + return; + } + + const filtered = todosPacientes.filter(p => + p.full_name.toLowerCase().includes(term.toLowerCase()) + ); + console.log(filtered.length > 0, "filtrados") + + setPacientesFiltrados(filtered); + setIsDropdownPacienteOpen(filtered.length > 0); + } + const handleSelectProfissional = (profissional) => { setAgendamento(prev => ({ ...prev, @@ -136,6 +172,18 @@ const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) => setIsDropdownOpen(false); }; + const handleSelectPaciente = (paciente) => { + setAgendamento(prev => ({ + ...prev, + patient_id:paciente.id, + paciente_nome: paciente.full_name, + paciente_cpf: paciente.cpf + })) + setProfissionaisFiltrados([]) + setIsDropdownPacienteOpen(false) + + } + const formatarHora = (datetimeString) => { return datetimeString?.substring(11, 16) || ''; }; @@ -195,7 +243,6 @@ const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) =>
Sucesso
-

Agendamento salvo com sucesso!

@@ -211,17 +258,7 @@ const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) =>

Informações do paciente

-
- - -
- +
name="paciente_nome" placeholder="Insira o nome do paciente" required + onChange={(e) => handleSearchPaciente(e)} + value={agendamento?.paciente_nome || ""} + autoComplete="off" + /> +
+ {isDropdownPacienteOpen && pacientesFiltrados.length > 0 && ( +
+ {pacientesFiltrados.map((paciente) => ( +
handleSelectPaciente(paciente)} + > + {`${paciente.full_name.split(" ")[0]} ${paciente.full_name.split(" ")[1]} - ${paciente.cpf}`} +
+ ))} +
+ )} +
+ +
+ +
@@ -320,29 +383,6 @@ const FormNovaConsulta = ({ onCancel, onSave, setAgendamento, agendamento }) =>
-
- -
- - -

{sessoes}

- - -
-
-
); }; -export default FormNovaConsulta; \ No newline at end of file +export default FormNovaConsulta; diff --git a/src/components/AgendarConsulta/style/formagendamentos.css b/src/components/AgendarConsulta/style/formagendamentos.css index 2e90f74..d3fc9ae 100644 --- a/src/components/AgendarConsulta/style/formagendamentos.css +++ b/src/components/AgendarConsulta/style/formagendamentos.css @@ -414,96 +414,248 @@ html[data-bs-theme="dark"] svg { } +/* ========== Modal Overlay ========== */ .modal-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; - z-index: 1000; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 9999; + animation: fadeIn 0.3s ease-in; } -.modal-content { - background: white; - padding: 2rem; - border-radius: 12px; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); - max-width: 400px; - width: 90%; - text-align: center; - animation: modalAppear 0.3s ease-out; -} - -@keyframes modalAppear { +@keyframes fadeIn { from { opacity: 0; - transform: scale(0.9) translateY(-20px); } to { opacity: 1; - transform: scale(1) translateY(0); } } -.modal-header h3 { - margin: 0 0 1rem 0; - color: #28a745; - font-size: 1.5rem; - font-weight: 600; +/* ========== Modal Content ========== */ +.modal-content { + background-color: #fff; + border-radius: 10px; + width: 400px; + max-width: 90%; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); + overflow: hidden; + animation: slideIn 0.3s ease-out; } -.modal-body { - margin-bottom: 1.5rem; +@keyframes slideIn { + from { + opacity: 0; + transform: translateY(-20px) scale(0.95); + } + to { + opacity: 1; + transform: translateY(0) scale(1); + } } -.modal-body p { +/* ========== Modal Header ========== */ +.modal-header { + background-color: #1e3a8a; + padding: 15px 20px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.modal-header.success { + background-color: #1e3a8a !important; +} + +.modal-header.error { + background-color: #dc3545 !important; +} + +.modal-header .modal-title { + color: #fff; margin: 0; - color: #333; - font-size: 1.1rem; - line-height: 1.5; + font-size: 1.2rem; + font-weight: bold; } +.modal-close-btn { + background: none; + border: none; + font-size: 20px; + color: #fff; + cursor: pointer; + padding: 0; + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + transition: background-color 0.2s; +} + +.modal-close-btn:hover { + background-color: rgba(255, 255, 255, 0.2); +} + +/* ========== Modal Body ========== */ +.modal-body { + padding: 25px 20px; + background: #fff; +} + +.modal-body .modal-message { + color: #111; + font-size: 1.1rem; + margin: 0; + font-weight: 600; + line-height: 1.4; + text-align: center; +} + +.modal-submessage { + color: #666; + font-size: 0.9rem; + margin: 10px 0 0 0; + line-height: 1.4; + text-align: center; +} + +/* ========== Modal Footer ========== */ .modal-footer { display: flex; - justify-content: center; + justify-content: flex-end; + padding: 15px 20px; + border-top: 1px solid #ddd; + background: #fff; } -.modal-footer .btn-primary { - background: #28a745; - padding: 10px 24px; +.modal-confirm-btn { + background-color: #1e3a8a; + color: #fff; + border: none; + padding: 8px 20px; + border-radius: 6px; + cursor: pointer; font-size: 1rem; - font-weight: 500; + font-weight: bold; + transition: all 0.2s ease; } -.modal-footer .btn-primary:hover { - background: #218838; +.modal-confirm-btn:hover { + background-color: #1e40af; + transform: translateY(-1px); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); +} + +.modal-confirm-btn.success { + background-color: #1e3a8a !important; +} + +.modal-confirm-btn.success:hover { + background-color: #1e40af !important; +} + +.modal-confirm-btn.error { + background-color: #dc3545 !important; +} + +.modal-confirm-btn.error:hover { + background-color: #c82333 !important; } +/* ========== Dark Mode ========== */ html[data-bs-theme="dark"] .modal-content { background: #232323 !important; - color: #e0e0e0 !important; - border: 1px solid #404053 !important; + border: 1px solid #404053; } -html[data-bs-theme="dark"] .modal-header h3 { - color: #4ade80 !important; +html[data-bs-theme="dark"] .modal-header { + background: #1e3a8a !important; } -html[data-bs-theme="dark"] .modal-body p { +html[data-bs-theme="dark"] .modal-header.success { + background-color: #1e3a8a !important; +} + +html[data-bs-theme="dark"] .modal-header.error { + background-color: #dc3545 !important; +} + +html[data-bs-theme="dark"] .modal-header .modal-title, +html[data-bs-theme="dark"] .modal-close-btn { + color: white !important; +} + +html[data-bs-theme="dark"] .modal-body { + background: #232323 !important; +} + +html[data-bs-theme="dark"] .modal-body .modal-message { color: #e0e0e0 !important; } -html[data-bs-theme="dark"] .modal-footer .btn-primary { - background: #16a34a !important; +html[data-bs-theme="dark"] .modal-submessage { + color: #b0b7c3 !important; } -html[data-bs-theme="dark"] .modal-footer .btn-primary:hover { - background: #15803d !important; +html[data-bs-theme="dark"] .modal-footer { + background: #232323 !important; + border-top: 1px solid #404053; +} + +html[data-bs-theme="dark"] .modal-confirm-btn { + background: #2563eb !important; +} + +html[data-bs-theme="dark"] .modal-confirm-btn:hover { + background: #1e40af !important; +} + +/* ========== Responsive ========== */ +@media (max-width: 768px) { + .modal-content { + width: 95%; + margin: 1rem; + } + + .modal-body { + padding: 20px 15px; + } + + .modal-message { + font-size: 1rem; + } +} + +@media (max-width: 480px) { + .modal-header { + padding: 12px 15px; + } + + .modal-header .modal-title { + font-size: 1.1rem; + } + + .modal-body { + padding: 15px; + } + + .modal-footer { + padding: 12px 15px; + } + + .modal-confirm-btn { + padding: 6px 16px; + font-size: 0.9rem; + } } @@ -516,4 +668,25 @@ html[data-bs-theme="dark"] .modal-footer .btn-primary:hover { html[data-bs-theme="dark"] .horario-termino-readonly { background-color: #2d3748 !important; color: #a0aec0 !important; +} + +.campo-cpf{ + margin-left: 40px; +} + +input[name="paciente_cpf"]{ + width: 12rem; +} + +.dropdown-pacientes{ + position: absolute; + top: 100%; + left: 0; + + background-color: white; + border: 1px solid #ccc; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + z-index: 100; + max-height: 200px; + overflow-y: auto; } \ No newline at end of file diff --git a/src/components/Estilo/Toggle.css b/src/components/Estilo/Toggle.css new file mode 100644 index 0000000..731f0cf --- /dev/null +++ b/src/components/Estilo/Toggle.css @@ -0,0 +1,339 @@ +/* ========== Variáveis CSS ========== */ +:root { + --toggle-bg: #ffffff; + --toggle-border: #e5e7eb; + --toggle-hover: #f3f4f6; + --toggle-active: #dbeafe; + --toggle-text: #1f2937; + --toggle-text-secondary: #374151; + --toggle-icon: #6b7280; + --toggle-accent: #2563eb; + --toggle-accent-hover: #1d4ed8; + --toggle-shadow: rgba(0, 0, 0, 0.05); + --toggle-shadow-hover: rgba(0, 0, 0, 0.1); +} + +/* ========== Container Principal ========== */ +.toggle-sidebar-wrapper { + background: var(--toggle-bg); + border-radius: 12px; + border: 1px solid var(--toggle-border); + margin-bottom: 16px; + overflow-y: auto; + overflow-x: hidden; + box-shadow: 0 1px 3px var(--toggle-shadow); + transition: box-shadow 0.2s ease; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.toggle-sidebar-wrapper::-webkit-scrollbar { + display: none !important; + width: 0 !important; + height: 0 !important; +} + +.toggle-sidebar-wrapper:hover { + box-shadow: 0 4px 6px var(--toggle-shadow-hover); +} + +.container-title { + display: flex; + align-items: center; + justify-content: space-between; + padding: 14px 18px; + cursor: pointer; + background-color: var(--toggle-bg); + transition: background-color 0.2s ease; + border-bottom: 1px solid var(--toggle-border); +} + +.container-title:hover { + background-color: var(--toggle-hover); +} + +.toggle-title { + color: var(--toggle-text); + font-weight: 600; + font-size: 16px; + margin: 0; + user-select: none; + letter-spacing: -0.01em; +} + +.toggle-arrow { + color: var(--toggle-icon); + transition: transform 0.2s ease; + font-size: 14px; +} + +.container-title:hover .toggle-arrow { + color: var(--toggle-accent); +} + +/* ========== Menu Lista ========== */ +.sidebar-menu-list { + list-style: none; + padding: 8px; + margin: 0; + overflow-y: auto; + overflow-x: hidden; + display: flex; + flex-direction: column; + min-height: 100%; + + /* Scroll invisível mas funcional */ + scrollbar-width: none; + -ms-overflow-style: none; +} + +.sidebar-menu-list::-webkit-scrollbar { + display: none !important; + width: 0 !important; + height: 0 !important; +} + +.sidebar-item { + list-style: none; + margin: 2px 0; +} + +/* ========== Links da Sidebar ========== */ +.sidebar-link { + display: flex; + align-items: center; + text-decoration: none; + color: var(--toggle-text-secondary); + padding: 11px 14px; + border-radius: 8px; + font-size: 15px; + width: 100%; + text-align: left; + border: none; + background: none; + cursor: pointer; + font-weight: 500; + transition: none; + gap: 12px; +} + +.sidebar-link i { + font-size: 19px; + color: var(--toggle-icon); + transition: none; +} + +.sidebar-link:hover { + background-color: var(--toggle-hover); + color: var(--toggle-text); +} + +.sidebar-link:hover i { + color: var(--toggle-accent); +} + +.sidebar-link.active { + background-color: var(--toggle-active); + color: var(--toggle-accent); + font-weight: 600; +} + +.sidebar-link.active i { + color: var(--toggle-accent); +} + +/* ========== Título da Sidebar ========== */ +.sidebar-title { + padding: 18px 14px 10px; + font-size: 13px; + color: var(--toggle-text-secondary); + text-transform: uppercase; + font-weight: 600; + letter-spacing: 0.05em; +} + +/* ========== Itens com Submenu ========== */ +.sidebar-item.has-sub { + margin: 4px 0; +} + +.sidebar-item.has-sub .sidebar-link { + position: relative; +} + +.sidebar-item.has-sub .sidebar-link::after { + content: "\F285"; + font-family: "bootstrap-icons"; + margin-left: auto; + transition: transform 0.2s ease; + font-size: 12px; + color: var(--toggle-icon); +} + +.sidebar-item.has-sub.active .sidebar-link::after { + transform: rotate(180deg); +} + +.sidebar-item.has-sub .sidebar-link.submenu-active { + background-color: var(--toggle-hover); + color: var(--toggle-text); +} + +.sidebar-item.has-sub .sidebar-link.submenu-active i { + color: var(--toggle-accent); +} + +/* ========== Submenu ========== */ +.submenu { + list-style: none; + padding: 4px 0 4px 8px; + margin: 0; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease; + + /* Scroll invisível */ + scrollbar-width: none; + -ms-overflow-style: none; +} + +.submenu::-webkit-scrollbar { + display: none; +} + +.sidebar-item.has-sub.active .submenu { + max-height: 1000px; + overflow: visible; +} + +.submenu-item { + margin: 2px 0; +} + +.submenu-item .sidebar-link { + padding: 9px 14px 9px 40px; + font-size: 14px; + position: relative; +} + +.submenu-item .sidebar-link::before { + content: ''; + position: absolute; + left: 22px; + top: 50%; + transform: translateY(-50%); + width: 5px; + height: 5px; + border-radius: 50%; + background-color: var(--toggle-icon); +} + +.submenu-item .sidebar-link:hover::before { + background-color: var(--toggle-accent); +} + +.submenu-item .sidebar-link.active::before { + background-color: var(--toggle-accent); +} + +/* ========== Ícones e Indicadores ========== */ +.external-icon { + font-size: 11px; + margin-left: auto; + opacity: 0.6; + color: var(--toggle-icon); +} + +.active-indicator { + display: none; +} + +/* ========== Botão de Logout ========== */ +.logout-item { + margin-top: auto; + padding-top: 16px; + border-top: 1px solid var(--toggle-border); + position: sticky; + bottom: 0; + background: var(--toggle-bg); + z-index: 10; +} + +.logout-button { + display: flex; + align-items: center; + text-decoration: none; + color: #dc3545; + padding: 11px 14px; + border-radius: 8px; + font-size: 15px; + width: 100%; + text-align: left; + border: none; + background: none; + cursor: pointer; + font-weight: 500; + transition: background-color 0.2s ease; + gap: 12px; +} + +.logout-button i { + font-size: 19px; + color: #dc3545; +} + +.logout-button:hover { + background-color: #fee; + color: #c82333; +} + +.logout-button:hover i { + color: #c82333; +} + +/* ========== Scroll Invisível mas Funcional ========== */ +/* Containers do Mazer template que envolvem o ToggleSidebar */ +#sidebar, +#sidebar .sidebar-wrapper, +#sidebar .sidebar-wrapper.active, +.sidebar-wrapper, +.sidebar-wrapper.active, +.sidebar-menu, +.sidebar-menu ul, +.sidebar-menu ul.menu, +ul.menu { + overflow-y: auto !important; + overflow-x: hidden !important; + scrollbar-width: none !important; + -ms-overflow-style: none !important; +} + +#sidebar::-webkit-scrollbar, +#sidebar .sidebar-wrapper::-webkit-scrollbar, +#sidebar .sidebar-wrapper.active::-webkit-scrollbar, +.sidebar-wrapper::-webkit-scrollbar, +.sidebar-wrapper.active::-webkit-scrollbar, +.sidebar-menu::-webkit-scrollbar, +.sidebar-menu ul::-webkit-scrollbar, +.sidebar-menu ul.menu::-webkit-scrollbar, +ul.menu::-webkit-scrollbar { + display: none !important; + width: 0 !important; + height: 0 !important; + background: transparent !important; +} + +/* ========== Dark Mode Support ========== */ +html[data-bs-theme="dark"] { + --toggle-bg: #1f2937; + --toggle-border: #374151; + --toggle-hover: #374151; + --toggle-active: #1e3a8a; + --toggle-text: #f9fafb; + --toggle-text-secondary: #d1d5db; + --toggle-icon: #9ca3af; + --toggle-accent: #60a5fa; + --toggle-accent-hover: #3b82f6; + --toggle-shadow: rgba(0, 0, 0, 0.3); + --toggle-shadow-hover: rgba(0, 0, 0, 0.5); +} diff --git a/src/components/Sidebar.jsx b/src/components/Sidebar.jsx index e64a80f..006a396 100644 --- a/src/components/Sidebar.jsx +++ b/src/components/Sidebar.jsx @@ -1,7 +1,16 @@ import React, { useState, useEffect } from "react"; import { Link, useNavigate } from "react-router-dom"; -import TrocardePerfis from "./TrocardePerfis"; import MobileMenuToggle from "./MobileMenuToggle"; +import ToggleSidebar from "./ToggleSidebar"; +import { useAuth } from "./utils/AuthProvider"; + +import PacienteItems from "../data/sidebar-items-paciente.json" +import DoctorItems from "../data/sidebar-items-medico.json" +import admItems from "../data/sidebar-items-adm.json" +import SecretariaItems from "../data/sidebar-items-secretaria.json" +import FinanceiroItems from "../data/sidebar-items-financeiro.json" + +import { UserInfos } from "./utils/Functions-Endpoints/General"; function Sidebar({ menuItems }) { const [isActive, setIsActive] = useState(true); @@ -9,6 +18,24 @@ function Sidebar({ menuItems }) { const [isMobile, setIsMobile] = useState(false); const [showLogoutModal, setShowLogoutModal] = useState(false); const navigate = useNavigate(); + + const [roleUser, setRoleUser] = useState([]) + + const {getAuthorizationHeader} = useAuth(); + + const authHeader = getAuthorizationHeader(); + + let pathname = window.location.pathname.split("/")[1] + + +// useEffect para definir quais toggle da sidebar devem aparecer + useEffect(() => { + let teste = localStorage.getItem("roleUser") + setRoleUser(teste) + + }, [authHeader]) + + // Detecta se é mobile/tablet useEffect(() => { @@ -18,6 +45,7 @@ function Sidebar({ menuItems }) { setIsActive(!mobile); }; + checkScreenSize(); window.addEventListener("resize", checkScreenSize); return () => window.removeEventListener("resize", checkScreenSize); @@ -91,6 +119,7 @@ function Sidebar({ menuItems }) { const handleLogoutCancel = () => setShowLogoutModal(false); + const renderLink = (item) => { if (item.url && item.url.startsWith("/")) { return ( @@ -213,55 +242,41 @@ function Sidebar({ menuItems }) {
    - {menuItems && - menuItems.map((item, index) => { - if (item.isTitle) - return ( -
  • - {item.name} -
  • - ); - if (item.submenu) - return ( -
  • - -
      - {item.submenu.map((subItem, subIndex) => ( -
    • - {renderLink(subItem)} -
    • - ))} -
    -
  • - ); + {roleUser.includes("admin") && + + } + {roleUser.includes("admin") || roleUser.includes("secretaria") ? + + : + null + } - return ( -
  • - {renderLink(item)} -
  • - ); - })} + {roleUser.includes("admin") || roleUser.includes("medico") ? + + :null + } - {/* Logout */} + {roleUser.includes("admin") || roleUser.includes("financeiro") ? + + :null + } - + {roleUser.includes("admin") || roleUser.includes("paciente") ? + + : null + } + + {/* Botão de Logout */} +
  • + +
diff --git a/src/components/ToggleSidebar.jsx b/src/components/ToggleSidebar.jsx new file mode 100644 index 0000000..01eca61 --- /dev/null +++ b/src/components/ToggleSidebar.jsx @@ -0,0 +1,139 @@ +import React from 'react' +import { useState, useEffect } from 'react' +import { Link, useLocation } from 'react-router-dom' +import "./Estilo/Toggle.css" + +const ToggleSidebar = ({ perfil, items, defaultOpen = false }) => { + const [isOpen, setOpen] = useState(defaultOpen) + const [openSubmenu, setOpenSubmenu] = useState(null) + const [activeLink, setActiveLink] = useState('') + const location = useLocation() + + useEffect(() => { + const currentPath = location.pathname + setActiveLink(currentPath) + + const findActiveSubmenu = () => { + for (let item of items) { + if (item.submenu) { + const activeSubItem = item.submenu.find(subItem => + subItem.url === currentPath + ) + if (activeSubItem) { + setOpenSubmenu(item.key) + return + } + } else if (item.url === currentPath) { + setActiveLink(currentPath) + } + } + } + + findActiveSubmenu() + }, [location.pathname, items]) + + const OpenClose = () => { + setOpen(!isOpen) + } + + const handleSubmenuClick = (key) => { + setOpenSubmenu(openSubmenu === key ? null : key) + } + + const isLinkActive = (url) => { + return activeLink === url + } + + const renderLink = (item, isSubmenu = false) => { + const isActive = isLinkActive(item.url) + const linkClass = `sidebar-link ${isActive ? 'active' : ''} ${isSubmenu ? 'submenu-link' : ''}` + + if (item.url && item.url.startsWith("/")) { + return ( + !isSubmenu && setActiveLink(item.url)} + > + {item.icon && } + {item.name} + {isActive &&
} + + ) + } + + return ( + + {item.icon && } + {item.name} + + + ) + } + + return ( +
+
+

{perfil}

+ {isOpen + ? + : + } +
+ + {isOpen && ( +
    + {items.map((item, index) => { + if (item.isTitle) { + return ( +
  • + {item.name} +
  • + ) + } + + if (item.submenu) { + const isSubmenuActive = openSubmenu === item.key + return ( +
  • + + +
      + {item.submenu.map((subItem, subIndex) => ( +
    • + {renderLink(subItem, true)} +
    • + ))} +
    +
  • + ) + } + + return ( +
  • + {renderLink(item)} +
  • + ) + })} +
+ )} +
+ ) +} + +export default ToggleSidebar diff --git a/src/components/doctors/DoctorForm.jsx b/src/components/doctors/DoctorForm.jsx index 8b74684..8f553ab 100644 --- a/src/components/doctors/DoctorForm.jsx +++ b/src/components/doctors/DoctorForm.jsx @@ -338,7 +338,6 @@ function DoctorForm({ onSave, onCancel, formData, setFormData, isLoading }) { } } - alert("Médico salvo com sucesso!"); } catch (error) { console.error("Erro ao salvar médico ou disponibilidade:", error); alert("Erro ao salvar médico ou disponibilidade."); diff --git a/src/components/patients/PatientForm.jsx b/src/components/patients/PatientForm.jsx index c554020..ddb76e4 100644 --- a/src/components/patients/PatientForm.jsx +++ b/src/components/patients/PatientForm.jsx @@ -52,6 +52,8 @@ function PatientForm({ onSave, onCancel, formData, setFormData, isLoading }) { })); }; + + useEffect(() => { const peso = parseFloat(formData.weight_kg); const altura = parseFloat(formData.height_m); @@ -63,9 +65,20 @@ function PatientForm({ onSave, onCancel, formData, setFormData, isLoading }) { } }, [formData.weight_kg, formData.height_m, setFormData]); + const handleCep = (value) => { + if(value.length === 8){ + fetch(`https://viacep.com.br/ws/${value}/json/`) + .then(response => response.json()) + .then(result => {setFormData(prev => ({...prev, street:result.logradouro,neighborhood:result.bairro,city:result.localidade, + state:result.estado + + }))}) + } + } + const handleChange = (e) => { const { name, value, type, checked, files } = e.target; - + console.log(name, value) if (value && emptyFields.includes(name)) { setEmptyFields(prev => prev.filter(field => field !== name)); } @@ -101,8 +114,11 @@ function PatientForm({ onSave, onCancel, formData, setFormData, isLoading }) { } else if (name.includes('weight_kg') || name.includes('height_m')) { setFormData(prev => ({ ...prev, [name]: FormatPeso(value) })); } else if (name === 'rn_in_insurance' || name === 'vip' || name === 'validadeIndeterminada') { - setFormData(prev => ({ ...prev, [name]: checked })); - } else { + setFormData(prev => ({ ...prev, [name]: checked })); + } else if(name === 'cep'){ + handleCep(value) + setFormData(prev => ({...prev, [name]: value})) + }else { setFormData(prev => ({ ...prev, [name]: value })); } }; @@ -189,9 +205,6 @@ function PatientForm({ onSave, onCancel, formData, setFormData, isLoading }) { } const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - if (!emailRegex.test(formData.email)) { - throw new Error('Email inválido. Por favor, verifique o email digitado.'); - } await onSave({ ...formData, bmi: parseFloat(formData.bmi) || null }); }; @@ -647,4 +660,4 @@ function PatientForm({ onSave, onCancel, formData, setFormData, isLoading }) { ); } -export default PatientForm; \ No newline at end of file +export default PatientForm; diff --git a/src/components/utils/Functions-Endpoints/General.js b/src/components/utils/Functions-Endpoints/General.js index 17b2711..1235901 100644 --- a/src/components/utils/Functions-Endpoints/General.js +++ b/src/components/utils/Functions-Endpoints/General.js @@ -38,4 +38,10 @@ const UserInfos = async (access_token) => { } }; -export { UserInfos }; \ No newline at end of file +const SearchCep = async (cep) => { + fetch(`https://brasilapi.com.br/api/cep/v1/${cep}`) + .then(response => console.log(response)) +} + + +export { UserInfos,SearchCep }; diff --git a/src/data/sidebar-items-adm.json b/src/data/sidebar-items-adm.json index 4ab0555..5b4c554 100644 --- a/src/data/sidebar-items-adm.json +++ b/src/data/sidebar-items-adm.json @@ -1,8 +1,4 @@ [ - { - "name": "Menu", - "isTitle": true - }, { "name": "Lista de Pacientes", "icon": "clipboard-heart-fill", @@ -24,17 +20,10 @@ "name": "Relatórios", "icon": "table", "url": "/admin/laudo" - }, - - { - "name": "Gestão de Usuários", - "icon": "person-badge-fill", - "url": "/admin/gestao" - }, - + }, { "name": "Painel Administrativo", "icon": "file-bar-graph-fill", "url": "/admin/painel" } -] \ No newline at end of file +] diff --git a/src/data/sidebar-items-financeiro.json b/src/data/sidebar-items-financeiro.json index dfce9bc..0495b53 100644 --- a/src/data/sidebar-items-financeiro.json +++ b/src/data/sidebar-items-financeiro.json @@ -1,8 +1,4 @@ [ - { - "name": "Menu-Financeiro", - "isTitle": true - }, { "name": "Controle Financeiro", "icon": "cash-coin", diff --git a/src/data/sidebar-items-medico.json b/src/data/sidebar-items-medico.json index b22796a..0ededdb 100644 --- a/src/data/sidebar-items-medico.json +++ b/src/data/sidebar-items-medico.json @@ -1,14 +1,4 @@ [ - { - "name": "Menu", - "isTitle": true - }, - - { - "name": "Prontuário", - "icon": "calendar-plus-fill", - "url": "/medico/prontuario" - }, { "name": "Seus Agendamentos", "icon": "calendar", diff --git a/src/data/sidebar-items-paciente.json b/src/data/sidebar-items-paciente.json index bb15caf..d0442e4 100644 --- a/src/data/sidebar-items-paciente.json +++ b/src/data/sidebar-items-paciente.json @@ -1,13 +1,17 @@ [ -{ + { + "name": "Início", + "icon": "house-fill", + "url": "/paciente" + }, + { "name": "Minhas consulta", "icon": "calendar-plus-fill", "url": "/paciente/agendamento" }, - { "name": "Meus laudos", "icon": "table", "url": "/paciente/laudo" } -] +] \ No newline at end of file diff --git a/src/data/sidebar-items-secretaria.json b/src/data/sidebar-items-secretaria.json index afe9e0a..1d333fe 100644 --- a/src/data/sidebar-items-secretaria.json +++ b/src/data/sidebar-items-secretaria.json @@ -1,9 +1,4 @@ [ - { - "name": "Menu", - "isTitle": true - }, - { "name":"Início", "url": "/secretaria/", @@ -25,11 +20,5 @@ "name": "Agendar consulta", "icon": "calendar-plus-fill", "url": "/secretaria/agendamento" - }, - - { - "name": "Laudo do Paciente", - "icon": "table", - "url": "/secretaria/laudo" } -] \ No newline at end of file +] diff --git a/src/pages/Agendamento.jsx b/src/pages/Agendamento.jsx index 44e7e6a..89e9388 100644 --- a/src/pages/Agendamento.jsx +++ b/src/pages/Agendamento.jsx @@ -2,671 +2,461 @@ import React, { useState, useMemo, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import API_KEY from '../components/utils/apiKeys.js'; import AgendamentoCadastroManager from './AgendamentoCadastroManager.jsx'; +import { GetPatientByID } from '../components/utils/Functions-Endpoints/Patient.js'; import TabelaAgendamentoDia from '../components/AgendarConsulta/TabelaAgendamentoDia'; import TabelaAgendamentoSemana from '../components/AgendarConsulta/TabelaAgendamentoSemana'; import TabelaAgendamentoMes from '../components/AgendarConsulta/TabelaAgendamentoMes'; import FormNovaConsulta from '../components/AgendarConsulta/FormNovaConsulta'; -// Importação de endpoints para lógica da Fila de Espera e Médicos (versão main) -import { GetPatientByID } from '../components/utils/Functions-Endpoints/Patient.js'; import { GetAllDoctors, GetDoctorByID } from '../components/utils/Functions-Endpoints/Doctor.js'; - import { useAuth } from '../components/utils/AuthProvider.js'; -// ✨ NOVO: Caminho de importação corrigido com base na sua estrutura de pastas -import AgendamentosMes from '../components/AgendarConsulta/DadosConsultasMock.js'; - import dayjs from 'dayjs'; +import 'dayjs/locale/pt-br'; +import isBetween from 'dayjs/plugin/isBetween'; +import localeData from 'dayjs/plugin/localeData'; +import { Search, ChevronLeft, ChevronRight, Edit, Trash2 } from 'lucide-react'; +import CalendarComponent from '../components/AgendarConsulta/CalendarComponent.jsx'; import "./style/Agendamento.css"; import './style/FilaEspera.css'; -import { Search } from 'lucide-react'; - import Spinner from '../components/Spinner.jsx'; +dayjs.locale('pt-br'); +dayjs.extend(isBetween); +dayjs.extend(localeData); - -const Agendamento = ({setDictInfo}) => { - const navigate = useNavigate(); - - const [listaTodosAgendamentos, setListaTodosAgendamentos] = useState([]) - - const [selectedID, setSelectedId] = useState('0') - const [filaEsperaData, setFilaEsperaData] = useState([]) - const [FiladeEspera, setFiladeEspera] = useState(false); - const [tabela, setTabela] = useState('diario'); - const [PageNovaConsulta, setPageConsulta] = useState(false); - const [searchTerm, setSearchTerm] = useState(''); - const [agendamentos, setAgendamentos] = useState() - const {getAuthorizationHeader} = useAuth() - const [DictAgendamentosOrganizados, setAgendamentosOrganizados ] = useState({}) - - const [showDeleteModal, setShowDeleteModal] = useState(false) - const [AgendamentoFiltrado, setAgendamentoFiltrado] = useState() - - const [ListaDeMedicos, setListaDeMedicos] = useState([]) - const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([]) - const [searchTermDoctor, setSearchTermDoctor] = useState(''); - - const [MedicoFiltrado, setMedicoFiltrado] = useState({id:"vazio"}) - - - const [cacheAgendamentos, setCacheAgendamentos] = useState([]) - - const [showConfirmModal, setShowConfirmModal] = useState(false) - const [motivoCancelamento, setMotivoCancelamento] = useState("") - - const [listaConsultasID, setListaConsultaID] = useState([]) - const [coresConsultas,setCoresConsultas] = useState([]) - - const [showSpinner,setShowSpinner] = useState(true) +const Agendamento = ({ setDictInfo }) => { + const navigate = useNavigate(); + const [listaTodosAgendamentos, setListaTodosAgendamentos] = useState([]); + const [selectedID, setSelectedId] = useState('0'); + const [filaEsperaData, setFilaEsperaData] = useState([]); + const [FiladeEspera, setFiladeEspera] = useState(false); + const [PageNovaConsulta, setPageConsulta] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + const { getAuthorizationHeader } = useAuth(); + const [DictAgendamentosOrganizados, setAgendamentosOrganizados] = useState({}); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const [ListaDeMedicos, setListaDeMedicos] = useState([]); + const [FiltredTodosMedicos, setFiltredTodosMedicos] = useState([]); + const [searchTermDoctor, setSearchTermDoctor] = useState(''); + const [MedicoFiltrado, setMedicoFiltrado] = useState({ id: "vazio" }); + const [cacheAgendamentos, setCacheAgendamentos] = useState([]); + const [appointmentToEdit, setAppointmentToEdit] = useState(null); + const [showConfirmModal, setShowConfirmModal] = useState(false); + const [motivoCancelamento, setMotivoCancelamento] = useState(""); + const [showSpinner, setShowSpinner] = useState(true); + const [waitlistSearch, setWaitlistSearch] = useState(''); + const [waitSortKey, setWaitSortKey] = useState(null); + const [waitSortDir, setWaitSortDir] = useState('asc'); + const [waitPage, setWaitPage] = useState(1); + const [waitPerPage, setWaitPerPage] = useState(10); + const authHeader = getAuthorizationHeader(); + const cacheMedicos = useMemo(() => ({}), []); + const cachePacientes = useMemo(() => ({}), []); + const [currentDate, setCurrentDate] = useState(dayjs()); + const [selectedDay, setSelectedDay] = useState(dayjs()); - let authHeader = getAuthorizationHeader() - -const cacheMedicos = {}; -const cachePacientes = {}; + const [editingAppointmentId, setEditingAppointmentId] = useState(null); + + const [quickJump, setQuickJump] = useState({ + month: currentDate.month(), + year: currentDate.year() + }); - -useMemo(() => { - if (!listaTodosAgendamentos.length) return { agendamentosOrganizados: {}, filaEsperaData: [] }; -console.log("recarregando") - const DictAgendamentosOrganizados = {}; - const ListaFilaDeEspera = []; - - const fetchDados = async () => { - for (const agendamento of listaTodosAgendamentos) { - - // Cache de médico e paciente - if (!cacheMedicos[agendamento.doctor_id]) { - cacheMedicos[agendamento.doctor_id] = await GetDoctorByID(agendamento.doctor_id, authHeader); + const fetchAppointments = async () => { + const myHeaders = new Headers(); myHeaders.append("Authorization", authHeader); myHeaders.append("apikey", API_KEY); + const requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; + try { + const res = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?select=*", requestOptions); + const data = await res.json(); + setListaTodosAgendamentos(data); + } catch (err) { + console.error('Erro ao buscar agendamentos', err); } - if (!cachePacientes[agendamento.patient_id]) { - cachePacientes[agendamento.patient_id] = await GetPatientByID(agendamento.patient_id, authHeader); - } - - const medico = cacheMedicos[agendamento.doctor_id]; - const paciente = cachePacientes[agendamento.patient_id]; - - if (agendamento.status === "requested") { - ListaFilaDeEspera.push({ - agendamento, - Infos: { - nome_medico: medico[0]?.full_name, - doctor_id: medico[0]?.id, - patient_id: paciente[0]?.id, - paciente_nome: paciente[0]?.full_name, - paciente_cpf: paciente[0]?.cpf, - - }, - }); - } else { - const DiaAgendamento = agendamento.scheduled_at.split("T")[0]; - - let agendamentoMelhorado = {...agendamento, medico_nome: medico[0]?.full_name, - doctor_id: medico[0]?.id, - patient_id: paciente[0]?.id, - paciente_nome: paciente[0]?.full_name, - paciente_cpf: paciente[0]?.cpf, } - - if (DiaAgendamento in DictAgendamentosOrganizados) { - DictAgendamentosOrganizados[DiaAgendamento].push(agendamentoMelhorado); - } else { - DictAgendamentosOrganizados[DiaAgendamento] = [agendamentoMelhorado]; - } - } - } - - // Ordenar por data - for (const DiaAgendamento in DictAgendamentosOrganizados) { - DictAgendamentosOrganizados[DiaAgendamento].sort((a, b) => a.scheduled_at.localeCompare(b.scheduled_at)); - } - - const chavesOrdenadas = Object.keys(DictAgendamentosOrganizados).sort(); - - const DictAgendamentosFinal = {}; - for (const data of chavesOrdenadas) { - DictAgendamentosFinal[data] = DictAgendamentosOrganizados[data]; - } - - setAgendamentosOrganizados(DictAgendamentosFinal); - setFilaEsperaData(ListaFilaDeEspera); - }; - - fetchDados(); - - return { agendamentosOrganizados: DictAgendamentosOrganizados, filaEsperaData: ListaFilaDeEspera }; -}, [listaTodosAgendamentos]); // 👉 só recalcula quando a lista muda - - - useEffect(() => { - var myHeaders = new Headers(); - myHeaders.append("Authorization", authHeader); - myHeaders.append("apikey", API_KEY) - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' }; - fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?select&doctor_id&patient_id&status&scheduled_at&order&limit&offset", requestOptions) - .then(response => response.json()) - .then(result => {setListaTodosAgendamentos(result);console.log(result)}) - .catch(error => console.log('error', error)); - const PegarTodosOsMedicos = async () => { - let lista = [] - const TodosOsMedicos = await GetAllDoctors(authHeader) - - for(let d = 0; TodosOsMedicos.length > d; d++){ - lista.push({nomeMedico: TodosOsMedicos[d].full_name, idMedico: TodosOsMedicos[d].id })} - setListaDeMedicos(lista) - } - PegarTodosOsMedicos() - - }, []) - - -const deleteConsulta = (selectedPatientId) => { - var myHeaders = new Headers(); - myHeaders.append("Content-Type", "application/json"); - myHeaders.append('apikey', API_KEY) - myHeaders.append("authorization", authHeader) - - - var raw = JSON.stringify({ "status":"cancelled", - "cancellation_reason": motivoCancelamento - }); - - - var requestOptions = { - method: 'PATCH', - headers: myHeaders, - body: raw, - redirect: 'follow' - }; - - fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${selectedPatientId}`, requestOptions) - .then(response => {if(response.status !== 200)(console.log(response))}) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -} - -const confirmConsulta = (selectedPatientId) => { - var myHeaders = new Headers(); - myHeaders.append("Content-Type", "application/json"); - myHeaders.append('apikey', API_KEY) - myHeaders.append("authorization", authHeader) - - - var raw = JSON.stringify({ "status":"confirmed" - }); - - - var requestOptions = { - method: 'PATCH', - headers: myHeaders, - body: raw, - redirect: 'follow' - }; - - fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${selectedPatientId}`, requestOptions) - .then(response => {if(response.status !== 200)(console.log(response))}) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -} - - - - const filteredAgendamentos = useMemo(() => { - if (!searchTerm.trim()) { - return AgendamentosMes; - } - const lowerCaseSearchTerm = searchTerm.toLowerCase(); - const filteredData = {}; - - for (const semana in AgendamentosMes) { - filteredData[semana] = {}; - for (const dia in AgendamentosMes[semana]) { - filteredData[semana][dia] = AgendamentosMes[semana][dia].filter(agendamento => - agendamento.status === 'vazio' || - (agendamento.paciente && agendamento.paciente.toLowerCase().includes(lowerCaseSearchTerm)) - ); - } - } - return filteredData; - }, [searchTerm]); - - const ListarDiasdoMes = (ano, mes) => { - let segundas = []; let tercas = []; let quartas = []; let quintas = []; let sextas = [] - const base = dayjs(`${ano}-${mes}-01`) - const DiasnoMes = base.daysInMonth() - for (let d = 1; d <= DiasnoMes; d++) { - const data = dayjs(`${ano}-${mes}-${d}`) - const dia = data.format('dddd') - switch (dia) { - case 'Monday': segundas.push(d); break - case 'Tuesday': tercas.push(d); break - case 'Wednesday': quartas.push(d); break - case 'Thursday': quintas.push(d); break - case 'Friday': sextas.push(d); break - default: break - } - } - let ListaDiasDatas = {segundas:segundas,tercas:tercas,quartas: quartas,quintas: quintas,sextas: sextas} - return ListaDiasDatas - } - - - useEffect(() => { - console.log("mudou FiltredTodosMedicos:", FiltredTodosMedicos); - if (MedicoFiltrado.id != "vazio" ) { - const unicoMedico = MedicoFiltrado; - console.log(unicoMedico) - const idMedicoFiltrado = unicoMedico.idMedico; - console.log(`Médico único encontrado: ${unicoMedico.nomeMedico}. ID: ${idMedicoFiltrado}`); - - const agendamentosDoMedico = filtrarAgendamentosPorMedico( - DictAgendamentosOrganizados, - idMedicoFiltrado - ); - console.log(`Total de agendamentos filtrados para este médico: ${agendamentosDoMedico.length}`); - console.log("Lista completa de Agendamentos do Médico:", agendamentosDoMedico); - - //FiltrarAgendamentos(agendamentosDoMedico) - - setListaTodosAgendamentos(agendamentosDoMedico) - - } - }, [FiltredTodosMedicos, MedicoFiltrado]); - -const filtrarAgendamentosPorMedico = (dictAgendamentos, idMedicoFiltrado) => { - setCacheAgendamentos(DictAgendamentosOrganizados); - - const todasAsListasDeAgendamentos = Object.values(dictAgendamentos); - const todosOsAgendamentos = todasAsListasDeAgendamentos.flat(); - - const agendamentosFiltrados = todosOsAgendamentos.filter(agendamento => - agendamento.doctor_id === idMedicoFiltrado - ); - - return agendamentosFiltrados; -}; - -const handleSearchMedicos = (term) => { - setSearchTermDoctor(term); - if (term.trim() === '') { - if(MedicoFiltrado.id !== "vazio"){ - console.log("Medico escolhido, mas vai ser apagado") - console.log(cacheAgendamentos, "cache ") - - } - - - setFiltredTodosMedicos([]); - setMedicoFiltrado({id:"vazio"}) + const updateAppointmentStatus = async (id, updates) => { + const myHeaders = new Headers(); myHeaders.append("Authorization", authHeader); myHeaders.append("apikey", API_KEY); myHeaders.append("Content-Type", "application/json"); myHeaders.append("Prefer", "return=representation"); + const requestOptions = { method: 'PATCH', headers: myHeaders, body: JSON.stringify(updates) }; - //2 FiltrarAgendamentos() - return; - } - if (FiltredTodosMedicos.length === 1){ - setMedicoFiltrado({...FiltredTodosMedicos[0]}) - } - - const filtered = ListaDeMedicos.filter(medico => - medico.nomeMedico.toLowerCase().includes(term.toLowerCase()) - ); - setFiltredTodosMedicos(filtered); -}; - -useEffect(() => { - setShowSpinner(false) -},[filaEsperaData]) - - return ( -
- -

Agendar nova consulta

- -
- - - - - -
- - {!PageNovaConsulta ? ( -
-
- - {/* Bloco de busca por médico */} -
-
-
- -
- handleSearchMedicos(e.target.value)} - /> -
-
- - {/* DROPDOWN (RENDERIZAÇÃO CONDICIONAL) */} - {searchTermDoctor && FiltredTodosMedicos.length > 0 && ( -
- {FiltredTodosMedicos.map((medico) => ( -
{ - setSearchTermDoctor(medico.nomeMedico); - setFiltredTodosMedicos([]); - setMedicoFiltrado(medico) - - }} - > -

{medico.nomeMedico}

-
- ))} -
- )} -
-
- -
- -
- - -
- -
- {FiladeEspera === false ? - ( -
-
-
-
- - - -
-
-
Realizado
-
Confirmado
-
Agendado
-
Cancelado
-
-
- - {/* Componentes de Tabela - Adicionado props de delete da main */} - {tabela === "diario" && } - {tabela === 'semanal' && } - {tabela === 'mensal' && } -
-
- ) - : - ( -
-
- setSearchTerm(e.target.value)} - /> -

Fila de Espera

-
- - - - {/* Ajustado o cabeçalho */} - {/* Ajustado o cabeçalho */} - {/* Ajustado o cabeçalho */} - {/* Ajustado o cabeçalho */} - - - - - {filaEsperaData.map((item, index) => ( - - - - - - - - ))} - {showSpinner && - - - - - } - - -
Nome do PacienteCPFMédico SolicitadoData da SolicitaçãoAções

{item.Infos?.paciente_nome}

{item.Infos?.paciente_cpf}

{item.Infos?.nome_medico}

{dayjs(item.agendamento.created_at).format('DD/MM/YYYY HH:mm')}
- - - - - -
- -
-
- ) + try { + const response = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${id}`, requestOptions); + if (response.ok) { + await fetchAppointments(); + return true; + } else { + console.error('Erro ao atualizar agendamento:', await response.text()); + return false; } -
-
- ) : ( - - )} - - {/* Modal de Confirmação de Exclusão */} - {showDeleteModal && ( -
- e.target.classList.contains("modal") && setShowDeleteModal(false) - } - > -
-
- -
-
- Confirmação de Cancelamento -
- -
- -
-

- Qual o motivo do cancelamento? -

-
- - +
+
+ + +
+
+
+
+ ); + + + const ConfirmEditModal = () => ( +
+
+
+
+
Confirmação de edição
+ +
+
+

Tem certeza que deseja retirar o cancelamento?

+ Isso reverterá o status do agendamento para Agendado. +
+
+ + +
+
+
+
+ ); + + + + return ( +
+

Agendar nova consulta

+
+ {/* LIMPA O OBJETO DE EDIÇÃO AO CLICAR EM "ADICIONAR" */} + + + +
+ {!PageNovaConsulta ? ( +
+
+
+
+
+
+ handleSearchMedicos(e.target.value)} /> +
+
+ {searchTermDoctor && FiltredTodosMedicos.length > 0 && (
{FiltredTodosMedicos.map((medico) => (
{ setSearchTermDoctor(medico.nomeMedico); setFiltredTodosMedicos([]); setMedicoFiltrado(medico); }}>

{medico.nomeMedico}

))}
)} +
+
+
+
+ + +
+
+ {FiladeEspera === false ? ( +
+
+
{selectedDay.format('MMM')}{selectedDay.format('DD')}
+

{selectedDay.format('dddd')}

{selectedDay.format('D [de] MMMM [de] YYYY')}

+
+

Consultas para {selectedDay.format('DD/MM')}

+ {showSpinner ? : (DictAgendamentosOrganizados[selectedDay.format('YYYY-MM-DD')]?.length > 0) ? (DictAgendamentosOrganizados[selectedDay.format('YYYY-MM-DD')].map(app => ( +
+
{dayjs(app.scheduled_at).format('HH:mm')}
+
{app.paciente_nome}Dr(a). {app.medico_nome}
+
+ {app.status === 'cancelled' ? ( + + ) : ( + <> + {/* MUDANÇA: PASSA O OBJETO COMPLETO 'app' PARA O ESTADO DE EDIÇÃO */} + + {/* Botão de Cancelar */} + + + )} +
+
+ ))) : (

Nenhuma consulta agendada.

)} +
+
+
+
+
Realizado
Confirmado
Agendado
Cancelado
+
+
+
+

{currentDate.format('MMMM [de] YYYY')}

+
+ + + +
+
+ +
+ + + +
+
+ +
+ {weekDays.map(day =>
{day}
)} + {dateGrid.map((day, index) => { + const appointmentsOnDay = DictAgendamentosOrganizados[day.format('YYYY-MM-DD')] || []; + const cellClasses = `day-cell ${day.isSame(currentDate, 'month') ? 'current-month' : 'other-month'} ${day.isSame(dayjs(), 'day') ? 'today' : ''} ${day.isSame(selectedDay, 'day') ? 'selected' : ''}`; + return (
handleDateClick(day)}>{day.format('D')}{appointmentsOnDay.length > 0 &&
{appointmentsOnDay.length}
}
); + })} +
+
+
+ ) : ( +
+
+
+
+

Fila de Espera

+
+
+
Filtros
+
setWaitlistSearch(e.target.value)} />Digite o nome do paciente, CPF ou nome do médico
+
+
+ Ordenar por: + {(() => { const sortValue = waitSortKey ? `${waitSortKey}-${waitSortDir}` : ''; return ();})()} +
+
+
{filaEsperaFiltrada.length} DE {filaEsperaData.length} SOLICITAÇÕES ENCONTRADAS
+
+
+ + + + {filaEsperaPaginada.length > 0 ? (filaEsperaPaginada.map((item, index) => ( + + ))) : ()} + +
Nome do PacienteCPFMédico SolicitadoData da SolicitaçãoAções
{item?.Infos?.paciente_nome}{item?.Infos?.paciente_cpf}{item?.Infos?.nome_medico}{dayjs(item.agendamento.scheduled_at).format('DD/MM/YYYY')}
{showSpinner ? : (<>

Nenhuma solicitação encontrada.

)}
+ {filaEsperaFiltrada.length > 0 && (
+
Itens por página:
+
Página {waitPage} de {waitTotalPages} • Mostrando {waitIndiceInicial + 1}-{Math.min(waitIndiceFinal, filaEsperaFiltrada.length)} de {filaEsperaFiltrada.length}
+
)} +
+
+
+
+
+
+ )} +
+
+ ) : ( + + + )} + {showDeleteModal && } + {showConfirmModal && } +
+ ) } - -export default Agendamento; \ No newline at end of file + +export default Agendamento; diff --git a/src/pages/AgendamentoCadastroManager.jsx b/src/pages/AgendamentoCadastroManager.jsx index 881462e..76396e1 100644 --- a/src/pages/AgendamentoCadastroManager.jsx +++ b/src/pages/AgendamentoCadastroManager.jsx @@ -1,82 +1,182 @@ -import React from 'react' -import FormNovaConsulta from '../components/AgendarConsulta/FormNovaConsulta' -import API_KEY from '../components/utils/apiKeys' -import { useAuth } from '../components/utils/AuthProvider' -import { useEffect,useState } from 'react' -import dayjs from 'dayjs' -import { UserInfos } from '../components/utils/Functions-Endpoints/General' -const AgendamentoCadastroManager = ({setPageConsulta, Dict}) => { +import React, { useEffect, useState } from 'react'; +import FormNovaConsulta from '../components/AgendarConsulta/FormNovaConsulta'; +import API_KEY from '../components/utils/apiKeys'; +import { useAuth } from '../components/utils/AuthProvider'; +import dayjs from 'dayjs'; +import { UserInfos } from '../components/utils/Functions-Endpoints/General'; +import { toast } from 'react-toastify'; +const AgendamentoCadastroManager = ({ setPageConsulta, agendamentoInicial }) => { - const {getAuthorizationHeader} = useAuth() - const [agendamento, setAgendamento] = useState({status:'confirmed'}) - const [idUsuario, setIDusuario] = useState('0') + const { getAuthorizationHeader } = useAuth(); + + const [agendamento, setAgendamento] = useState({ status: 'agendado' }); + const [idUsuario, setIDusuario] = useState('0'); + const [isEditMode, setIsEditMode] = useState(false); - let authHeader = getAuthorizationHeader() + let authHeader = getAuthorizationHeader(); + useEffect(() => { + + + if (agendamentoInicial && agendamentoInicial.id) { + + const scheduled_at = dayjs(agendamentoInicial.scheduled_at); - useEffect(() => { + setAgendamento({ + ...agendamentoInicial, + + dataAtendimento: scheduled_at.format('YYYY-MM-DD'), + horarioInicio: scheduled_at.format('HH:mm'),         + + + tipo_consulta: agendamentoInicial.appointment_type || 'Presencial', + convenio: agendamentoInicial.insurance_provider || 'Público', + + + paciente_nome: agendamentoInicial.paciente_nome || '', + paciente_cpf: agendamentoInicial.paciente_cpf || '', + medico_nome: agendamentoInicial.medico_nome || '', + + + patient_id: agendamentoInicial.patient_id, + doctor_id: agendamentoInicial.doctor_id, + status: agendamentoInicial.status, + }); + setIsEditMode(true); + + } else { + + setAgendamento({ + status: 'agendado', + patient_id: null, + doctor_id: null, + dataAtendimento: dayjs().format('YYYY-MM-DD'), + horarioInicio: '', + tipo_consulta: 'Presencial', + convenio: 'Público', + paciente_nome: '', + paciente_cpf: '', + medico_nome: '' + }); + setIsEditMode(false); + } - if(!Dict){setAgendamento({})} - else{ - console.log(Dict) - setAgendamento(Dict) - } - - const ColherInfoUsuario =async () => { - const result = await UserInfos(authHeader) - - setIDusuario(result?.profile?.id) - - } - ColherInfoUsuario() - - - }, []) - - - - const handleSave = (Dict) => { - let DataAtual = dayjs() + + const ColherInfoUsuario = async () => { + const result = await UserInfos(authHeader); + setIDusuario(result?.profile?.id); + }; + ColherInfoUsuario(); + + + }, [agendamentoInicial, authHeader]); + const handleSave = async (Dict) => { var myHeaders = new Headers(); myHeaders.append("apikey", API_KEY); myHeaders.append("Authorization", authHeader); myHeaders.append("Content-Type", "application/json"); + myHeaders.append("Prefer", "return=representation"); + + var raw = JSON.stringify({ + "patient_id": Dict.patient_id, + "doctor_id": Dict.doctor_id, + "scheduled_at": `${Dict.dataAtendimento}T${Dict.horarioInicio}:00.000Z`, + "duration_minutes": Dict.duration_minutes || 30, + "appointment_type": Dict.tipo_consulta, + "insurance_provider": Dict.convenio, + "status": Dict.status || 'agendado', + "created_by": idUsuario, + "created_at": dayjs().toISOString(), + + }); + + var requestOptions = { + method: 'POST', + headers: myHeaders, + body: raw, + redirect: 'follow' + }; + + try { + const response = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments", requestOptions); + if (response.ok) { + toast.success("Agendamento criado com sucesso! ✅"); + setPageConsulta(false); + } else { + const errorText = await response.text(); + console.error('Erro ao cadastrar agendamento:', errorText); + toast.error(`Falha ao criar agendamento: ${JSON.parse(errorText)?.message || 'Erro desconhecido'}`); + } + } catch (error) { + console.error('Erro de rede:', error); + toast.error("Erro de rede ao salvar. ❌"); + } + } + const handleUpdate = async (Dict) => { + const appointmentId = agendamentoInicial.id; + + var myHeaders = new Headers(); + myHeaders.append("apikey", API_KEY); + myHeaders.append("Authorization", authHeader); + myHeaders.append("Content-Type", "application/json"); + myHeaders.append("Prefer", "return=representation"); - var raw = JSON.stringify({ - - "patient_id": Dict.patient_id, - "doctor_id": Dict.doctor_id, - "scheduled_at": `${Dict.dataAtendimento}T${Dict.horarioInicio}:00.000Z`, - "duration_minutes": 30, - "appointment_type": Dict.tipo_consulta, - - "patient_notes": "", - "insurance_provider": Dict.convenio, - "status": Dict.status, - "created_by": idUsuario - }); - - var requestOptions = { - method: 'POST', - headers: myHeaders, - body: raw, - redirect: 'follow' - }; - - fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments", requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); - - } + var raw = JSON.stringify({ + "patient_id": Dict.patient_id, + "doctor_id": Dict.doctor_id, + "scheduled_at": `${Dict.dataAtendimento}T${Dict.horarioInicio}:00.000Z`, + "duration_minutes": Dict.duration_minutes || 30, + "appointment_type": Dict.tipo_consulta, + "insurance_provider": Dict.convenio, + "status": Dict.status, + "updated_at": dayjs().toISOString(), + "updated_by": idUsuario, + }); + + var requestOptions = { + method: 'PATCH', + headers: myHeaders, + body: raw, + redirect: 'follow' + }; + + try { + const response = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${appointmentId}`, requestOptions); + if (response.ok) { + toast.success("Agendamento atualizado com sucesso! 📝"); + setPageConsulta(false); + } else { + const errorText = await response.text(); + console.error('Erro ao atualizar agendamento:', errorText); + toast.error(`Falha ao atualizar agendamento: ${JSON.parse(errorText)?.message || 'Erro desconhecido'}`); + } + } catch (error) { + console.error('Erro de rede:', error); + toast.error("Erro de rede ao atualizar. ❌"); + } + } + const handleFormSubmit = (Dict) => { + if (isEditMode) { + + handleUpdate(Dict); + } else { + + handleSave(Dict); + } + } - return ( -
- setPageConsulta(false)}/> + return ( +
+ {} + setPageConsulta(false)} + /> +
+ ); +}; -
- ) -} - -export default AgendamentoCadastroManager \ No newline at end of file +export default AgendamentoCadastroManager; \ No newline at end of file diff --git a/src/pages/Details.jsx b/src/pages/Details.jsx index 4edc878..5734046 100644 --- a/src/pages/Details.jsx +++ b/src/pages/Details.jsx @@ -7,7 +7,7 @@ import { Link } from "react-router-dom"; import { useAuth } from "../components/utils/AuthProvider"; -const Details = () => { +const Details = (DictInfo) => { const parametros = useParams(); const {getAuthorizationHeader, isAuthenticated} = useAuth(); const [paciente, setPaciente] = useState({}); @@ -22,19 +22,29 @@ const Details = () => { navigate(`/${prefixo}/pacientes`); } + +const navigateEdit = () => { + const prefixo = location.pathname.split("/")[1]; + navigate(`/${prefixo}/medicos/edit`); + } + + + + + useEffect(() => { - if (!patientID) return; + if (!DictInfo) return; console.log(patientID, 'teu id') const authHeader = getAuthorizationHeader() - GetPatientByID(patientID, authHeader) + GetPatientByID(DictInfo.DictInfo.id, authHeader) .then((data) => { console.log(data, "paciente vindo da API"); setPaciente(data[0]); // supabase retorna array }) .catch((err) => console.error("Erro ao buscar paciente:", err)); - }, [patientID]); + }, [DictInfo]); const handleDelete = async (anexoId) => { @@ -82,11 +92,9 @@ const Details = () => {
- - -
@@ -285,4 +293,4 @@ const Details = () => { ); }; -export default Details; \ No newline at end of file +export default Details; diff --git a/src/pages/DoctorDetails.jsx b/src/pages/DoctorDetails.jsx index 9a6a179..c0b9244 100644 --- a/src/pages/DoctorDetails.jsx +++ b/src/pages/DoctorDetails.jsx @@ -4,37 +4,24 @@ import { useParams,Link, useNavigate, useLocation } from "react-router-dom"; import { GetDoctorByID } from "../components/utils/Functions-Endpoints/Doctor"; import { useAuth } from "../components/utils/AuthProvider"; -const Details = () => { +const DoctorDetails = ({DictInfo}) => { const {getAuthorizationHeader} = useAuth(); - const [doctor, setDoctor] = useState({}); const Parametros = useParams() const navigate = useNavigate(); const location = useLocation(); - const Voltar = () => { +const navigateEdit = () => { + const prefixo = location.pathname.split("/")[1]; + navigate(`/${prefixo}/medicos/edit`); + } + + + +const Voltar = () => { const prefixo = location.pathname.split("/")[1]; navigate(`/${prefixo}/medicos`); } - const doctorID = Parametros.id - useEffect(() => { - if (!doctorID) return; - - const authHeader = getAuthorizationHeader() - - GetDoctorByID(doctorID, authHeader) - .then((data) => { - console.log(data, "médico vindo da API"); - setDoctor(data[0]) - ; // supabase retorna array - }) - .catch((err) => console.error("Erro ao buscar paciente:", err)); - - - }, [doctorID]); - - //if (!doctor) return

Carregando...

; - return ( <>
@@ -50,15 +37,13 @@ const Details = () => {
- {doctor.nome || "Nome Completo"} -

{doctor.cpf || "CPF"}

+ {DictInfo.full_name || "Nome Completo"} +

{DictInfo.cpf || "CPF"}

- - -
@@ -69,29 +54,29 @@ const Details = () => {
-

{doctor.full_name || "-"}

+

{DictInfo.full_name || "-"}

-

{doctor.birth_date || "-"}

+

{DictInfo.birth_date || "-"}

-

{doctor.cpf || "-"}

+

{DictInfo.cpf || "-"}

-

{doctor.crm || "-"}

+

{DictInfo.crm || "-"}

-

{doctor.crm_uf || "-"}

+

{DictInfo.crm_uf || "-"}

-

{doctor.specialty || "-"}

+

{DictInfo.specialty || "-"}

@@ -103,31 +88,31 @@ const Details = () => {
-

{doctor.cep || "-"}

+

{DictInfo.cep || "-"}

-

{doctor.street || "-"}

+

{DictInfo.street || "-"}

-

{doctor.neighborhood || "-"}

+

{DictInfo.neighborhood || "-"}

-

{doctor.city || "-"}

+

{DictInfo.city || "-"}

-

{doctor.state || "-"}

+

{DictInfo.state || "-"}

-

{doctor.number || "-"}

+

{DictInfo.number || "-"}

-

{doctor.complement || "-"}

+

{DictInfo.complement || "-"}

@@ -139,15 +124,15 @@ const Details = () => {
-

{doctor.email || "-"}

+

{DictInfo.email || "-"}

-

{doctor.phone_mobile || "-"}

+

{DictInfo.phone_mobile || "-"}

-

{doctor.phone2 || "-"}

+

{DictInfo.phone2 || "-"}

@@ -156,4 +141,4 @@ const Details = () => { ); }; -export default Details; \ No newline at end of file +export default DoctorDetails; diff --git a/src/pages/DoctorEditPage.jsx b/src/pages/DoctorEditPage.jsx index 4115823..f50b934 100644 --- a/src/pages/DoctorEditPage.jsx +++ b/src/pages/DoctorEditPage.jsx @@ -8,49 +8,23 @@ import API_KEY from "../components/utils/apiKeys"; const ENDPOINT_AVAILABILITY = "https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctor_availability"; -const DoctorEditPage = () => { +const DoctorEditPage = ({DictInfo}) => { const { getAuthorizationHeader } = useAuth(); const [DoctorToPUT, setDoctorPUT] = useState({}); const Parametros = useParams(); const [searchParams] = useSearchParams(); - const DoctorID = Parametros.id; + + const DoctorID = "b24c88b2-1d51-4c04-8fe8-e75c3f2817d1"; const availabilityId = searchParams.get("availabilityId"); const [availabilityToPATCH, setAvailabilityToPATCH] = useState(null); const [mode, setMode] = useState("doctor"); + console.log("teste", DictInfo) - useEffect(() => { - const authHeader = getAuthorizationHeader(); - - if (availabilityId) { - setMode("availability"); - - fetch(`${ENDPOINT_AVAILABILITY}?id=eq.${availabilityId}&select=*`, { - method: "GET", - headers: { - apikey: API_KEY, - Authorization: authHeader, - }, - }) - .then((res) => res.json()) - .then((data) => { - if (data && data.length > 0) { - setAvailabilityToPATCH(data[0]); - console.log("Disponibilidade vinda da API:", data[0]); - } - }) - .catch((err) => console.error("Erro ao buscar disponibilidade:", err)); - } else { - setMode("doctor"); - GetDoctorByID(DoctorID, authHeader) - .then((data) => { - console.log(data, "médico vindo da API"); - setDoctorPUT(data[0]); - }) - .catch((err) => console.error("Erro ao buscar paciente:", err)); - } - }, [DoctorID, availabilityId, getAuthorizationHeader]); + useEffect(() => { + setDoctorPUT(DictInfo) + }, [DictInfo]); const HandlePutDoctor = async () => { const authHeader = getAuthorizationHeader(); @@ -71,18 +45,8 @@ const DoctorEditPage = () => { redirect: "follow", }; - try { - const response = await fetch( - `https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors?id=eq.${DoctorID}`, - requestOptions - ); - console.log("Resposta PUT Doutor:", response); - alert("Dados do médico atualizados com sucesso!"); - } catch (error) { - console.error("Erro ao atualizar médico:", error); - alert("Erro ao atualizar dados do médico."); - throw error; - } + fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors?id=eq.${DictInfo.id}`,requestOptions) + .then(response => console.log(response)) }; // 2. Função para Atualizar DISPONIBILIDADE (PATCH) @@ -123,12 +87,6 @@ const DoctorEditPage = () => { return (
-

- {mode === "availability" - ? `Editar Horário Disponível (ID: ${availabilityId.substring(0, 8)})` - : `Editar Médico (ID: ${DoctorID})`} -

- { setSearch(""); setFiltroEspecialidade("Todos"); @@ -143,11 +147,25 @@ function TableDoctor() { return resultado; }) : []; + // Aplica ordenação rápida + const applySorting = (arr) => { + if (!Array.isArray(arr) || !sortKey) return arr; + const copy = [...arr]; + if (sortKey === 'nome') { + copy.sort((a, b) => (a.full_name || '').localeCompare((b.full_name || ''), undefined, { sensitivity: 'base' })); + } else if (sortKey === 'idade') { + copy.sort((a, b) => calcularIdade(a.birth_date) - calcularIdade(b.birth_date)); + } + if (sortDir === 'desc') copy.reverse(); + return copy; + }; + + const medicosOrdenados = applySorting(medicosFiltrados); const totalPaginas = Math.ceil(medicosFiltrados.length / itensPorPagina); const indiceInicial = (paginaAtual - 1) * itensPorPagina; const indiceFinal = indiceInicial + itensPorPagina; - const medicosPaginados = medicosFiltrados.slice(indiceInicial, indiceFinal); + const medicosPaginados = medicosOrdenados.slice(indiceInicial, indiceFinal); const irParaPagina = (pagina) => { @@ -185,7 +203,7 @@ function TableDoctor() { useEffect(() => { setPaginaAtual(1); - }, [search, filtroEspecialidade, filtroAniversariante, filtroCidade, filtroEstado, idadeMinima, idadeMaxima, dataInicial, dataFinal]); + }, [search, filtroEspecialidade, filtroAniversariante, filtroCidade, filtroEstado, idadeMinima, idadeMaxima, dataInicial, dataFinal, sortKey, sortDir]); return ( <> @@ -258,6 +276,34 @@ function TableDoctor() { Aniversariantes
+ + {/* Ordenação rápida */} +
+
+ Ordenar por: + {(() => { + const sortValue = sortKey ? `${sortKey}-${sortDir}` : ''; + return ( + + ); + })()} +
@@ -357,24 +403,6 @@ function TableDoctor() {
- {(search || filtroEspecialidade !== "Todos" || filtroAniversariante || - filtroCidade || filtroEstado || idadeMinima || idadeMaxima || dataInicial || dataFinal) && ( -
- Filtros ativos: -
- {search && Busca: "{search}"} - {filtroEspecialidade !== "Todos" && Especialidade: {filtroEspecialidade}} - {filtroAniversariante && Aniversariantes} - {filtroCidade && Cidade: {filtroCidade}} - {filtroEstado && Estado: {filtroEstado}} - {idadeMinima && Idade mín: {idadeMinima}} - {idadeMaxima && Idade máx: {idadeMaxima}} - {dataInicial && Data inicial: {dataInicial}} - {dataFinal && Data final: {dataFinal}} -
-
- )} -
@@ -409,14 +437,14 @@ function TableDoctor() {
{medico.email || 'Não informado'}
- - - - @@ -568,4 +596,4 @@ function TableDoctor() { ); } -export default TableDoctor; \ No newline at end of file +export default TableDoctor; diff --git a/src/pages/EditPage.jsx b/src/pages/EditPage.jsx index c3bf9b3..0f9bb18 100644 --- a/src/pages/EditPage.jsx +++ b/src/pages/EditPage.jsx @@ -1,34 +1,20 @@ import React from 'react' - import PatientForm from '../components/patients/PatientForm' - import {useEffect, useState} from 'react' import { GetPatientByID } from '../components/utils/Functions-Endpoints/Patient' import API_KEY from '../components/utils/apiKeys' import {useNavigate, useParams } from 'react-router-dom' import { useAuth } from '../components/utils/AuthProvider' -const EditPage = () => { + +const EditPage = ({DictInfo}) => { const navigate = useNavigate() - const Parametros = useParams() const [PatientToPUT, setPatientPUT] = useState({}) const { getAuthorizationHeader, isAuthenticated } = useAuth(); -const PatientID = Parametros.id - useEffect(() => { - const authHeader = getAuthorizationHeader() - - GetPatientByID(PatientID, authHeader) - .then((data) => { - console.log(data[0], "paciente vindo da API"); - setPatientPUT(data[0]); // supabase retorna array - }) - .catch((err) => console.error("Erro ao buscar paciente:", err)); - - - -}, [PatientID]) + setPatientPUT(DictInfo) +}, [DictInfo]) const HandlePutPatient = async () => { const authHeader = getAuthorizationHeader() @@ -39,9 +25,9 @@ const HandlePutPatient = async () => { myHeaders.append("Authorization", authHeader); myHeaders.append("Content-Type", "application/json"); - var raw = JSON.stringify(PatientToPUT); + var raw = JSON.stringify({...PatientToPUT, bmi:Number(PatientToPUT) || null}); - console.log("Enviando paciente para atualização:", PatientToPUT); + console.log("Enviando atualização:", PatientToPUT); var requestOptions = { method: 'PATCH', @@ -50,26 +36,11 @@ const HandlePutPatient = async () => { redirect: 'follow' }; - try { - const response = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/patients?id=eq.${PatientID}`,requestOptions); - console.log(response) - + fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/patients?id=eq.${PatientToPUT.id}`,requestOptions) + .then(response => console.log(response)) + .then(result => console.log(result)) + .catch(console.log("erro")) - if(response.ok === false){ - console.error("Erro ao atualizar paciente:"); - } - else{ - console.log("ATUALIZADO COM SUCESSO"); - navigate('/secretaria/pacientes') - } - - return response; - } catch (error) { - console.error("Erro ao atualizar paciente:", error); - throw error; - } - - }; return ( @@ -86,4 +57,4 @@ const HandlePutPatient = async () => { ) } -export default EditPage \ No newline at end of file +export default EditPage diff --git a/src/pages/Inicio.jsx b/src/pages/Inicio.jsx index 7bdbe78..1db9708 100644 --- a/src/pages/Inicio.jsx +++ b/src/pages/Inicio.jsx @@ -1,6 +1,8 @@ import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { FaUser, FaUserPlus, FaCalendarAlt, FaCalendarCheck } from 'react-icons/fa'; +import { useAuth } from '../components/utils/AuthProvider'; +import API_KEY from '../components/utils/apiKeys'; import './style/Inicio.css'; import { Link } from 'react-router-dom'; @@ -8,18 +10,141 @@ import { Link } from 'react-router-dom'; function Inicio() { const navigate = useNavigate(); + const { getAuthorizationHeader, isAuthenticated } = useAuth(); const [pacientes, setPacientes] = useState([]); + const [medicos, setMedicos] = useState([]); const [agendamentos, setAgendamentos] = useState([]); + const [agendamentosComPacientes, setAgendamentosComPacientes] = useState([]); + const [loading, setLoading] = useState(true); + useEffect(() => { + const fetchPacientes = async () => { + try { + const authHeader = getAuthorizationHeader(); + + const myHeaders = new Headers(); + myHeaders.append("apikey", API_KEY); + myHeaders.append("Authorization", authHeader); + + const requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + }; + + const response = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/patients", requestOptions); + + if (response.ok) { + const data = await response.json(); + setPacientes(data); + console.log('Pacientes carregados:', data.length); + } else { + console.error(' Erro ao buscar pacientes:', response.status); + } + } catch (error) { + console.error(' Erro ao buscar pacientes:', error); + } + }; + + const fetchMedicos = async () => { + try { + const authHeader = getAuthorizationHeader(); + + const myHeaders = new Headers(); + myHeaders.append("apikey", API_KEY); + myHeaders.append("Authorization", authHeader); + + const requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + }; + + const response = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors", requestOptions); + + if (response.ok) { + const data = await response.json(); + setMedicos(data); + console.log(' Médicos carregados:', data.length); + } else { + console.error('Erro ao buscar médicos:', response.status); + } + } catch (error) { + console.error(' Erro ao buscar médicos:', error); + } + }; + + const fetchAgendamentos = async () => { + try { + const authHeader = getAuthorizationHeader(); + + const myHeaders = new Headers(); + myHeaders.append("apikey", API_KEY); + myHeaders.append("Authorization", authHeader); + + const requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + }; + + const response = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments", requestOptions); + + if (response.ok) { + const data = await response.json(); + setAgendamentos(data); + console.log(' Agendamentos carregados:', data.length); + } else { + console.error(' Erro ao buscar agendamentos:', response.status); + } + } catch (error) { + console.error(' Erro ao buscar agendamentos:', error); + } finally { + setLoading(false); + } + }; + + if (isAuthenticated) { + fetchPacientes(); + fetchMedicos(); + fetchAgendamentos(); + } + }, [isAuthenticated, getAuthorizationHeader]); + + + useEffect(() => { + if (agendamentos.length > 0 && pacientes.length > 0 && medicos.length > 0) { + const agendamentosComNomes = agendamentos.map(agendamento => { + const paciente = pacientes.find(p => p.id === agendamento.patient_id); + const medico = medicos.find(m => m.id === agendamento.doctor_id); + return { + ...agendamento, + nomePaciente: paciente?.full_name || 'Paciente não encontrado', + nomeMedico: medico?.full_name || 'Médico não encontrado', + especialidadeMedico: medico?.specialty || '' + }; + }); + setAgendamentosComPacientes(agendamentosComNomes); + } + }, [agendamentos, pacientes, medicos]); const totalPacientes = pacientes.length; - const novosEsseMes = pacientes.filter(p => p.createdAt && new Date(p.createdAt).getMonth() === new Date().getMonth()).length; + const novosEsseMes = pacientes.filter(p => p.created_at && new Date(p.created_at).getMonth() === new Date().getMonth()).length; const hoje = new Date(); - const agendamentosDoDia = agendamentos.filter( - a => a.data && new Date(a.data).getDate() === hoje.getDate() - ); + hoje.setHours(0, 0, 0, 0); + + const agendamentosDoDia = agendamentosComPacientes.filter(a => { + if (!a.scheduled_at) return false; + const dataAgendamento = new Date(a.scheduled_at); + dataAgendamento.setHours(0, 0, 0, 0); + return dataAgendamento.getTime() === hoje.getTime(); + }); + const agendamentosHoje = agendamentosDoDia.length; + + + const pendencias = agendamentos.filter(a => a.status === 'pending' || a.status === 'scheduled').length; return (
@@ -57,7 +182,7 @@ function Inicio() {
PENDÊNCIAS - 0 + {loading ? '...' : pendencias}
@@ -92,14 +217,54 @@ function Inicio() {

Próximos Agendamentos

- {agendamentosHoje > 0 ? ( -
- {agendamentosDoDia.map(agendamento => ( + {loading ? ( +
+

Carregando agendamentos...

+
+ ) : agendamentosHoje > 0 ? ( +
+ {agendamentosDoDia.slice(0, 5).map(agendamento => (
-

{agendamento.nomePaciente}

-

{new Date(agendamento.data).toLocaleTimeString()}

+
+
+

+ {new Date(agendamento.scheduled_at).toLocaleTimeString('pt-BR', { + hour: '2-digit', + minute: '2-digit' + })} +

+

+ {new Date(agendamento.scheduled_at).toLocaleDateString('pt-BR', { + day: '2-digit', + month: '2-digit', + year: 'numeric' + })} +

+
+
+

+ Paciente: {agendamento.nomePaciente} +

+

+ Dr(a): {agendamento.nomeMedico} + {agendamento.especialidadeMedico && ` - ${agendamento.especialidadeMedico}`} +

+
+ + {agendamento.status === 'scheduled' ? 'Agendado' : + agendamento.status === 'completed' ? 'Concluído' : + agendamento.status === 'pending' ? 'Pendente' : + agendamento.status === 'cancelled' ? 'Cancelado' : + agendamento.status === 'requested' ? '' : agendamento.status} + +
))} + {agendamentosHoje > 5 && ( + + )}
) : (
diff --git a/src/pages/LaudoManager.jsx b/src/pages/LaudoManager.jsx index 8276a9c..e603dfa 100644 --- a/src/pages/LaudoManager.jsx +++ b/src/pages/LaudoManager.jsx @@ -1,337 +1,514 @@ // src/pages/LaudoManager.jsx -import React, { useState, useEffect } from "react"; -import "./LaudoStyle.css"; // Importa o CSS externo +import API_KEY from '../components/utils/apiKeys'; +import { Link } from 'react-router-dom'; +import React, { useState, useEffect } from 'react'; +import { useAuth } from '../components/utils/AuthProvider'; +import { GetPatientByID } from '../components/utils/Functions-Endpoints/Patient'; +import { GetDoctorByID } from '../components/utils/Functions-Endpoints/Doctor'; +import { useNavigate } from 'react-router-dom'; +import html2pdf from 'html2pdf.js'; +import TiptapViewer from '../PagesMedico/TiptapViewer' +import '../PagesMedico/styleMedico/DoctorRelatorioManager.css'; -/* ===== Mock data (simula APIDOG) ===== */ -function mockFetchLaudos() { - return [ - { - id: "LAU-300551296", - pedido: 300551296, - data: "29/07/2025", - paciente: { nome: "Sarah Mariana Oliveira", cpf: "616.869.070-**", nascimento: "1990-03-25", convenio: "Unimed" }, - solicitante: "Sandro Rangel Santos", - exame: "US - Abdome Total", - conteudo: "RELATÓRIO MÉDICO\n\nAchados: Imagens compatíveis com ...\nConclusão: Órgãos sem alterações significativas.", - status: "rascunho" - }, - { - id: "LAU-300659170", - pedido: 300659170, - data: "29/07/2025", - paciente: { nome: "Laissa Helena Marquetti", cpf: "950.684.57-**", nascimento: "1986-09-12", convenio: "Bradesco" }, - solicitante: "Sandro Rangel Santos", - exame: "US - Mamária Bilateral", - conteudo: "RELATÓRIO MÉDICO\n\nAchados: text...", - status: "liberado" - }, - { - id: "LAU-300658301", - pedido: 300658301, - data: "28/07/2025", - paciente: { nome: "Vera Lúcia Oliveira Santos", cpf: "928.005.**", nascimento: "1979-02-02", convenio: "Particular" }, - solicitante: "Dr. Fulano", - exame: "US - Transvaginal", - conteudo: "RELATÓRIO MÉDICO\n\nAchados: ...", - status: "entregue" - } - ]; -} +const LaudoManager = () => { + const navigate = useNavigate(); + const { getAuthorizationHeader } = useAuth(); + const authHeader = getAuthorizationHeader(); -function mockDeleteLaudo(id) { - return new Promise((res) => setTimeout(() => res({ ok: true }), 500)); -} + const [relatoriosOriginais, setRelatoriosOriginais] = useState([]); + const [relatoriosFiltrados, setRelatoriosFiltrados] = useState([]); + const [relatoriosFinais, setRelatoriosFinais] = useState([]); + const [pacientesComRelatorios, setPacientesComRelatorios] = useState([]); + const [medicosComRelatorios, setMedicosComRelatorios] = useState([]); + const [showModal, setShowModal] = useState(false); + const [relatorioModal, setRelatorioModal] = useState(null); + const [termoPesquisa, setTermoPesquisa] = useState(''); + const [filtroExame, setFiltroExame] = useState(''); + const [modalIndex, setModalIndex] = useState(0); -/* ===== Componente ===== */ -export default function LaudoManager() { - const [laudos, setLaudos] = useState([]); - const [openDropdownId, setOpenDropdownId] = useState(null); + const [showProtocolModal, setShowProtocolModal] = useState(false); + const [protocolForIndex, setProtocolForIndex] = useState(null); - /* viewerLaudo é usado para mostrar o editor/leitura; - previewLaudo é usado para a pré-visualização (sem bloquear) */ - const [viewerLaudo, setViewerLaudo] = useState(null); - const [previewLaudo, setPreviewLaudo] = useState(null); - const [showPreview, setShowPreview] = useState(false); + const [paginaAtual, setPaginaAtual] = useState(1); + const [itensPorPagina, setItensPorPagina] = useState(10); - const [showConfirmDelete, setShowConfirmDelete] = useState(false); - const [toDelete, setToDelete] = useState(null); - const [loadingDelete, setLoadingDelete] = useState(false); + // agora guardamos a mensagem (null = sem aviso) + const [noPermissionText, setNoPermissionText] = useState(null); - /* notificação simples (sem backdrop) para 'sem permissão' */ - const [showNoPermission, setShowNoPermission] = useState(false); + const isSecretary = true; - /* pesquisa */ - const [query, setQuery] = useState(""); - - /* Para simplificar: eu assumo aqui que estamos na visão da secretaria */ - const isSecretary = true; // permanece true (somente leitura) + const totalPaginas = Math.max(1, Math.ceil(relatoriosFinais.length / itensPorPagina)); + const indiceInicial = (paginaAtual - 1) * itensPorPagina; + const indiceFinal = indiceInicial + itensPorPagina; + const relatoriosPaginados = relatoriosFinais.slice(indiceInicial, indiceFinal); useEffect(() => { - // Importa os dados mock apenas - const data = mockFetchLaudos(); - setLaudos(data); - }, []); + let mounted = true; - // Fecha dropdown ao clicar fora - useEffect(() => { - function onDocClick(e) { - if (e.target.closest && e.target.closest('.action-btn')) return; - if (e.target.closest && e.target.closest('.dropdown')) return; - setOpenDropdownId(null); - } - document.addEventListener('click', onDocClick); - return () => document.removeEventListener('click', onDocClick); - }, []); + const fetchReports = async () => { + try { + const myHeaders = new Headers(); + myHeaders.append('apikey', API_KEY); + if (authHeader) myHeaders.append('Authorization', authHeader); + const requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; - function toggleDropdown(id, e) { - e.stopPropagation(); - setOpenDropdownId(prev => (prev === id ? null : id)); - } + const res = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/reports?select=*", requestOptions); + const data = await res.json(); - /* (botao editar) */ - function handleOpenViewer(laudo) { - setOpenDropdownId(null); - if (isSecretary) { - // (notificação sem bloquear) - setShowNoPermission(true); - return; - } - setViewerLaudo(laudo); - } + const uniqueMap = new Map(); + (Array.isArray(data) ? data : []).forEach(r => { + if (r && r.id) uniqueMap.set(r.id, r); + }); + const unique = Array.from(uniqueMap.values()) + .sort((a, b) => new Date(b.created_at || 0) - new Date(a.created_at || 0)); - /* (botao imprimir) */ - function handlePrint(laudo) { - // evitar bug: fechar viewer antes de abrir preview - setViewerLaudo(null); - setPreviewLaudo(laudo); - setShowPreview(true); - setOpenDropdownId(null); - } - - /* (botao excluir) */ - function handleRequestDelete(laudo) { - setToDelete(laudo); - setOpenDropdownId(null); - setShowConfirmDelete(true); - } - - /* (funcionalidade do botao de excluir) */ - async function doConfirmDelete(confirm) { - if (!toDelete) return; - if (!confirm) { - setShowConfirmDelete(false); - setToDelete(null); - return; - } - setLoadingDelete(true); - try { - const resp = await mockDeleteLaudo(toDelete.id); - if (resp.ok || resp === true) { - // removo o laudo da lista local - setLaudos(curr => curr.filter(l => l.id !== toDelete.id)); - setShowConfirmDelete(false); - setToDelete(null); - alert("Laudo excluído com sucesso."); - } else { - alert("Erro ao excluir. Tente novamente."); + if (mounted) { + setRelatoriosOriginais(unique); + setRelatoriosFiltrados(unique); + setRelatoriosFinais(unique); + } + } catch (err) { + console.error('Erro listar relatórios', err); + if (mounted) { + setRelatoriosOriginais([]); + setRelatoriosFiltrados([]); + setRelatoriosFinais([]); + } } - } catch (err) { - alert("Erro de rede ao excluir."); - } finally { - setLoadingDelete(false); - } - } + }; - /* filtro de pesquisa (por pedido ou nome do paciente) */ - const normalized = (s = "") => String(s).toLowerCase(); - const filteredLaudos = laudos.filter(l => { - const q = normalized(query).trim(); - if (!q) return true; - if (normalized(l.pedido).includes(q)) return true; - if (normalized(l.paciente?.nome).includes(q)) return true; - return false; - }); + fetchReports(); + const refreshHandler = () => fetchReports(); + window.addEventListener('reports:refresh', refreshHandler); + return () => { + mounted = false; + window.removeEventListener('reports:refresh', refreshHandler); + }; + }, [authHeader]); + + useEffect(() => { + const fetchRelData = async () => { + const pacientes = []; + const medicos = []; + for (let i = 0; i < relatoriosFiltrados.length; i++) { + const rel = relatoriosFiltrados[i]; + try { + const pacienteRes = await GetPatientByID(rel.patient_id, authHeader); + pacientes.push(Array.isArray(pacienteRes) ? pacienteRes[0] : pacienteRes); + } catch (err) { + pacientes.push(null); + } + try { + const doctorId = rel.created_by || rel.requested_by || null; + if (doctorId) { + const docRes = await GetDoctorByID(doctorId, authHeader); + medicos.push(Array.isArray(docRes) ? docRes[0] : docRes); + } else { + medicos.push({ full_name: rel.requested_by || '' }); + } + } catch (err) { + medicos.push({ full_name: rel.requested_by || '' }); + } + } + setPacientesComRelatorios(pacientes); + setMedicosComRelatorios(medicos); + }; + if (relatoriosFiltrados.length > 0) fetchRelData(); + else { + setPacientesComRelatorios([]); + setMedicosComRelatorios([]); + } + }, [relatoriosFiltrados, authHeader]); + + const abrirModal = (relatorio, index) => { + setRelatorioModal(relatorio); + setModalIndex(index); + setShowModal(true); + }; + + const limparFiltros = () => { + setTermoPesquisa(''); + setFiltroExame(''); + setRelatoriosFinais(relatoriosOriginais); + }; + + const BaixarPDFdoRelatorio = (nome_paciente, idx) => { + const elemento = document.getElementById(`folhaA4-${idx}`); + if (!elemento) { + console.error('Elemento para gerar PDF não encontrado:', `folhaA4-${idx}`); + return; + } + const opt = { + margin: 0, + filename: `relatorio_${nome_paciente || "paciente"}.pdf`, + html2canvas: { scale: 2 }, + jsPDF: { unit: "mm", format: "a4", orientation: "portrait" } + }; + html2pdf().set(opt).from(elemento).save(); + }; + + const handleEditClick = (relatorio) => { + if (isSecretary) { + setNoPermissionText('Sem permissão para editar/criar laudo.'); + return; + } + navigate(`/medico/relatorios/${relatorio.id}/edit`); + }; + + const handleOpenProtocol = (relatorio, index) => { + setProtocolForIndex({ relatorio, index }); + setShowProtocolModal(true); + }; + + const handleLiberarLaudo = async (relatorio) => { + if (isSecretary) { + // MUDANÇA: mostrar "Ainda não implementado" + setNoPermissionText('Ainda não implementado'); + return; + } + // para médicos: implementação real já estava antes (mantive o bloco, caso queira) + try { + const myHeaders = new Headers(); + myHeaders.append('apikey', API_KEY); + if (authHeader) myHeaders.append('Authorization', authHeader); + myHeaders.append('Content-Type', 'application/json'); + myHeaders.append('Prefer', 'return=representation'); + + const body = JSON.stringify({ status: 'liberado' }); + + const res = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/reports?id=eq.${relatorio.id}`, { + method: 'PATCH', + headers: myHeaders, + body + }); + + if (!res.ok) { + const txt = await res.text().catch(()=> ''); + throw new Error('Erro ao liberar laudo: ' + res.status + ' ' + txt); + } + + // refetch simples + const refreshed = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/reports?select=*", { + method: 'GET', + headers: (() => { const h=new Headers(); h.append('apikey', API_KEY); if(authHeader) h.append('Authorization', authHeader); return h; })(), + }); + const data = await refreshed.json(); + setRelatoriosOriginais(Array.isArray(data)? data : []); + setRelatoriosFiltrados(Array.isArray(data)? data : []); + setRelatoriosFinais(Array.isArray(data)? data : []); + alert('Laudo liberado com sucesso.'); + } catch (err) { + console.error(err); + alert('Erro ao liberar laudo. Veja console.'); + } + }; + + useEffect(() => { + const q = (termoPesquisa || '').toLowerCase().trim(); + const ex = (filtroExame || '').toLowerCase().trim(); + + let items = relatoriosOriginais || []; + if (q) { + items = items.filter(r => { + const patientName = (r.patient_name || r.patient_fullname || '').toString().toLowerCase(); + const pedido = (r.id || r.request_id || r.request || '').toString().toLowerCase(); + return patientName.includes(q) || pedido.includes(q) || (r.patient_id && r.patient_id.toString().includes(q)); + }); + } + if (ex) items = items.filter(r => (r.exam || r.exame || '').toLowerCase().includes(ex)); + + setRelatoriosFiltrados(items); + setRelatoriosFinais(items); + setPaginaAtual(1); + }, [termoPesquisa, filtroExame, relatoriosOriginais]); + + const irParaPagina = (pagina) => setPaginaAtual(pagina); + const avancarPagina = () => { if (paginaAtual < totalPaginas) setPaginaAtual(paginaAtual + 1); }; + const voltarPagina = () => { if (paginaAtual > 1) setPaginaAtual(paginaAtual - 1); }; + const gerarNumerosPaginas = () => { + const paginas = []; + const paginasParaMostrar = 5; + let inicio = Math.max(1, paginaAtual - Math.floor(paginasParaMostrar / 2)); + let fim = Math.min(totalPaginas, inicio + paginasParaMostrar - 1); + inicio = Math.max(1, fim - paginasParaMostrar + 1); + for (let i = inicio; i <= fim; i++) paginas.push(i); + return paginas; + }; return ( -
-
-
-
-
Gerenciamento de Laudo
- {/* removi a linha "Visualização: Secretaria" conforme pedido */} -
-
- -
- setQuery(e.target.value)} - style={{ width:"100%", padding:12, borderRadius:8, border:"1px solid #e6eef8" }} - /> -
- - {filteredLaudos.length === 0 ? ( -
Nenhum laudo encontrado.
- ) : ( -
- {filteredLaudos.map((l) => ( -
-
-
{l.pedido}
-
{l.data}
+
+

Lista de Relatórios

+
+
+
+
+
+

Relatórios Cadastrados

+
+
-
-
{l.paciente.nome}
-
{l.paciente.cpf} • {l.paciente.convenio}
-
-
{l.exame}
-
{l.solicitante}
-
{l.status}
+
-
-
toggleDropdown(l.id, e)} title="Ações"> - +
+
+
+ Filtros +
+
+
+
+ + setTermoPesquisa(e.target.value)} + /> +
+
+
+
+ + setFiltroExame(e.target.value)} + /> +
+
+
+ +
+
+
+ {relatoriosFinais.length} DE {relatoriosOriginais.length} RELATÓRIOS ENCONTRADOS +
+
+
- {openDropdownId === l.id && ( -
-
handleOpenViewer(l)}>Editar
-
handlePrint(l)}>Imprimir
-
{ alert("Protocolo de entrega: formulário (não implementado)."); setOpenDropdownId(null); }}>Protocolo de entrega
-
{ alert("Liberar laudo: requer permissão de médico. (não implementado)"); setOpenDropdownId(null); }}>Liberar laudo
-
handleRequestDelete(l)} style={{ color:"#c23b3b" }}>Excluir laudo
+
+ + + + + + + + + + + {relatoriosPaginados.length > 0 ? ( + relatoriosPaginados.map((relatorio, index) => { + const paciente = pacientesComRelatorios[index] || {}; + return ( + + + + + + + ); + }) + ) : ( + + )} + +
PacienteCPFExame
{paciente?.full_name || relatorio.patient_name || 'Carregando...'}{paciente?.cpf || 'Carregando...'}{relatorio.exam || relatorio.exame || '—'} +
+ + + + + {/* Removido o botão "Imprimir" daqui (agora no Ver Detalhes) */} + + + + +
+
Nenhum relatório encontrado.
+ + {relatoriosFinais.length > 0 && ( +
+
+ Itens por página: + +
+ +
+ + Página {paginaAtual} de {totalPaginas} • + Mostrando {indiceInicial + 1}-{Math.min(indiceFinal, relatoriosFinais.length)} de {relatoriosFinais.length} itens + + + +
)}
- ))} +
- )} +
- {/* Viewer modal (modo leitura) — só abre para quem tem permissão */} - {viewerLaudo && !showPreview && !isSecretary && ( -
-
setViewerLaudo(null)} /> -
-
-
-
{viewerLaudo.paciente.nome}
-
- Nasc.: {viewerLaudo.paciente.nascimento} • {computeAge(viewerLaudo.paciente.nascimento)} anos • {viewerLaudo.paciente.cpf} • {viewerLaudo.paciente.convenio} + {/* Modal principal (detalhes) */} + {showModal && relatorioModal && ( +
setShowModal(false)}> +
e.stopPropagation()}> +
+
+
Relatório de {pacientesComRelatorios[modalIndex]?.full_name || relatorioModal.patient_name || 'Paciente'}
+ +
+ +
+
+
+

Clinica Rise up

+

Dr - CRM/SP 123456

+

Avenida - (79) 9 4444-4444

+
+ +
+

Paciente: {pacientesComRelatorios[modalIndex]?.full_name || relatorioModal.patient_name || '—'}

+

Data de nascimento: {pacientesComRelatorios[modalIndex]?.birth_date || '—'}

+

Data do exame: {relatorioModal?.due_at || relatorioModal?.date || '—'}

+ +

Conteúdo do Relatório:

+
+ +
+
+ +
+

Dr {medicosComRelatorios[modalIndex]?.full_name || relatorioModal?.requested_by || '—'}

+

Emitido em: {relatorioModal?.created_at || '—'}

+
-
- - -
-
- -
-
B
-
I
-
U
-
Fonte
-
Tamanho
-
Lista
-
Campos
-
Modelos
-
Imagens
-
- -
- {viewerLaudo.conteudo.split("\n").map((line, i) => ( -

{line}

- ))} -
- -
-
- - - -
- -
- - +
+ +
)} - {/* Preview modal — agora não bloqueia a tela (sem backdrop escuro), botão imprimir é interativo */} - {showPreview && previewLaudo && ( -
-
-
-
-
Pré-visualização - {previewLaudo.paciente.nome}
-
- - -
-
- -
-
- RELATÓRIO MÉDICO -
-
- {previewLaudo.paciente.nome} • Nasc.: {previewLaudo.paciente.nascimento} • CPF: {previewLaudo.paciente.cpf} + {/* Modal Protocolo */} + {showProtocolModal && protocolForIndex && ( +
setShowProtocolModal(false)}> +
e.stopPropagation()}> +
+
+
Protocolo de Entrega - {protocolForIndex.relatorio?.patient_name || 'Paciente'}
+
-
- {previewLaudo.conteudo} +
+
+

Pedido: {protocolForIndex.relatorio?.id || protocolForIndex.relatorio?.pedido}

+

Paciente: {protocolForIndex.relatorio?.patient_name || '—'}

+

Data: {protocolForIndex.relatorio?.due_at || protocolForIndex.relatorio?.date || '—'}

+
+

Protocolo de entrega gerado automaticamente. (Substitua pelo endpoint real se houver)

+
+
+ +
+ +
)} - {/* Notificação simples: Sem permissão (exibe sem backdrop escuro) - centralizada */} - {showNoPermission && ( -
-
Sem permissão para editar
-
Você está na visualização da secretaria. Edição disponível somente para médicos autorizados.
-
- -
-
- )} - - {/* Confirm delete modal (simples: Sim / Não) */} - {showConfirmDelete && toDelete && ( -
-
-
Confirmar exclusão
-
Você tem certeza que quer excluir o laudo {toDelete.pedido} - {toDelete.paciente.nome} ? Esta ação é irreversível.
- -
- - + {/* Variável de aviso: mostra texto personalizado */} + {noPermissionText && ( +
setNoPermissionText(null)}> +
e.stopPropagation()}> +
+
+
{noPermissionText}
+

{/* opcional descrição aqui */}

+
+ +
+
)} +
); -} +}; -/* ===== Helpers ===== */ -function computeAge(birth) { - if (!birth) return "-"; - const [y,m,d] = birth.split("-").map(x => parseInt(x,10)); - if (!y) return "-"; - const today = new Date(); - let age = today.getFullYear() - y; - const mm = today.getMonth() + 1; - const dd = today.getDate(); - if (mm < m || (mm === m && dd < d)) age--; - return age; -} +export default LaudoManager; diff --git a/src/pages/LaudoStyle.css b/src/pages/LaudoStyle.css index 31f1542..5a08f68 100644 --- a/src/pages/LaudoStyle.css +++ b/src/pages/LaudoStyle.css @@ -309,4 +309,39 @@ html[data-bs-theme="dark"] .notice-card { background: #232323 !important; color: #e0e0e0 !important; box-shadow: 0 8px 30px rgba(10,20,40,0.32) !important; -} \ No newline at end of file +} + +/* Botões coloridos para Protocolo e Liberar (combina com estilo dos outros botões) */ +.btn-protocolo { + background-color: #E6F2FF; + color: #004085; + border: 1px solid #d6e9ff; + padding: 8px 12px; + border-radius: 8px; + font-weight: 600; + cursor: pointer; +} +.btn-protocolo:hover { + background-color: #cce5ff; +} + +/* Liberar laudo - estilo parecido com o botão editar (amarelo claro) */ +.btn-liberar { + background-color: #FFF3CD; + color: #856404; + border: 1px solid #ffeaa7; + padding: 8px 12px; + border-radius: 8px; + font-weight: 600; + cursor: pointer; +} +.btn-liberar:hover { + background-color: #ffeaa7; +} + +/* Ajuste visual (pequeno) para espaçamento horizontal dos botões da linha */ +.table-responsive .d-flex.gap-2 .btn { + display: inline-flex; + align-items: center; + gap: 6px; +} diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 831b94a..76a46e9 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -118,7 +118,8 @@ function Login({ onEnterSystem }) { if (data.access_token) { const UserData = await UserInfos(`bearer ${data.access_token}`); console.log(UserData, "Dados do usuário"); - + localStorage.setItem("roleUser", UserData.roles) + if (UserData?.roles?.includes("admin")) { navigate(`/admin/`); } else if (UserData?.roles?.includes("secretaria")) { @@ -131,7 +132,7 @@ function Login({ onEnterSystem }) { navigate(`/paciente/`); } }else{ - console.log("ERROROROROROOR") + console.log("Erro na tentativa de login") setShowCabecalho(true) } } else { diff --git a/src/pages/MedicoAgendamento.jsx b/src/pages/MedicoAgendamento.jsx new file mode 100644 index 0000000..2770a4c --- /dev/null +++ b/src/pages/MedicoAgendamento.jsx @@ -0,0 +1,139 @@ +import React, { useState, useMemo, useEffect } from 'react'; +import dayjs from 'dayjs'; +import CalendarComponent from '../components/AgendarConsulta/CalendarComponent.jsx'; +import { useAuth } from '../components/utils/AuthProvider.js'; +import TabelaAgendamentoDia from '../components/AgendarConsulta/TabelaAgendamentoDia'; + +dayjs.locale('pt-br'); + +const MedicoAgendamento = () => { + const { getAuthorizationHeader, user } = useAuth(); + const [currentDate, setCurrentDate] = useState(dayjs()); + const [selectedDay, setSelectedDay] = useState(dayjs()); + const [DictAgendamentosOrganizados, setAgendamentosOrganizados] = useState({}); + const [showSpinner, setShowSpinner] = useState(true); + const [modoVisualizacao, setModoVisualizacao] = useState('Dia'); + + + const [quickJump, setQuickJump] = useState({ + month: currentDate.month(), + year: currentDate.year() + }); + + const handleQuickJumpChange = (type, value) => { + setQuickJump(prev => ({ ...prev, [type]: Number(value) })); + }; + + const applyQuickJump = () => { + let newDate = dayjs().year(quickJump.year).month(quickJump.month).date(1); + setCurrentDate(newDate); + setSelectedDay(newDate); + }; + + + const [selectedID, setSelectedId] = useState('0'); + const [showDeleteModal, setShowDeleteModal] = useState(false); + const [showConfirmModal, setShowConfirmModal] = useState(false); t + + + useEffect(() => { + + const mockAgendamentos = { + [dayjs().format('YYYY-MM-DD')]: [ + { id: 1, scheduled_at: dayjs().set('hour', 10).set('minute', 0).toISOString(), paciente_nome: "Paciente Teste 1", medico_nome: "Dr. Mock", status: "agendado" }, + { id: 2, scheduled_at: dayjs().set('hour', 11).set('minute', 30).toISOString(), paciente_nome: "Paciente Teste 2", medico_nome: "Dr. Mock", status: "confirmed" }, + ], + + '2025-10-27': [ + { id: 3, scheduled_at: '2025-10-27T19:30:00Z', paciente_nome: 'Davi Andrade', medico_nome: 'Dr. João', status: 'agendado' }, + { id: 4, scheduled_at: '2025-10-27T20:00:00Z', paciente_nome: 'Davi Andrade', medico_nome: 'Dr. João', status: 'agendado' }, + { id: 5, scheduled_at: '2025-10-27T21:30:00Z', paciente_nome: 'Davi Andrade', medico_nome: 'Dr. João', status: 'agendado' }, + ] + }; + + const today = dayjs(); + const startOfMonth = today.startOf('month'); + const nov11 = startOfMonth.add(10, 'day').format('YYYY-MM-DD'); + + + mockAgendamentos[nov11] = [ + { id: 6, scheduled_at: `${nov11}T10:30:00Z`, paciente_nome: 'Paciente C', medico_nome: 'Isaac Kauã', status: 'agendado' }, + { id: 7, scheduled_at: `${nov11}T11:00:00Z`, paciente_nome: 'João Gustavo', medico_nome: 'João Gustavo', status: 'agendado' }, + { id: 8, scheduled_at: `${nov11}T12:30:00Z`, paciente_nome: 'João Gustavo', medico_nome: 'João Gustavo', status: 'agendado' }, + { id: 9, scheduled_at: `${nov11}T15:00:00Z`, paciente_nome: 'Pedro Abravanel', medico_nome: 'Fernando Prichowski', status: 'agendado' }, + ]; + + + setAgendamentosOrganizados(mockAgendamentos); + setShowSpinner(false); + }, []); + + + const handleSelectSlot = (timeSlot, doctorId) => { + alert(`Abrir tela de Nova Consulta para o dia ${selectedDay.format('DD/MM/YYYY')} às ${timeSlot} com o Médico ID: ${doctorId}`); + + }; + + const isMedico = true; + const medicoLogadoID = user?.doctor_id || "ID_MEDICO_DEFAULT"; + + return ( +
+

Agenda do Médico: {user?.full_name || "Nome do Médico"}

+
+ + +
+ +
+ + + +
+ +
+ {} +
+ +
+ + {} +
+ {modoVisualizacao === 'Dia' && ( + + )} + {} + {} + {} +
+
+
+ ); +}; + +export default MedicoAgendamento; \ No newline at end of file diff --git a/src/pages/TabelaAgendamentoDia.jsx b/src/pages/TabelaAgendamentoDia.jsx new file mode 100644 index 0000000..34725e7 --- /dev/null +++ b/src/pages/TabelaAgendamentoDia.jsx @@ -0,0 +1,132 @@ +import React, { useState, useEffect } from 'react'; +import dayjs from 'dayjs'; +import 'dayjs/locale/pt-br'; +import { ChevronLeft, ChevronRight, Edit, Trash2, User, Stethoscope } from 'lucide-react'; + + +// Configura o Day.js para usar o idioma português do Brasil +dayjs.locale('pt-br'); + + +const TabelaAgendamentoDia = ({ + agendamentos, + setDictInfo, + setShowDeleteModal, + setSelectedId, + setShowConfirmModal, + listaConsultasID, + coresConsultas +}) => { + const [currentDate, setCurrentDate] = useState(dayjs()); + const [appointmentsForDay, setAppointmentsForDay] = useState([]); + + + useEffect(() => { + const formattedDate = currentDate.format('YYYY-MM-DD'); + const dailyAppointments = agendamentos[formattedDate] || []; + + + const appointmentsComStatusAtualizado = dailyAppointments.map(app => { + const index = listaConsultasID.indexOf(app.id); + if (index > -1) { + return { ...app, status: coresConsultas[index] }; + } + return app; + }); + + + setAppointmentsForDay(appointmentsComStatusAtualizado); + }, [currentDate, agendamentos, listaConsultasID, coresConsultas]); + + + const handlePrevDay = () => { + setCurrentDate(currentDate.subtract(1, 'day')); + }; + + + const handleNextDay = () => { + setCurrentDate(currentDate.add(1, 'day')); + }; + + + const handleEdit = (agendamento) => { + // Adapte para a sua lógica de edição, talvez abrindo um modal + console.log("Editar:", agendamento); + setDictInfo(agendamento); + }; + + + const handleDelete = (id) => { + setSelectedId(id); + setShowDeleteModal(true); + }; + + + // Gera os horários do dia (ex: 08:00 às 18:00) + const renderTimeSlots = () => { + const slots = []; + for (let i = 8; i <= 18; i++) { + const time = `${i.toString().padStart(2, '0')}:00`; + const hourlyAppointments = appointmentsForDay.filter(app => + dayjs(app.scheduled_at).format('HH:mm') === time + ); + + + slots.push( +
+
{time}
+
+ {hourlyAppointments.length > 0 ? ( + hourlyAppointments.map(app => ( +
+
+
+ + Dr(a): {app.medico_nome} +
+
+ + Paciente: {app.paciente_nome} +
+
+
+ + +
+
+ )) + ) : ( +
+ )} +
+
+ ); + } + return slots; + }; + + + return ( +
+
+ +

{currentDate.format('dddd, D [de] MMMM [de] YYYY')}

+ +
+
+ {renderTimeSlots()} +
+
+ ); +}; + + +export default TabelaAgendamentoDia; diff --git a/src/pages/TablePaciente.jsx b/src/pages/TablePaciente.jsx index 386e7ad..7c044b9 100644 --- a/src/pages/TablePaciente.jsx +++ b/src/pages/TablePaciente.jsx @@ -6,7 +6,7 @@ import "./style/TablePaciente.css"; import ModalErro from "../components/utils/fetchErros/ModalErro"; import manager from "../components/utils/fetchErros/ManagerFunction"; -function TablePaciente({ setCurrentPage, setPatientID }) { +function TablePaciente({ setCurrentPage, setPatientID,setDictInfo }) { const { getAuthorizationHeader, isAuthenticated } = useAuth(); @@ -23,6 +23,10 @@ function TablePaciente({ setCurrentPage, setPatientID }) { const [dataInicial, setDataInicial] = useState(""); const [dataFinal, setDataFinal] = useState(""); + // Ordenação rápida + const [sortKey, setSortKey] = useState(null); // 'nome' | 'idade' | null + const [sortDir, setSortDir] = useState('asc'); // 'asc' | 'desc' + const [paginaAtual, setPaginaAtual] = useState(1); const [itensPorPagina, setItensPorPagina] = useState(10); @@ -109,11 +113,8 @@ function TablePaciente({ setCurrentPage, setPatientID }) { } }; - // Função para refresh token (adicionada) const RefreshingToken = () => { console.log("Refreshing token..."); - // Aqui você pode adicionar a lógica de refresh do token se necessário - // Por enquanto é apenas um placeholder para evitar o erro }; useEffect(() => { @@ -249,11 +250,25 @@ function TablePaciente({ setCurrentPage, setPatientID }) { return resultado; }) : []; + // Aplica ordenação rápida + const applySorting = (arr) => { + if (!Array.isArray(arr) || !sortKey) return arr; + const copy = [...arr]; + if (sortKey === 'nome') { + copy.sort((a, b) => (a.full_name || '').localeCompare((b.full_name || ''), undefined, { sensitivity: 'base' })); + } else if (sortKey === 'idade') { + copy.sort((a, b) => calcularIdade(a.birth_date) - calcularIdade(b.birth_date)); + } + if (sortDir === 'desc') copy.reverse(); + return copy; + }; + + const pacientesOrdenados = applySorting(pacientesFiltrados); const totalPaginas = Math.ceil(pacientesFiltrados.length / itensPorPagina); const indiceInicial = (paginaAtual - 1) * itensPorPagina; const indiceFinal = indiceInicial + itensPorPagina; - const pacientesPaginados = pacientesFiltrados.slice(indiceInicial, indiceFinal); + const pacientesPaginados = pacientesOrdenados.slice(indiceInicial, indiceFinal); const irParaPagina = (pagina) => { @@ -292,7 +307,7 @@ function TablePaciente({ setCurrentPage, setPatientID }) { useEffect(() => { setPaginaAtual(1); - }, [search, filtroConvenio, filtroVIP, filtroAniversariante, filtroCidade, filtroEstado, idadeMinima, idadeMaxima, dataInicial, dataFinal]); + }, [search, filtroConvenio, filtroVIP, filtroAniversariante, filtroCidade, filtroEstado, idadeMinima, idadeMaxima, dataInicial, dataFinal, sortKey, sortDir]); return ( <> @@ -361,6 +376,34 @@ function TablePaciente({ setCurrentPage, setPatientID }) { > Aniversariantes + + {/* Ordenação rápida (estilo compacto por select) */} +
+
+ Ordenar por: + {(() => { + const sortValue = sortKey ? `${sortKey}-${sortDir}` : ''; + return ( + + ); + })()} +
@@ -460,25 +503,6 @@ function TablePaciente({ setCurrentPage, setPatientID }) {
- {(search || filtroConvenio !== "Todos" || filtroVIP || filtroAniversariante || - filtroCidade || filtroEstado || idadeMinima || idadeMaxima || dataInicial || dataFinal) && ( -
- Filtros ativos: -
- {search && Busca: "{search}"} - {filtroConvenio !== "Todos" && Convênio: {filtroConvenio}} - {filtroVIP && VIP} - {filtroAniversariante && Aniversariantes} - {filtroCidade && Cidade: {filtroCidade}} - {filtroEstado && Estado: {filtroEstado}} - {idadeMinima && Idade mín: {idadeMinima}} - {idadeMaxima && Idade máx: {idadeMaxima}} - {dataInicial && Data inicial: {dataInicial}} - {dataFinal && Data final: {dataFinal}} -
-
- )} -
@@ -520,14 +544,14 @@ function TablePaciente({ setCurrentPage, setPatientID }) {
{paciente.email || 'Não informado'}
- - - - @@ -679,4 +703,4 @@ function TablePaciente({ setCurrentPage, setPatientID }) { ); } -export default TablePaciente; \ No newline at end of file +export default TablePaciente; diff --git a/src/pages/inicioPaciente.jsx b/src/pages/inicioPaciente.jsx new file mode 100644 index 0000000..9e95061 --- /dev/null +++ b/src/pages/inicioPaciente.jsx @@ -0,0 +1,273 @@ +import React, { useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { FaCalendarAlt, FaCalendarCheck, FaFileAlt, FaUserMd, FaClock } from 'react-icons/fa'; +import { useAuth } from '../components/utils/AuthProvider'; +import API_KEY from '../components/utils/apiKeys'; +import './style/inicioPaciente.css'; + +function InicioPaciente() { + const navigate = useNavigate(); + const { getAuthorizationHeader, isAuthenticated } = useAuth(); + const [agendamentos, setAgendamentos] = useState([]); + const [medicos, setMedicos] = useState([]); + const [agendamentosComMedicos, setAgendamentosComMedicos] = useState([]); + const [loading, setLoading] = useState(true); + const [pacienteId, setPacienteId] = useState(null); + + useEffect(() => { + const userId = localStorage.getItem('user_id') || localStorage.getItem('patient_id'); + setPacienteId(userId); + }, []); + + useEffect(() => { + const fetchMedicos = async () => { + try { + const authHeader = getAuthorizationHeader(); + + const myHeaders = new Headers(); + myHeaders.append("apikey", API_KEY); + myHeaders.append("Authorization", authHeader); + + const requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + }; + + const response = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/doctors", requestOptions); + + if (response.ok) { + const data = await response.json(); + setMedicos(data); + console.log(' Médicos carregados:', data.length); + } else { + console.error(' Erro ao buscar médicos:', response.status); + } + } catch (error) { + console.error(' Erro ao buscar médicos:', error); + } + }; + + const fetchAgendamentos = async () => { + try { + const authHeader = getAuthorizationHeader(); + + const myHeaders = new Headers(); + myHeaders.append("apikey", API_KEY); + myHeaders.append("Authorization", authHeader); + + const requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + }; + + // Buscar todos os agendamentos (depois filtraremos pelo paciente) + const response = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments", requestOptions); + + if (response.ok) { + const data = await response.json(); + setAgendamentos(data); + console.log(' Agendamentos carregados:', data.length); + } else { + console.error(' Erro ao buscar agendamentos:', response.status); + } + } catch (error) { + console.error(' Erro ao buscar agendamentos:', error); + } finally { + setLoading(false); + } + }; + + if (isAuthenticated) { + fetchMedicos(); + fetchAgendamentos(); + } + }, [isAuthenticated, getAuthorizationHeader]); + + useEffect(() => { + if (agendamentos.length > 0 && medicos.length > 0) { + const agendamentosComNomes = agendamentos.map(agendamento => { + const medico = medicos.find(m => m.id === agendamento.doctor_id); + return { + ...agendamento, + nomeMedico: medico?.full_name || 'Médico não encontrado', + especialidadeMedico: medico?.specialty || '' + }; + }); + setAgendamentosComMedicos(agendamentosComNomes); + } + }, [agendamentos, medicos]); + + const meusAgendamentos = agendamentosComMedicos.filter(a => + pacienteId ? a.patient_id === pacienteId : true + ); + + const hoje = new Date(); + hoje.setHours(0, 0, 0, 0); + + const agendamentosFuturos = meusAgendamentos.filter(a => { + if (!a.scheduled_at) return false; + const dataAgendamento = new Date(a.scheduled_at); + return dataAgendamento >= hoje && a.status !== 'cancelled' && a.status !== 'completed'; + }).sort((a, b) => new Date(a.scheduled_at) - new Date(b.scheduled_at)); + + const proximasConsultas = agendamentosFuturos.length; + const consultasHoje = agendamentosFuturos.filter(a => { + const dataAgendamento = new Date(a.scheduled_at); + dataAgendamento.setHours(0, 0, 0, 0); + return dataAgendamento.getTime() === hoje.getTime(); + }).length; + + const consultasPendentes = meusAgendamentos.filter(a => + a.status === 'pending' || a.status === 'requested' + ).length; + + const historicoConsultas = meusAgendamentos.filter(a => + a.status === 'completed' + ).length; + + return ( +
+
+

Bem-vindo ao MediConnect

+

Gerencie suas consultas e acompanhe seu histórico médico

+
+ +
+
+
+ Próximas Consultas + {proximasConsultas} +
+
+ +
+
+ +
+
+ Consultas Hoje + {consultasHoje} +
+
+ +
+
+ +
+
+ Aguardando + {loading ? '...' : consultasPendentes} +
+
+ +
+
+ +
+
+ Realizadas + {historicoConsultas} +
+
+ +
+
+
+ +
+

Acesso Rápido

+
+
navigate('/paciente/agendamento')}> + +
+ Minhas Consultas + Ver todos os agendamentos +
+
+ +
navigate('/paciente/laudo')}> + +
+ Meus Laudos + Acessar documentos médicos +
+
+ +
navigate('/paciente/agendamento')}> + +
+ Meus Médicos + Ver histórico de atendimentos +
+
+
+
+ +
+

Próximas Consultas

+ {loading ? ( +
+

Carregando suas consultas...

+
+ ) : agendamentosFuturos.length > 0 ? ( +
+ {agendamentosFuturos.slice(0, 3).map(agendamento => ( +
+
+
+

+ {new Date(agendamento.scheduled_at).toLocaleTimeString('pt-BR', { + hour: '2-digit', + minute: '2-digit' + })} +

+

+ {new Date(agendamento.scheduled_at).toLocaleDateString('pt-BR', { + day: '2-digit', + month: 'short', + year: 'numeric' + })} +

+
+
+

+ + Dr(a): {agendamento.nomeMedico} +

+ {agendamento.especialidadeMedico && ( +

+ {agendamento.especialidadeMedico} +

+ )} +
+ + {agendamento.status === 'scheduled' ? 'Confirmado' : + agendamento.status === 'pending' ? 'Aguardando' : + agendamento.status === 'requested' ? 'Solicitado' : agendamento.status} + +
+
+ ))} + {agendamentosFuturos.length > 3 && ( + + )} +
+ ) : ( +
+ +

Você não tem consultas agendadas

+ +
+ )} +
+
+ ); +} + +export default InicioPaciente; \ No newline at end of file diff --git a/src/pages/style/Agendamento.css b/src/pages/style/Agendamento.css index cbe2039..d887b3a 100644 --- a/src/pages/style/Agendamento.css +++ b/src/pages/style/Agendamento.css @@ -1,3 +1,5 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); + .filtros-container select, .filtros-container input { padding: 0.5rem; @@ -14,420 +16,210 @@ cursor: pointer; } -.unidade-selecionarprofissional{ - background-color: #fdfdfdde; - padding: 20px 10px; +.unidade-selecionarprofissional { + background-color: #ffffff; + padding: 20px 20px; display: flex; - border-radius:10px ; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); -} - -.unidade-selecionarprofissional input, .unidade-selecionarprofissional select { - margin-left: 8px; - border-radius: 8px; - padding: 5px; - width: 20%; -} - -.unidade-selecionarprofissional select{ - width: 7%; -} - -.busca-atendimento{ - display: flex; - flex-direction: row; - margin:10px; justify-content: flex-start; -} - -.busca-atendimento select{ - padding:5px; - border-radius:8px ; - margin-left: 15px; - background-color: #0078d7; - color: white; - font-weight: bold; -} - -.busca-atendimento input{ - margin-left: 8px; - border-radius: 8px; - padding: 5px; - width: 100%; -} - -.btn-selecionar-tabeladia, .btn-selecionar-tabelasemana, .btn-selecionar-tabelames { - background-color: rgba(231, 231, 231, 0.808); - padding:8px 10px; - font-size: larger; - font-weight: bold; - border-style: hidden; -} - -.btn-selecionar-tabeladia{ - border-radius: 10px 0px 0px 10px; -} - -.btn-selecionar-tabelames{ - border-radius: 0px 10px 10px 0px; -} - -.btn-selecionar-tabeladia.ativo, .btn-selecionar-tabelasemana.ativo, .btn-selecionar-tabelames.ativo{ - background-color: lightcyan; - border-color: darkcyan; - font-weight: bolder; -} - -.legenda-tabela{ - display: flex; - - margin-top: 30px; - margin-bottom: 10px; - gap: 15px; - justify-content: flex-end; -} - -.legenda-item-realizado{ - background-color: #2c5e37; -} - -.legenda-item-confirmed{ - background-color: #1e90ff; -} -.legenda-item-cancelado{ - background-color: #d9534f; -} - -.legenda-item-agendado{ - background-color: #f0ad4e; -} - -#status-card-consulta-completed, .legenda-item-realizado { - background-color: #b7ffbd; - border:3px solid #91d392; - padding: 5px; - font-weight: bold; - border-radius: 10px; -} - -#status-card-consulta-cancelled, .legenda-item-cancelado { - background-color: #ffb7cc; - border:3px solid #ff6c84; - padding: 5px; - font-weight: bold; - border-radius: 10px; -} - -#status-card-consulta-confirmed, .legenda-item-confirmed { - background-color: #eef8fb; - border:3px solid #d8dfe7; - padding: 5px; - font-weight: bold; - border-radius: 10px; -} - -#status-card-consulta-agendado, .legenda-item-agendado { - background-color: #f7f7c4; - border:3px solid #f3ce67; - padding: 5px; - font-weight: bold; - border-radius: 10px; -} - -.btns-e-legenda-container{ - display: flex; - justify-content: space-between; - flex-direction: row; - margin-top: 10px; -} - -.calendario { - border-collapse: collapse; - width: 100%; - border-radius: 10px; - overflow: hidden; - box-shadow: 0 4px 12px rgb(255, 255, 255); - border: 10px solid #ffffffc5; - background-color: rgb(253, 253, 253); -} - -.calendario-ou-filaespera{ - margin-top: 0; -} - -.container-btns-agenda-fila_esepera{ - margin-top: 30px; - display: flex; - flex-direction: row; - gap: 20px; - margin-left:20px ; -} - -.btn-fila-espera, .btn-agenda{ - background-color: transparent; - border: 0px ; - border-bottom: 3px solid rgb(253, 253, 253); - padding: 8px; - border-radius: 10px 10px 0px 0px; - font-weight: bold; -} - -.opc-filaespera-ativo, .opc-agenda-ativo{ - color: white; - background-color: #5980fd; -} - -html[data-bs-theme="dark"] { - body { - background-color: #121212; - color: #e0e0e0; - } - - .calendario { - background-color: #1e1e1e; - border: 10px solid #333; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); - } - - .unidade-selecionarprofissional { - background-color: #1e1e1e; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); - } - - - .busca-atendimento input { - background-color: #2c2c2c; - color: #e0e0e0; - border: 1px solid #444; - } - - .btn-buscar, - .btn-selecionar-tabeladia, - .btn-selecionar-tabelasemana, - .btn-selecionar-tabelames { - background-color: #2c2c2c; - color: #e0e0e0; - border: none; - } - - .btn-selecionar-tabeladia.ativo, - .btn-selecionar-tabelasemana.ativo, - .btn-selecionar-tabelames.ativo { - background-color: #005a9e; - border-color: #004578; - color: #fff; - } - - .legenda-item-realizado { - background-color: #14532d; - border-color: #166534; - } - - .legenda-item-confirmado { - background-color: #1e3a8a; - border-color: #2563eb; - } - - .legenda-item-cancelado { - background-color: #7f1d1d; - border-color: #dc2626; - } - - .legenda-item-agendado { - background-color: #78350f; - border-color: #f59e0b; - } - - #status-card-consulta-realizado, - .legenda-item-realizado { - background-color: #14532d; - border: 3px solid #166534; - color: #e0e0e0; - } - - #status-card-consulta-cancelado, - .legenda-item-cancelado { - background-color: #7f1d1d; - border: 3px solid #dc2626; - color: #e0e0e0; - } - - #status-card-consulta-confirmado, - .legenda-item-confirmado { - background-color: #1e3a8a; - border: 3px solid #2563eb; - color: #e0e0e0; - } - - #status-card-consulta-agendado, - .legenda-item-agendado { - background-color: #78350f; - border: 3px solid #f59e0b; - color: #e0e0e0; - } - - .btns-e-legenda-container { - background-color: #181818; - } - - .container-btns-agenda-fila_esepera { - background-color: #181818; - } - - .btn-fila-espera, - .btn-agenda { - background-color: #2c2c2c; - color: #e0e0e0; - border-bottom: 3px solid #333; - } - - .opc-filaespera-ativo, - .opc-agenda-ativo { - color: #fff; - background-color: #005a9e; - } -} - -/* Estilo para o botão de Editar */ -.btn-edit-custom { - background-color: #FFF3CD; - color: #856404; -} - -/* Estilo para o botão de Excluir (Deletar) */ -.btn-delete-custom { - background-color: #F8D7DA; - color: #721C24; - padding: 10px; -} - -.cardconsulta{ - display:flex; align-items: center; - flex-direction: row; -} - -.container-botons{ - display: flex; - flex-direction: column; -} - -#tabela-seletor-container { - display: flex; - align-items: center; - justify-content: center; - gap: 12px; - - background-color: #fff; - border-radius: 8px; - padding: 6px 12px; - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08); - - font-family: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto; - width: fit-content; - margin: 0 auto; -} - -#tabela-seletor-container p { - margin: 0; - font-size: 23px; - font-weight: 500; - color: #4085f6; - text-align: center; - white-space: nowrap; -} - -#tabela-seletor-container button { - background: transparent; - border: none; - color: #555; - font-size: 20px; - cursor: pointer; - padding: 4px 6px; - border-radius: 6px; - transition: all 0.2s ease-in-out; -} - -#tabela-seletor-container button:hover { - background-color: rgba(0, 0, 0, 0.05); - color: #000; -} - -#tabela-seletor-container i { - pointer-events: none; -} - - -.input-e-dropdown-wrapper { - position: relative; - - - width: 350px; - margin-left: auto; + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); + margin-bottom: 20px; } .busca-atendimento { - -} - -.busca-atendimento > div { - /* Garante que a div interna do input ocupe toda a largura do wrapper */ - width: 100%; - /* Estilos para o contêiner do ícone e input, se necessário */ + display: flex; + flex-direction: row; + margin: 0; + justify-content: flex-start; } .busca-atendimento input { - /* Garante que o input preencha a largura disponível dentro do seu contêiner */ - width: calc(100% - 40px); /* Exemplo: 100% menos a largura do ícone (aprox. 40px) */ - /* ... outros estilos de borda, padding, etc. do seu input ... */ + border: 2px solid #000000; + border-radius: 8px; + padding: 10px 15px; + width: 100%; + font-size: 1rem; + margin-left: 0; } +.container-btns-agenda-fila_esepera { + margin-top: 20px; + margin-left: 0; + display: flex; + flex-direction: row; + gap: 0; + border-bottom: 2px solid #E2E8F0; + margin-bottom: 20px; +} + +.btn-fila-espera, .btn-agenda { + background-color: transparent; + border: 0; + border-bottom: 2px solid transparent; + padding: 12px 24px; + border-radius: 0; + font-weight: 600; + color: #718096; + cursor: pointer; + margin-bottom: -2px; + transition: color 0.2s, border-color 0.2s; +} + +.btn-fila-espera:hover, .btn-agenda:hover { + color: #2B6CB0; +} + +.opc-filaespera-ativo, .opc-agenda-ativo { + color: #4299E1; + background-color: transparent; + border-bottom: 2px solid #4299E1; +} + +.input-e-dropdown-wrapper { + position: relative; + width: 100%; + margin: 0; +} -/* 3. O Dropdown: Posicionamento e Estilização */ .dropdown-medicos { - /* POSICIONAMENTO: Faz o dropdown flutuar */ position: absolute; - - /* POSICIONAMENTO: Coloca o topo do dropdown logo abaixo do input */ top: 100%; left: 0; - - /* LARGURA: Essencial. Ocupa 100% do .input-e-dropdown-wrapper, limitando-se a ele. */ width: 100%; - - /* SOBREPOSIÇÃO: Garante que fique acima de outros elementos (como a Fila de Espera) */ z-index: 1000; - - /* ESTILIZAÇÃO: Aparência */ - background-color: #ffffff; /* Fundo branco para não vazar */ - border: 1px solid #ccc; /* Borda leve */ - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); /* Sombra para profundidade */ - border-top: none; /* Deixa o visual mais integrado ao input */ - - /* COMPORTAMENTO: Limite de altura e scroll */ + background-color: #ffffff; + border: 1px solid #ccc; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + border-top: none; max-height: 250px; overflow-y: auto; } +.dropdown-item { padding: 10px 15px; cursor: pointer; } +.dropdown-item:hover { background-color: #f0f0f0; } -/* 4. Estilização de cada item do dropdown */ -.dropdown-item { - padding: 10px 15px; - cursor: pointer; - font-size: 14px; +.calendar-wrapper { + display: flex; + gap: 24px; + background-color: #fff; + border-radius: 12px; + padding: 24px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); + font-family: 'Inter', sans-serif; + margin-top: 20px; +} +.calendar-info-panel { flex: 0 0 300px; border-right: 1px solid #E2E8F0; padding-right: 24px; display: flex; flex-direction: column; } +.info-date-display { background-color: #EDF2F7; border-radius: 8px; padding: 12px; text-align: center; margin-bottom: 16px; } +.info-date-display span { font-weight: 600; color: #718096; text-transform: uppercase; font-size: 0.9rem; } +.info-date-display strong { display: block; font-size: 2.5rem; font-weight: 700; color: #2D3748; } +.info-details { text-align: center; margin-bottom: 24px; } +.info-details h3 { font-size: 1.25rem; font-weight: 600; color: #2D3748; margin: 0; text-transform: capitalize; } +.info-details p { color: #718096; margin: 0; } +.appointments-list { flex-grow: 1; overflow-y: auto; } +.appointments-list h4 { font-size: 1rem; font-weight: 600; color: #4A5568; margin-bottom: 12px; position: sticky; top: 0; background-color: #fff; padding-bottom: 8px; } +.appointment-item { display: flex; gap: 12px; padding: 10px; border-radius: 6px; border-left: 4px solid; margin-bottom: 8px; background-color: #F7FAFC; } +.item-time { font-weight: 600; color: #2B6CB0; } +.item-details { display: flex; flex-direction: column; } +.item-details span { font-weight: 500; color: #2D3748; } +.item-details small { color: #718096; } +.no-appointments-info { text-align: center; padding: 20px; color: #A0AEC0; } +.appointment-item[data-status="confirmed"] { border-color: #4299E1; } +.appointment-item[data-status="completed"] { border-color: #48BB78; } +.appointment-item[data-status="cancelled"] { border-color: #F56565; } +.appointment-item[data-status="agendado"], +.appointment-item[data-status="requested"] { border-color: #ED8936; } +.calendar-main { flex-grow: 1; } +.calendar-controls { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } +.date-indicator h2 { font-size: 1.5rem; font-weight: 600; color: #2D3748; margin: 0; text-transform: capitalize; } +.nav-buttons { display: flex; gap: 8px; } +.nav-buttons button { padding: 8px 12px; border-radius: 6px; border: 1px solid #CBD5E0; background-color: #fff; font-weight: 600; cursor: pointer; transition: all 0.2s; } +.nav-buttons button:hover { background-color: #EDF2F7; } +.calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; } +.day-header { font-weight: 600; color: #718096; text-align: center; padding: 8px 0; font-size: 0.875rem; } +.day-cell { min-height: 110px; border-radius: 8px; border: 1px solid #E2E8F0; padding: 8px; transition: background-color 0.2s, border-color 0.2s; cursor: pointer; position: relative; } +.day-cell span { font-weight: 600; color: #4A5568; } +.day-cell:hover { background-color: #EDF2F7; border-color: #BEE3F8; } +.day-cell.other-month { background-color: #F7FAFC; } +.day-cell.other-month span { color: #A0AEC0; } +.day-cell.today span { background-color: #4299E1; color: #fff; border-radius: 50%; padding: 2px 6px; display: inline-block; } +.day-cell.selected { background-color: #BEE3F8; border-color: #4299E1; } +.appointments-indicator { background-color: #4299E1; color: white; font-size: 0.7rem; font-weight: bold; border-radius: 50%; width: 18px; height: 18px; display: flex; justify-content: center; align-items: center; position: absolute; bottom: 8px; right: 8px; } + +.calendar-legend { + display: flex; + justify-content: flex-end; + gap: 12px; + margin-bottom: 16px; +} + +.legend-item { + padding: 6px 12px; + border-radius: 6px; + font-size: 0.8rem; + font-weight: 600; color: #333; - /* Evita que nomes muito longos quebrem ou saiam da caixa */ - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; } -.dropdown-item:hover { - background-color: #f0f0f0; /* Cor ao passar o mouse */ - color: #007bff; +.legend-item[data-status="completed"] { + background-color: #C6F6D5; + border: 1px solid #9AE6B4; + color: #2F855A; +} +.legend-item[data-status="confirmed"] { + background-color: #EBF8FF; + border: 1px solid #BEE3F8; + color: #3182CE; +} +.legend-item[data-status="agendado"] { + background-color: #FEFCBF; + border: 1px solid #F6E05E; + color: #B7791F; +} +.legend-item[data-status="cancelled"] { + background-color: #FED7D7; + border: 1px solid #FEB2B2; + color: #C53030; } -.input-modal{ - width: 80%; +.appointment-item { + display: flex; + align-items: center; + justify-content: space-between; } +.item-details { + flex-grow: 1; +} + +.appointment-actions { + display: flex; + gap: 8px; +} + +.btn-action { + padding: 8px; + border-radius: 8px; + border: none; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.2s; +} + +.btn-action.btn-edit { + background-color: #FEFCBF; + color: #B7791F; +} +.btn-action.btn-edit:hover { + background-color: #F6E05E; +} + +.btn-action.btn-delete { + background-color: #E53E3E; + color: #fff; +} +.btn-action.btn-delete:hover { + background-color: #C53030; +} diff --git a/src/pages/style/FilaEspera.css b/src/pages/style/FilaEspera.css index 358a21f..eb2777d 100644 --- a/src/pages/style/FilaEspera.css +++ b/src/pages/style/FilaEspera.css @@ -322,4 +322,4 @@ html[data-bs-theme="dark"] .busca-fila-espera { html[data-bs-theme="dark"] .busca-fila-espera:focus { border-color: #5980fd !important; -} \ No newline at end of file +} diff --git a/src/pages/style/Inicio.css b/src/pages/style/Inicio.css index 889e7bf..21e4058 100644 --- a/src/pages/style/Inicio.css +++ b/src/pages/style/Inicio.css @@ -228,4 +228,192 @@ html[data-bs-theme="dark"] .manage-button { html[data-bs-theme="dark"] .manage-button:hover { background-color: #2323b0; +} + +/* Lista de Agendamentos */ +.agendamentos-list { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.agendamento-item { + background-color: #f9fafb; + border-left: 4px solid #5d5dff; + border-radius: 8px; + padding: 1rem 1.25rem; + transition: all 0.2s ease; +} + +.agendamento-item:hover { + background-color: #f0f2f5; + transform: translateX(5px); +} + +.agendamento-info { + display: flex; + align-items: center; + gap: 1.5rem; + flex-wrap: wrap; +} + +.agendamento-time-date { + display: flex; + flex-direction: column; + align-items: center; + min-width: 90px; +} + +.agendamento-hora { + font-size: 1.3rem; + font-weight: 700; + color: #5d5dff; + margin: 0; + line-height: 1.2; +} + +.agendamento-data { + font-size: 0.75rem; + font-weight: 500; + color: #888; + margin: 0; + margin-top: 0.25rem; +} + +.agendamento-detalhes { + display: flex; + flex-direction: column; + gap: 0.5rem; + flex: 1; + min-width: 300px; +} + +.agendamento-paciente, +.agendamento-medico { + font-size: 0.95rem; + color: #444; + margin: 0; + line-height: 1.4; +} + +.agendamento-paciente strong, +.agendamento-medico strong { + font-weight: 600; + color: #333; +} + +.agendamento-status { + font-size: 0.75rem; + font-weight: 600; + padding: 0.4rem 0.8rem; + border-radius: 20px; + text-transform: uppercase; +} + +.agendamento-status.status-scheduled { + background-color: #e3f2fd; + color: #1976d2; +} + +.agendamento-status.status-completed { + background-color: #e8f5e9; + color: #388e3c; +} + +.agendamento-status.status-pending { + background-color: #fff3e0; + color: #f57c00; +} + +.agendamento-status.status-cancelled { + background-color: #ffebee; + color: #d32f2f; +} + +.agendamento-status.status-requested { + background-color: #f3e5f5; + color: #7b1fa2; +} + +.view-all-button { + width: 100%; + margin-top: 1rem; + background-color: #f0f2f5; + color: #5d5dff; + border: 2px solid #5d5dff; + border-radius: 8px; + padding: 0.75rem 1.5rem; + font-size: 0.9rem; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; +} + +.view-all-button:hover { + background-color: #5d5dff; + color: #fff; +} + +/* Dark Mode - Agendamentos */ +html[data-bs-theme="dark"] .agendamento-item { + background-color: #2a2a2a; + border-left-color: #6c6cff; +} + +html[data-bs-theme="dark"] .agendamento-item:hover { + background-color: #333; +} + +html[data-bs-theme="dark"] .agendamento-hora { + color: #8888ff; +} + +html[data-bs-theme="dark"] .agendamento-data { + color: #999; +} + +html[data-bs-theme="dark"] .agendamento-paciente, +html[data-bs-theme="dark"] .agendamento-medico { + color: #d0d0d0; +} + +html[data-bs-theme="dark"] .agendamento-paciente strong, +html[data-bs-theme="dark"] .agendamento-medico strong { + color: #e0e0e0; +} + +html[data-bs-theme="dark"] .agendamento-status.status-scheduled { + background-color: #1a3a52; + color: #64b5f6; +} + +html[data-bs-theme="dark"] .agendamento-status.status-completed { + background-color: #1b3a1f; + color: #81c784; +} + +html[data-bs-theme="dark"] .agendamento-status.status-pending { + background-color: #3d2817; + color: #ffb74d; +} + +html[data-bs-theme="dark"] .agendamento-status.status-cancelled { + background-color: #3d1f1f; + color: #e57373; +} + +html[data-bs-theme="dark"] .agendamento-status.status-requested { + background-color: #2d1f3d; + color: #ba68c8; +} + +html[data-bs-theme="dark"] .view-all-button { + background-color: #2a2a2a; + color: #8888ff; + border-color: #6c6cff; +} + +html[data-bs-theme="dark"] .view-all-button:hover { + background-color: #6c6cff; + color: #fff; } \ No newline at end of file diff --git a/src/pages/style/inicioPaciente.css b/src/pages/style/inicioPaciente.css new file mode 100644 index 0000000..3990267 --- /dev/null +++ b/src/pages/style/inicioPaciente.css @@ -0,0 +1,454 @@ +.dashboard-paciente-container { + padding: 2rem; + background-color: #f7f9fc; + flex-grow: 1; + min-height: 100vh; +} + +/* Header - Paciente */ +.dashboard-paciente-header { + margin-bottom: 2rem; +} + +.dashboard-paciente-header h1 { + font-size: 2rem; + font-weight: 600; + color: #333; + margin-bottom: 0.5rem; +} + +.dashboard-paciente-header p { + font-size: 1rem; + color: #666; +} + +/* Estatísticas - Paciente */ +.stats-paciente-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + gap: 1.5rem; + margin-bottom: 2.5rem; +} + +.stat-paciente-card { + background-color: #fff; + border-radius: 12px; + padding: 1.5rem; + display: flex; + justify-content: space-between; + align-items: center; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05); + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +.stat-paciente-card:hover { + transform: translateY(-3px); + box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1); +} + +.stat-paciente-info { + display: flex; + flex-direction: column; +} + +.stat-paciente-label { + font-size: 0.75rem; + font-weight: 600; + color: #888; + margin-bottom: 0.5rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.stat-paciente-value { + font-size: 2.2rem; + font-weight: 700; + color: #444; +} + +.stat-paciente-icon-wrapper { + width: 55px; + height: 55px; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; +} + +.stat-paciente-icon { + font-size: 1.4rem; + color: #fff; +} + +/* Cores dos ícones - Paciente */ +.stat-paciente-icon-wrapper.blue { background-color: #5d5dff; } +.stat-paciente-icon-wrapper.green { background-color: #30d158; } +.stat-paciente-icon-wrapper.purple { background-color: #a272ff; } +.stat-paciente-icon-wrapper.orange { background-color: #f1952e; } + +/* Ações Rápidas - Paciente */ +.quick-actions-paciente h2 { + font-size: 1.3rem; + font-weight: 600; + color: #333; + margin-bottom: 1.5rem; +} + +.actions-paciente-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.5rem; + margin-bottom: 2.5rem; +} + +.action-paciente-button { + background-color: #fff; + border-radius: 12px; + padding: 1.5rem; + display: flex; + align-items: center; + cursor: pointer; + transition: all 0.2s ease-in-out; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05); +} + +.action-paciente-button:hover { + transform: translateY(-5px); + box-shadow: 0 6px 15px rgba(0, 0, 0, 0.12); +} + +.action-paciente-icon { + font-size: 2.5rem; + margin-right: 1.2rem; + color: #5d5dff; +} + +.action-paciente-info { + display: flex; + flex-direction: column; +} + +.action-paciente-title { + font-size: 1.05rem; + font-weight: 600; + color: #444; + margin-bottom: 0.25rem; +} + +.action-paciente-desc { + font-size: 0.85rem; + color: #888; +} + +/* Próximas Consultas - Paciente */ +.proximas-consultas-section { + background-color: #fff; + border-radius: 12px; + padding: 2rem; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05); +} + +.proximas-consultas-section h2 { + font-size: 1.3rem; + font-weight: 600; + color: #333; + margin-bottom: 1.5rem; +} + +/* Lista de Consultas - Paciente */ +.consultas-paciente-list { + display: flex; + flex-direction: column; + gap: 1.2rem; +} + +.consulta-paciente-item { + background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%); + border-left: 5px solid #5d5dff; + border-radius: 10px; + padding: 1.25rem 1.5rem; + transition: all 0.3s ease; +} + +.consulta-paciente-item:hover { + background: linear-gradient(135deg, #f0f2f5 0%, #fafbfc 100%); + transform: translateX(8px); + box-shadow: 0 4px 12px rgba(93, 93, 255, 0.15); +} + +.consulta-paciente-info { + display: flex; + align-items: center; + gap: 2rem; + flex-wrap: wrap; +} + +.consulta-paciente-time-date { + display: flex; + flex-direction: column; + align-items: center; + min-width: 90px; + padding: 0.5rem; + background-color: #f0f2ff; + border-radius: 8px; +} + +.consulta-paciente-hora { + font-size: 1.5rem; + font-weight: 700; + color: #5d5dff; + margin: 0; + line-height: 1.2; +} + +.consulta-paciente-data { + font-size: 0.8rem; + font-weight: 500; + color: #7777aa; + margin: 0; + margin-top: 0.25rem; + text-transform: capitalize; +} + +.consulta-paciente-detalhes { + display: flex; + flex-direction: column; + gap: 0.5rem; + flex: 1; + min-width: 250px; +} + +.consulta-paciente-medico { + font-size: 1rem; + color: #444; + margin: 0; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.consulta-icon { + color: #5d5dff; + font-size: 1.1rem; +} + +.consulta-paciente-medico strong { + font-weight: 600; + color: #333; +} + +.consulta-paciente-especialidade { + font-size: 0.85rem; + color: #666; + margin: 0; + margin-left: 1.6rem; + font-style: italic; +} + +.consulta-paciente-status { + font-size: 0.75rem; + font-weight: 600; + padding: 0.5rem 1rem; + border-radius: 20px; + text-transform: uppercase; + white-space: nowrap; +} + +.consulta-paciente-status.status-scheduled { + background-color: #e3f2fd; + color: #1976d2; +} + +.consulta-paciente-status.status-pending { + background-color: #fff3e0; + color: #f57c00; +} + +.consulta-paciente-status.status-requested { + background-color: #f3e5f5; + color: #7b1fa2; +} + +/* Sem Consultas */ +.no-consultas-content { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + padding: 3rem 1rem; +} + +.no-consultas-icon { + font-size: 4rem; + color: #bbb; + margin-bottom: 1.5rem; +} + +.no-consultas-content p { + font-size: 1.1rem; + color: #666; + margin-bottom: 2rem; +} + +.agendar-paciente-button, +.view-all-paciente-button { + background-color: #5d5dff; + color: #fff; + border: none; + border-radius: 8px; + padding: 0.875rem 2rem; + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; +} + +.agendar-paciente-button:hover, +.view-all-paciente-button:hover { + background-color: #4444ff; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(93, 93, 255, 0.3); +} + +.view-all-paciente-button { + width: 100%; + margin-top: 1rem; + background-color: #f0f2f5; + color: #5d5dff; + border: 2px solid #5d5dff; +} + +.view-all-paciente-button:hover { + background-color: #5d5dff; + color: #fff; +} + +/* Dark Mode - Paciente */ +html[data-bs-theme="dark"] .dashboard-paciente-container { + background-color: #121212; + color: #e0e0e0; +} + +html[data-bs-theme="dark"] .dashboard-paciente-header h1, +html[data-bs-theme="dark"] .dashboard-paciente-header p, +html[data-bs-theme="dark"] .quick-actions-paciente h2, +html[data-bs-theme="dark"] .proximas-consultas-section h2, +html[data-bs-theme="dark"] .action-paciente-title, +html[data-bs-theme="dark"] .stat-paciente-value { + color: #e0e0e0; +} + +html[data-bs-theme="dark"] .stat-paciente-card, +html[data-bs-theme="dark"] .action-paciente-button, +html[data-bs-theme="dark"] .proximas-consultas-section { + background-color: #1e1e1e; + box-shadow: 0 4px 10px rgba(0,0,0,0.3); +} + +html[data-bs-theme="dark"] .stat-paciente-label, +html[data-bs-theme="dark"] .action-paciente-desc, +html[data-bs-theme="dark"] .no-consultas-content p { + color: #b0b0b0; +} + +html[data-bs-theme="dark"] .consulta-paciente-item { + background: linear-gradient(135deg, #2a2a2a 0%, #1e1e1e 100%); + border-left-color: #6c6cff; +} + +html[data-bs-theme="dark"] .consulta-paciente-item:hover { + background: linear-gradient(135deg, #333 0%, #252525 100%); + box-shadow: 0 4px 12px rgba(108, 108, 255, 0.2); +} + +html[data-bs-theme="dark"] .consulta-paciente-time-date { + background-color: #2a2a3a; +} + +html[data-bs-theme="dark"] .consulta-paciente-hora { + color: #8888ff; +} + +html[data-bs-theme="dark"] .consulta-paciente-data { + color: #9999cc; +} + +html[data-bs-theme="dark"] .consulta-paciente-medico, +html[data-bs-theme="dark"] .consulta-paciente-especialidade { + color: #d0d0d0; +} + +html[data-bs-theme="dark"] .consulta-paciente-medico strong { + color: #e0e0e0; +} + +html[data-bs-theme="dark"] .consulta-icon, +html[data-bs-theme="dark"] .action-paciente-icon { + color: #8888ff; +} + +html[data-bs-theme="dark"] .consulta-paciente-status.status-scheduled { + background-color: #1a3a52; + color: #64b5f6; +} + +html[data-bs-theme="dark"] .consulta-paciente-status.status-pending { + background-color: #3d2817; + color: #ffb74d; +} + +html[data-bs-theme="dark"] .consulta-paciente-status.status-requested { + background-color: #2d1f3d; + color: #ba68c8; +} + +html[data-bs-theme="dark"] .no-consultas-icon { + color: #666; +} + +html[data-bs-theme="dark"] .agendar-paciente-button { + background-color: #6c6cff; +} + +html[data-bs-theme="dark"] .agendar-paciente-button:hover { + background-color: #5555dd; +} + +html[data-bs-theme="dark"] .view-all-paciente-button { + background-color: #2a2a2a; + color: #8888ff; + border-color: #6c6cff; +} + +html[data-bs-theme="dark"] .view-all-paciente-button:hover { + background-color: #6c6cff; + color: #fff; +} + +/* Responsivo */ +@media (max-width: 768px) { + .dashboard-paciente-container { + padding: 1rem; + } + + .stats-paciente-grid { + grid-template-columns: 1fr; + } + + .actions-paciente-grid { + grid-template-columns: 1fr; + } + + .consulta-paciente-info { + flex-direction: column; + align-items: flex-start; + gap: 1rem; + } + + .consulta-paciente-time-date { + width: 100%; + flex-direction: row; + justify-content: space-around; + } +} \ No newline at end of file diff --git a/src/perfis/Perfil_adm/Perfiladm.jsx b/src/perfis/Perfil_adm/Perfiladm.jsx index 2632fbe..73496df 100644 --- a/src/perfis/Perfil_adm/Perfiladm.jsx +++ b/src/perfis/Perfil_adm/Perfiladm.jsx @@ -14,11 +14,14 @@ import DoctorEditPage from "../../pages/DoctorEditPage"; import UserDashboard from '../../PagesAdm/gestao.jsx'; import PainelAdministrativo from '../../PagesAdm/painel.jsx'; import admItems from "../../data/sidebar-items-adm.json"; - +import {useState} from "react" // ...restante do código... function Perfiladm() { - return ( + + const [DictInfo, setDictInfo] = useState({}) + + return (
@@ -27,12 +30,12 @@ function Perfiladm() { } /> } /> } /> - } /> - } /> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> + } /> + } /> } /> } /> @@ -46,4 +49,4 @@ function Perfiladm() { ); } -export default Perfiladm; \ No newline at end of file +export default Perfiladm; diff --git a/src/perfis/Perfil_paciente/Perfilpaciente.jsx b/src/perfis/Perfil_paciente/Perfilpaciente.jsx index 45e9971..86ef589 100644 --- a/src/perfis/Perfil_paciente/Perfilpaciente.jsx +++ b/src/perfis/Perfil_paciente/Perfilpaciente.jsx @@ -2,21 +2,14 @@ import { Routes, Route } from "react-router-dom"; import Sidebar from "../../components/Sidebar"; import PacienteItems from "../../data/sidebar-items-paciente.json"; import { useState } from "react"; +import InicioPaciente from "../../pages/inicioPaciente"; import LaudoManager from "../../pages/LaudoManager"; import ConsultaCadastroManager from "../../PagesPaciente/ConsultaCadastroManager"; import ConsultasPaciente from "../../PagesPaciente/ConsultasPaciente"; import ConsultaEditPage from "../../PagesPaciente/ConsultaEditPage"; - -// 1. IMPORTAÇÃO ADICIONADA -import BotaoVideoPaciente from "../../components/BotaoVideoPaciente"; - function PerfilPaciente({ onLogout }) { - - -const [DictInfo, setDictInfo] = useState({}) - - +const [dadosConsulta, setConsulta] = useState({}) return (
@@ -24,20 +17,15 @@ const [DictInfo, setDictInfo] = useState({})
- } /> - } /> + } /> + } /> } /> - } /> + } /> } /> Página não encontrada} />
- - {/* 2. COMPONENTE ADICIONADO AQUI */} - -
- ); } diff --git a/src/perfis/perfil_secretaria/PerfilSecretaria.jsx b/src/perfis/perfil_secretaria/PerfilSecretaria.jsx index b63733b..f76b9bc 100644 --- a/src/perfis/perfil_secretaria/PerfilSecretaria.jsx +++ b/src/perfis/perfil_secretaria/PerfilSecretaria.jsx @@ -24,18 +24,18 @@ function PerfilSecretaria({ onLogout }) { return ( //
- +
}/> } /> } /> - } /> - } /> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> + } /> + } /> } /> } /> } />