diff --git a/.env.sample b/.env.sample index 67dca83..2b5650e 100644 --- a/.env.sample +++ b/.env.sample @@ -1 +1,3 @@ -REACT_APP_SERVER_URL=http://localhost:5005 \ No newline at end of file +REACT_APP_SERVER_URL=http://localhost:5005 +# update live server string when working locally - change to localhost:5005 +VITE_LIVE_SERVER= \ No newline at end of file diff --git a/.gitignore b/.gitignore index a547bf3..d7de12f 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,8 @@ dist dist-ssr *.local +.env + # Editor directories and files .vscode/* !.vscode/extensions.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..e71e444 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# hopeme-frontend diff --git a/chatgpt.jsx b/chatgpt.jsx new file mode 100644 index 0000000..5e1bd93 --- /dev/null +++ b/chatgpt.jsx @@ -0,0 +1,68 @@ +// import * as React from "react"; +// import { Button, Input } from "@fluentui/react-components"; +// import { useState, useEffect } from "react"; +// import axios from "axios"; + +// function HomePage() { +// const [prompt, setPrompt] = useState(""); +// const [message, setMessage] = useState(""); + +// const handlePostReq = () => { +// const url = "http://localhost:5005/api/completions"; +// const storedToken = localStorage.getItem("authToken"); +// axios +// .post( +// url, +// { +// message: prompt, +// }, +// { +// headers: { Authorization: `Bearer ${storedToken}` }, +// } +// ) +// .then((resp) => console.log(resp)) +// .catch((error) => console.log(error)); +// }; + +// // const getMessages = async () => { +// // const options = { +// // method: "POST", +// // body: JSON.stringify({ +// // message: prompt, +// // }), +// // headers: { +// // "Content-Type": "application/json", +// // }, +// // }; +// // try { +// // const response = await fetch( +// // "http://localhost:5005/api/completions", +// // options +// // ); +// // console.log("hello"); +// // const data = await response.json(); +// // console.log(response); +// // console.log(data); +// // setMessage(data.choices[0].message); +// // } catch (error) { +// // console.error(error); +// // } +// // }; + +// return ( +//
+//
+// HopeMe Logo +//
+//
+// setPrompt(e.target.value)} +// placeholder="Add some detail" +// /> +// +//
+//
+// ); +// } + +// export default HomePage; diff --git a/index.html b/index.html index 79c4701..e0569af 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,13 @@ - + - Vite + React + Hopeme
diff --git a/package-lock.json b/package-lock.json index 9809062..bb93fa0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,10 +8,13 @@ "name": "react-auth", "version": "1.3.0", "dependencies": { + "@fluentui/react-components": "^9.26.1", "axios": "^1.4.0", "react": "^18.2.0", + "react-calendar": "^4.6.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.11.2" + "react-router-dom": "^6.14.2", + "react-svg": "^16.1.19" }, "devDependencies": { "@types/react": "^18.0.28", @@ -317,6 +320,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.21.9", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", @@ -366,6 +380,11 @@ "node": ">=6.9.0" } }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, "node_modules/@esbuild/android-arm": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", @@ -789,6 +808,1136 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz", + "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==" + }, + "node_modules/@floating-ui/dom": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.5.tgz", + "integrity": "sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==", + "dependencies": { + "@floating-ui/core": "^1.3.1" + } + }, + "node_modules/@fluentui/keyboard-keys": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.3.tgz", + "integrity": "sha512-40KBVJ9HzsvmPL3rwYaAvxCacNS0xnTmOt6TLxxrAVgVrZ1X7DLgd8OGFZcWROs0dhHdCk2D51bl4nK8Q1r3mQ==", + "dependencies": { + "@swc/helpers": "^0.4.14" + } + }, + "node_modules/@fluentui/priority-overflow": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.1.tgz", + "integrity": "sha512-wYCZbGHrApTaVnlpvWkgIy/NPSyexl7pRO14lSo9LW9dDcojiHI3KWtpRxO3/tf6LtHuUBNe/+vonGJUsSI68w==", + "dependencies": { + "@swc/helpers": "^0.4.14" + } + }, + "node_modules/@fluentui/react-accordion": { + "version": "9.1.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.1.23.tgz", + "integrity": "sha512-Cast99R8Tq/Z+jyriZxd1hOeNkgfe1WZiOi5DLd3Ow0H1Os2HJDss/YgpU3ZHXHY/A/AcHWNzwv801Ub8mhBhA==", + "dependencies": { + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-alert": { + "version": "9.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.58.tgz", + "integrity": "sha512-i4JZIW0YAxaNslcI5YAx7KrjWxVYCOqVWI+kZ+pD2bsSYzuh2XNoddi/VVJAK/ckpafM3ZDVW7ZfTmZ9O/XaHg==", + "dependencies": { + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-button": "^9.3.23", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-aria": { + "version": "9.3.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.3.26.tgz", + "integrity": "sha512-3COvfltw3yn0p93HBWf1XmOv5A/sJ1jfsxtNeoum0+RivMs+L9CgTS5/d86t8xiQrxw1JXtWBzDaBwHBasE6Aw==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-utilities": "^9.10.1", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-avatar": { + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.12.tgz", + "integrity": "sha512-Z5frthUPQQjJjzP5MZEXzzw5WymKvBfESAnW45+ZeJezgY/RBPxV8QgT+l39MeNeULjZgtTU7sH0m6NejQBt8g==", + "dependencies": { + "@fluentui/react-badge": "^9.1.20", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-popover": "^9.7.6", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-tooltip": "^9.2.23", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-badge": { + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.1.20.tgz", + "integrity": "sha512-vfbooJgbVIUITsNUprS4C8/HYbhyZS2JhLXzHnrrxF9/VxgLMjVY49neCFyNmLRp4VCi92ECMz6ekFzL2cym+g==", + "dependencies": { + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-button": { + "version": "9.3.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.23.tgz", + "integrity": "sha512-YzBmu8gV06j9TyioPHThSeybCkNlVnKJRXY/XKS+8mkJBOZA0ZsKv3UwlSQHyM1Ov4wku2JPCotW37lbUOOKLg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-card": { + "version": "9.0.22", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.22.tgz", + "integrity": "sha512-/ay8kMPKn7/utLAvaIbUuro2FMxkpJ+klzwm7I4AGOOrpLr5ajsYQ5LX6W3FrMsLgGZFKXFpM4sl7qOgsI28Cg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-checkbox": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.1.24.tgz", + "integrity": "sha512-S4eUBaTMgzL5eDVhSymL6R9dHc3aV61OTojrRjXyc0utUhziCtijj9uZ0jlQ4G5l5ZrQcfpDZQxuSDOGQ2Mcpg==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-combobox": { + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.4.7.tgz", + "integrity": "sha512-dr9DvEtCl7v3/4TeAVQ2a7ynRYuxRTjRd5UFoZSg2p5/iot4F1Xk2Q8/mEj7T4/nZy5gaK5F3k6V54YjYrsdHQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-components": { + "version": "9.26.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.26.1.tgz", + "integrity": "sha512-IeGamHc0D0IjkYxLBTqnDdZkLrKLh5x+8k++0sihkNxmVmjZUB0ZyYq7F0z6pv8XuyMjcJhvG/StuJcVOorqLQ==", + "dependencies": { + "@fluentui/react-accordion": "^9.1.23", + "@fluentui/react-alert": "9.0.0-beta.58", + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-badge": "^9.1.20", + "@fluentui/react-button": "^9.3.23", + "@fluentui/react-card": "^9.0.22", + "@fluentui/react-checkbox": "^9.1.24", + "@fluentui/react-combobox": "^9.4.7", + "@fluentui/react-dialog": "^9.5.16", + "@fluentui/react-divider": "^9.2.20", + "@fluentui/react-drawer": "9.0.0-beta.8", + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-image": "^9.1.17", + "@fluentui/react-infobutton": "9.0.0-beta.42", + "@fluentui/react-input": "^9.4.21", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-link": "^9.1.2", + "@fluentui/react-menu": "^9.10.0", + "@fluentui/react-overflow": "^9.0.23", + "@fluentui/react-persona": "^9.2.22", + "@fluentui/react-popover": "^9.7.6", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-progress": "^9.1.21", + "@fluentui/react-provider": "^9.7.9", + "@fluentui/react-radio": "^9.1.24", + "@fluentui/react-select": "^9.1.21", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-skeleton": "^9.0.9", + "@fluentui/react-slider": "^9.1.24", + "@fluentui/react-spinbutton": "^9.2.21", + "@fluentui/react-spinner": "^9.3.0", + "@fluentui/react-switch": "^9.1.24", + "@fluentui/react-table": "^9.6.0", + "@fluentui/react-tabs": "^9.3.24", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-text": "^9.3.17", + "@fluentui/react-textarea": "^9.3.21", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-toast": "^9.0.3", + "@fluentui/react-toolbar": "^9.1.24", + "@fluentui/react-tooltip": "^9.2.23", + "@fluentui/react-tree": "9.0.0-beta.25", + "@fluentui/react-utilities": "^9.10.1", + "@fluentui/react-virtualizer": "9.0.0-alpha.28", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-context-selector": { + "version": "9.1.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.26.tgz", + "integrity": "sha512-9Pbo2GpnkZH7eoVvhCppnENmAI8Z8Asb6GC9YySMoLbM2NPkqdCcOwyKEnIc/J9LQoyPkFuSL5Msf7Y84coTiw==", + "dependencies": { + "@fluentui/react-utilities": "^9.10.1", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-dialog": { + "version": "9.5.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.5.16.tgz", + "integrity": "sha512-3zSKF23Y4/JJ3uqb+R//w5B93CIYsC/jKpqQR8+mHPnmRksCsQwa7BGqABXJoo7+JfGmWWhIDAZCdXmzgyjMCw==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-divider": { + "version": "9.2.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.20.tgz", + "integrity": "sha512-Sb2/VFfCjXPOLqaQHFZaWpaoA31XiNS11tPlrO0Pe5TveOI5ifH2UhIuIVv+0C+Asjn5wmUdZfWaMMCduSJHLw==", + "dependencies": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-drawer": { + "version": "9.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.0.0-beta.8.tgz", + "integrity": "sha512-YWCgMX/g/2GZzCEyLFmqk9jhbUYIps/u1mYg9bWiRLd3tAjGEK3mMUDLmtRYaEZn2J1g2DIr1XTP+R9S4VT89A==", + "dependencies": { + "@fluentui/react-dialog": "^9.5.16", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-field": { + "version": "9.1.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.11.tgz", + "integrity": "sha512-qPcCWURPBVoRClSSTjoLm7E88kEoyzrHoi62L6qoBdY1d3yKXGKDCBOK1j0FsVg5/WECnUDU8T4DO6KRbpUt3g==", + "dependencies": { + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-icons": { + "version": "2.0.207", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.207.tgz", + "integrity": "sha512-MB6vY1yFqGqsO1zFjLQZcPY7dk7TLkFvtVOhjxSuz3KHOI3FKssWjq70H5mOHoWe/1oyWoA0S8tN0W0D+uT3dA==", + "dependencies": { + "@griffel/react": "^1.0.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-image": { + "version": "9.1.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.17.tgz", + "integrity": "sha512-OgFGv+2a/Isc7gDhl/XNAXVsJONYRqlQ4Ar7UPnlJMUuVQWx1pqXWWD8U41YLcLslds8EkiAH5+SWbnDC7XY8Q==", + "dependencies": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-infobutton": { + "version": "9.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.42.tgz", + "integrity": "sha512-3yQBurgNpy06AvezRNhxuXiT9nUDrF62ZV5G7DaTx1o73e7kmO55DQbUKhsDOwyEe+rgKVFFmmW/SZwN/RZQ+w==", + "dependencies": { + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-popover": "^9.7.6", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-input": { + "version": "9.4.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.21.tgz", + "integrity": "sha512-Ac1y5z7lnU1F4QeaXdKDkF/vxA3Ioq4jjuTCGOESFSyMQ5PuA2plP30hyke1G/VneLyBb07zI/1OWAk1mkc+IQ==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-jsx-runtime": { + "version": "9.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.0-alpha.11.tgz", + "integrity": "sha512-DWX0mSnwXKqIiDE/dE976Qt3ii3covFifMYXQ6v6BdA1cu4foYM5XQioPU12UkDiFiQ2BSavLvZk4aEpXcy/Ew==", + "dependencies": { + "@fluentui/react-utilities": "^9.10.1", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-label": { + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.20.tgz", + "integrity": "sha512-7lfVhy1pgJSDGc980s2KlAAY3DVkUVdP81nT7Xq9zxkVgHgtmg2FA//03j/mR+1F2P2011pGgvSl8YxtB69+wQ==", + "dependencies": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-link": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.1.2.tgz", + "integrity": "sha512-QJ/3TtLWvIP06asbhAqE2XE9Y3oH62zyWHtp0XHXR+ljgJNChatVeG9GDhO6CoiJX3lsnR1rwUITY6wAMl2WhA==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-menu": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.10.0.tgz", + "integrity": "sha512-Ri5O8rz36EihLD6bEdnwskWnU8WApAcC2DBVXlztEreTJFfP+fIlofNAhaFsPqn9sDM/idDk3BOnR4VfHyN2sQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-overflow": { + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.0.23.tgz", + "integrity": "sha512-8NLit3YvFsuDIe6UMxoMXN/VEEnwZe93G/YyL6qq1apCNERKPeaqv7V7xFlHFBnKj29OT/HXM7yfz7BKB18sRw==", + "dependencies": { + "@fluentui/priority-overflow": "^9.1.1", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-persona": { + "version": "9.2.22", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.22.tgz", + "integrity": "sha512-jBD68JqTLBNmmhKLPH9LrJ1FvosYZnkOpK3kGeS1oO1yr76deCoK0VnnxjICMXfSmDQUTD5swvbbkYW8/eyOqw==", + "dependencies": { + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-badge": "^9.1.20", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-popover": { + "version": "9.7.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.7.6.tgz", + "integrity": "sha512-QC+LhWoZ3GFysmcW7ORISYUrGtLJUKPdTHUJE+oM+M8gUSphqfrt4TDBx6H8cjc+KwVa824gpQYlrPjlbM9CKw==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-portal": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.3.1.tgz", + "integrity": "sha512-jtnX717hr4eFvbPOBmIj8yADN/IKxE+Lk+qlZjoYEy3bdkkmsRAjyhtpAgSU0cpXKKkiGf5eethsFKYbUZxTyA==", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14", + "use-disposable": "^1.0.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-positioning": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.8.0.tgz", + "integrity": "sha512-2eXai4GdLfbKj4AmCPBS1T9PaaqHkfboFMkCI+zOujGSg7FgIz4U3XzSowms9b9g5bKpUDrEExzd396ZMG8Vjw==", + "dependencies": { + "@floating-ui/dom": "^1.2.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-progress": { + "version": "9.1.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.21.tgz", + "integrity": "sha512-BAt9JdsEiMM+HcFZUoiwjtiqPiTci88zc47U1bvySgn+fUBhvBEZwdj7FIZwT01+V+ScLKIWkemUNZveSjXrrA==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-provider": { + "version": "9.7.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.7.9.tgz", + "integrity": "sha512-HDRs98kzNQpuW6/XfmtHNSDqSzFqhynIK/3wYbLfd0MOPrg0k2cQ0lVqL7FZyW+xBCHaweiQxT5iWx/SSkazag==", + "dependencies": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/core": "^1.11.0", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-radio": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.24.tgz", + "integrity": "sha512-b5k405bo2TfFgr5vPiRjMrEIBu2Hcnmif/lmKxkuf9UlKxu+7YzPCEg5ThqIUauj1J4ssVRrM3GoFE6WSqmCVQ==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-select": { + "version": "9.1.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.21.tgz", + "integrity": "sha512-5K2KlGzEhfAO0iCwpPPCZn36ATEATt+h0NJ29ZklhRMlSql79WkJ/CKgsEJr4vGOeLRdj2iPdaYdSG7pgGz+jA==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-shared-contexts": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.6.0.tgz", + "integrity": "sha512-sFyMPHJB4UgqPAEmxVikDo9mfBYgpm6mHOpMdM3+T7E3BZUY+7rFlo8XVbk6DzuclAIp85YA/ytHkI+jQyn1cw==", + "dependencies": { + "@fluentui/react-theme": "^9.1.9", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-skeleton": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.9.tgz", + "integrity": "sha512-f361g2t8uthwNuITJLOtRvCbjoveqYTiYhzd0oKwPZlHkz9xZizVnOLYSXFYyMXAOt4F8Ib4sbdSFjNHycAG2A==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-slider": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.24.tgz", + "integrity": "sha512-2aukES7cnh/8UvHR3QhE1zM69emkap0GwuZiwgzia6Rj2oD4N24ZNFFNtCtpDc/L8KKNy9Tut5I/klP0tohD3w==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-spinbutton": { + "version": "9.2.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.21.tgz", + "integrity": "sha512-A+qy6fb52Kr16slC+UduZAFhee8Y2HVopepIvujgHoxWx4qvdjIjrlYsQMiat9g+/Fj6e17f2oS3gLF9h9/cpA==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-spinner": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.3.0.tgz", + "integrity": "sha512-7kakV+ujPo249zqhg2AJG0yFZjyiSVHmPq3QjeHtxC7SETTsYrrK1fPTzj3zl9lO+194X1rmYLPcxo1PKEN26g==", + "dependencies": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-switch": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.24.tgz", + "integrity": "sha512-FSeQDOGzDERmStDjGr7NO/wQsd4VG7mI6nWYJcK5qIg7TZFFsa8snf8uknL8irf7c5sSfaUDj8DUVcxRq9nH4w==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-table": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.6.0.tgz", + "integrity": "sha512-HVJoHvM8k7SkOjuP7aBLpDeoQhtzn2Skh4O9bCDMNaxoHmcgPw9zskt2Kau/wXSx2JyrGGEz707yRb6EgpKlJg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-checkbox": "^9.1.24", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-radio": "^9.1.24", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tabs": { + "version": "9.3.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.3.24.tgz", + "integrity": "sha512-5gbGcdJV8zvn6XNesniMrlcgLJhcfcpcGXNA/98vb90Kkhe6MSNp9p7dpVVgnhquJ5MZMVLO9OI8Jj1ugU04jQ==", + "dependencies": { + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0", + "scheduler": "^0.19.0 || ^0.20.0" + } + }, + "node_modules/@fluentui/react-tabster": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.10.0.tgz", + "integrity": "sha512-HKA4DLoocDeomdn1l9z1MUeGGkJzzpzgs5y1lSHnF7aWDcagVZGLjkaCknYDjp8NJwyuR9dS6xPpJbEk3N0hIg==", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14", + "keyborg": "^2.0.0", + "tabster": "^4.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-text": { + "version": "9.3.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.3.17.tgz", + "integrity": "sha512-d/fORzmZ3H2n+Ki5nBkA7fvUa+ReOsk3GVxRB0brAmHaO/7nesi7DjnCTw4owv2vkVwXQJfhT7STxAc6TYjkQw==", + "dependencies": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-textarea": { + "version": "9.3.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.21.tgz", + "integrity": "sha512-17w3ZdWiysWDp3TLoq72lvNvR3BDmMcjGje3+G0ns+pReqK/CdHl0gTIgiQsPNyWFtck/zDdQ/gfxNND/LXoLw==", + "dependencies": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-theme": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.9.tgz", + "integrity": "sha512-xzcc8uhNyVEqy5XGqbKE4Obg/8sFj356L8scBJdYq+iIAySmu0SRn8qvfLajzVDayqCgEfZ64h1qmeS1K//R1w==", + "dependencies": { + "@fluentui/tokens": "1.0.0-alpha.6", + "@swc/helpers": "^0.4.14" + } + }, + "node_modules/@fluentui/react-toast": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.0.3.tgz", + "integrity": "sha512-lOwaTwL0xDQhzqCmtvDlm3AcUoHvL8ihlHMbvtylzBlIUigwmwEJF1fUtYIYXiRZoTnjOwPWWhQpbyA4OoVmUw==", + "dependencies": { + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14", + "react-transition-group": "^4.4.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-toolbar": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.24.tgz", + "integrity": "sha512-RDRQBDv0LoNUU3Zq8dwQ/SzwjFockf7Ndgxttz8YIxi1vkEOGRvorichV10vhaedbA5PEo6c9m2mxkUR2QO3YQ==", + "dependencies": { + "@fluentui/react-button": "^9.3.23", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-divider": "^9.2.20", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-radio": "^9.1.24", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tooltip": { + "version": "9.2.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.2.23.tgz", + "integrity": "sha512-CKwJwi7kgrRYTdaL5G+A56/GHfCVJzCHHtamHzoxEhKeFDoGDy/pGH0rcneR3Jzgthf35TLyJTYO+EWVZvdTWQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tree": { + "version": "9.0.0-beta.25", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.0.0-beta.25.tgz", + "integrity": "sha512-T2l0WE4rBBl/CyhTxtxTw/7LuxtmmMBfQ8upaRiHfgigXme2ss1pcQF7mkGhRl2WSxOLeWEHVX1XTdgWhuZp/A==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-button": "^9.3.23", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-utilities": { + "version": "9.10.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.10.1.tgz", + "integrity": "sha512-TckWldeYrTy4tneWyPV8oHZFbxUZJA3r+cOSN3pNsyxwLs9vYrsZvpvZJTcOF3VNoEJKFDaehnzuBHEUoL7hmQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.3", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-virtualizer": { + "version": "9.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.28.tgz", + "integrity": "sha512-jqysw3feXlQT0aS+TFTtmS4wtDkCmGbvywXyiPaKFYF1RvA34UXJbxrgB7RXAey6xMPBxwM6tj3Om6/gPiGg+Q==", + "dependencies": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/tokens": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.6.tgz", + "integrity": "sha512-3fF2rWSltn4HUdg3Q1Sb9qS6gCT6XsCDeEgbwMt93BWT2qu3cn8n4IQKbeqT/WUv4yd1AhMt7D8JUze2A1I9Kg==", + "dependencies": { + "@swc/helpers": "^0.4.14" + } + }, + "node_modules/@griffel/core": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.13.0.tgz", + "integrity": "sha512-bWt2AAFKsHlYqq4dqBwFLAmgyUZH1qp4DqCS3Z9LukOVtDjDGBgLbHVTyZa6XSpBUCQ4XkmsmpoaipuV4gI/fw==", + "dependencies": { + "@emotion/hash": "^0.9.0", + "csstype": "^3.1.2", + "rtl-css-js": "^1.16.1", + "stylis": "^4.2.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@griffel/react": { + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.11.tgz", + "integrity": "sha512-rQPtA6QxHfon4jse05smYLP3gsGR1Wd8U7SiwxpvlZ/mN2sywHZcaxGXZqY0A5zs1cM7pIQExpxSj79SOQy1MA==", + "dependencies": { + "@griffel/core": "^1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.8.0 <19.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -912,24 +2061,53 @@ } }, "node_modules/@remix-run/router": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz", - "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", + "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==", "engines": { "node": ">=14" } }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tanem/svg-injector": { + "version": "10.1.60", + "resolved": "https://registry.npmjs.org/@tanem/svg-injector/-/svg-injector-10.1.60.tgz", + "integrity": "sha512-yzdF0f7TZI7MrMieJLu5VYEJuL0WneFCabLvBfpNWDoWikzQPW8V9tpEqHa2A4kKJDiXUzsIoqtPEvGj9xsPgQ==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "content-type": "^1.0.5", + "tslib": "^2.6.0" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.196", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", + "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==" + }, + "node_modules/@types/lodash.memoize": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/lodash.memoize/-/lodash.memoize-4.1.7.tgz", + "integrity": "sha512-lGN7WeO4vO6sICVpf041Q7BX/9k1Y24Zo3FY0aUezr1QlKznpjzsDk3T3wvH8ofYzoK0QupN9TWcFAFZlyPwQQ==", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { "version": "18.2.6", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -940,7 +2118,6 @@ "version": "18.2.4", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", - "dev": true, "dependencies": { "@types/react": "*" } @@ -948,8 +2125,7 @@ "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "node_modules/@vitejs/plugin-react": { "version": "4.0.0", @@ -969,6 +2145,14 @@ "vite": "^4.2.0" } }, + "node_modules/@wojtekmaj/date-utils": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@wojtekmaj/date-utils/-/date-utils-1.5.0.tgz", + "integrity": "sha512-0mq88lCND6QiffnSDWp+TbOxzJSwy2V/3XN+HwWZ7S2n19QAgR5dy5hRVhlECXvQIq2r+VcblBu+S9V+yMcxXw==", + "funding": { + "url": "https://github.com/wojtekmaj/date-utils?sponsor=1" + } + }, "node_modules/acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -1223,6 +2407,14 @@ "node": ">=4" } }, + "node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1255,6 +2447,14 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -1278,8 +2478,7 @@ "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/debug": { "version": "4.3.4", @@ -1340,6 +2539,15 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.402", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.402.tgz", @@ -1999,6 +3207,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-user-locale": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/get-user-locale/-/get-user-locale-2.3.0.tgz", + "integrity": "sha512-I3rQvAUwu2nauRD9YyQBSXVFJZixNouwA+eZld51Sn4Pn0N1qFbgcgOi/nPigJPQlNY519mT95fiSPRgflQiTA==", + "dependencies": { + "@types/lodash.memoize": "^4.1.7", + "lodash.memoize": "^4.1.1" + }, + "funding": { + "url": "https://github.com/wojtekmaj/get-user-locale?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2517,6 +3737,11 @@ "node": ">=4.0" } }, + "node_modules/keyborg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.0.0.tgz", + "integrity": "sha512-RWY8nWrzRkwTQLaKyDtbTu5SOb5L4B20UzAsBHlQDFZqVY/+Mid0bQ7MVTC8vbOTrWY2xkkzj8gZF9Ua7re4xA==" + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2545,6 +3770,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2642,7 +3872,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2892,7 +4121,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -2944,6 +4172,31 @@ "node": ">=0.10.0" } }, + "node_modules/react-calendar": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/react-calendar/-/react-calendar-4.6.0.tgz", + "integrity": "sha512-GJ6ZipKMQmlK666t+0hgmecu6WHydEnMWJjKdEkUxW6F471hiM5DkbWXkfr8wlAg9tc9feNCBhXw3SqsPOm01A==", + "dependencies": { + "@wojtekmaj/date-utils": "^1.1.3", + "clsx": "^2.0.0", + "get-user-locale": "^2.2.1", + "prop-types": "^15.6.0", + "tiny-warning": "^1.0.0" + }, + "funding": { + "url": "https://github.com/wojtekmaj/react-calendar?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -2956,11 +4209,18 @@ "react": "^18.2.0" } }, + "node_modules/react-dom/node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-refresh": { "version": "0.14.0", @@ -2972,11 +4232,11 @@ } }, "node_modules/react-router": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz", - "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.2.tgz", + "integrity": "sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==", "dependencies": { - "@remix-run/router": "1.6.2" + "@remix-run/router": "1.7.2" }, "engines": { "node": ">=14" @@ -2986,12 +4246,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz", - "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.2.tgz", + "integrity": "sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==", "dependencies": { - "@remix-run/router": "1.6.2", - "react-router": "6.11.2" + "@remix-run/router": "1.7.2", + "react-router": "6.14.2" }, "engines": { "node": ">=14" @@ -3001,6 +4261,41 @@ "react-dom": ">=16.8" } }, + "node_modules/react-svg": { + "version": "16.1.19", + "resolved": "https://registry.npmjs.org/react-svg/-/react-svg-16.1.19.tgz", + "integrity": "sha512-WchBqQ8LooWpEp3JM7F9cJxPzrMLmd2fTD5NbzkDHeJAMuqUeD9QtOEDNPgRstPeh0aMEV2j8WwNXSXFRMuy3g==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "@tanem/svg-injector": "^10.1.60", + "@types/prop-types": "^15.7.5", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/regexp.prototype.flags": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", @@ -3085,6 +4380,14 @@ "fsevents": "~2.3.2" } }, + "node_modules/rtl-css-js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", + "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3123,11 +4426,13 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "peer": true, "dependencies": { - "loose-envify": "^1.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, "node_modules/semver": { @@ -3271,6 +4576,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -3295,12 +4605,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tabster": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-4.6.0.tgz", + "integrity": "sha512-JTgjk0dPKjK3cfG3ZZVcLYnsZQAaK7cx6E8LpCNzCxrcKmPVVVtwrskUtX8oQqCnk7H1X36oxRRFlbJGGThLtw==", + "dependencies": { + "keyborg": "^2.0.0", + "tslib": "^2.3.1" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3310,6 +4634,11 @@ "node": ">=4" } }, + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3402,6 +4731,17 @@ "punycode": "^2.1.0" } }, + "node_modules/use-disposable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.1.tgz", + "integrity": "sha512-5Sle1XEmK3lw3xyGqeIY7UKkiUgF+TxwUty7fTsqM5D5AxfQfo2ft+LY9xKCA+W5YbaBFbOkWfQsZY/y5JhInA==", + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, "node_modules/vite": { "version": "4.3.8", "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.8.tgz", @@ -3747,6 +5087,14 @@ "@babel/helper-plugin-utils": "^7.19.0" } }, + "@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, "@babel/template": { "version": "7.21.9", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", @@ -3787,6 +5135,11 @@ "to-fast-properties": "^2.0.0" } }, + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, "@esbuild/android-arm": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", @@ -3990,6 +5343,838 @@ "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", "dev": true }, + "@floating-ui/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz", + "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==" + }, + "@floating-ui/dom": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.5.tgz", + "integrity": "sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==", + "requires": { + "@floating-ui/core": "^1.3.1" + } + }, + "@fluentui/keyboard-keys": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.3.tgz", + "integrity": "sha512-40KBVJ9HzsvmPL3rwYaAvxCacNS0xnTmOt6TLxxrAVgVrZ1X7DLgd8OGFZcWROs0dhHdCk2D51bl4nK8Q1r3mQ==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/priority-overflow": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.1.tgz", + "integrity": "sha512-wYCZbGHrApTaVnlpvWkgIy/NPSyexl7pRO14lSo9LW9dDcojiHI3KWtpRxO3/tf6LtHuUBNe/+vonGJUsSI68w==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-accordion": { + "version": "9.1.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.1.23.tgz", + "integrity": "sha512-Cast99R8Tq/Z+jyriZxd1hOeNkgfe1WZiOi5DLd3Ow0H1Os2HJDss/YgpU3ZHXHY/A/AcHWNzwv801Ub8mhBhA==", + "requires": { + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-alert": { + "version": "9.0.0-beta.58", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.58.tgz", + "integrity": "sha512-i4JZIW0YAxaNslcI5YAx7KrjWxVYCOqVWI+kZ+pD2bsSYzuh2XNoddi/VVJAK/ckpafM3ZDVW7ZfTmZ9O/XaHg==", + "requires": { + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-button": "^9.3.23", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-aria": { + "version": "9.3.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.3.26.tgz", + "integrity": "sha512-3COvfltw3yn0p93HBWf1XmOv5A/sJ1jfsxtNeoum0+RivMs+L9CgTS5/d86t8xiQrxw1JXtWBzDaBwHBasE6Aw==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-utilities": "^9.10.1", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-avatar": { + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.5.12.tgz", + "integrity": "sha512-Z5frthUPQQjJjzP5MZEXzzw5WymKvBfESAnW45+ZeJezgY/RBPxV8QgT+l39MeNeULjZgtTU7sH0m6NejQBt8g==", + "requires": { + "@fluentui/react-badge": "^9.1.20", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-popover": "^9.7.6", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-tooltip": "^9.2.23", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-badge": { + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.1.20.tgz", + "integrity": "sha512-vfbooJgbVIUITsNUprS4C8/HYbhyZS2JhLXzHnrrxF9/VxgLMjVY49neCFyNmLRp4VCi92ECMz6ekFzL2cym+g==", + "requires": { + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-button": { + "version": "9.3.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.23.tgz", + "integrity": "sha512-YzBmu8gV06j9TyioPHThSeybCkNlVnKJRXY/XKS+8mkJBOZA0ZsKv3UwlSQHyM1Ov4wku2JPCotW37lbUOOKLg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-card": { + "version": "9.0.22", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.22.tgz", + "integrity": "sha512-/ay8kMPKn7/utLAvaIbUuro2FMxkpJ+klzwm7I4AGOOrpLr5ajsYQ5LX6W3FrMsLgGZFKXFpM4sl7qOgsI28Cg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-checkbox": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.1.24.tgz", + "integrity": "sha512-S4eUBaTMgzL5eDVhSymL6R9dHc3aV61OTojrRjXyc0utUhziCtijj9uZ0jlQ4G5l5ZrQcfpDZQxuSDOGQ2Mcpg==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-combobox": { + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.4.7.tgz", + "integrity": "sha512-dr9DvEtCl7v3/4TeAVQ2a7ynRYuxRTjRd5UFoZSg2p5/iot4F1Xk2Q8/mEj7T4/nZy5gaK5F3k6V54YjYrsdHQ==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-components": { + "version": "9.26.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.26.1.tgz", + "integrity": "sha512-IeGamHc0D0IjkYxLBTqnDdZkLrKLh5x+8k++0sihkNxmVmjZUB0ZyYq7F0z6pv8XuyMjcJhvG/StuJcVOorqLQ==", + "requires": { + "@fluentui/react-accordion": "^9.1.23", + "@fluentui/react-alert": "9.0.0-beta.58", + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-badge": "^9.1.20", + "@fluentui/react-button": "^9.3.23", + "@fluentui/react-card": "^9.0.22", + "@fluentui/react-checkbox": "^9.1.24", + "@fluentui/react-combobox": "^9.4.7", + "@fluentui/react-dialog": "^9.5.16", + "@fluentui/react-divider": "^9.2.20", + "@fluentui/react-drawer": "9.0.0-beta.8", + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-image": "^9.1.17", + "@fluentui/react-infobutton": "9.0.0-beta.42", + "@fluentui/react-input": "^9.4.21", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-link": "^9.1.2", + "@fluentui/react-menu": "^9.10.0", + "@fluentui/react-overflow": "^9.0.23", + "@fluentui/react-persona": "^9.2.22", + "@fluentui/react-popover": "^9.7.6", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-progress": "^9.1.21", + "@fluentui/react-provider": "^9.7.9", + "@fluentui/react-radio": "^9.1.24", + "@fluentui/react-select": "^9.1.21", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-skeleton": "^9.0.9", + "@fluentui/react-slider": "^9.1.24", + "@fluentui/react-spinbutton": "^9.2.21", + "@fluentui/react-spinner": "^9.3.0", + "@fluentui/react-switch": "^9.1.24", + "@fluentui/react-table": "^9.6.0", + "@fluentui/react-tabs": "^9.3.24", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-text": "^9.3.17", + "@fluentui/react-textarea": "^9.3.21", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-toast": "^9.0.3", + "@fluentui/react-toolbar": "^9.1.24", + "@fluentui/react-tooltip": "^9.2.23", + "@fluentui/react-tree": "9.0.0-beta.25", + "@fluentui/react-utilities": "^9.10.1", + "@fluentui/react-virtualizer": "9.0.0-alpha.28", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-context-selector": { + "version": "9.1.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.26.tgz", + "integrity": "sha512-9Pbo2GpnkZH7eoVvhCppnENmAI8Z8Asb6GC9YySMoLbM2NPkqdCcOwyKEnIc/J9LQoyPkFuSL5Msf7Y84coTiw==", + "requires": { + "@fluentui/react-utilities": "^9.10.1", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-dialog": { + "version": "9.5.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.5.16.tgz", + "integrity": "sha512-3zSKF23Y4/JJ3uqb+R//w5B93CIYsC/jKpqQR8+mHPnmRksCsQwa7BGqABXJoo7+JfGmWWhIDAZCdXmzgyjMCw==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-divider": { + "version": "9.2.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.20.tgz", + "integrity": "sha512-Sb2/VFfCjXPOLqaQHFZaWpaoA31XiNS11tPlrO0Pe5TveOI5ifH2UhIuIVv+0C+Asjn5wmUdZfWaMMCduSJHLw==", + "requires": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-drawer": { + "version": "9.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.0.0-beta.8.tgz", + "integrity": "sha512-YWCgMX/g/2GZzCEyLFmqk9jhbUYIps/u1mYg9bWiRLd3tAjGEK3mMUDLmtRYaEZn2J1g2DIr1XTP+R9S4VT89A==", + "requires": { + "@fluentui/react-dialog": "^9.5.16", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-field": { + "version": "9.1.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.11.tgz", + "integrity": "sha512-qPcCWURPBVoRClSSTjoLm7E88kEoyzrHoi62L6qoBdY1d3yKXGKDCBOK1j0FsVg5/WECnUDU8T4DO6KRbpUt3g==", + "requires": { + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-icons": { + "version": "2.0.207", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.207.tgz", + "integrity": "sha512-MB6vY1yFqGqsO1zFjLQZcPY7dk7TLkFvtVOhjxSuz3KHOI3FKssWjq70H5mOHoWe/1oyWoA0S8tN0W0D+uT3dA==", + "requires": { + "@griffel/react": "^1.0.0", + "tslib": "^2.1.0" + } + }, + "@fluentui/react-image": { + "version": "9.1.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.17.tgz", + "integrity": "sha512-OgFGv+2a/Isc7gDhl/XNAXVsJONYRqlQ4Ar7UPnlJMUuVQWx1pqXWWD8U41YLcLslds8EkiAH5+SWbnDC7XY8Q==", + "requires": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-infobutton": { + "version": "9.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.42.tgz", + "integrity": "sha512-3yQBurgNpy06AvezRNhxuXiT9nUDrF62ZV5G7DaTx1o73e7kmO55DQbUKhsDOwyEe+rgKVFFmmW/SZwN/RZQ+w==", + "requires": { + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-popover": "^9.7.6", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-input": { + "version": "9.4.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.21.tgz", + "integrity": "sha512-Ac1y5z7lnU1F4QeaXdKDkF/vxA3Ioq4jjuTCGOESFSyMQ5PuA2plP30hyke1G/VneLyBb07zI/1OWAk1mkc+IQ==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-jsx-runtime": { + "version": "9.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.0-alpha.11.tgz", + "integrity": "sha512-DWX0mSnwXKqIiDE/dE976Qt3ii3covFifMYXQ6v6BdA1cu4foYM5XQioPU12UkDiFiQ2BSavLvZk4aEpXcy/Ew==", + "requires": { + "@fluentui/react-utilities": "^9.10.1", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-label": { + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.20.tgz", + "integrity": "sha512-7lfVhy1pgJSDGc980s2KlAAY3DVkUVdP81nT7Xq9zxkVgHgtmg2FA//03j/mR+1F2P2011pGgvSl8YxtB69+wQ==", + "requires": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-link": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.1.2.tgz", + "integrity": "sha512-QJ/3TtLWvIP06asbhAqE2XE9Y3oH62zyWHtp0XHXR+ljgJNChatVeG9GDhO6CoiJX3lsnR1rwUITY6wAMl2WhA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-menu": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.10.0.tgz", + "integrity": "sha512-Ri5O8rz36EihLD6bEdnwskWnU8WApAcC2DBVXlztEreTJFfP+fIlofNAhaFsPqn9sDM/idDk3BOnR4VfHyN2sQ==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-overflow": { + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.0.23.tgz", + "integrity": "sha512-8NLit3YvFsuDIe6UMxoMXN/VEEnwZe93G/YyL6qq1apCNERKPeaqv7V7xFlHFBnKj29OT/HXM7yfz7BKB18sRw==", + "requires": { + "@fluentui/priority-overflow": "^9.1.1", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-persona": { + "version": "9.2.22", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.22.tgz", + "integrity": "sha512-jBD68JqTLBNmmhKLPH9LrJ1FvosYZnkOpK3kGeS1oO1yr76deCoK0VnnxjICMXfSmDQUTD5swvbbkYW8/eyOqw==", + "requires": { + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-badge": "^9.1.20", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-popover": { + "version": "9.7.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.7.6.tgz", + "integrity": "sha512-QC+LhWoZ3GFysmcW7ORISYUrGtLJUKPdTHUJE+oM+M8gUSphqfrt4TDBx6H8cjc+KwVa824gpQYlrPjlbM9CKw==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-portal": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.3.1.tgz", + "integrity": "sha512-jtnX717hr4eFvbPOBmIj8yADN/IKxE+Lk+qlZjoYEy3bdkkmsRAjyhtpAgSU0cpXKKkiGf5eethsFKYbUZxTyA==", + "requires": { + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14", + "use-disposable": "^1.0.1" + } + }, + "@fluentui/react-positioning": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.8.0.tgz", + "integrity": "sha512-2eXai4GdLfbKj4AmCPBS1T9PaaqHkfboFMkCI+zOujGSg7FgIz4U3XzSowms9b9g5bKpUDrEExzd396ZMG8Vjw==", + "requires": { + "@floating-ui/dom": "^1.2.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-progress": { + "version": "9.1.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.21.tgz", + "integrity": "sha512-BAt9JdsEiMM+HcFZUoiwjtiqPiTci88zc47U1bvySgn+fUBhvBEZwdj7FIZwT01+V+ScLKIWkemUNZveSjXrrA==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-provider": { + "version": "9.7.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.7.9.tgz", + "integrity": "sha512-HDRs98kzNQpuW6/XfmtHNSDqSzFqhynIK/3wYbLfd0MOPrg0k2cQ0lVqL7FZyW+xBCHaweiQxT5iWx/SSkazag==", + "requires": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/core": "^1.11.0", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-radio": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.1.24.tgz", + "integrity": "sha512-b5k405bo2TfFgr5vPiRjMrEIBu2Hcnmif/lmKxkuf9UlKxu+7YzPCEg5ThqIUauj1J4ssVRrM3GoFE6WSqmCVQ==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-select": { + "version": "9.1.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.21.tgz", + "integrity": "sha512-5K2KlGzEhfAO0iCwpPPCZn36ATEATt+h0NJ29ZklhRMlSql79WkJ/CKgsEJr4vGOeLRdj2iPdaYdSG7pgGz+jA==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-shared-contexts": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.6.0.tgz", + "integrity": "sha512-sFyMPHJB4UgqPAEmxVikDo9mfBYgpm6mHOpMdM3+T7E3BZUY+7rFlo8XVbk6DzuclAIp85YA/ytHkI+jQyn1cw==", + "requires": { + "@fluentui/react-theme": "^9.1.9", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-skeleton": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.0.9.tgz", + "integrity": "sha512-f361g2t8uthwNuITJLOtRvCbjoveqYTiYhzd0oKwPZlHkz9xZizVnOLYSXFYyMXAOt4F8Ib4sbdSFjNHycAG2A==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-slider": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.24.tgz", + "integrity": "sha512-2aukES7cnh/8UvHR3QhE1zM69emkap0GwuZiwgzia6Rj2oD4N24ZNFFNtCtpDc/L8KKNy9Tut5I/klP0tohD3w==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-spinbutton": { + "version": "9.2.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.21.tgz", + "integrity": "sha512-A+qy6fb52Kr16slC+UduZAFhee8Y2HVopepIvujgHoxWx4qvdjIjrlYsQMiat9g+/Fj6e17f2oS3gLF9h9/cpA==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-spinner": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.3.0.tgz", + "integrity": "sha512-7kakV+ujPo249zqhg2AJG0yFZjyiSVHmPq3QjeHtxC7SETTsYrrK1fPTzj3zl9lO+194X1rmYLPcxo1PKEN26g==", + "requires": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-switch": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.24.tgz", + "integrity": "sha512-FSeQDOGzDERmStDjGr7NO/wQsd4VG7mI6nWYJcK5qIg7TZFFsa8snf8uknL8irf7c5sSfaUDj8DUVcxRq9nH4w==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-label": "^9.1.20", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-table": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.6.0.tgz", + "integrity": "sha512-HVJoHvM8k7SkOjuP7aBLpDeoQhtzn2Skh4O9bCDMNaxoHmcgPw9zskt2Kau/wXSx2JyrGGEz707yRb6EgpKlJg==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-checkbox": "^9.1.24", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-radio": "^9.1.24", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-tabs": { + "version": "9.3.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.3.24.tgz", + "integrity": "sha512-5gbGcdJV8zvn6XNesniMrlcgLJhcfcpcGXNA/98vb90Kkhe6MSNp9p7dpVVgnhquJ5MZMVLO9OI8Jj1ugU04jQ==", + "requires": { + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-tabster": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.10.0.tgz", + "integrity": "sha512-HKA4DLoocDeomdn1l9z1MUeGGkJzzpzgs5y1lSHnF7aWDcagVZGLjkaCknYDjp8NJwyuR9dS6xPpJbEk3N0hIg==", + "requires": { + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14", + "keyborg": "^2.0.0", + "tabster": "^4.5.1" + } + }, + "@fluentui/react-text": { + "version": "9.3.17", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.3.17.tgz", + "integrity": "sha512-d/fORzmZ3H2n+Ki5nBkA7fvUa+ReOsk3GVxRB0brAmHaO/7nesi7DjnCTw4owv2vkVwXQJfhT7STxAc6TYjkQw==", + "requires": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-textarea": { + "version": "9.3.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.21.tgz", + "integrity": "sha512-17w3ZdWiysWDp3TLoq72lvNvR3BDmMcjGje3+G0ns+pReqK/CdHl0gTIgiQsPNyWFtck/zDdQ/gfxNND/LXoLw==", + "requires": { + "@fluentui/react-field": "^9.1.11", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-theme": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.9.tgz", + "integrity": "sha512-xzcc8uhNyVEqy5XGqbKE4Obg/8sFj356L8scBJdYq+iIAySmu0SRn8qvfLajzVDayqCgEfZ64h1qmeS1K//R1w==", + "requires": { + "@fluentui/tokens": "1.0.0-alpha.6", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-toast": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.0.3.tgz", + "integrity": "sha512-lOwaTwL0xDQhzqCmtvDlm3AcUoHvL8ihlHMbvtylzBlIUigwmwEJF1fUtYIYXiRZoTnjOwPWWhQpbyA4OoVmUw==", + "requires": { + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14", + "react-transition-group": "^4.4.1" + } + }, + "@fluentui/react-toolbar": { + "version": "9.1.24", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.1.24.tgz", + "integrity": "sha512-RDRQBDv0LoNUU3Zq8dwQ/SzwjFockf7Ndgxttz8YIxi1vkEOGRvorichV10vhaedbA5PEo6c9m2mxkUR2QO3YQ==", + "requires": { + "@fluentui/react-button": "^9.3.23", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-divider": "^9.2.20", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-radio": "^9.1.24", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-tooltip": { + "version": "9.2.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.2.23.tgz", + "integrity": "sha512-CKwJwi7kgrRYTdaL5G+A56/GHfCVJzCHHtamHzoxEhKeFDoGDy/pGH0rcneR3Jzgthf35TLyJTYO+EWVZvdTWQ==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-positioning": "^9.8.0", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-tree": { + "version": "9.0.0-beta.25", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.0.0-beta.25.tgz", + "integrity": "sha512-T2l0WE4rBBl/CyhTxtxTw/7LuxtmmMBfQ8upaRiHfgigXme2ss1pcQF7mkGhRl2WSxOLeWEHVX1XTdgWhuZp/A==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@fluentui/react-aria": "^9.3.26", + "@fluentui/react-avatar": "^9.5.12", + "@fluentui/react-button": "^9.3.23", + "@fluentui/react-context-selector": "^9.1.26", + "@fluentui/react-icons": "^2.0.203", + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-portal": "^9.3.1", + "@fluentui/react-shared-contexts": "^9.6.0", + "@fluentui/react-tabster": "^9.10.0", + "@fluentui/react-theme": "^9.1.9", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-utilities": { + "version": "9.10.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.10.1.tgz", + "integrity": "sha512-TckWldeYrTy4tneWyPV8oHZFbxUZJA3r+cOSN3pNsyxwLs9vYrsZvpvZJTcOF3VNoEJKFDaehnzuBHEUoL7hmQ==", + "requires": { + "@fluentui/keyboard-keys": "^9.0.3", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/react-virtualizer": { + "version": "9.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.28.tgz", + "integrity": "sha512-jqysw3feXlQT0aS+TFTtmS4wtDkCmGbvywXyiPaKFYF1RvA34UXJbxrgB7RXAey6xMPBxwM6tj3Om6/gPiGg+Q==", + "requires": { + "@fluentui/react-jsx-runtime": "9.0.0-alpha.11", + "@fluentui/react-utilities": "^9.10.1", + "@griffel/react": "^1.5.7", + "@swc/helpers": "^0.4.14" + } + }, + "@fluentui/tokens": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.6.tgz", + "integrity": "sha512-3fF2rWSltn4HUdg3Q1Sb9qS6gCT6XsCDeEgbwMt93BWT2qu3cn8n4IQKbeqT/WUv4yd1AhMt7D8JUze2A1I9Kg==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@griffel/core": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.13.0.tgz", + "integrity": "sha512-bWt2AAFKsHlYqq4dqBwFLAmgyUZH1qp4DqCS3Z9LukOVtDjDGBgLbHVTyZa6XSpBUCQ4XkmsmpoaipuV4gI/fw==", + "requires": { + "@emotion/hash": "^0.9.0", + "csstype": "^3.1.2", + "rtl-css-js": "^1.16.1", + "stylis": "^4.2.0", + "tslib": "^2.1.0" + } + }, + "@griffel/react": { + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.11.tgz", + "integrity": "sha512-rQPtA6QxHfon4jse05smYLP3gsGR1Wd8U7SiwxpvlZ/mN2sywHZcaxGXZqY0A5zs1cM7pIQExpxSj79SOQy1MA==", + "requires": { + "@griffel/core": "^1.13.0", + "tslib": "^2.1.0" + } + }, "@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -4087,21 +6272,50 @@ } }, "@remix-run/router": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz", - "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", + "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==" + }, + "@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@tanem/svg-injector": { + "version": "10.1.60", + "resolved": "https://registry.npmjs.org/@tanem/svg-injector/-/svg-injector-10.1.60.tgz", + "integrity": "sha512-yzdF0f7TZI7MrMieJLu5VYEJuL0WneFCabLvBfpNWDoWikzQPW8V9tpEqHa2A4kKJDiXUzsIoqtPEvGj9xsPgQ==", + "requires": { + "@babel/runtime": "^7.22.5", + "content-type": "^1.0.5", + "tslib": "^2.6.0" + } + }, + "@types/lodash": { + "version": "4.14.196", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", + "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==" + }, + "@types/lodash.memoize": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/lodash.memoize/-/lodash.memoize-4.1.7.tgz", + "integrity": "sha512-lGN7WeO4vO6sICVpf041Q7BX/9k1Y24Zo3FY0aUezr1QlKznpjzsDk3T3wvH8ofYzoK0QupN9TWcFAFZlyPwQQ==", + "requires": { + "@types/lodash": "*" + } }, "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/react": { "version": "18.2.6", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.6.tgz", "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4112,7 +6326,6 @@ "version": "18.2.4", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", - "dev": true, "requires": { "@types/react": "*" } @@ -4120,8 +6333,7 @@ "@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "@vitejs/plugin-react": { "version": "4.0.0", @@ -4135,6 +6347,11 @@ "react-refresh": "^0.14.0" } }, + "@wojtekmaj/date-utils": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@wojtekmaj/date-utils/-/date-utils-1.5.0.tgz", + "integrity": "sha512-0mq88lCND6QiffnSDWp+TbOxzJSwy2V/3XN+HwWZ7S2n19QAgR5dy5hRVhlECXvQIq2r+VcblBu+S9V+yMcxXw==" + }, "acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -4311,6 +6528,11 @@ "supports-color": "^5.3.0" } }, + "clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==" + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4340,6 +6562,11 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -4360,8 +6587,7 @@ "csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "debug": { "version": "4.3.4", @@ -4402,6 +6628,15 @@ "esutils": "^2.0.2" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "electron-to-chromium": { "version": "1.4.402", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.402.tgz", @@ -4892,6 +7127,15 @@ "get-intrinsic": "^1.1.1" } }, + "get-user-locale": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/get-user-locale/-/get-user-locale-2.3.0.tgz", + "integrity": "sha512-I3rQvAUwu2nauRD9YyQBSXVFJZixNouwA+eZld51Sn4Pn0N1qFbgcgOi/nPigJPQlNY519mT95fiSPRgflQiTA==", + "requires": { + "@types/lodash.memoize": "^4.1.7", + "lodash.memoize": "^4.1.1" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -5248,6 +7492,11 @@ "object.assign": "^4.1.3" } }, + "keyborg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.0.0.tgz", + "integrity": "sha512-RWY8nWrzRkwTQLaKyDtbTu5SOb5L4B20UzAsBHlQDFZqVY/+Mid0bQ7MVTC8vbOTrWY2xkkzj8gZF9Ua7re4xA==" + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5267,6 +7516,11 @@ "p-locate": "^5.0.0" } }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -5339,8 +7593,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { "version": "1.12.3", @@ -5510,7 +7763,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -5542,6 +7794,18 @@ "loose-envify": "^1.1.0" } }, + "react-calendar": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/react-calendar/-/react-calendar-4.6.0.tgz", + "integrity": "sha512-GJ6ZipKMQmlK666t+0hgmecu6WHydEnMWJjKdEkUxW6F471hiM5DkbWXkfr8wlAg9tc9feNCBhXw3SqsPOm01A==", + "requires": { + "@wojtekmaj/date-utils": "^1.1.3", + "clsx": "^2.0.0", + "get-user-locale": "^2.2.1", + "prop-types": "^15.6.0", + "tiny-warning": "^1.0.0" + } + }, "react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -5549,13 +7813,22 @@ "requires": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" + }, + "dependencies": { + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + } } }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-refresh": { "version": "0.14.0", @@ -5564,22 +7837,49 @@ "dev": true }, "react-router": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz", - "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.2.tgz", + "integrity": "sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==", "requires": { - "@remix-run/router": "1.6.2" + "@remix-run/router": "1.7.2" } }, "react-router-dom": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz", - "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.2.tgz", + "integrity": "sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==", "requires": { - "@remix-run/router": "1.6.2", - "react-router": "6.11.2" + "@remix-run/router": "1.7.2", + "react-router": "6.14.2" } }, + "react-svg": { + "version": "16.1.19", + "resolved": "https://registry.npmjs.org/react-svg/-/react-svg-16.1.19.tgz", + "integrity": "sha512-WchBqQ8LooWpEp3JM7F9cJxPzrMLmd2fTD5NbzkDHeJAMuqUeD9QtOEDNPgRstPeh0aMEV2j8WwNXSXFRMuy3g==", + "requires": { + "@babel/runtime": "^7.22.6", + "@tanem/svg-injector": "^10.1.60", + "@types/prop-types": "^15.7.5", + "prop-types": "^15.8.1" + } + }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "regexp.prototype.flags": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", @@ -5632,6 +7932,14 @@ "fsevents": "~2.3.2" } }, + "rtl-css-js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", + "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5653,11 +7961,13 @@ } }, "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "peer": true, "requires": { - "loose-envify": "^1.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, "semver": { @@ -5762,6 +8072,11 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -5777,18 +8092,37 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "tabster": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-4.6.0.tgz", + "integrity": "sha512-JTgjk0dPKjK3cfG3ZZVcLYnsZQAaK7cx6E8LpCNzCxrcKmPVVVtwrskUtX8oQqCnk7H1X36oxRRFlbJGGThLtw==", + "requires": { + "keyborg": "^2.0.0", + "tslib": "^2.3.1" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, + "tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5846,6 +8180,12 @@ "punycode": "^2.1.0" } }, + "use-disposable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.1.tgz", + "integrity": "sha512-5Sle1XEmK3lw3xyGqeIY7UKkiUgF+TxwUty7fTsqM5D5AxfQfo2ft+LY9xKCA+W5YbaBFbOkWfQsZY/y5JhInA==", + "requires": {} + }, "vite": { "version": "4.3.8", "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.8.tgz", diff --git a/package.json b/package.json index 38a21da..dff689a 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,13 @@ "preview": "vite preview" }, "dependencies": { + "@fluentui/react-components": "^9.26.1", "axios": "^1.4.0", "react": "^18.2.0", + "react-calendar": "^4.6.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.11.2" + "react-router-dom": "^6.14.2", + "react-svg": "^16.1.19" }, "devDependencies": { "@types/react": "^18.0.28", diff --git a/src/App.css b/src/App.css index 74b5e05..c9b9a42 100644 --- a/src/App.css +++ b/src/App.css @@ -1,38 +1,180 @@ +:root { + --background: #b5b0d8; + --selected-purple: #857eb9; + --logo: #782eff; + --font: #fff; + --main: #5e63a3; + --background: #b5b0d8; + --background2: #cfcce8; + --white: #fff; + --selected: #857eb9; + --bar: #eee; + --darkpurple: #464071; + --textpurple: #4c438d; +} + .App { + color: var(--font); + margin: 0; + padding: 0; + width: 100%; + min-height: 100vh; + box-sizing: border-box; + display: flex; + flex-direction: column; +} + +.container { + margin: 0; + padding: 0; + min-height: 100vh; + max-width: 100vw; + background-color: var(--background); + color: var(--font); + display: flex; + flex-direction: column; + align-items: center; +} + +.button-primary { + text-transform: uppercase; + text-decoration: none; + color: var(--font), #fff; + font-weight: bold; + display: flex; + align-items: center; + justify-content: center; text-align: center; + gap: 10px; + min-width: 300px; + border: 2px solid rgba(0, 0, 0, 0.1); + height: 50px; + border-radius: 50px; + background: var(--selected-purple, #857eb9); + /* Shadow Button */ + overflow: hidden; + padding: 5px 15px; } -.App-logo { - height: 40vmin; - pointer-events: none; +.link { + color: var(--font), #fff; + text-decoration: none; } -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } +.link:visited { + color: var(--font), #fff; + text-decoration: none; } -.App-header { - background-color: #282c34; - min-height: 100vh; +.button-options { + text-transform: uppercase; + text-decoration: none; + color: var(--font), #fff; + font-weight: bold; + min-width: 200px; + border: 2px solid rgba(0, 0, 0, 0.1); + border-radius: 50px; + padding: 10px 30px; + + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background: var(--selected-purple, #857eb9); +} + +.mood-button { + text-transform: uppercase; + text-decoration: none; + background: var(--selected-purple, #857eb9); + color: var(--font), #fff; + font-weight: bold; + border: 2px solid rgba(0, 0, 0, 0.1); + border-radius: 50px; + padding: 10px 30px; + + display: flex; + align-items: center; + justify-content: center; + text-align: center; +} + +.modal-menu { + width: 163px; + height: 201px; + flex-shrink: 0; +} + +.form { display: flex; flex-direction: column; +} + +.flex-center { + flex-direction: column; + display: flex; + align-items: center; + justify-content: center; + text-align: justify; +} + +.page-header { + font-size: 2rem; + display: flex; + align-items: center; + justify-content: center; +} + +.logo-container { + height: 320px; + width: 300px; + display: flex; align-items: center; justify-content: center; - font-size: calc(10px + 2vmin); - color: white; } -.App-link { - color: #61dafb; +.logo-image { + height: 100%; + width: 100%; + object-fit: cover; } -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } +.error-message { + display: flex; + justify-content: center; +} + +.back-link { + position: absolute; + top: 40px; + left: 30px; +} + +.logout-main { + position: absolute; + top: 10px; + right: 5px; + border: 2px solid var(--selected-purple, #857eb9); + background-color: var(--selected-purple, #857eb9); + border-radius: 50%; + height: 50px; + width: 50px; + display: flex; + align-items: center; + justify-content: center; +} + +.back-link-dark { + position: absolute; + top: 60px; + left: 30px; + height: 40px; + width: 45px; + border: 5px solid #857eb9; + background-color: #857eb9; + border-radius: 50%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; } diff --git a/src/App.jsx b/src/App.jsx index fcd1704..4b0baca 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,43 +1,132 @@ -import "./App.css"; import { Routes, Route } from "react-router-dom"; -import Navbar from "./components/Navbar"; -import HomePage from "./pages/HomePage"; -import ProjectListPage from "./pages/ProjectListPage"; -import ProjectDetailsPage from "./pages/ProjectDetailsPage"; -import EditProjectPage from "./pages/EditProjectPage"; +import { FluentProvider, teamsLightTheme } from "@fluentui/react-components"; +import "./App.css"; +import * as CONSTS from "./utils/consts"; +import * as PATHS from "./utils/paths"; -import SignupPage from "./pages/SignupPage"; -import LoginPage from "./pages/LoginPage"; -import IsPrivate from "./components/IsPrivate"; +// User Pages +import HomePage from "./pages/HomePage"; +import SignupPage from "./pages/Authentication/SignupPage"; +import LoginPage from "./pages/Authentication/LoginPage"; import IsAnon from "./components/IsAnon"; +import DashboardPage from "./pages/WelcomeAndDashboardPages/DashboardPage"; +import WelcomePage from "./pages/WelcomeAndDashboardPages/WelcomePage"; +import TalkPage from "./pages/TherapyPages/TalkPage"; +import UserProfilePage from "./pages//UserProfile/UserProfilePage"; +import ExercisesPage from "./pages/ContentPages/ExercisesPage"; +import CheckinPage from "./pages/CheckinPage"; +import AiTherapistPage from "./pages/TherapyPages/AiTherapistPage"; +import FindATherapistPage from "./pages/TherapyPages/FindATherapistPage"; +import TherapistDetailsPage from "./pages/TherapyPages/TherapistDetailsPage"; +import BreathExercisesPage from "./pages/ContentPages/BreathExercisesPage"; +import ArticlesPage from "./pages/ContentPages/ArticlesPage"; +import CalmcastPage from "./pages/ContentPages/CalmcastPage"; +import EditUserPage from "./pages/UserProfile/EditUserProfile"; +import BookingPage from "./pages/TherapyPages/BookingPage"; + +// Therapist Routes +import IsTherapist from "./components/IsTherapist"; +import TherapistLoginPage from "./pages/Authentication/TherapistLogin"; +import TherapistSignupPage from "./pages/Authentication/TherapistSignUp"; +import TherapistProfile from "./pages/TherapistProfile/TherapistProfilePage"; +import TherapistEditProfile from "./pages/TherapistProfile/TherapistEditProfile"; +import TherapySuccessPage from "./pages/TherapistProfile/TherapySuccessPage"; + +// Sample Component Setup +import DesignSamplePage from "./pages/DesignSamplePage"; +import ExamplePage from "./pages/ExamplePage"; +import FollowTheBreath from "./pages/ContentPages/FollowTheBreath"; function App() { return (
- - - - } /> - - } - /> - - } - /> - - } - /> - - } /> - } /> - - + + + {/* ADD AUTH ROUTES FOR PLACEHOLDER PAGES */} + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } + /> + } /> + } /> + } /> + } /> + } /> + + + {" "} + {" "} + + } + /> + + + {" "} + {" "} + + } + /> + + + {" "} + {" "} + + } + /> + + {" "} + {" "} + + } + /> + + {" "} + {" "} + + } + /> + + {" "} + + } + /> + + } /> + } + /> + + } /> + +
); } diff --git a/src/assets/emojis/dark/angry.svg b/src/assets/emojis/dark/angry.svg new file mode 100644 index 0000000..6597729 --- /dev/null +++ b/src/assets/emojis/dark/angry.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/emojis/dark/bad.svg b/src/assets/emojis/dark/bad.svg new file mode 100644 index 0000000..5092796 --- /dev/null +++ b/src/assets/emojis/dark/bad.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/cool.svg b/src/assets/emojis/dark/cool.svg new file mode 100644 index 0000000..d80f8f0 --- /dev/null +++ b/src/assets/emojis/dark/cool.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/dead.svg b/src/assets/emojis/dark/dead.svg new file mode 100644 index 0000000..54aa07d --- /dev/null +++ b/src/assets/emojis/dark/dead.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/excited.svg b/src/assets/emojis/dark/excited.svg new file mode 100644 index 0000000..25c4ae2 --- /dev/null +++ b/src/assets/emojis/dark/excited.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/happy.svg b/src/assets/emojis/dark/happy.svg new file mode 100644 index 0000000..ec8baab --- /dev/null +++ b/src/assets/emojis/dark/happy.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/love.svg b/src/assets/emojis/dark/love.svg new file mode 100644 index 0000000..4531a96 --- /dev/null +++ b/src/assets/emojis/dark/love.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/sad.svg b/src/assets/emojis/dark/sad.svg new file mode 100644 index 0000000..1a70c50 --- /dev/null +++ b/src/assets/emojis/dark/sad.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/shine.svg b/src/assets/emojis/dark/shine.svg new file mode 100644 index 0000000..2bd743e --- /dev/null +++ b/src/assets/emojis/dark/shine.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/sick.svg b/src/assets/emojis/dark/sick.svg new file mode 100644 index 0000000..840197c --- /dev/null +++ b/src/assets/emojis/dark/sick.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/smile.svg b/src/assets/emojis/dark/smile.svg new file mode 100644 index 0000000..5edecf6 --- /dev/null +++ b/src/assets/emojis/dark/smile.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/dark/what.svg b/src/assets/emojis/dark/what.svg new file mode 100644 index 0000000..96281b0 --- /dev/null +++ b/src/assets/emojis/dark/what.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/emojis/light/bad.svg b/src/assets/emojis/light/bad.svg new file mode 100644 index 0000000..807bf72 --- /dev/null +++ b/src/assets/emojis/light/bad.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/emojis/light/confused.svg b/src/assets/emojis/light/confused.svg new file mode 100644 index 0000000..74df6db --- /dev/null +++ b/src/assets/emojis/light/confused.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/emojis/light/cool.svg b/src/assets/emojis/light/cool.svg new file mode 100644 index 0000000..19cd2a7 --- /dev/null +++ b/src/assets/emojis/light/cool.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/emojis/light/dead.svg b/src/assets/emojis/light/dead.svg new file mode 100644 index 0000000..a93f268 --- /dev/null +++ b/src/assets/emojis/light/dead.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/emojis/light/excited.svg b/src/assets/emojis/light/excited.svg new file mode 100644 index 0000000..b29bd60 --- /dev/null +++ b/src/assets/emojis/light/excited.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/emojis/light/happy.svg b/src/assets/emojis/light/happy.svg new file mode 100644 index 0000000..056829b --- /dev/null +++ b/src/assets/emojis/light/happy.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/emojis/light/love.svg b/src/assets/emojis/light/love.svg new file mode 100644 index 0000000..2829d86 --- /dev/null +++ b/src/assets/emojis/light/love.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/emojis/light/sad.svg b/src/assets/emojis/light/sad.svg new file mode 100644 index 0000000..f177bbb --- /dev/null +++ b/src/assets/emojis/light/sad.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/emojis/light/shine.svg b/src/assets/emojis/light/shine.svg new file mode 100644 index 0000000..26f7580 --- /dev/null +++ b/src/assets/emojis/light/shine.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/emojis/light/sick.svg b/src/assets/emojis/light/sick.svg new file mode 100644 index 0000000..688864e --- /dev/null +++ b/src/assets/emojis/light/sick.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/emojis/light/smile.svg b/src/assets/emojis/light/smile.svg new file mode 100644 index 0000000..e488be7 --- /dev/null +++ b/src/assets/emojis/light/smile.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/emojis/light/unsure.svg b/src/assets/emojis/light/unsure.svg new file mode 100644 index 0000000..3355387 --- /dev/null +++ b/src/assets/emojis/light/unsure.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/graphs/graph.png b/src/assets/graphs/graph.png new file mode 100644 index 0000000..e2fb10c Binary files /dev/null and b/src/assets/graphs/graph.png differ diff --git a/src/assets/icons/dark/Play Button.png b/src/assets/icons/dark/Play Button.png new file mode 100644 index 0000000..f4b4717 Binary files /dev/null and b/src/assets/icons/dark/Play Button.png differ diff --git a/src/assets/icons/dark/chat.svg b/src/assets/icons/dark/chat.svg new file mode 100644 index 0000000..f528ff7 --- /dev/null +++ b/src/assets/icons/dark/chat.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/icons/dark/discover.svg b/src/assets/icons/dark/discover.svg new file mode 100644 index 0000000..9804632 --- /dev/null +++ b/src/assets/icons/dark/discover.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dark/euro.png b/src/assets/icons/dark/euro.png new file mode 100644 index 0000000..5f1139d Binary files /dev/null and b/src/assets/icons/dark/euro.png differ diff --git a/src/assets/icons/dark/exercise.svg b/src/assets/icons/dark/exercise.svg new file mode 100644 index 0000000..cf96c92 --- /dev/null +++ b/src/assets/icons/dark/exercise.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dark/family.svg b/src/assets/icons/dark/family.svg new file mode 100644 index 0000000..03a7b93 --- /dev/null +++ b/src/assets/icons/dark/family.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/dark/food.svg b/src/assets/icons/dark/food.svg new file mode 100644 index 0000000..8117c18 --- /dev/null +++ b/src/assets/icons/dark/food.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dark/friends.svg b/src/assets/icons/dark/friends.svg new file mode 100644 index 0000000..0424ad3 --- /dev/null +++ b/src/assets/icons/dark/friends.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dark/home.svg b/src/assets/icons/dark/home.svg new file mode 100644 index 0000000..5bf7cbd --- /dev/null +++ b/src/assets/icons/dark/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dark/location.png b/src/assets/icons/dark/location.png new file mode 100644 index 0000000..e7359e4 Binary files /dev/null and b/src/assets/icons/dark/location.png differ diff --git a/src/assets/icons/dark/music.svg b/src/assets/icons/dark/music.svg new file mode 100644 index 0000000..110509e --- /dev/null +++ b/src/assets/icons/dark/music.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dark/pause2.png b/src/assets/icons/dark/pause2.png new file mode 100644 index 0000000..24416a7 Binary files /dev/null and b/src/assets/icons/dark/pause2.png differ diff --git a/src/assets/icons/dark/profile.svg b/src/assets/icons/dark/profile.svg new file mode 100644 index 0000000..ba832e6 --- /dev/null +++ b/src/assets/icons/dark/profile.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/icons/dark/rectangle.png b/src/assets/icons/dark/rectangle.png new file mode 100644 index 0000000..dc90925 Binary files /dev/null and b/src/assets/icons/dark/rectangle.png differ diff --git a/src/assets/icons/dark/relaxation.svg b/src/assets/icons/dark/relaxation.svg new file mode 100644 index 0000000..17ba59a --- /dev/null +++ b/src/assets/icons/dark/relaxation.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/icons/dark/sleep.svg b/src/assets/icons/dark/sleep.svg new file mode 100644 index 0000000..41e73ef --- /dev/null +++ b/src/assets/icons/dark/sleep.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/icons/dark/sun.svg b/src/assets/icons/dark/sun.svg new file mode 100644 index 0000000..f0dc166 --- /dev/null +++ b/src/assets/icons/dark/sun.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dark/weather.svg b/src/assets/icons/dark/weather.svg new file mode 100644 index 0000000..105b2a4 --- /dev/null +++ b/src/assets/icons/dark/weather.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dark/work.svg b/src/assets/icons/dark/work.svg new file mode 100644 index 0000000..7ab7c93 --- /dev/null +++ b/src/assets/icons/dark/work.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/icons/light/back-button.svg b/src/assets/icons/light/back-button.svg new file mode 100644 index 0000000..b5ea908 --- /dev/null +++ b/src/assets/icons/light/back-button.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/light/exercise.svg b/src/assets/icons/light/exercise.svg new file mode 100644 index 0000000..ac24aa5 --- /dev/null +++ b/src/assets/icons/light/exercise.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/light/exhale.png b/src/assets/icons/light/exhale.png new file mode 100644 index 0000000..b6a92e4 Binary files /dev/null and b/src/assets/icons/light/exhale.png differ diff --git a/src/assets/icons/light/family.svg b/src/assets/icons/light/family.svg new file mode 100644 index 0000000..7d98fec --- /dev/null +++ b/src/assets/icons/light/family.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/light/food.svg b/src/assets/icons/light/food.svg new file mode 100644 index 0000000..232917f --- /dev/null +++ b/src/assets/icons/light/food.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/light/friends.svg b/src/assets/icons/light/friends.svg new file mode 100644 index 0000000..db42a73 --- /dev/null +++ b/src/assets/icons/light/friends.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/light/inhale.png b/src/assets/icons/light/inhale.png new file mode 100644 index 0000000..c603ecf Binary files /dev/null and b/src/assets/icons/light/inhale.png differ diff --git a/src/assets/icons/light/logout.png b/src/assets/icons/light/logout.png new file mode 100644 index 0000000..9174380 Binary files /dev/null and b/src/assets/icons/light/logout.png differ diff --git a/src/assets/icons/light/logoutsmall.png b/src/assets/icons/light/logoutsmall.png new file mode 100644 index 0000000..798f871 Binary files /dev/null and b/src/assets/icons/light/logoutsmall.png differ diff --git a/src/assets/icons/light/music.svg b/src/assets/icons/light/music.svg new file mode 100644 index 0000000..ed90c69 --- /dev/null +++ b/src/assets/icons/light/music.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/light/plus.svg b/src/assets/icons/light/plus.svg new file mode 100644 index 0000000..1d11a6f --- /dev/null +++ b/src/assets/icons/light/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/light/relaxation.svg b/src/assets/icons/light/relaxation.svg new file mode 100644 index 0000000..b8aa3bc --- /dev/null +++ b/src/assets/icons/light/relaxation.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/icons/light/sleep.svg b/src/assets/icons/light/sleep.svg new file mode 100644 index 0000000..0e6d796 --- /dev/null +++ b/src/assets/icons/light/sleep.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/icons/light/soundwaves.png b/src/assets/icons/light/soundwaves.png new file mode 100644 index 0000000..95623b7 Binary files /dev/null and b/src/assets/icons/light/soundwaves.png differ diff --git a/src/assets/icons/light/weather.svg b/src/assets/icons/light/weather.svg new file mode 100644 index 0000000..0a271b8 --- /dev/null +++ b/src/assets/icons/light/weather.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/light/work.svg b/src/assets/icons/light/work.svg new file mode 100644 index 0000000..34d6f4a --- /dev/null +++ b/src/assets/icons/light/work.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/icons/slider.svg b/src/assets/icons/slider.svg new file mode 100644 index 0000000..f96fe00 --- /dev/null +++ b/src/assets/icons/slider.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/logos/logohopeme.png b/src/assets/logos/logohopeme.png new file mode 100644 index 0000000..de6cd88 Binary files /dev/null and b/src/assets/logos/logohopeme.png differ diff --git a/src/assets/logos/logovector.svg b/src/assets/logos/logovector.svg new file mode 100644 index 0000000..f1b277d --- /dev/null +++ b/src/assets/logos/logovector.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/react.svg b/src/assets/logos/react.svg similarity index 100% rename from src/assets/react.svg rename to src/assets/logos/react.svg diff --git a/src/assets/logos/textlogo.png b/src/assets/logos/textlogo.png new file mode 100644 index 0000000..80295e9 Binary files /dev/null and b/src/assets/logos/textlogo.png differ diff --git a/src/assets/luna/anger.png b/src/assets/luna/anger.png new file mode 100644 index 0000000..8c70830 Binary files /dev/null and b/src/assets/luna/anger.png differ diff --git a/src/assets/luna/animate/inhaleexhale.svg b/src/assets/luna/animate/inhaleexhale.svg new file mode 100644 index 0000000..4336710 --- /dev/null +++ b/src/assets/luna/animate/inhaleexhale.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/luna/anxiety.png b/src/assets/luna/anxiety.png new file mode 100644 index 0000000..c39dec7 Binary files /dev/null and b/src/assets/luna/anxiety.png differ diff --git a/src/assets/luna/aokay.png b/src/assets/luna/aokay.png new file mode 100644 index 0000000..03f6fa8 Binary files /dev/null and b/src/assets/luna/aokay.png differ diff --git a/src/assets/luna/assist.png b/src/assets/luna/assist.png new file mode 100644 index 0000000..14b56f4 Binary files /dev/null and b/src/assets/luna/assist.png differ diff --git a/src/assets/luna/breathe.png b/src/assets/luna/breathe.png new file mode 100644 index 0000000..4209a8e Binary files /dev/null and b/src/assets/luna/breathe.png differ diff --git a/src/assets/luna/celebrate.png b/src/assets/luna/celebrate.png new file mode 100644 index 0000000..3a803f7 Binary files /dev/null and b/src/assets/luna/celebrate.png differ diff --git a/src/assets/luna/concern.png b/src/assets/luna/concern.png new file mode 100644 index 0000000..216e174 Binary files /dev/null and b/src/assets/luna/concern.png differ diff --git a/src/assets/luna/confused.png b/src/assets/luna/confused.png new file mode 100644 index 0000000..dd3ba77 Binary files /dev/null and b/src/assets/luna/confused.png differ diff --git a/src/assets/luna/despair.png b/src/assets/luna/despair.png new file mode 100644 index 0000000..fbd1da3 Binary files /dev/null and b/src/assets/luna/despair.png differ diff --git a/src/assets/luna/determined.png b/src/assets/luna/determined.png new file mode 100644 index 0000000..1372b4f Binary files /dev/null and b/src/assets/luna/determined.png differ diff --git a/src/assets/luna/encouragement.png b/src/assets/luna/encouragement.png new file mode 100644 index 0000000..1c31a05 Binary files /dev/null and b/src/assets/luna/encouragement.png differ diff --git a/src/assets/luna/frustrated.png b/src/assets/luna/frustrated.png new file mode 100644 index 0000000..bf2c737 Binary files /dev/null and b/src/assets/luna/frustrated.png differ diff --git a/src/assets/luna/happy.png b/src/assets/luna/happy.png new file mode 100644 index 0000000..93210e6 Binary files /dev/null and b/src/assets/luna/happy.png differ diff --git a/src/assets/luna/love.png b/src/assets/luna/love.png new file mode 100644 index 0000000..833a2d5 Binary files /dev/null and b/src/assets/luna/love.png differ diff --git a/src/assets/luna/meditate.png b/src/assets/luna/meditate.png new file mode 100644 index 0000000..e3ada13 Binary files /dev/null and b/src/assets/luna/meditate.png differ diff --git a/src/assets/luna/running.png b/src/assets/luna/running.png new file mode 100644 index 0000000..f8f8628 Binary files /dev/null and b/src/assets/luna/running.png differ diff --git a/src/assets/luna/welcome.png b/src/assets/luna/welcome.png new file mode 100644 index 0000000..0afc6e9 Binary files /dev/null and b/src/assets/luna/welcome.png differ diff --git a/src/assets/new/logo/Layer_1.png b/src/assets/new/logo/Layer_1.png new file mode 100644 index 0000000..c7d8281 Binary files /dev/null and b/src/assets/new/logo/Layer_1.png differ diff --git a/src/assets/new/logo/Logo.png b/src/assets/new/logo/Logo.png new file mode 100644 index 0000000..7a5920a Binary files /dev/null and b/src/assets/new/logo/Logo.png differ diff --git a/src/assets/new/luna/Frame 1.png b/src/assets/new/luna/Frame 1.png new file mode 100644 index 0000000..8ec8bb5 Binary files /dev/null and b/src/assets/new/luna/Frame 1.png differ diff --git a/src/assets/new/luna/Frame 10.png b/src/assets/new/luna/Frame 10.png new file mode 100644 index 0000000..4abd9a8 Binary files /dev/null and b/src/assets/new/luna/Frame 10.png differ diff --git a/src/assets/new/luna/Frame 11.png b/src/assets/new/luna/Frame 11.png new file mode 100644 index 0000000..0c9970c Binary files /dev/null and b/src/assets/new/luna/Frame 11.png differ diff --git a/src/assets/new/luna/Frame 12.png b/src/assets/new/luna/Frame 12.png new file mode 100644 index 0000000..29e3adf Binary files /dev/null and b/src/assets/new/luna/Frame 12.png differ diff --git a/src/assets/new/luna/Frame 13.png b/src/assets/new/luna/Frame 13.png new file mode 100644 index 0000000..b36a7c9 Binary files /dev/null and b/src/assets/new/luna/Frame 13.png differ diff --git a/src/assets/new/luna/Frame 14.png b/src/assets/new/luna/Frame 14.png new file mode 100644 index 0000000..7e09be7 Binary files /dev/null and b/src/assets/new/luna/Frame 14.png differ diff --git a/src/assets/new/luna/Frame 2.png b/src/assets/new/luna/Frame 2.png new file mode 100644 index 0000000..1a1ccff Binary files /dev/null and b/src/assets/new/luna/Frame 2.png differ diff --git a/src/assets/new/luna/Frame 3.png b/src/assets/new/luna/Frame 3.png new file mode 100644 index 0000000..f916f4c Binary files /dev/null and b/src/assets/new/luna/Frame 3.png differ diff --git a/src/assets/new/luna/Frame 4.png b/src/assets/new/luna/Frame 4.png new file mode 100644 index 0000000..69132d9 Binary files /dev/null and b/src/assets/new/luna/Frame 4.png differ diff --git a/src/assets/new/luna/Frame 5.png b/src/assets/new/luna/Frame 5.png new file mode 100644 index 0000000..c4f17bb Binary files /dev/null and b/src/assets/new/luna/Frame 5.png differ diff --git a/src/assets/new/luna/Frame 6.png b/src/assets/new/luna/Frame 6.png new file mode 100644 index 0000000..16258b1 Binary files /dev/null and b/src/assets/new/luna/Frame 6.png differ diff --git a/src/assets/new/luna/Frame 7.png b/src/assets/new/luna/Frame 7.png new file mode 100644 index 0000000..1e0afd9 Binary files /dev/null and b/src/assets/new/luna/Frame 7.png differ diff --git a/src/assets/new/luna/Frame 8.png b/src/assets/new/luna/Frame 8.png new file mode 100644 index 0000000..b3eea93 Binary files /dev/null and b/src/assets/new/luna/Frame 8.png differ diff --git a/src/assets/new/luna/Frame 9.png b/src/assets/new/luna/Frame 9.png new file mode 100644 index 0000000..ddaf941 Binary files /dev/null and b/src/assets/new/luna/Frame 9.png differ diff --git a/src/assets/playbutton.svg b/src/assets/playbutton.svg new file mode 100644 index 0000000..9e8a2a2 --- /dev/null +++ b/src/assets/playbutton.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/slider/1.png b/src/assets/slider/1.png new file mode 100644 index 0000000..6fd1317 Binary files /dev/null and b/src/assets/slider/1.png differ diff --git a/src/assets/slider/2.png b/src/assets/slider/2.png new file mode 100644 index 0000000..ed35276 Binary files /dev/null and b/src/assets/slider/2.png differ diff --git a/src/assets/slider/3.png b/src/assets/slider/3.png new file mode 100644 index 0000000..6972890 Binary files /dev/null and b/src/assets/slider/3.png differ diff --git a/src/assets/slider/4.png b/src/assets/slider/4.png new file mode 100644 index 0000000..a6491ee Binary files /dev/null and b/src/assets/slider/4.png differ diff --git a/src/assets/slider/5.png b/src/assets/slider/5.png new file mode 100644 index 0000000..4686c11 Binary files /dev/null and b/src/assets/slider/5.png differ diff --git a/src/assets/sounds/chill-out-sound.mp3 b/src/assets/sounds/chill-out-sound.mp3 new file mode 100644 index 0000000..47240e5 Binary files /dev/null and b/src/assets/sounds/chill-out-sound.mp3 differ diff --git a/src/assets/therapist.png b/src/assets/therapist.png new file mode 100644 index 0000000..26404ca Binary files /dev/null and b/src/assets/therapist.png differ diff --git a/src/components/AddProject.jsx b/src/components/AddProject/index.jsx similarity index 81% rename from src/components/AddProject.jsx rename to src/components/AddProject/index.jsx index 32b809e..733b79c 100644 --- a/src/components/AddProject.jsx +++ b/src/components/AddProject/index.jsx @@ -1,27 +1,24 @@ import { useState } from "react"; import axios from "axios"; -const API_URL = "http://localhost:5005"; +const API_URL = import.meta.env.VITE_LIVE_SERVER; function AddProject(props) { const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); - const handleSubmit = (e) => { e.preventDefault(); const requestBody = { title, description }; // Get the token from the localStorage - const storedToken = localStorage.getItem('authToken'); + const storedToken = localStorage.getItem("authToken"); // Send the token through the request "Authorization" Headers axios - .post( - `${API_URL}/api/projects`, - requestBody, - { headers: { Authorization: `Bearer ${storedToken}` } } - ) + .post(`${API_URL}/api/projects`, requestBody, { + headers: { Authorization: `Bearer ${storedToken}` }, + }) .then((response) => { // Reset the state setTitle(""); @@ -31,7 +28,6 @@ function AddProject(props) { .catch((error) => console.log(error)); }; - return (

Add Project

@@ -59,4 +55,4 @@ function AddProject(props) { ); } -export default AddProject; \ No newline at end of file +export default AddProject; diff --git a/src/components/AddTask.jsx b/src/components/AddTask/index.jsx similarity index 82% rename from src/components/AddTask.jsx rename to src/components/AddTask/index.jsx index 5ea69e4..2c785d9 100644 --- a/src/components/AddTask.jsx +++ b/src/components/AddTask/index.jsx @@ -1,16 +1,14 @@ import { useState } from "react"; import axios from "axios"; -const API_URL = "http://localhost:5005"; - +const API_URL = import.meta.env.VITE_LIVE_SERVER; function AddTask(props) { const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); - const handleSubmit = (e) => { - e.preventDefault(); + e.preventDefault(); // We need the project id when creating the new task const { projectId } = props; @@ -18,20 +16,18 @@ function AddTask(props) { const requestBody = { title, description, projectId }; // Get the token from the localStorage - const storedToken = localStorage.getItem('authToken'); + const storedToken = localStorage.getItem("authToken"); - // Send the token through the request "Authorization" Headers + // Send the token through the request "Authorization" Headers axios - .post( - `${API_URL}/api/tasks`, - requestBody, - { headers: { Authorization: `Bearer ${storedToken}` } } - ) + .post(`${API_URL}/api/tasks`, requestBody, { + headers: { Authorization: `Bearer ${storedToken}` }, + }) .then((response) => { // Reset the state to clear the inputs setTitle(""); setDescription(""); - + // Invoke the callback function coming through the props // from the ProjectDetailsPage, to refresh the project details props.refreshProject(); @@ -39,11 +35,10 @@ function AddTask(props) { .catch((error) => console.log(error)); }; - return (

Add New Task

- +
{ + setMood(e.target.value); + }; + + let step1 = { + 1: { + number: 1, + luna: luna1, + slider: slider1, + text: "Overwhelmed", + }, + 2: { + number: 2, + luna: luna2, + slider: slider2, + text: "Managing", + }, + 3: { + number: 3, + luna: luna3, + slider: slider3, + text: "A Okay", + }, + 4: { + number: 4, + luna: luna4, + slider: slider4, + text: "Happy", + }, + 5: { + number: 5, + luna: luna5, + slider: slider5, + text: "Ecstatic", + }, + }; + + const increaseMood = () => { + if (mood === 5) return; + setMood((prevMood) => prevMood + 1); + }; + const decreaseMood = () => { + if (mood === 1) return; + setMood((prevMood) => prevMood - 1); + }; + + return ( +
+
HOW ARE YOU FEELING TODAY?
+ +
+ mood slider +
+ +
+
+ {step1[mood].number} +
+
{step1[mood].text}
+
+ +
+ +
+ +
+ + + +
+
+ ); +} + +export default Checkin1; diff --git a/src/components/Checkin2/Checkin2.css b/src/components/Checkin2/Checkin2.css new file mode 100644 index 0000000..09b2761 --- /dev/null +++ b/src/components/Checkin2/Checkin2.css @@ -0,0 +1,24 @@ +.container-holder-checkin { + width: 85vw; + height: 90vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: justify; +} + +input[type="file"]::file-selector-button { + margin-right: 20px; + border: none; + background: #464071; + padding: 10px 20px; + border-radius: 10px; + color: #fff; + cursor: pointer; + transition: background 0.2s ease-in-out; +} + +input[type="file"]::file-selector-button:hover { + background: #464071; +} diff --git a/src/components/Checkin2/index.jsx b/src/components/Checkin2/index.jsx new file mode 100644 index 0000000..34b1248 --- /dev/null +++ b/src/components/Checkin2/index.jsx @@ -0,0 +1,55 @@ +import "../../App.css"; +import "./Checkin2.css"; +import { useState } from "react"; +import axios from "axios"; +import { AuthContext } from "../../context/auth.context"; +import { useCheckInContext } from "../../context/checkIn.context"; +import luna from "../../assets/luna/love.png"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +function Checkin2() { + const { imageState } = useCheckInContext(); + const [imageUrl, setImageUrl] = imageState; + + const authToken = localStorage.getItem("authToken"); + + const uploadImage = (e) => { + const configuration = { + headers: { + "Content-Type": `'multipart/form-data'`, + Authorization: `Bearer ${authToken}`, + }, + }; + console.log(authToken); + const data = new FormData(); + data.append("imageUrl", e.target.files[0]); + + axios + .post(`${API_URL}/checkIn/uploadImg`, data, configuration) + .then((res) => { + setImageUrl(res.data); + }) + .catch((error) => console.log(error)); + }; + + return ( +
+
+ Image Upload A picture speaks a thousand words. Upload a picture to + remind yourself how you're doing or what you're up to. Think of + something that sums up the moment - a meme, selfie, candid portrait, or + a rough and ready reel. + + uploadImage(e)} + /> +
+
+ ); +} + +export default Checkin2; diff --git a/src/components/Checkin3/Checkin3.css b/src/components/Checkin3/Checkin3.css new file mode 100644 index 0000000..002dc76 --- /dev/null +++ b/src/components/Checkin3/Checkin3.css @@ -0,0 +1,8 @@ +.checkin3 { + width: 100%; + height: 95%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} diff --git a/src/components/Checkin3/index.jsx b/src/components/Checkin3/index.jsx new file mode 100644 index 0000000..26e03ac --- /dev/null +++ b/src/components/Checkin3/index.jsx @@ -0,0 +1,58 @@ +import "../../App.css"; +import "./Checkin3.css"; +import axios from "axios"; +import { useCheckInContext } from "../../context/checkIn.context"; +import luna from "../../assets/luna/assist.png"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +function Checkin3() { + const { audioState } = useCheckInContext(); + const [audioUrl, setAudioUrl] = audioState; + + const authToken = localStorage.getItem("authToken"); + + const uploadAudio = (e) => { + const configuration = { + headers: { + "Content-Type": `'multipart/form-data'`, + Authorization: `Bearer ${authToken}`, + }, + }; + const data = new FormData(); + data.append("audioUrl", e.target.files[0]); + axios + .post(`${API_URL}/checkIn/uploadAudio`, data, configuration) + .then((res) => { + setAudioUrl(res.data); + }) + .catch((error) => console.log(error)); + }; + + return ( +
+
+
+

Audio Upload

+

+ Leave yourself a voice note to listen back to, reminding you of your + feelings and potentials triggers. +

+
+ + +
+ + uploadAudio(e)} + /> +
+
+
+ ); +} + +export default Checkin3; diff --git a/src/components/Checkin4/Checkin4.css b/src/components/Checkin4/Checkin4.css new file mode 100644 index 0000000..7ecfe71 --- /dev/null +++ b/src/components/Checkin4/Checkin4.css @@ -0,0 +1,14 @@ +.checkin4 { + width: 100%; + height: 95%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.last-step-text { + width: 80vw; + height: 20vh; + overflow-y: scroll; +} diff --git a/src/components/Checkin4/index.jsx b/src/components/Checkin4/index.jsx new file mode 100644 index 0000000..3b5f5d7 --- /dev/null +++ b/src/components/Checkin4/index.jsx @@ -0,0 +1,49 @@ +import "../../App.css"; +import "./Checkin4.css"; +import { useState } from "react"; +import axios from "axios"; +import { useCheckInContext } from "../../context/checkIn.context"; +import luna from "../../assets/luna/welcome.png"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +function Checkin4() { + const { diaryState } = useCheckInContext(); + const [diaryEntry, setDiaryEntry] = diaryState; + + const handleDiaryChange = (event) => { + const entry = event.target.value; + setDiaryEntry(entry); + }; + + return ( +
+
+

Diary

+

+ How are you feeling today? It's good to write your thoughts and + feelings down. +

+ + + +

+ Once you click the save button, you can find your check-in data in + your profile. +

+ +
+ +
+
+
+ ); +} + +export default Checkin4; diff --git a/src/components/Footer/Footer.css b/src/components/Footer/Footer.css new file mode 100644 index 0000000..5260fc3 --- /dev/null +++ b/src/components/Footer/Footer.css @@ -0,0 +1,38 @@ +.footer { + background-color: white; + display: flex; + width: 100vw; + height: 76px; + align-items: center; + justify-content: space-around; + color: var(--selected-purple, #857eb9); + position: fixed; + bottom: 0; +} + +.rectangle-menu { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 60px; + height: 60px; + flex-shrink: 0; + border-radius: 15px; + border: 1px solid var(--selected-purple, #857eb9); + background: var(--selected-purple, #857eb9); + box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.08); +} + +.footer-nav { + width: 15%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.footer-nav > a { + text-decoration: none; + color: var(--selected-purple, #857eb9); +} diff --git a/src/components/Footer/index.jsx b/src/components/Footer/index.jsx new file mode 100644 index 0000000..911b7aa --- /dev/null +++ b/src/components/Footer/index.jsx @@ -0,0 +1,52 @@ +import { ReactSVG } from "react-svg"; +import { Link } from "react-router-dom"; +import sun from "../../assets/icons/dark/sun.svg"; +import home from "../../assets/icons/dark/home.svg"; +import discover from "../../assets/icons/dark/discover.svg"; +import profile from "../../assets/icons/dark/profile.svg"; +import chat from "../../assets/icons/dark/chat.svg"; +import plus from "../../assets/icons/light/plus.svg"; +import "./Footer.css"; + +function Footer() { + return ( +
+
+ + + +
Home
+
+ +
+ + + + +
Exercises
+
+ +
+
+ +
+
+ +
+ + + +
Profile
+
+ +
+ + + +
Talk
+
+
+ ); +} + +export default Footer; diff --git a/src/components/IsAnon/IsAnon.css b/src/components/IsAnon/IsAnon.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/IsAnon.jsx b/src/components/IsAnon/index.jsx similarity index 64% rename from src/components/IsAnon.jsx rename to src/components/IsAnon/index.jsx index 0db0cdb..5ca640e 100644 --- a/src/components/IsAnon.jsx +++ b/src/components/IsAnon/index.jsx @@ -1,15 +1,16 @@ import { useContext } from "react"; -import { AuthContext } from "../context/auth.context"; +import { AuthContext } from "../../context/auth.context"; import { Navigate } from "react-router-dom"; +import Loading from "../Loading"; function IsAnon({ children }) { const { isLoggedIn, isLoading } = useContext(AuthContext); // If the authentication is still loading ⏳ - if (isLoading) return

Loading ...

; + if (isLoading) return ; if (isLoggedIn) { - // If the user is logged in, navigate to home page ❌ + // If the user is logged in, navigate to home page ❌ return ; } else { // If the user is not logged in, allow to see the page ✅ @@ -17,4 +18,4 @@ function IsAnon({ children }) { } } -export default IsAnon; \ No newline at end of file +export default IsAnon; diff --git a/src/components/IsPrivate.jsx b/src/components/IsPrivate/index.jsx similarity index 50% rename from src/components/IsPrivate.jsx rename to src/components/IsPrivate/index.jsx index 587faed..4078c73 100644 --- a/src/components/IsPrivate.jsx +++ b/src/components/IsPrivate/index.jsx @@ -1,20 +1,21 @@ import { useContext } from "react"; -import { AuthContext } from "../context/auth.context"; +import { AuthContext } from "../../context/auth.context"; import { Navigate } from "react-router-dom"; +import Loading from "../Loading"; function IsPrivate({ children }) { const { isLoggedIn, isLoading } = useContext(AuthContext); // If the authentication is still loading ⏳ - if (isLoading) return

Loading ...

; + if (isLoading) return ; if (!isLoggedIn) { - // If the user is not logged in ❌ - return ; + // If the user is not logged in ❌ + return ; } else { - // If the user is logged in, allow to see the page ✅ + // If the user is logged in, allow to see the page ✅ return children; } } -export default IsPrivate; \ No newline at end of file +export default IsPrivate; diff --git a/src/components/IsTherapist/index.jsx b/src/components/IsTherapist/index.jsx new file mode 100644 index 0000000..38cbdb9 --- /dev/null +++ b/src/components/IsTherapist/index.jsx @@ -0,0 +1,18 @@ +import { useContext } from "react"; +import { TherapistAuthContext } from "../../context/therapistAuth.context"; +import { Navigate } from "react-router-dom"; +import Loading from "../Loading"; + +function IsTherapist({ children }) { + const { isLoggedIn, isLoading } = useContext(TherapistAuthContext); + + if (isLoading) return ; + + if (!isLoggedIn) { + return ; + } else { + return children; + } +} + +export default IsTherapist; diff --git a/src/components/Loading/Loading.css b/src/components/Loading/Loading.css new file mode 100644 index 0000000..e40d0f7 --- /dev/null +++ b/src/components/Loading/Loading.css @@ -0,0 +1,7 @@ +.container.loading { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; +} diff --git a/src/components/Loading/index.jsx b/src/components/Loading/index.jsx new file mode 100644 index 0000000..888862a --- /dev/null +++ b/src/components/Loading/index.jsx @@ -0,0 +1,12 @@ +import { Spinner } from "@fluentui/react-components"; +import "../../App.css"; + +function Loading() { + return ( +
+ +
+ ); +} + +export default Loading; diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx deleted file mode 100644 index 2eca6a4..0000000 --- a/src/components/Navbar.jsx +++ /dev/null @@ -1,43 +0,0 @@ -import { Link } from "react-router-dom"; -import { useContext } from "react"; -import { AuthContext } from "../context/auth.context"; - -function Navbar() { - // Subscribe to the AuthContext to gain access to - // the values from AuthContext.Provider `value` prop - const { isLoggedIn, user, logOutUser } = useContext(AuthContext); - - return ( - - ); -} - -export default Navbar; diff --git a/src/components/Navbar/Navbar.css b/src/components/Navbar/Navbar.css new file mode 100644 index 0000000..0c28e9d --- /dev/null +++ b/src/components/Navbar/Navbar.css @@ -0,0 +1,19 @@ +.navbar { + top: 0; + height: 50px; + width: 100vw; + position: absolute; + display: flex; + flex-direction: column; + align-items: flex-end; + justify-content: center; +} + +.navbar-1 { + width: 100%; + margin: 0; + height: 100%; + display: flex; + align-items: center; + justify-content: space-between; +} diff --git a/src/components/Navbar/index.jsx b/src/components/Navbar/index.jsx new file mode 100644 index 0000000..433b80c --- /dev/null +++ b/src/components/Navbar/index.jsx @@ -0,0 +1,30 @@ +import { Button } from "@fluentui/react-components"; +import { Link } from "react-router-dom"; +import { useContext } from "react"; +import { AuthContext } from "../../context/auth.context"; +import logout from "../../assets/icons/light/logout.png"; +import "./Navbar.css"; +import "../../App.css"; + +function Navbar() { + // Subscribe to the AuthContext to gain access to + // the values from AuthContext.Provider `value` prop + const { isLoggedIn, user, logOutUser } = useContext(AuthContext); + + return ( + + ); +} + +export default Navbar; diff --git a/src/components/ProjectCard.jsx b/src/components/ProjectCard/index.jsx similarity index 100% rename from src/components/ProjectCard.jsx rename to src/components/ProjectCard/index.jsx diff --git a/src/components/TaskCard.jsx b/src/components/TaskCard/index.jsx similarity index 100% rename from src/components/TaskCard.jsx rename to src/components/TaskCard/index.jsx diff --git a/src/context/auth.context.jsx b/src/context/auth.context.jsx index d88ef1a..e15af6c 100644 --- a/src/context/auth.context.jsx +++ b/src/context/auth.context.jsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from "react"; import axios from "axios"; -const API_URL = "http://localhost:5005"; +const API_URL = import.meta.env.VITE_LIVE_SERVER; const AuthContext = React.createContext(); @@ -9,56 +9,54 @@ function AuthProviderWrapper(props) { const [isLoggedIn, setIsLoggedIn] = useState(false); const [isLoading, setIsLoading] = useState(true); const [user, setUser] = useState(null); - + const storeToken = (token) => { localStorage.setItem("authToken", token); - } - - const authenticateUser = () => { + }; + + const authenticateUser = () => { // Get the stored token from the localStorage const storedToken = localStorage.getItem("authToken"); - + // If the token exists in the localStorage if (storedToken) { // We must send the JWT token in the request's "Authorization" Headers - axios.get( - `${API_URL}/auth/verify`, - { headers: { Authorization: `Bearer ${storedToken}`} } - ) - .then((response) => { - // If the server verifies that JWT token is valid ✅ - const user = response.data; - // Update state variables - setIsLoggedIn(true); - setIsLoading(false); - setUser(user); - }) - .catch((error) => { - // If the server sends an error response (invalid token) ❌ - // Update state variables - setIsLoggedIn(false); - setIsLoading(false); - setUser(null); - }); - + axios + .get(`${API_URL}/auth/verify`, { + headers: { Authorization: `Bearer ${storedToken}` }, + }) + .then((response) => { + // If the server verifies that JWT token is valid ✅ + const user = response.data; + // Update state variables + setIsLoggedIn(true); + setIsLoading(false); + setUser(user); + }) + .catch((error) => { + // If the server sends an error response (invalid token) ❌ + // Update state variables + setIsLoggedIn(false); + setIsLoading(false); + setUser(null); + }); } else { // If the token is not available setIsLoggedIn(false); setIsLoading(false); setUser(null); } - } + }; const removeToken = () => { // Upon logout, remove the token from the localStorage localStorage.removeItem("authToken"); - } - + }; + const logOutUser = () => { removeToken(); authenticateUser(); - } - + }; useEffect(() => { // Run the function after the initial render, @@ -68,11 +66,18 @@ function AuthProviderWrapper(props) { return ( {props.children} - ) + ); } -export { AuthProviderWrapper, AuthContext }; \ No newline at end of file +export { AuthProviderWrapper, AuthContext }; diff --git a/src/context/checkIn.context.jsx b/src/context/checkIn.context.jsx new file mode 100644 index 0000000..0bb3e90 --- /dev/null +++ b/src/context/checkIn.context.jsx @@ -0,0 +1,26 @@ +import React, { createContext, useContext, useState } from "react"; + +const CheckInContext = React.createContext(); + +const useCheckInContext = () => useContext(CheckInContext); + +function CheckInProviderWrapper(props) { + const [mood, setMood] = useState(3); + const [imageUrl, setImageUrl] = useState(""); + const [audioUrl, setAudioUrl] = useState(""); + const [diaryEntry, setDiaryEntry] = useState(""); + const multipleValues = { + moodState: [mood, setMood], + imageState: [imageUrl, setImageUrl], + audioState: [audioUrl, setAudioUrl], + diaryState: [diaryEntry, setDiaryEntry], + }; + + return ( + + {props.children} + + ); +} + +export { CheckInProviderWrapper, CheckInContext, useCheckInContext }; diff --git a/src/context/therapistAuth.context.jsx b/src/context/therapistAuth.context.jsx new file mode 100644 index 0000000..ae51b0a --- /dev/null +++ b/src/context/therapistAuth.context.jsx @@ -0,0 +1,83 @@ +import React, { useState, useEffect } from "react"; +import axios from "axios"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +const TherapistAuthContext = React.createContext(); + +function TherapistAuthProviderWrapper(props) { + const [isLoggedIn, setIsLoggedIn] = useState(false); + const [isLoading, setIsLoading] = useState(true); + const [therapist, setTherapist] = useState(null); + + const storeToken = (token) => { + localStorage.setItem("authToken", token); + }; + + const authenticateTherapist = () => { + // Get the stored token from the localStorage + const storedToken = localStorage.getItem("authToken"); + + // If the token exists in the localStorage + if (storedToken) { + // We must send the JWT token in the request's "Authorization" Headers + axios + .get(`${API_URL}/therapist/verify`, { + headers: { Authorization: `Bearer ${storedToken}` }, + }) + .then((response) => { + // If the server verifies that JWT token is valid ✅ + const user = response.data; + // Update state variables + setIsLoggedIn(true); + setIsLoading(false); + setTherapist(therapist); + }) + .catch((error) => { + // If the server sends an error response (invalid token) ❌ + // Update state variables + setIsLoggedIn(false); + setIsLoading(false); + setTherapist(null); + }); + } else { + // If the token is not available + setIsLoggedIn(false); + setIsLoading(false); + setTherapist(null); + } + }; + + const removeToken = () => { + // Upon logout, remove the token from the localStorage + localStorage.removeItem("authToken"); + }; + + const logOutTherapist = () => { + removeToken(); + authenticateTherapist(); + }; + + useEffect(() => { + // Run the function after the initial render, + // after the components in the App render for the first time. + authenticateTherapist(); + }, []); + + return ( + + {props.children} + + ); +} + +export { TherapistAuthProviderWrapper, TherapistAuthContext }; diff --git a/src/index.css b/src/index.css index 0a7b486..631b35d 100644 --- a/src/index.css +++ b/src/index.css @@ -1,109 +1,8 @@ -body { - margin: 0; -} - -a { - list-style: none; - color: black; -} - -button, -select { - padding: 5px 10px; - min-width: 50px; - margin: 5px; - font-size: 18px; -} - -label { - width: 200px; - display: block; -} - -input, -textarea { - width: 200px; - padding: 10px; - display: inline-block; - margin: 10px; -} - -nav { - background: #515f7d; - color: white; - padding: 0px 20px; - box-shadow: 0px 1px 2px gray; - width: 100%; - margin-bottom: 15px; - padding: 5px; -} - -nav li { - list-style: none; - color: white; - font-size: 24px; - font-weight: 600; -} - -.card { - width: 400px; - padding: 10px; - box-shadow: 0px 2px 3px grey; - margin: 0 auto; - margin-bottom: 20px; - background: #94a7c8; - border-radius: 4px; -} - -.ProjectCard h3::after { - content: url("https://education-team-2020.s3.eu-west-1.amazonaws.com/web-dev/m3/icon-expand.png"); - margin-left: 5px; -} - -.EditProjectPage, -.AddProject, -.AddTask, -.SignupPage, -.LoginPage { - background: #f9eec3; - border: 1px solid grey; - box-shadow: 0px 2px 3px grey; - width: 400px; - text-align: center; - margin: 0 auto; - margin-bottom: 20px; - padding: 10px; - border-radius: 4px; -} - -.EditProjectPage { - background-color: rgb(239, 196, 88); -} - -.SignupPage, -.LoginPage { - background-color: #608dd5; -} - -.LoginPage { - background-color: #94a7c8; -} - -.EditProjectPage form, -.AddTask form, -.AddProject form, -.SignupPage form, -.LoginPage form { - display: flex; - flex-direction: column; - align-items: center; -} - -.AddTask button, -.AddProject button { - display: block; -} - -.TaskCard { - background-color: #dfeef9; +@media only screen and (max-width: 400px) { + body { + width: 100%; + margin: 0; + padding: 0; + background-color: var(--background); + } } diff --git a/src/main.jsx b/src/main.jsx index d11c600..d285c9f 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -5,6 +5,8 @@ import App from "./App"; import { BrowserRouter as Router } from "react-router-dom"; import { AuthProviderWrapper } from "./context/auth.context"; +import { TherapistAuthProviderWrapper } from "./context/therapistAuth.context"; +import { CheckInProviderWrapper } from "./context/checkIn.context"; const root = ReactDOM.createRoot(document.getElementById("root")); @@ -12,7 +14,11 @@ root.render( - + + + + + diff --git a/src/pages/Authentication/LoginPage/LoginPage.css b/src/pages/Authentication/LoginPage/LoginPage.css new file mode 100644 index 0000000..8952f3e --- /dev/null +++ b/src/pages/Authentication/LoginPage/LoginPage.css @@ -0,0 +1,14 @@ +.login-page-1 { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; + width: 99%; + height: 100vh; +} + +.form-flex { + display: flex; + flex-direction: column; + justify-content: space-around; +} diff --git a/src/pages/Authentication/LoginPage/index.jsx b/src/pages/Authentication/LoginPage/index.jsx new file mode 100644 index 0000000..c0276f5 --- /dev/null +++ b/src/pages/Authentication/LoginPage/index.jsx @@ -0,0 +1,113 @@ +import { + Button, + Input, + Toast, + Label, + Text, + Title1, + Link as UILink, +} from "@fluentui/react-components"; +import { useState, useContext } from "react"; +import axios from "axios"; +import { Link, useNavigate } from "react-router-dom"; +import { AuthContext } from "../../../context/auth.context"; +import luna from "../../../assets/luna/happy.png"; +import "../../../App.css"; +import "./LoginPage.css"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +function LoginPage(props) { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [errorMessage, setErrorMessage] = useState(undefined); + + const navigate = useNavigate(); + + const { storeToken, authenticateUser } = useContext(AuthContext); + + const handleEmail = (e) => setEmail(e.target.value); + const handlePassword = (e) => setPassword(e.target.value); + + const handleLoginSubmit = (e) => { + e.preventDefault(); + const requestBody = { email, password }; + + axios + .post(`${API_URL}/auth/login`, requestBody) + .then((response) => { + storeToken(response.data.authToken); + authenticateUser(); + navigate("/dashboard"); + }) + .catch((error) => { + const errorDescription = error.response.data.message; + setErrorMessage(errorDescription); + }); + }; + + return ( +
+
+
+ +
+
Welcome Back!
+
+ +
+ +
+ +
+ Email: + +
+ +
+ Password: + +
+
+ +
+ +

+ + {errorMessage && ( +
{errorMessage}
+ )} +
+ +
+ +
+ + + +

+
+ Not registered as a user yet? + + Register here + +
+
+
+
+ ); +} + +export default LoginPage; diff --git a/src/pages/Authentication/SignupPage/SignupPage.css b/src/pages/Authentication/SignupPage/SignupPage.css new file mode 100644 index 0000000..758294d --- /dev/null +++ b/src/pages/Authentication/SignupPage/SignupPage.css @@ -0,0 +1,8 @@ +.signup-page-1 { + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 99%; +} diff --git a/src/pages/Authentication/SignupPage/index.jsx b/src/pages/Authentication/SignupPage/index.jsx new file mode 100644 index 0000000..46ff179 --- /dev/null +++ b/src/pages/Authentication/SignupPage/index.jsx @@ -0,0 +1,125 @@ +import { + Button, + Input, + Toast, + Label, + Text, + Title1, + Link as UILink, +} from "@fluentui/react-components"; +import "./SignupPage.css"; +import "../../../App.css"; +import { useState, useContext } from "react"; +import { AuthContext } from "../../../context/auth.context"; +import { Link, useNavigate } from "react-router-dom"; +import luna from "../../../assets/luna/welcome.png"; +import logo from "../../../assets/logos/textlogo.png"; + +import axios from "axios"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +function SignupPage(props) { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [name, setName] = useState(""); + const [errorMessage, setErrorMessage] = useState(undefined); + + const navigate = useNavigate(); + + const { storeToken, authenticateUser } = useContext(AuthContext); + + const handleEmail = (e) => setEmail(e.target.value); + const handlePassword = (e) => setPassword(e.target.value); + const handleName = (e) => setName(e.target.value); + + const handleSignupSubmit = (e) => { + e.preventDefault(); + // Create an object representing the request body + const requestBody = { email, password, name }; + + // Make an axios request to the API + // If POST request is successful redirect to login page + // If the request resolves with an error, set the error message in the state + axios + .post(`${API_URL}/auth/signup`, requestBody) + .then((response) => { + storeToken(response.data.authToken); + authenticateUser(); + navigate("/welcome"); + }) + .catch((error) => { + const errorDescription = error.response.data.message; + setErrorMessage(errorDescription); + }); + }; + + return ( +
+
+
+
+ +
+
+ {" "} + Email: + +
+ +
+ {" "} + Password: + +
+ +
+ Username: + +
+ +
+

+ +
+
+ +

+
+ {errorMessage &&
{errorMessage}
} +
+ +

+
+ + Are you a therapist? + + +

+ +
+ Already have account? + + + Login here + +
+
+
+
+ ); +} + +export default SignupPage; diff --git a/src/pages/Authentication/TherapistLogin/TherapistLogin.css b/src/pages/Authentication/TherapistLogin/TherapistLogin.css new file mode 100644 index 0000000..4c133f1 --- /dev/null +++ b/src/pages/Authentication/TherapistLogin/TherapistLogin.css @@ -0,0 +1,18 @@ +.container.therapistlogin { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; + margin: 0; + padding: 0; +} + +.therapistlogin-1 { + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 99%; +} diff --git a/src/pages/Authentication/TherapistLogin/index.jsx b/src/pages/Authentication/TherapistLogin/index.jsx new file mode 100644 index 0000000..276e76e --- /dev/null +++ b/src/pages/Authentication/TherapistLogin/index.jsx @@ -0,0 +1,122 @@ +import { + Button, + Input, + Toast, + Label, + Text, + Title1, + Link as UILink, +} from "@fluentui/react-components"; +import { useState, useContext } from "react"; +import axios from "axios"; +import { Link, useNavigate } from "react-router-dom"; +import { TherapistAuthContext } from "../../../context/therapistAuth.context"; +import "./TherapistLogin.css"; +import "../../../App.css"; +import luna from "../../../assets/luna/welcome.png"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +function TherapistLoginPage(props) { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [errorMessage, setErrorMessage] = useState(undefined); + + const navigate = useNavigate(); + + const { storeToken, authenticateTherapist } = + useContext(TherapistAuthContext); + + const handleEmail = (e) => setEmail(e.target.value); + const handlePassword = (e) => setPassword(e.target.value); + + const handleLoginSubmit = (e) => { + e.preventDefault(); + const requestBody = { email, password }; + + axios + .post(`${API_URL}/therapist/login`, requestBody) + .then((response) => { + storeToken(response.data.authToken); + authenticateTherapist(); + navigate("/therapist/profile"); + }) + .catch((error) => { + const errorDescription = error.response.data.message; + setErrorMessage(errorDescription); + }); + }; + + return ( +
+
+
+
Welcome Back!
+
+ +
+ +
+ +
+
+ Email: + +
+ +
+ Password: + +
+ +

+ +
+ + +

+ + {errorMessage && ( +
{errorMessage}
+ )} + +

+
+
+ +
+ + + + +

+
+ {" "} + Don't have a professional account yet? + + {" "} + Register here + +
+
+
+
+ ); +} + +export default TherapistLoginPage; diff --git a/src/pages/Authentication/TherapistSignUp/TherapistSignUp.css b/src/pages/Authentication/TherapistSignUp/TherapistSignUp.css new file mode 100644 index 0000000..855cf68 --- /dev/null +++ b/src/pages/Authentication/TherapistSignUp/TherapistSignUp.css @@ -0,0 +1,22 @@ +.container.therapistsignup { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; + margin: 0; + padding: 0; +} + +.therapistsignup-1 { + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 99%; +} + +.therpist-reg-logo { + height: 200px; +} diff --git a/src/pages/Authentication/TherapistSignUp/index.jsx b/src/pages/Authentication/TherapistSignUp/index.jsx new file mode 100644 index 0000000..2050c7c --- /dev/null +++ b/src/pages/Authentication/TherapistSignUp/index.jsx @@ -0,0 +1,196 @@ +import { + Button, + Input, + Toast, + Label, + Text, + Title1, + Link as UILink, +} from "@fluentui/react-components"; +import { useState, useContext } from "react"; +import { AuthContext } from "../../../context/auth.context"; +import { Link, useNavigate } from "react-router-dom"; +import axios from "axios"; +import { TherapistAuthContext } from "../../../context/therapistAuth.context"; +import logo from "../../../assets/logos/textlogo.png"; +import "./TherapistSignUp.css"; +import "../../../App.css"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +function TherapistSignupPage(props) { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [name, setName] = useState(""); + const [location, setLocation] = useState(""); + const [price, setPrice] = useState(0); + const [languages, setLanguages] = useState([]); + const [availability, setAvailability] = useState([]); + const [approach, setApproach] = useState([]); + + const [errorMessage, setErrorMessage] = useState(undefined); + + const navigate = useNavigate(); + + const { storeToken, authenticateTherapist } = + useContext(TherapistAuthContext); + + const handleEmail = (e) => setEmail(e.target.value); + const handlePassword = (e) => setPassword(e.target.value); + const handleName = (e) => setName(e.target.value); + const handleLocation = (e) => setLocation(e.target.value); + const handlePrice = (e) => setPrice(e.target.value); + const handleLanguages = (e) => setLanguages(e.target.value.split(",")); + const handleAvailability = (e) => setAvailability(e.target.value.split(",")); + const handleApproach = (e) => setApproach(e.target.value.split(",")); + + const handleSignupSubmit = (e) => { + e.preventDefault(); + // Create an object representing the request body + const requestBody = { + email, + password, + name, + location, + price, + languages, + availability, + approach, + }; + + // Make an axios request to the API + // If POST request is successful redirect to login page + // If the request resolves with an error, set the error message in the state + axios + .post(`${API_URL}/therapist/signup`, requestBody) + .then((response) => { + console.log("JWT token", response.data.authToken); + + storeToken(response.data.authToken); + authenticateTherapist(); + navigate("/therapist/success"); + }) + .catch((error) => { + const errorDescription = error.response.data.message; + setErrorMessage(errorDescription); + }); + }; + + return ( +
+
+ + +
+
+ {" "} + Email: + +
+ +
+ {" "} + Password: + +
+ +
+ {" "} + Name: + +
+ +
+ {" "} + Location: + +
+ +
+ {" "} + Price per session: + +
+ +
+ {" "} + Languages Spoken: + +
+ +
+ {" "} + Availability: + +
+ +
+ {" "} + Approach: + +
+ +
+

+ +
+
+ +
+ {errorMessage &&
{errorMessage}
} +
+ +

+ + Are you looking for a therapist? + + +
+ Already have account? + + Login here. + +
+
+
+ ); +} + +export default TherapistSignupPage; diff --git a/src/pages/CheckinPage/CheckinPage.css b/src/pages/CheckinPage/CheckinPage.css new file mode 100644 index 0000000..b1b51f6 --- /dev/null +++ b/src/pages/CheckinPage/CheckinPage.css @@ -0,0 +1,56 @@ +.container.checkin { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; + margin: 0; + padding: 0; + width: 99vw; +} + +.checkin-1 { + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 99%; +} + +.nav-buttons { + height: 7vh; + width: 95vw; + display: flex; + justify-content: space-between; +} + +.nav-button { + text-transform: uppercase; + text-decoration: none; + color: var(--font), #fff; + font-size: 1.5rem; + min-width: 180px; + border: 2px solid rgba(0, 0, 0, 0.1); + border-radius: 50px; + padding: 10px 30px; + + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background: var(--selected-purple, #857eb9); +} + +.step-pages { + width: 99vw; + height: 70%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.nav-buttons-container { + height: 10%; +} diff --git a/src/pages/CheckinPage/index.jsx b/src/pages/CheckinPage/index.jsx new file mode 100644 index 0000000..7536fbd --- /dev/null +++ b/src/pages/CheckinPage/index.jsx @@ -0,0 +1,114 @@ +import * as React from "react"; +import { useState, useContext } from "react"; +import { Link } from "react-router-dom"; +import { ReactSVG } from "react-svg"; +import axios from "axios"; +import back from "../../assets/icons/light/back-button.svg"; +import Footer from "../../components/Footer"; +import "../../App.css"; +import "./CheckinPage.css"; +import { CheckInContext } from "../../context/checkIn.context"; +import Checkin1 from "../../components/Checkin1"; +import Checkin2 from "../../components/Checkin2"; +import Checkin3 from "../../components/Checkin3"; +import Checkin4 from "../../components/Checkin4"; + +const API_URL = import.meta.env.VITE_LIVE_SERVER; + +function CheckinPage(props) { + const authToken = localStorage.getItem("authToken"); + const [step, setStep] = useState(0); + const [successMessage, setSuccessMessage] = useState(false); + const [errorMessage, setErrorMessage] = useState(""); + + const { + moodState: [mood, setMood], + imageState: [imageUrl, setImageUrl], + audioState: [audioUrl, setAudioUrl], + diaryState: [diaryEntry, setDiaryEntry], + } = useContext(CheckInContext); + + const handleNext = () => { + if (step === 3) return; + setStep((prevStep) => prevStep + 1); + }; + + const handlePrev = () => { + if (step === 0) return; + setStep((prevStep) => prevStep - 1); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + const config = { + headers: { + Authorization: `Bearer ${authToken}`, + }, + }; + const checkInData = { + mood: mood, + imageUrl: imageUrl, + audioUrl: audioUrl, + diaryEntry: diaryEntry, + }; + console.log(checkInData); + axios + .post(`${API_URL}/checkIn/updateCheckIn`, checkInData, config) + .then((res) => { + console.log("Data saved: ", res.data); + setSuccessMessage(true); + setTimeout(() => { + setSuccessMessage(false); + }, 3000); + }) + .catch((error) => { + console.log(error.response); + const errorDescription = error.response.data.message; + setErrorMessage(errorDescription); + }); + }; + + return ( +
+
+ {step === 0 && } + {step === 1 && } + {step === 2 && } + {step === 3 && } +
+ {successMessage && ( +
Check-in saved successfully!
+ )} +
+
+ + + +
+
+ +
+
+ ); +} + +export default CheckinPage; diff --git a/src/pages/ContentPages/ArticlesPage/ArticlesPage.css b/src/pages/ContentPages/ArticlesPage/ArticlesPage.css new file mode 100644 index 0000000..97bfcb8 --- /dev/null +++ b/src/pages/ContentPages/ArticlesPage/ArticlesPage.css @@ -0,0 +1,15 @@ +.aricles-container { + display: flex; + flex-wrap: wrap; + padding-top: 7%; + justify-content: space-around; + height: 90vh; + width: 95vw; + overflow: hidden; +} + +.articles-2 { + overflow: hidden; + width: 100%; + height: 80%; +} diff --git a/src/pages/ContentPages/ArticlesPage/index.jsx b/src/pages/ContentPages/ArticlesPage/index.jsx new file mode 100644 index 0000000..adf4f42 --- /dev/null +++ b/src/pages/ContentPages/ArticlesPage/index.jsx @@ -0,0 +1,88 @@ +import * as React from "react"; +import Footer from "../../../components/Footer"; +import "../../../App.css"; +import "./ArticlesPage.css"; +import luna from "../../../assets/luna/welcome.png"; +import anxiety from "../../../assets/luna/concern.png"; +import depression from "../../../assets/luna/despair.png"; +import love from "../../../assets/luna/love.png"; +import running from "../../../assets/luna/determined.png"; +import mindfulness from "../../../assets/luna/meditate.png"; +import recovery from "../../../assets/luna/aokay.png"; +import { ReactSVG } from "react-svg"; +import back from "../../../assets/icons/light/back-button.svg"; +import { Link } from "react-router-dom"; + +function ArticlesPage() { + return ( +
+
+ + + + +
+
+ Anxiety

+
+ +
+ +
+
+ +
+
+ Depression

+
+ +
+ +
+
+ +
+
Love & Romance
+ +
+ +
+
+ +
+
+ Physical Welbeing

+
+ +
+ +
+
+ +
+
+ Mindfulness

+
+ +
+ +
+
+
+
+ Recovery

+
+ +
+ +
+
+
+ +
+
+
+ ); +} + +export default ArticlesPage; diff --git a/src/pages/ContentPages/BreathExercisesPage/BreathExercisesPage.css b/src/pages/ContentPages/BreathExercisesPage/BreathExercisesPage.css new file mode 100644 index 0000000..cc5fbd1 --- /dev/null +++ b/src/pages/ContentPages/BreathExercisesPage/BreathExercisesPage.css @@ -0,0 +1,60 @@ +.breath { + width: 100%; + height: 90vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.breath-1 { + height: 15%; + display: flex; + flex-direction: column; + justify-content: space-evenly; + font-weight: 800; +} + +.breath-2 { + width: 95vw; + height: 80%; + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} + +.breath-card { + height: 28%; + width: 45%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border-radius: 20%; + background: #eee; + box-shadow: 0px 4px 20px 0px rgba(0, 0, 0, 0.25); + overflow: hidden; +} + +.card-1 { + width: 60%; + height: 25%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: #464071; + font-weight: 700; +} + +.card-2 { + height: 70%; +} + +.mini-luna { + display: flex; + align-items: center; + max-width: 100%; + padding-top: 4%; + height: 80%; +} diff --git a/src/pages/ContentPages/BreathExercisesPage/index.jsx b/src/pages/ContentPages/BreathExercisesPage/index.jsx new file mode 100644 index 0000000..2ee8ba1 --- /dev/null +++ b/src/pages/ContentPages/BreathExercisesPage/index.jsx @@ -0,0 +1,107 @@ +import * as React from "react"; +import { ReactSVG } from "react-svg"; +import back from "../../../assets/icons/light/back-button.svg"; +import { Link } from "react-router-dom"; +import Footer from "../../../components/Footer"; +import "../../../App.css"; +import "./BreathExercisesPage.css"; +import anxiety from "../../../assets/luna/anxiety.png"; +import anger from "../../../assets/luna/anger.png"; +import irritation from "../../../assets/luna/frustrated.png"; +import sadness from "../../../assets/luna/despair.png"; +import mindfulness from "../../../assets/luna/meditate.png"; +import worry from "../../../assets/luna/concern.png"; + +function BreathExercisesPage() { + return ( +
+
+
+ + + + +
What would you like help with today?
+
+ +
+
+
+ Anxiety
3min
+
+ +
+ + + +
+
+ +
+
+ Anger
3min
+
+ +
+ + + +
+
+ +
+
+ Irritation
3min
+
+ +
+ + + +
+
+ +
+
+ Sadness
3min
+
+ +
+ + + +
+
+ +
+
+ Mindfulness
3min
+
+ +
+ + + +
+
+ +
+
+ Worry
3min
+
+ +
+ + + +
+
+
+
+ +
+
+ ); +} + +export default BreathExercisesPage; diff --git a/src/pages/ContentPages/CalmcastPage/CalmcastPage.css b/src/pages/ContentPages/CalmcastPage/CalmcastPage.css new file mode 100644 index 0000000..d73825e --- /dev/null +++ b/src/pages/ContentPages/CalmcastPage/CalmcastPage.css @@ -0,0 +1,48 @@ +.calmcast { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 99vw; + height: 90vh; +} + +.calmcast-1 { + width: 100%; + height: 25%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.calm-title { + margin-top: 5%; + font-weight: 700; +} + +.calmcast-2 { + width: 85%; + height: 15%; + display: flex; + align-items: center; + justify-content: center; + text-align: justify; +} + +.calmcast-3 { + width: 100%; + height: 25%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; +} + +.calmcast-4 { + width: 100%; + height: 20%; + display: flex; + align-items: center; + justify-content: center; +} diff --git a/src/pages/ContentPages/CalmcastPage/index.jsx b/src/pages/ContentPages/CalmcastPage/index.jsx new file mode 100644 index 0000000..6add364 --- /dev/null +++ b/src/pages/ContentPages/CalmcastPage/index.jsx @@ -0,0 +1,77 @@ +import * as React from "react"; +import { useState, useEffect } from "react"; +import { ReactSVG } from "react-svg"; +import back from "../../../assets/icons/light/back-button.svg"; +import { Link } from "react-router-dom"; +import Footer from "../../../components/Footer"; +import "../../../App.css"; +import "./CalmcastPage.css"; +import play from "../../../assets/icons/dark/Play Button.png"; +import progress from "../../../assets/slider/2.png"; +import soundwaves from "../../../assets/icons/light/soundwaves.png"; +import luna from "../../../assets/luna/breathe.png"; +import song from "../../../assets/sounds/chill-out-sound.mp3"; +import pause from "../../../assets/icons/dark/pause2.png"; + +function CalmcastPage() { + const [audio] = useState(new Audio(song)); + const [isPlaying, setIsPlaying] = useState(false); + + const playPause = () => { + if (isPlaying) { + audio.pause(); + } else { + audio.play(); + } + setIsPlaying(!isPlaying); + }; + + // useEffect hook to add a cleanup function + useEffect(() => { + return () => { + audio.pause(); // Pause the audio when the component unmounts + }; + }, [audio]); + + return ( +
+
+ + + + +
+
+ +
AUDIO
+
+ +
+
+ Relax and unwind with our daily curated calmcast. Every day we + choose a podcast, audio clip, or song to encourage you to think, + reflect, or unwind. +
+
+ +
+ soundwaves + 0:35 / 3:43 + play button +
+ +
+ {isPlaying ? ( + pause button + ) : ( + play button + )} +
+
+ +
+
+ ); +} + +export default CalmcastPage; diff --git a/src/pages/ContentPages/ExercisesPage/ExercisesPage.css b/src/pages/ContentPages/ExercisesPage/ExercisesPage.css new file mode 100644 index 0000000..55ac6b8 --- /dev/null +++ b/src/pages/ContentPages/ExercisesPage/ExercisesPage.css @@ -0,0 +1,61 @@ +.exercises { + display: flex; + flex-direction: column; + align-items: center; + width: 99vw; + height: 90vh; +} + +.main-container { + height: 100%; + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.ex-box-1 { + width: 100%; + height: 25%; + display: flex; + justify-content: space-around; +} + +.ex-box-2 { + width: 100%; + height: 40%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} + +.ex-box-3 { + width: 100%; + height: 25%; + display: flex; + align-items: flex-end; + justify-content: space-around; +} + +.hero-image { + height: 82%; +} + +.bubble { + width: 160px; + height: 160px; + flex-shrink: 0; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + text-transform: uppercase; + text-decoration: none; + background: var(--selected-purple, #857eb9); + border: 2px solid rgba(0, 0, 0, 0.4); + color: var(--font), #fff; + font-weight: bold; +} diff --git a/src/pages/ContentPages/ExercisesPage/index.jsx b/src/pages/ContentPages/ExercisesPage/index.jsx new file mode 100644 index 0000000..cb185c0 --- /dev/null +++ b/src/pages/ContentPages/ExercisesPage/index.jsx @@ -0,0 +1,49 @@ +import * as React from "react"; +import { Link } from "react-router-dom"; +import luna from "../../../assets/luna/determined.png"; +import Footer from "../../../components/Footer"; +import "../../../App.css"; +import "./ExercisesPage.css"; + +function ExercisesPage() { + return ( +
+
+
+
+ +
Breath Exercises
+ + + +
Inspiring Articles
+ +
+ +
+ +
What should we work on today?
+
+ +
+ +
Talk to Someone
+ + + +
Relaxing Audios
+ +
+
+ +
+
+
+ ); +} + +export default ExercisesPage; diff --git a/src/pages/ContentPages/FollowTheBreath/FollowTheBreath.css b/src/pages/ContentPages/FollowTheBreath/FollowTheBreath.css new file mode 100644 index 0000000..c17bbf0 --- /dev/null +++ b/src/pages/ContentPages/FollowTheBreath/FollowTheBreath.css @@ -0,0 +1,103 @@ +.follow-breath-container { + height: 99vh; + width: 99vw; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + overflow: hidden; +} + +.exhale { + color: #fff; + position: fixed; + top: 150px; + width: 80%; + font-size: 80px; + margin: 0 auto; + font-weight: 500; + opacity: 1; + animation: fadeInAndOut 8s ease-in-out infinite; +} + +.inhale { + color: #fff; + position: fixed; + bottom: 150px; + width: 80%; + opacity: 0; + animation: fadeOutAndIn 8s ease-in-out infinite; +} + +.anim-circle { + color: transparent; + width: 400px; + height: 400px; + border-radius: 50%; + background: rgba(133, 126, 185, 0.889); + animation: breathe 8s linear infinite; + display: flex; + align-items: center; + justify-content: center; + position: relative; +} + +.anim-circle::before, +.anim-circle::after { + content: attr(data-text); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 24px; + font-weight: bold; + opacity: 0; +} + +@keyframes breathe { + 0%, + 100% { + box-shadow: 0 0 0 15px rgba(133, 126, 185, 0.3), + 0 0 0 30px rgba(133, 126, 185, 0.3), 0 0 0 45px rgba(133, 126, 185, 0.3), + 0 0 0 60px rgba(133, 126, 185, 0.3), 0 0 0 75px rgba(133, 126, 185, 0.3); + .exhale { + opacity: 1; + } + + .inhale { + opacity: 0; + } + } + 50% { + box-shadow: 0 0 0 25px rgba(133, 126, 185, 0.3), + 0 0 0 50px rgba(133, 126, 185, 0.3), 0 0 0 75px rgba(133, 126, 185, 0.3), + 0 0 0 100px rgba(133, 126, 185, 0.3), 0 0 0 125px rgba(133, 126, 185, 0.3); + + .exhale { + opacity: 0; + } + .inhale { + opacity: 1; + } + } +} + +@keyframes fadeOutAndIn { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0; + } +} + +@keyframes fadeInAndOut { + 0%, + 100% { + opacity: 0; + } + 50% { + opacity: 1; + } +} diff --git a/src/pages/ContentPages/FollowTheBreath/index.jsx b/src/pages/ContentPages/FollowTheBreath/index.jsx new file mode 100644 index 0000000..de96396 --- /dev/null +++ b/src/pages/ContentPages/FollowTheBreath/index.jsx @@ -0,0 +1,41 @@ +import { ReactSVG } from "react-svg"; +import "./FollowTheBreath.css"; +import "../../../App.css"; +import { Link } from "react-router-dom"; +import luna from "../../../assets/luna/animate/inhaleexhale.svg"; +import inhale from "../../../assets/icons/light/inhale.png"; +import exhale from "../../../assets/icons/light/exhale.png"; +import back from "../../../assets/icons/light/back-button.svg"; + +function FollowTheBreath() { + return ( +
+
+ + + + +
+ + + +
+ +
+
+
+
+ ); +} + +export default FollowTheBreath; + +{ + /*
+

+ Come here to take a few minutes to unwind or catch your breath in + stressful situations. Breathe in as the circles expand, and breathe + out again as they contract.{" "} +

+
*/ +} diff --git a/src/pages/DesignSamplePage/DesignSample.css b/src/pages/DesignSamplePage/DesignSample.css new file mode 100644 index 0000000..3bb58ff --- /dev/null +++ b/src/pages/DesignSamplePage/DesignSample.css @@ -0,0 +1,33 @@ +.container.design-sample { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100vh; +} + +.design-sample-1 { + display: flex; + justify-content: flex-end; + flex-direction: column; + height: 55%; +} + +.design-sample-1 > img { + width: 308px; + height: 351px; +} + +.design-sample-2 { + display: flex; + justify-content: space-evenly; + align-items: center; + height: 20%; + width: 80%; +} + +.spin { + height: 25vh; + width: 50vw; + border: 2px solid red; +} diff --git a/src/pages/DesignSamplePage/index.jsx b/src/pages/DesignSamplePage/index.jsx new file mode 100644 index 0000000..a6f693a --- /dev/null +++ b/src/pages/DesignSamplePage/index.jsx @@ -0,0 +1,16 @@ +import * as React from "react"; +import { Link } from "react-router-dom"; +import { Text, Spinner } from "@fluentui/react-components"; +import "./DesignSample.css"; +import "../../App.css"; +import Loading from "../../components/Loading"; + +function DesignSamplePage() { + return ( +
+ +
+ ); +} + +export default DesignSamplePage; diff --git a/src/pages/EditProjectPage.jsx b/src/pages/EditProjectPage.jsx deleted file mode 100644 index e8b6c0c..0000000 --- a/src/pages/EditProjectPage.jsx +++ /dev/null @@ -1,98 +0,0 @@ -import { useState, useEffect } from "react"; -import axios from "axios"; -import { useNavigate, useParams } from 'react-router-dom'; - -const API_URL = "http://localhost:5005"; - -function EditProjectPage(props) { - const [title, setTitle] = useState(""); - const [description, setDescription] = useState(""); - - const navigate = useNavigate(); - const { projectId } = useParams(); - - - useEffect(() => { - // Get the token from the localStorage - const storedToken = localStorage.getItem('authToken'); - - // Send the token through the request "Authorization" Headers - axios - .get( - `${API_URL}/api/projects/${projectId}`, - { headers: { Authorization: `Bearer ${storedToken}` } } - ) - .then((response) => { - const oneProject = response.data; - setTitle(oneProject.title); - setDescription(oneProject.description); - }) - .catch((error) => console.log(error)); - - }, [projectId]); - - - const handleFormSubmit = (e) => { - e.preventDefault(); - const requestBody = { title, description }; - - // Get the token from the localStorage - const storedToken = localStorage.getItem('authToken'); - - // Send the token through the request "Authorization" Headers - axios - .put( - `${API_URL}/api/projects/${projectId}`, - requestBody, - { headers: { Authorization: `Bearer ${storedToken}` } } - ) - .then((response) => { - navigate(`/projects/${projectId}`) - }); - }; - - - const deleteProject = () => { - // Get the token from the localStorage - const storedToken = localStorage.getItem('authToken'); - - // Send the token through the request "Authorization" Headers - axios - .delete( - `${API_URL}/api/projects/${projectId}`, - { headers: { Authorization: `Bearer ${storedToken}` } } - ) - .then(() => navigate("/projects")) - .catch((err) => console.log(err)); - }; - - - return ( -
-

Edit the Project

- -
- - setTitle(e.target.value)} - /> - - -