diff --git a/package-lock.json b/package-lock.json index 91d1c36..94059e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,6 +71,8 @@ "gatsby-plugin-cookie-gdpr-axeptio": "^1.0.2", "google-map-react": "^2.1.10", "html-react-parser": "^2.0.0", + "html-to-react": "^1.7.0", + "html-to-text": "^9.0.5", "immutability-helper": "^3.1.1", "increase-memory-limit": "^1.0.7", "js-cookie": "^3.0.1", @@ -118,6 +120,7 @@ "react-grid-system": "^8.1.9", "react-helmet": "^6.1.0", "react-hook-form": "^7.27.0", + "react-html-parser": "^2.0.2", "react-icons": "^4.10.1", "react-input-range": "^1.3.0", "react-intl": "^5.24.7", @@ -151,6 +154,7 @@ "react-slideshow-image": "^3.7.0", "react-social-icons": "^5.13.0", "react-social-login-buttons": "^3.6.0", + "react-speech-recognition": "^3.10.0", "react-stripe-elements": "^6.1.2", "react-swipeable-views": "^0.14.0", "react-time-picker": "^4.5.0", @@ -6847,6 +6851,32 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" }, + "node_modules/@selderee/plugin-htmlparser2": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", + "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "dependencies": { + "domhandler": "^5.0.3", + "selderee": "^0.11.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/@selderee/plugin-htmlparser2/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, "node_modules/@semantic-ui-react/event-stack": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@semantic-ui-react/event-stack/-/event-stack-3.1.3.tgz", @@ -12941,9 +12971,9 @@ "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==" }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } @@ -16344,6 +16374,172 @@ "immutable": "3.x.x || 4.x.x" } }, + "node_modules/html-to-react": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.7.0.tgz", + "integrity": "sha512-b5HTNaTGyOj5GGIMiWVr1k57egAZ/vGy0GGefnCQ1VW5hu9+eku8AXHtf2/DeD95cj/FKBKYa1J7SWBOX41yUQ==", + "dependencies": { + "domhandler": "^5.0", + "htmlparser2": "^9.0", + "lodash.camelcase": "^4.3.0" + }, + "peerDependencies": { + "react": "^0.13.0 || ^0.14.0 || >=15" + } + }, + "node_modules/html-to-react/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/html-to-react/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/html-to-react/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/html-to-react/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-to-react/node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/html-to-text": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", + "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "dependencies": { + "@selderee/plugin-htmlparser2": "^0.11.0", + "deepmerge": "^4.3.1", + "dom-serializer": "^2.0.0", + "htmlparser2": "^8.0.2", + "selderee": "^0.11.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/html-to-text/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/html-to-text/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/html-to-text/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/html-to-text/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-to-text/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", @@ -20474,6 +20670,14 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/leac": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", + "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -22568,6 +22772,18 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, + "node_modules/parseley": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", + "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "dependencies": { + "leac": "^0.6.0", + "peberminta": "^0.9.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -22690,6 +22906,14 @@ "path2d-polyfill": "^2.0.1" } }, + "node_modules/peberminta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", + "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -27790,6 +28014,14 @@ "object-assign": "^4.1.1" } }, + "node_modules/react-speech-recognition": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/react-speech-recognition/-/react-speech-recognition-3.10.0.tgz", + "integrity": "sha512-EVSr4Ik8l9urwdPiK2r0+ADrLyDDrjB0qBRdUWO+w2MfwEBrj6NuRmy1GD3x7BU/V6/hab0pl8Lupen0zwlJyw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/react-spinner-children": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/react-spinner-children/-/react-spinner-children-1.0.8.tgz", @@ -30025,6 +30257,17 @@ "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz", "integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" }, + "node_modules/selderee": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", + "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "dependencies": { + "parseley": "^0.12.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -39556,6 +39799,25 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" }, + "@selderee/plugin-htmlparser2": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", + "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "requires": { + "domhandler": "^5.0.3", + "selderee": "^0.11.0" + }, + "dependencies": { + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + } + } + }, "@semantic-ui-react/event-stack": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@semantic-ui-react/event-stack/-/event-stack-3.1.3.tgz", @@ -44271,9 +44533,9 @@ "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==" }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" }, "default-gateway": { "version": "6.0.3", @@ -46921,6 +47183,120 @@ "resolved": "https://registry.npmjs.org/html-to-draftjs/-/html-to-draftjs-1.5.0.tgz", "integrity": "sha512-kggLXBNciKDwKf+KYsuE+V5gw4dZ7nHyGMX9m0wy7urzWjKGWyNFetmArRLvRV0VrxKN70WylFsJvMTJx02OBQ==" }, + "html-to-react": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.7.0.tgz", + "integrity": "sha512-b5HTNaTGyOj5GGIMiWVr1k57egAZ/vGy0GGefnCQ1VW5hu9+eku8AXHtf2/DeD95cj/FKBKYa1J7SWBOX41yUQ==", + "requires": { + "domhandler": "^5.0", + "htmlparser2": "^9.0", + "lodash.camelcase": "^4.3.0" + }, + "dependencies": { + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + } + } + }, + "html-to-text": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", + "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "requires": { + "@selderee/plugin-htmlparser2": "^0.11.0", + "deepmerge": "^4.3.1", + "dom-serializer": "^2.0.0", + "htmlparser2": "^8.0.2", + "selderee": "^0.11.0" + }, + "dependencies": { + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + } + } + }, "html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", @@ -50066,6 +50442,11 @@ } } }, + "leac": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", + "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==" + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -51725,6 +52106,15 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, + "parseley": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", + "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "requires": { + "leac": "^0.6.0", + "peberminta": "^0.9.0" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -51822,6 +52212,11 @@ "path2d-polyfill": "^2.0.1" } }, + "peberminta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", + "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -55511,6 +55906,11 @@ } } }, + "react-speech-recognition": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/react-speech-recognition/-/react-speech-recognition-3.10.0.tgz", + "integrity": "sha512-EVSr4Ik8l9urwdPiK2r0+ADrLyDDrjB0qBRdUWO+w2MfwEBrj6NuRmy1GD3x7BU/V6/hab0pl8Lupen0zwlJyw==" + }, "react-spinner-children": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/react-spinner-children/-/react-spinner-children-1.0.8.tgz", @@ -57255,6 +57655,14 @@ "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz", "integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" }, + "selderee": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", + "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "requires": { + "parseley": "^0.12.0" + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", diff --git a/package.json b/package.json index ebf5910..c4afc06 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,8 @@ "gatsby-plugin-cookie-gdpr-axeptio": "^1.0.2", "google-map-react": "^2.1.10", "html-react-parser": "^2.0.0", + "html-to-react": "^1.7.0", + "html-to-text": "^9.0.5", "immutability-helper": "^3.1.1", "increase-memory-limit": "^1.0.7", "js-cookie": "^3.0.1", @@ -113,6 +115,7 @@ "react-grid-system": "^8.1.9", "react-helmet": "^6.1.0", "react-hook-form": "^7.27.0", + "react-html-parser": "^2.0.2", "react-icons": "^4.10.1", "react-input-range": "^1.3.0", "react-intl": "^5.24.7", @@ -146,6 +149,7 @@ "react-slideshow-image": "^3.7.0", "react-social-icons": "^5.13.0", "react-social-login-buttons": "^3.6.0", + "react-speech-recognition": "^3.10.0", "react-stripe-elements": "^6.1.2", "react-swipeable-views": "^0.14.0", "react-time-picker": "^4.5.0", diff --git a/src/App.js b/src/App.js index 70b9be5..49fafe5 100644 --- a/src/App.js +++ b/src/App.js @@ -63,6 +63,8 @@ import UpdateAttendeeList from "./pages/updateattendeelist"; import Emarge_QR_Code from "./pages/emarge_qr_code"; import AutomaticQuotation from "./pages/automaticquotation"; +import MySyIA from "./pages/iamysy"; + import Maintenance from "./pages/maintenance_page"; import Subdomain_Recherche_new_v2 from "./pages/subdomain_recherche_new_v2"; @@ -240,6 +242,9 @@ function App() { + + + diff --git a/src/components/AddClassManual.js b/src/components/AddClassManual.js index 62a65a9..7a82e85 100644 --- a/src/components/AddClassManual.js +++ b/src/components/AddClassManual.js @@ -51,6 +51,46 @@ import "react-datepicker/dist/react-datepicker.css"; import { format } from 'date-fns' import moment from "moment"; import Module_Historique_Action from "./Module_Historique_Action"; +import { IconButton } from '@material-ui/core'; +import AutoAwesomeOutlinedIcon from '@mui/icons-material/AutoAwesomeOutlined'; +import AutoFixHighOutlinedIcon from '@mui/icons-material/AutoFixHighOutlined'; +import CancelPresentationIcon from '@mui/icons-material/CancelPresentation'; +import MySyIA from "./Module_IA"; +import { makeStyles } from "@material-ui/core/styles"; +import Paper from '@material-ui/core/Paper'; +import Draggable from 'react-draggable'; + +function PaperComponent(props) { + return ( + + + + ); +} + + +const useStyles = makeStyles((theme) => ({ + + dialog: { + position: 'absolute', + // left: 10, + top: 400 + }, + + paper: { + overflowY: 'unset', + }, + customizedButton: { + position: 'absolute', + left: '98%', + top: '-3%', + backgroundColor: 'lightgray', + color: 'gray', + }, +})); const AddClassManual = (props) => { const history = useHistory(); @@ -1622,8 +1662,11 @@ const AddClassManual = (props) => { alert(" Le Champ 'code' est obligatoire") return; } + /// zzzz - var title = document.getElementsByName("title")[0].value; + console.log(" ### titre = ", p_detail_title); + + var title = p_detail_title; if (String(title).length > title_limite) { alert(" Champ 'Titre', limite depassée !") return; @@ -3744,13 +3787,92 @@ const AddClassManual = (props) => { } + const Dialog_mysy_ia_handleClose = () => { + setDialog_mysy_ia_open(false) + + }; + + const classes = useStyles(); + + const [text_for_ia, settext_for_ia] = useState(""); + + const [fiels_of_text_replacement_ia, setfiels_of_text_replacement_ia] = useState(""); + + function function_of_text_replacement_ia(text_result) { + if (fiels_of_text_replacement_ia === "description") + setfield_description(text_result); + else if (fiels_of_text_replacement_ia === "objectif") + setfield_objectif(text_result) + + + DataUpdated(); + } + + const [Dialog_mysy_ia_open, setDialog_mysy_ia_open] = React.useState(false); return (
{isLoading &&
} + {/*** GESTION IA */} + null} + + PaperProps={{ + + + className: classes.paper, // Apply the paper style + style: { + overflowY: 'unset', + position: 'absolute', + top: '5rem', + margin: "2px", + }, + }} + hideBackdrop={true} + disableScrollLock + classes={{ + paper: classes.dialog + }} + + PaperComponent={PaperComponent} + aria-labelledby="draggable-dialog-title" + + > +   + + + + + + + + + + + + + + + + + + + {/*** FIN GESTION IA */} + + {/* Dialog pour gerer les Unite_Enseignement */} { className="displaypartnersession" > - MySy Information + MySy Information {Dialog_1_message} @@ -5471,7 +5593,30 @@ const AddClassManual = (props) => {
-
Description * (max 1000 caractères)
+ editorRef_description.current = editor} initialValue={field_description} @@ -5504,7 +5649,33 @@ const AddClassManual = (props) => {
-
Objectif* (max 1000 caractères)
+ editorRef_objectif.current = editor} initialValue={field_objectif} diff --git a/src/components/DisplayPartnerStagiaires.js b/src/components/DisplayPartnerStagiaires.js index 805340a..1ff15d2 100644 --- a/src/components/DisplayPartnerStagiaires.js +++ b/src/components/DisplayPartnerStagiaires.js @@ -6670,7 +6670,7 @@ function ExportMenuItem(props) {
} - + { /********* Dialog redaction email */} { return (
- Fonctionnalites et Modules du logiciel de gestion des organismes de formation + Gestion Administrative, CRM, LMS, Marketplace, découvrez les Fonctionnalités et Modules du logiciel de gestion des organismes de formation - + diff --git a/src/components/Groupe_Apprenant.js b/src/components/Groupe_Apprenant.js index cdd1392..cabfffa 100644 --- a/src/components/Groupe_Apprenant.js +++ b/src/components/Groupe_Apprenant.js @@ -76,6 +76,17 @@ import { } from '@mui/x-data-grid'; import * as XLSX from 'xlsx'; +function PaperComponent(props) { + return ( + + + + ); +} + const useStyles = makeStyles((theme) => ({ @@ -217,7 +228,7 @@ const Groupe_Apprenant = (props) => { var mylabel = New_Getall_Partner_Class_Reduice_Fields_result.filter((data) => (data)._id === String(cellValues.row.class_id))[0].label; return mylabel; } - + return ""; }, }, @@ -229,9 +240,9 @@ const Groupe_Apprenant = (props) => { return (
{New_Getall_Partner_Session_Reduice_Fields_result && New_Getall_Partner_Session_Reduice_Fields_result.length > 0 && - } + }
); @@ -239,10 +250,10 @@ const Groupe_Apprenant = (props) => { valueGetter: (cellValues) => { if (cellValues.row.session_id) { - var mylabel = New_Getall_Partner_Session_Reduice_Fields_result.filter((data) => (data)._id === String(cellValues.row.session_id))[0].label; + var mylabel = New_Getall_Partner_Session_Reduice_Fields_result.filter((data) => (data)._id === String(cellValues.row.session_id))[0].label; return mylabel; } - + return ""; }, @@ -2223,7 +2234,7 @@ const Groupe_Apprenant = (props) => { function handleExport(apiRef, data_colums) { const data = getExcelData(apiRef); const visibleColumnsField = gridVisibleColumnFieldsSelector(apiRef); - + const local_config = { keys: visibleColumnsField, @@ -2241,9 +2252,9 @@ const Groupe_Apprenant = (props) => { sheetName: 'Export_' + String(new Date().toJSON().slice(0, 10)).replaceAll("-", "_"), }; - local_config.columnNames = local_config.columnNames.filter(function( element ) { + local_config.columnNames = local_config.columnNames.filter(function (element) { return element !== undefined; - }); + }); const rows = data.map((row) => { @@ -2296,8 +2307,6 @@ const Groupe_Apprenant = (props) => { null} @@ -2317,7 +2326,8 @@ const Groupe_Apprenant = (props) => { paper: classes.dialog }} className="groupe_apprenant_dialog" - + PaperComponent={PaperComponent} + aria-labelledby="draggable-dialog-title" > Choisir une couleur @@ -2399,7 +2409,8 @@ const Groupe_Apprenant = (props) => { paper: classes.dialog }} className="groupe_apprenant_dialog mysy_MuiPaper-root" - + PaperComponent={PaperComponent} + aria-labelledby="draggable-dialog-title" > Création automatique des groupes diff --git a/src/components/Module_IA.js b/src/components/Module_IA.js new file mode 100644 index 0000000..75a2d2d --- /dev/null +++ b/src/components/Module_IA.js @@ -0,0 +1,417 @@ +import React, { useRef, useState, useEffect } from "react"; +import TextField from '@mui/material/TextField'; +import MenuItem from '@mui/material/MenuItem'; +import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css +import Button from '@mui/material/Button'; +import axios from "axios"; +import { getCookie, setCookie } from 'react-use-cookie'; +import { useHistory } from "react-router-dom"; +import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid'; +import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css"; +import { Editor } from '@tinymce/tinymce-react'; +import parse from 'html-react-parser'; +import { FcViewDetails, FcDisapprove, FcInfo } from "react-icons/fc"; +import 'react-tooltip/dist/react-tooltip.css' +import { Tooltip } from 'react-tooltip' +import add_plus from "../mysy_img/plus.png"; +import excel_icone from "../mysy_img/excel_icone.png"; +import participants from "../mysy_img/participants.png"; +import fileDownload from 'js-file-download' +import Popup from 'reactjs-popup'; +import 'reactjs-popup/dist/index.css'; +import { FcSearch } from "react-icons/fc"; +import { FcAlarmClock, FcMultipleSmartphones, FcWorkflow } from "react-icons/fc"; +import DatePicker from "react-datepicker"; +import "react-datepicker/dist/react-datepicker.css"; +import { format } from 'date-fns' +import moment from "moment"; +import 'moment/locale/fr'; + +import InputAdornment from '@mui/material/InputAdornment'; +import { AiFillCloseCircle, AiOutlineConsoleSql } from "react-icons/ai"; +import Box from '@mui/material/Box'; +import { Typography, LinearProgress } from '@mui/material'; +import styled from 'styled-components'; +import { CiTrash } from "react-icons/ci"; +import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md"; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogContentText from '@mui/material/DialogContentText'; +import DialogTitle from '@mui/material/DialogTitle'; +import { RestoreFromTrashRounded } from "@mui/icons-material"; +import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; +import { Fab } from "@material-ui/core"; +import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io"; +import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai"; +import { confirmAlert } from 'react-confirm-alert'; +import ToggleSwitch from "./ToggleSwitch"; +import Module_Historique_Action from "./Module_Historique_Action"; +import { HiDocumentCheck } from "react-icons/hi2"; +import { BsSend } from "react-icons/bs"; +import Autocomplete from '@mui/material/Autocomplete'; +import { FcOpenedFolder } from "react-icons/fc"; +import { gridClasses } from '@mui/x-data-grid'; +import Link from '@mui/material/Link'; +import { PiDotsThree } from "react-icons/pi"; +import Module_Editique from "./Module_Editique"; +import Module_Attestation_Formation from "./Module_Attestation_Formation"; + +import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5"; +import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint, FcPlanner } from "react-icons/fc"; +import { CiBoxList } from "react-icons/ci"; +import FullCalendar from "@fullcalendar/react"; +import daygridPlugin from "@fullcalendar/daygrid"; +import interactionPlugin from "@fullcalendar/interaction"; +import timeGridPlugin from "@fullcalendar/timegrid"; +import resourceTimeGridPlugin from '@fullcalendar/resource-timegrid'; +import Radio from '@mui/material/Radio'; +import RadioGroup from '@mui/material/RadioGroup'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import FormControl from '@mui/material/FormControl'; +import FormLabel from '@mui/material/FormLabel'; + +import allLocales from '@fullcalendar/core/locales-all' +import listPlugin from '@fullcalendar/list'; +import multiMonthPlugin from '@fullcalendar/multimonth' +import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank'; +import CheckBoxIcon from '@mui/icons-material/CheckBox'; +import Checkbox from '@mui/material/Checkbox'; +import { FcExport, FcBullish } from "react-icons/fc"; + +import { AiOutlineClear } from "react-icons/ai"; +import { Parser } from "html-to-react"; + +const Module_IA = (props) => { + + const history = useHistory(); + const [submenu, setsubmenu] = useState(""); + const [rowss, setRows] = useState([]); + + const htmlParser = new Parser(); + const [formulaire_parent, setformulaire_parent] = useState("0"); + + var date_today_90j = new Date(); + date_today_90j.setDate(date_today_90j.getDate() + 90); + + const [isLoading, setLoading] = useState(); + + useEffect(() => { + if (props.champ_text_input) { + const regex = /(<([^>]+)>)/gi; + var initial_text_no_html = props.champ_text_input.replace(regex, " "); + + initial_text_no_html = initial_text_no_html.replace(/[^ -~]/g, function (chr) { + return "&#" + chr.charCodeAt(0) + ";"; + }); + + initial_text_no_html = htmlParser.parse(initial_text_no_html) + + setfield_texte_initial(initial_text_no_html); + setformulaire_parent("1"); + } else { + setfield_texte_initial(""); + setformulaire_parent(""); + } + + }, []) + + + const editorRef_texte_initial = useRef(null); + const [editorRef_texte_initial_limite, seteditorRef_texte_initial] = useState(1000); + const [field_texte_initial, setfield_texte_initial] = useState(""); + const [field_texte_initial_initial_value, setfield_texte_initial_initial_value] = useState(""); + + + const editorRef_texte_resultat = useRef(null); + const [editorRef_texte_resultat_limite, seteditorRef_texte_resultat] = useState(1000); + const [field_texte_resultat, setfield_texte_resultat] = useState(""); + + + + const [is_data_changed, setis_data_changed] = useState(""); + + const [editor_tochanged, seteditor_tochanged] = useState(""); + + function editor_keyup() { + setis_data_changed("1"); + } + + const [Improve_Texte_api, setImprove_Texte_api] = useState(); + const [Improve_Texte_message, setImprove_Texte_message] = useState(); + const [Improve_Texte_result, setImprove_Texte_result] = useState(); + function Improve_Texte() { + + var form = new FormData(); + //form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA"); + var initial_text_no_html = "" + const regex = /(<([^>]+)>)/gi; + var initial_text_no_html = field_texte_initial.replace(regex, " "); + + initial_text_no_html = initial_text_no_html.replace(/[^ -~]/g, function (chr) { + // ^^^^^^ + // this is a regexp for "everything than printable ASCII-characters" + // and even works in a ASCII-only charset. Identic: [^\u0020-\u007E] + return "&#" + chr.charCodeAt(0) + ";"; + }); + + const stored_cookie = getCookie('tokenmysypart'); + form.append("token", stored_cookie); + form.append("text_input", initial_text_no_html); + form.append("action", "Improve"); + + + //console.log(" ### form = ", form); + + + var myurl = process.env.REACT_APP_API_URL + "myclass/api/mysy_openai_improve_text/"; + setLoading(true); + axios.post(myurl, form).then(res => { + setLoading(false); + //console.log(" In Improve_Texte res.data.status = " + res.data.status); + //console.log(" In Improve_Texte res.data.message r_class = " + res.data.message); + + if (String(res.data.status) === String("true")) { + //alert(res.data.message); + + var mylocal_document = JSON.parse(res.data.message); + setfield_texte_resultat(mylocal_document.reponse); + //console.log(" ### mylocal_document.reponse = ", mylocal_document.reponse); + + } + else { + setImprove_Texte_api("false"); + setImprove_Texte_message(res.data.message); + alert(res.data.message); + + } + + }).catch((error) => { + setLoading(false); + console.warn('Improve_Texte : Not good man :( mysearchtext = ' + error); + setImprove_Texte_api("false"); + alert(" Impossible de lancer l'améliration du texte"); + }) + } + + const [Summurize_Texte_api, setSummurize_Texte_api] = useState(); + const [Summurize_Texte_message, setSummurize_Texte_message] = useState(); + const [Summurize_Texte_result, setSummurize_Texte_result] = useState(); + function Summurize_Texte() { + + var form = new FormData(); + //form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA"); + var initial_text_no_html = "" + const regex = /(<([^>]+)>)/gi; + var initial_text_no_html = field_texte_initial.replace(regex, " "); + + initial_text_no_html = initial_text_no_html.replace(/[^ -~]/g, function (chr) { + // ^^^^^^ + // this is a regexp for "everything than printable ASCII-characters" + // and even works in a ASCII-only charset. Identic: [^\u0020-\u007E] + return "&#" + chr.charCodeAt(0) + ";"; + }); + + const stored_cookie = getCookie('tokenmysypart'); + form.append("token", stored_cookie); + form.append("text_input", initial_text_no_html); + form.append("action", "Improve"); + + + //console.log(" ### form = ", form); + + + var myurl = process.env.REACT_APP_API_URL + "myclass/api/mysy_openai_summarize_text/"; + setLoading(true); + axios.post(myurl, form).then(res => { + setLoading(false); + //console.log(" In Summurize_Texte res.data.status = " + res.data.status); + //console.log(" In Summurize_Texte res.data.message r_class = " + res.data.message); + + if (String(res.data.status) === String("true")) { + //alert(res.data.message); + + var mylocal_document = JSON.parse(res.data.message); + setfield_texte_resultat(mylocal_document.reponse); + //console.log(" ### mylocal_document.reponse = ", mylocal_document.reponse); + + } + else { + setSummurize_Texte_api("false"); + setSummurize_Texte_message(res.data.message); + alert(res.data.message); + + } + + }).catch((error) => { + setLoading(false); + console.warn('Summurize_Texte : Not good man :( mysearchtext = ' + error); + setSummurize_Texte_api("false"); + alert(" Impossible de lancer l'améliration du texte"); + }) + } + + function clean_text() { + //setfield_texte_initial(''); + setfield_texte_resultat(''); + } + + function accept_replace() { + if (props.champ_text_input && props.function_replace_text) { + props.function_replace_text(field_texte_resultat); + props.close_function(); + } + } + + + return ( +
+ + {isLoading &&
+
+
} + {formulaire_parent && String(formulaire_parent) === "" && + } + + {formulaire_parent && String(formulaire_parent) === "" &&
+ L’assistance d’intelligence artificiel de
+ MySy Training Technology +
} + + +
+
+ Comment puis-je vous aider ? +
+
+
+ Texte Article +
+ + +