From 69e954ff13772071515c280f3a3e140402089c59 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 18 May 2024 17:22:29 +0530 Subject: [PATCH] Handle server response and display the generated plan. --- package-lock.json | 1285 +++++++++++++++++++++++++++++- package.json | 2 + public/favicon.ico | Bin 3870 -> 0 bytes public/index.html | 6 +- public/logo192.png | Bin 5347 -> 0 bytes public/logo512.png | Bin 9664 -> 0 bytes public/tryvalleylogo.png | Bin 0 -> 40376 bytes src/Components/EventPlannerAi.js | 230 +++++- src/Components/GoogleMapsCard.js | 195 ++--- 9 files changed, 1573 insertions(+), 145 deletions(-) delete mode 100644 public/favicon.ico delete mode 100644 public/logo192.png delete mode 100644 public/logo512.png create mode 100644 public/tryvalleylogo.png diff --git a/package-lock.json b/package-lock.json index c3f18cc..39df48c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,9 +19,11 @@ "@testing-library/user-event": "^14.5.2", "axios": "^1.6.8", "google-maps-react": "^2.0.6", + "openai": "^4.47.1", "react": "^18.3.1", "react-dom": "^18.3.1", "react-icons": "^5.2.1", + "react-markdown": "^9.0.1", "react-router-dom": "^6.23.1", "react-scripts": "^5.0.1", "web-vitals": "^3.5.2" @@ -3824,6 +3826,14 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/eslint": { "version": "8.56.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", @@ -3847,6 +3857,14 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", @@ -3882,6 +3900,14 @@ "@types/node": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -3931,11 +3957,24 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "node_modules/@types/node": { "version": "20.12.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", @@ -3944,6 +3983,28 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/node-forge": { "version": "1.3.11", "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", @@ -4070,6 +4131,11 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -4461,6 +4527,17 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "deprecated": "Use your platform's native atob() and btoa() methods instead" }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -4559,6 +4636,17 @@ "node": ">= 6.0.0" } }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -5219,6 +5307,15 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5517,6 +5614,15 @@ "node": ">=4" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5540,6 +5646,42 @@ "node": ">=10" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/check-types": { "version": "11.2.3", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", @@ -5761,6 +5903,15 @@ "node": ">= 0.8" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -6447,6 +6598,18 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -6586,6 +6749,18 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -7670,6 +7845,15 @@ "node": ">=4.0" } }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/estree-walker": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", @@ -7691,6 +7875,14 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -7788,6 +7980,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8171,6 +8368,31 @@ "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -8582,6 +8804,44 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", + "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -8705,6 +8965,15 @@ "node": ">=12" } }, + "node_modules/html-url-attributes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.0.tgz", + "integrity": "sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/html-webpack-plugin": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", @@ -8848,6 +9117,14 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -8971,6 +9248,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/inline-style-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", + "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" + }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -9000,6 +9282,28 @@ "node": ">= 10" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -9121,6 +9425,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -9195,6 +9508,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -10453,6 +10775,15 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -10526,6 +10857,151 @@ "tmpl": "1.0.5" } }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", + "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", + "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^5.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", + "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -10576,19 +11052,440 @@ "node": ">= 0.6" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mime": { + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", @@ -10821,6 +11718,62 @@ "tslib": "^2.0.3" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -11099,6 +12052,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openai": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.47.1.tgz", + "integrity": "sha512-WWSxhC/69ZhYWxH/OBsLEirIjUcfpQ5+ihkXKp06hmeYXgBBIUCa9IptMzYx6NdkiOCsSGYCnTIsxaic3AjRCQ==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + }, + "bin": { + "openai": "bin/cli" + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -11180,6 +12159,30 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -12689,6 +13692,15 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -12992,6 +14004,31 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, + "node_modules/react-markdown": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz", + "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -14257,6 +15294,37 @@ "node": ">= 0.10" } }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -14972,6 +16040,15 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -15269,6 +16346,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -15366,6 +16456,14 @@ "webpack": "^5.0.0" } }, + "node_modules/style-to-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", + "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", + "dependencies": { + "inline-style-parser": "0.2.3" + } + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", @@ -15916,6 +17014,24 @@ "node": ">=8" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -16159,6 +17275,35 @@ "node": ">=4" } }, + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -16170,6 +17315,82 @@ "node": ">=8" } }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -16294,6 +17515,33 @@ "node": ">= 0.8" } }, + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -16342,6 +17590,14 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, "node_modules/web-vitals": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz", @@ -17228,6 +18484,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index 00efaa3..1eb0aea 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,11 @@ "@testing-library/user-event": "^14.5.2", "axios": "^1.6.8", "google-maps-react": "^2.0.6", + "openai": "^4.47.1", "react": "^18.3.1", "react-dom": "^18.3.1", "react-icons": "^5.2.1", + "react-markdown": "^9.0.1", "react-router-dom": "^6.23.1", "react-scripts": "^5.0.1", "web-vitals": "^3.5.2" diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 zcma);c{J4h9>;%nil|2-o+rCuEF-(I%-F}ijC~o(k~HKAkr0)!FCj~d>`RtpD?8b; zXOC1OD!V*IsqUwzbMF1)-gEDD=A573Z-&G7^LoAC9|WO7Xc0Cx1g^Zu0u_SjAPB3vGa^W|sj)80f#V0@M_CAZTIO(t--xg= z!sii`1giyH7EKL_+Wi0ab<)&E_0KD!3Rp2^HNB*K2@PHCs4PWSA32*-^7d{9nH2_E zmC{C*N*)(vEF1_aMamw2A{ZH5aIDqiabnFdJ|y0%aS|64E$`s2ccV~3lR!u<){eS` z#^Mx6o(iP1Ix%4dv`t@!&Za-K@mTm#vadc{0aWDV*_%EiGK7qMC_(`exc>-$Gb9~W!w_^{*pYRm~G zBN{nA;cm^w$VWg1O^^<6vY`1XCD|s_zv*g*5&V#wv&s#h$xlUilPe4U@I&UXZbL z0)%9Uj&@yd03n;!7do+bfixH^FeZ-Ema}s;DQX2gY+7g0s(9;`8GyvPY1*vxiF&|w z>!vA~GA<~JUqH}d;DfBSi^IT*#lrzXl$fNpq0_T1tA+`A$1?(gLb?e#0>UELvljtQ zK+*74m0jn&)5yk8mLBv;=@}c{t0ztT<v;Avck$S6D`Z)^c0(jiwKhQsn|LDRY&w(Fmi91I7H6S;b0XM{e zXp0~(T@k_r-!jkLwd1_Vre^v$G4|kh4}=Gi?$AaJ)3I+^m|Zyj#*?Kp@w(lQdJZf4 z#|IJW5z+S^e9@(6hW6N~{pj8|NO*>1)E=%?nNUAkmv~OY&ZV;m-%?pQ_11)hAr0oAwILrlsGawpxx4D43J&K=n+p3WLnlDsQ$b(9+4 z?mO^hmV^F8MV{4Lx>(Q=aHhQ1){0d*(e&s%G=i5rq3;t{JC zmgbn5Nkl)t@fPH$v;af26lyhH!k+#}_&aBK4baYPbZy$5aFx4}ka&qxl z$=Rh$W;U)>-=S-0=?7FH9dUAd2(q#4TCAHky!$^~;Dz^j|8_wuKc*YzfdAht@Q&ror?91Dm!N03=4=O!a)I*0q~p0g$Fm$pmr$ zb;wD;STDIi$@M%y1>p&_>%?UP($15gou_ue1u0!4(%81;qcIW8NyxFEvXpiJ|H4wz z*mFT(qVx1FKufG11hByuX%lPk4t#WZ{>8ka2efjY`~;AL6vWyQKpJun2nRiZYDij$ zP>4jQXPaP$UC$yIVgGa)jDV;F0l^n(V=HMRB5)20V7&r$jmk{UUIe zVjKroK}JAbD>B`2cwNQ&GDLx8{pg`7hbA~grk|W6LgiZ`8y`{Iq0i>t!3p2}MS6S+ zO_ruKyAElt)rdS>CtF7j{&6rP-#c=7evGMt7B6`7HG|-(WL`bDUAjyn+k$mx$CH;q2Dz4x;cPP$hW=`pFfLO)!jaCL@V2+F)So3}vg|%O*^T1j>C2lx zsURO-zIJC$^$g2byVbRIo^w>UxK}74^TqUiRR#7s_X$e)$6iYG1(PcW7un-va-S&u zHk9-6Zn&>T==A)lM^D~bk{&rFzCi35>UR!ZjQkdSiNX*-;l4z9j*7|q`TBl~Au`5& z+c)*8?#-tgUR$Zd%Q3bs96w6k7q@#tUn`5rj+r@_sAVVLqco|6O{ILX&U-&-cbVa3 zY?ngHR@%l{;`ri%H*0EhBWrGjv!LE4db?HEWb5mu*t@{kv|XwK8?npOshmzf=vZA@ zVSN9sL~!sn?r(AK)Q7Jk2(|M67Uy3I{eRy z_l&Y@A>;vjkWN5I2xvFFTLX0i+`{qz7C_@bo`ZUzDugfq4+>a3?1v%)O+YTd6@Ul7 zAfLfm=nhZ`)P~&v90$&UcF+yXm9sq!qCx3^9gzIcO|Y(js^Fj)Rvq>nQAHI92ap=P z10A4@prk+AGWCb`2)dQYFuR$|H6iDE8p}9a?#nV2}LBCoCf(Xi2@szia7#gY>b|l!-U`c}@ zLdhvQjc!BdLJvYvzzzngnw51yRYCqh4}$oRCy-z|v3Hc*d|?^Wj=l~18*E~*cR_kU z{XsxM1i{V*4GujHQ3DBpl2w4FgFR48Nma@HPgnyKoIEY-MqmMeY=I<%oG~l!f<+FN z1ZY^;10j4M4#HYXP zw5eJpA_y(>uLQ~OucgxDLuf}fVs272FaMxhn4xnDGIyLXnw>Xsd^J8XhcWIwIoQ9} z%FoSJTAGW(SRGwJwb=@pY7r$uQRK3Zd~XbxU)ts!4XsJrCycrWSI?e!IqwqIR8+Jh zlRjZ`UO1I!BtJR_2~7AbkbSm%XQqxEPkz6BTGWx8e}nQ=w7bZ|eVP4?*Tb!$(R)iC z9)&%bS*u(lXqzitAN)Oo=&Ytn>%Hzjc<5liuPi>zC_nw;Z0AE3Y$Jao_Q90R-gl~5 z_xAb2J%eArrC1CN4G$}-zVvCqF1;H;abAu6G*+PDHSYFx@Tdbfox*uEd3}BUyYY-l zTfEsOqsi#f9^FoLO;ChK<554qkri&Av~SIM*{fEYRE?vH7pTAOmu2pz3X?Wn*!ROX ztd54huAk&mFBemMooL33RV-*1f0Q3_(7hl$<#*|WF9P!;r;4_+X~k~uKEqdzZ$5Al zV63XN@)j$FN#cCD;ek1R#l zv%pGrhB~KWgoCj%GT?%{@@o(AJGt*PG#l3i>lhmb_twKH^EYvacVY-6bsCl5*^~L0 zonm@lk2UvvTKr2RS%}T>^~EYqdL1q4nD%0n&Xqr^cK^`J5W;lRRB^R-O8b&HENO||mo0xaD+S=I8RTlIfVgqN@SXDr2&-)we--K7w= zJVU8?Z+7k9dy;s;^gDkQa`0nz6N{T?(A&Iz)2!DEecLyRa&FI!id#5Z7B*O2=PsR0 zEvc|8{NS^)!d)MDX(97Xw}m&kEO@5jqRaDZ!+%`wYOI<23q|&js`&o4xvjP7D_xv@ z5hEwpsp{HezI9!~6O{~)lLR@oF7?J7i>1|5a~UuoN=q&6N}EJPV_GD`&M*v8Y`^2j zKII*d_@Fi$+i*YEW+Hbzn{iQk~yP z>7N{S4)r*!NwQ`(qcN#8SRQsNK6>{)X12nbF`*7#ecO7I)Q$uZsV+xS4E7aUn+U(K baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/public/index.html b/public/index.html index 55bc4ce..d1eddde 100644 --- a/public/index.html +++ b/public/index.html @@ -2,7 +2,7 @@ - + - + - landing page + Event Planner diff --git a/public/logo192.png b/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/public/tryvalleylogo.png b/public/tryvalleylogo.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd5e8b35b2f3ec6fda22253f9cf0ee752734f05 GIT binary patch literal 40376 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 literal 0 HcmV?d00001 diff --git a/src/Components/EventPlannerAi.js b/src/Components/EventPlannerAi.js index 7a9a98e..15918da 100644 --- a/src/Components/EventPlannerAi.js +++ b/src/Components/EventPlannerAi.js @@ -1,20 +1,150 @@ -import React, { useState, useEffect } from "react"; import { useParams } from "react-router-dom"; -import axios from "axios"; // Make sure you have axios imported +import axios from "axios"; import EventCoverCard from "./EventCoverCard"; import LocationOnIcon from "@mui/icons-material/LocationOn"; import LinkIcon from "@mui/icons-material/Link"; import GoogleMapsCard from "./GoogleMapsCard"; +import ReactMarkdown from "react-markdown"; +import React, { useState, useCallback, useEffect } from "react"; +import { + useJsApiLoader, + GoogleMap, + Marker, + InfoWindow, +} from "@react-google-maps/api"; +import { Skeleton } from "@mui/material"; const EventPlannerAi = ({ props }) => { + const { eventId } = useParams(); const [budget, setBudget] = useState("5000"); const [timeToStay, setTimeToStay] = useState("2"); const [generatedAnswer, setGeneratedAnswer] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); - const { eventId } = useParams(); - console.log(eventId); - // props[eventId - 1].event_type.map((type) => console.log(type)); + const eventName = props[eventId - 1].name; + const destination = props[eventId - 1].address; + const [eventLocation, setEventLocation] = useState(null); + const [userLocation, setUserLocation] = useState(null); + const [distance, setDistance] = useState(null); + const [zoom, setZoom] = useState(15); + const [infoWindowOpen, setInfoWindowOpen] = useState(false); + const { isLoaded } = useJsApiLoader({ + googleMapsApiKey: process.env.REACT_APP_GOOGLE_MAPS_API_KEY, + }); + + const geocodeAddress = useCallback(async (address) => { + try { + const response = await fetch( + `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent( + address + )}&key=${process.env.REACT_APP_GOOGLE_MAPS_API_KEY}` + ); + const data = await response.json(); + if (data.status === "OK") { + const location = data.results[0].geometry.location; + setEventLocation(location); + } else { + console.error( + "Geocode was not successful for the following reason:", + data.status + ); + } + } catch (error) { + console.error("Error fetching geocode:", error); + } + }, []); + + useEffect(() => { + if (props[eventId - 1] && props[eventId - 1].address) { + geocodeAddress(props[eventId - 1].address); + } + }, [props, eventId, geocodeAddress]); + + const gotLocation = useCallback((position) => { + setUserLocation({ + lat: position.coords.latitude, + lng: position.coords.longitude, + }); + }, []); + + const errorLocation = useCallback((error) => { + console.log("Error getting location:", error); + }, []); + + const handleGetLocation = useCallback(() => { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(gotLocation, errorLocation, { + enableHighAccuracy: true, + timeout: 5000, + maximumAge: 0, + }); + } else { + console.log("Geolocation is not supported by this browser."); + } + }, [gotLocation, errorLocation]); + + useEffect(() => { + handleGetLocation(); + }, [handleGetLocation]); + + useEffect(() => { + if (userLocation && eventLocation) { + // Calculate distance between two points using Haversine formula + const R = 6371; // Radius of the Earth in kilometers + const lat1 = userLocation.lat; + const lon1 = userLocation.lng; + const lat2 = eventLocation.lat; + const lon2 = eventLocation.lng; + + const dLat = (lat2 - lat1) * (Math.PI / 180); + const dLon = (lon2 - lon1) * (Math.PI / 180); + const a = + Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(lat1 * (Math.PI / 180)) * + Math.cos(lat2 * (Math.PI / 180)) * + Math.sin(dLon / 2) * + Math.sin(dLon / 2); + const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + const distance = R * c; + + // Set distance state + setDistance(distance); + + // Calculate bounds to fit both markers + const bounds = new window.google.maps.LatLngBounds(); + bounds.extend( + new window.google.maps.LatLng(userLocation.lat, userLocation.lng) + ); + bounds.extend( + new window.google.maps.LatLng(eventLocation.lat, eventLocation.lng) + ); + + // Set zoom level + const mapWidth = 100; + const mapHeight = 200; + const ne = bounds.getNorthEast(); + const sw = bounds.getSouthWest(); + const zoomLevel = getZoomLevel( + ne.lat(), + sw.lat(), + ne.lng(), + sw.lng(), + mapWidth, + mapHeight + ); + setZoom(zoomLevel); + } + }, [userLocation, eventLocation]); + + const getZoomLevel = (lat1, lat2, lng1, lng2, mapWidth, mapHeight) => { + const GLOBE_WIDTH = 256; // a constant in Google's map projection + const angle = lng2 - lng1; + const zoomX = Math.floor(Math.log2((GLOBE_WIDTH * 360) / angle / mapWidth)); + const zoomY = Math.floor( + Math.log2((GLOBE_WIDTH * 180) / (lat1 - lat2) / mapHeight) + ); + return Math.min(zoomX, zoomY); + }; const handleSubmit = async (e) => { e.preventDefault(); @@ -23,11 +153,14 @@ const EventPlannerAi = ({ props }) => { setError(""); try { - const response = await axios.post("http://localhost:8000/predict", { + const response = await axios.post("http://localhost:8000/prediction", { budget, timeToStay, + eventName, + destination, + distance, }); - setGeneratedAnswer(response.data.prediction); + setGeneratedAnswer(response.data.response); } catch (error) { setError("Something went wrong. Please try again later."); } finally { @@ -35,6 +168,16 @@ const EventPlannerAi = ({ props }) => { } }; + if (!isLoaded || !eventLocation) { + return ( +

+
+ +
+
+ ); + } + return ( <> @@ -152,27 +295,21 @@ const EventPlannerAi = ({ props }) => {
- {!loading && !generatedAnswer && !error && ( -
-

- Your Generated Plan will be visible here -

-
- )} {loading &&

Loading...

} {error && (

{error}

)} + {/* Render the generated answer with proper formatting */} {generatedAnswer && (
-

{generatedAnswer}

+ {generatedAnswer}
)}
@@ -180,7 +317,66 @@ const EventPlannerAi = ({ props }) => { - +
+
+

LOCATION

+
+ {/* */} +
+ {distance && ( +

+ Distance between you and the event: {distance.toFixed(2)} km +

+ )} +
+
+ +
+ + {userLocation && ( + setInfoWindowOpen(true)} + > + {infoWindowOpen && ( + setInfoWindowOpen(false)}> +
Your Location
+
+ )} +
+ )} + {eventLocation && ( + setInfoWindowOpen(true)} + > + {infoWindowOpen && ( + setInfoWindowOpen(false)}> +
Event Location
+
+ )} +
+ )} +
+
+
+
); }; diff --git a/src/Components/GoogleMapsCard.js b/src/Components/GoogleMapsCard.js index 2cc4dfa..a538180 100644 --- a/src/Components/GoogleMapsCard.js +++ b/src/Components/GoogleMapsCard.js @@ -1,11 +1,12 @@ -import React, { useState, useCallback, useEffect } from "react"; +import React, { useState, useEffect } from "react"; +import { Skeleton } from "@mui/material"; import { useJsApiLoader, GoogleMap, Marker, InfoWindow, + Polyline, } from "@react-google-maps/api"; -import { Skeleton } from "@mui/material"; const GoogleMapsCard = ({ events, eventId }) => { const { isLoaded } = useJsApiLoader({ @@ -14,92 +15,33 @@ const GoogleMapsCard = ({ events, eventId }) => { const [eventLocation, setEventLocation] = useState(null); const [userLocation, setUserLocation] = useState(null); - const [distance, setDistance] = useState(null); + const [flightRoute, setFlightRoute] = useState([]); const [zoom, setZoom] = useState(15); const [infoWindowOpen, setInfoWindowOpen] = useState(false); - const geocodeAddress = useCallback(async (address) => { - try { - const response = await fetch( - `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent( - address - )}&key=${process.env.REACT_APP_GOOGLE_MAPS_API_KEY}` - ); - const data = await response.json(); - if (data.status === "OK") { - const location = data.results[0].geometry.location; - setEventLocation(location); - } else { - console.error( - "Geocode was not successful for the following reason:", - data.status - ); - } - } catch (error) { - console.error("Error fetching geocode:", error); - } - }, []); - useEffect(() => { if (events[eventId - 1] && events[eventId - 1].address) { geocodeAddress(events[eventId - 1].address); } - }, [events, eventId, geocodeAddress]); - - const gotLocation = useCallback((position) => { - setUserLocation({ - lat: position.coords.latitude, - lng: position.coords.longitude, - }); - }, []); - - const errorLocation = useCallback((error) => { - console.log("Error getting location:", error); - }, []); - - const handleGetLocation = useCallback(() => { - if (navigator.geolocation) { - navigator.geolocation.getCurrentPosition(gotLocation, errorLocation, { - enableHighAccuracy: true, - timeout: 5000, - maximumAge: 0, - }); - } else { - console.log("Geolocation is not supported by this browser."); - } - }, [gotLocation, errorLocation]); + }, [events, eventId]); useEffect(() => { if (userLocation && eventLocation) { - // Calculate distance between two points using Haversine formula - const R = 6371; // Radius of the Earth in kilometers - const lat1 = userLocation.lat; - const lon1 = userLocation.lng; - const lat2 = eventLocation.lat; - const lon2 = eventLocation.lng; - - const dLat = (lat2 - lat1) * (Math.PI / 180); - const dLon = (lon2 - lon1) * (Math.PI / 180); - const a = - Math.sin(dLat / 2) * Math.sin(dLat / 2) + - Math.cos(lat1 * (Math.PI / 180)) * - Math.cos(lat2 * (Math.PI / 180)) * - Math.sin(dLon / 2) * - Math.sin(dLon / 2); - const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - const distance = R * c; - - // Set distance state - setDistance(distance); + // Generate flight route based on user and event locations + const route = generateFlightRoute(userLocation, eventLocation); + setFlightRoute(route); - // Calculate bounds to fit both markers + // Calculate bounds to fit both markers and flight route const bounds = new window.google.maps.LatLngBounds(); bounds.extend(new window.google.maps.LatLng(userLocation.lat, userLocation.lng)); bounds.extend(new window.google.maps.LatLng(eventLocation.lat, eventLocation.lng)); + route.forEach((point) => + bounds.extend(new window.google.maps.LatLng(point.lat, point.lng)) + ); // Set zoom level - const mapWidth = 150; // Adjust as needed for map size - const mapHeight = 200; // Adjust as needed for map size + const mapWidth = 100; + const mapHeight = 200; const ne = bounds.getNorthEast(); const sw = bounds.getSouthWest(); const zoomLevel = getZoomLevel(ne.lat(), sw.lat(), ne.lng(), sw.lng(), mapWidth, mapHeight); @@ -107,6 +49,42 @@ const GoogleMapsCard = ({ events, eventId }) => { } }, [userLocation, eventLocation]); + const generateFlightRoute = (start, end) => { + // Calculate intermediary points between start and end coordinates + // Here, you can use any algorithm or library to generate waypoints + // This is a simple example for demonstration purposes + const numWaypoints = 10; + const route = []; + for (let i = 0; i <= numWaypoints; i++) { + const lat = start.lat + (end.lat - start.lat) * (i / numWaypoints); + const lng = start.lng + (end.lng - start.lng) * (i / numWaypoints); + route.push({ lat, lng }); + } + return route; + }; + + const geocodeAddress = async (address) => { + try { + const response = await fetch( + `https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent( + address + )}&key=${process.env.REACT_APP_GOOGLE_MAPS_API_KEY}` + ); + const data = await response.json(); + if (data.status === "OK") { + const location = data.results[0].geometry.location; + setEventLocation(location); + } else { + console.error( + "Geocode was not successful for the following reason:", + data.status + ); + } + } catch (error) { + console.error("Error fetching geocode:", error); + } + }; + const getZoomLevel = (lat1, lat2, lng1, lng2, mapWidth, mapHeight) => { const GLOBE_WIDTH = 256; // a constant in Google's map projection const angle = lng2 - lng1; @@ -115,7 +93,7 @@ const GoogleMapsCard = ({ events, eventId }) => { return Math.min(zoomX, zoomY); }; - if (!isLoaded || !eventLocation) { + if (!isLoaded || !eventLocation || !userLocation || flightRoute.length === 0) { return (
@@ -128,24 +106,7 @@ const GoogleMapsCard = ({ events, eventId }) => { return (
-

LOCATION

-
- -
- {distance && ( -

- Distance between you and the event: {distance.toFixed(2)} km -

- )} -
-
- -
+
{ fullscreenControl: false, }} > - {userLocation && ( - setInfoWindowOpen(true)} - > - {infoWindowOpen && ( - setInfoWindowOpen(false)}> -
Your Location
-
- )} -
- )} - {eventLocation && ( - setInfoWindowOpen(true)} - > - {infoWindowOpen && ( - setInfoWindowOpen(false)}> -
Event Location
-
- )} -
- )} + setInfoWindowOpen(true)} + > + {infoWindowOpen && ( + setInfoWindowOpen(false)}> +
Your Location
+
+ )} +
+ setInfoWindowOpen(true)} + > + {infoWindowOpen && ( + setInfoWindowOpen(false)}> +
Event Location
+
+ )} +
+