diff --git a/package-lock.json b/package-lock.json index 1402a1c47..710f3bee4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@babel/core": "7.26.0", "@babel/runtime": "7.26.0", "@fluentui/react": "8.121.1", + "@fluentui/react-components": "9.55.1", "@fluentui/react-icons-mdl2": "1.3.76", "@microsoft/applicationinsights-react-js": "17.3.4", "@microsoft/applicationinsights-web": "3.3.3", @@ -3022,6 +3023,11 @@ "postcss": "^8.4" } }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -3146,6 +3152,36 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/devtools": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/devtools/-/devtools-0.2.1.tgz", + "integrity": "sha512-8PHJLbD6VhBh+LJ1uty/Bz30qs02NXCE5u8WpOhSewlYXUWl03GNXknr9AS2yaAWJEQaY27x7eByJs44gODBcw==", + "peerDependencies": { + "@floating-ui/dom": ">=1.5.4" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + }, "node_modules/@fluentui/date-time-utilities": { "version": "8.6.9", "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.6.9.tgz", @@ -3199,6 +3235,14 @@ "tslib": "^2.1.0" } }, + "node_modules/@fluentui/keyboard-keys": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.7.tgz", + "integrity": "sha512-vaQ+lOveQTdoXJYqDQXWb30udSfTVcIuKk1rV0X0eGAgcHeSDeP1HxMy+OgHOQZH3OiBH4ZYeWxb+tmfiDiygQ==", + "dependencies": { + "@swc/helpers": "^0.5.1" + } + }, "node_modules/@fluentui/merge-styles": { "version": "8.6.13", "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.6.13.tgz", @@ -3208,6 +3252,14 @@ "tslib": "^2.1.0" } }, + "node_modules/@fluentui/priority-overflow": { + "version": "9.1.13", + "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.13.tgz", + "integrity": "sha512-yDojVpkhBZTXOYExrCgW1GXbw3x9pYIS617xlNJIc2t06Cd3H32y2p51QXFt94sBmlVyAvPu7UKBHaq1Yw7u+w==", + "dependencies": { + "@swc/helpers": "^0.5.1" + } + }, "node_modules/@fluentui/react": { "version": "8.121.1", "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.121.1.tgz", @@ -3235,6 +3287,438 @@ "react-dom": ">=16.8.0 <19.0.0" } }, + "node_modules/@fluentui/react-accordion": { + "version": "9.5.7", + "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.5.7.tgz", + "integrity": "sha512-/pSBQE+5MCwo8Pme9MdHn279RUn66gtb16JrTgTL6HLsIJuWmx6+wcejSyTUjt+E6+SpVc97aSDsM88U9SS/zw==", + "dependencies": { + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-motion": "^9.6.0", + "@fluentui/react-motion-components-preview": "^0.2.0", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-alert": { + "version": "9.0.0-beta.124", + "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.124.tgz", + "integrity": "sha512-yFBo3B5H9hnoaXxlkuz8wRz04DEyQ+ElYA/p5p+Vojf19Zuta8DmFZZ6JtWdtxcdnnQ4LvAfC5OYYlzdReozPA==", + "dependencies": { + "@fluentui/react-avatar": "^9.6.29", + "@fluentui/react-button": "^9.3.83", + "@fluentui/react-icons": "^2.0.239", + "@fluentui/react-jsx-runtime": "^9.0.39", + "@fluentui/react-tabster": "^9.21.5", + "@fluentui/react-theme": "^9.1.19", + "@fluentui/react-utilities": "^9.18.10", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-aria": { + "version": "9.13.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.13.8.tgz", + "integrity": "sha512-OGd4LLW1LrdbCp+GkYLTRVX2IHZ/wnlOwHBX9VmQkY/FgeevDDGRH7HoXZRebmzDWHXzmjbyFxTO2QiJoF9zTQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-utilities": "^9.18.16", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-avatar": { + "version": "9.6.41", + "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.6.41.tgz", + "integrity": "sha512-FB9P/TJLfeZTOrRMFDbrVR6jgdOI4ueGFZea/BeEHOdXKzqSAmXhGlAKl7Mkev4mKhjeT5uEjuNEs7tqGVUs6A==", + "dependencies": { + "@fluentui/react-badge": "^9.2.44", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-popover": "^9.9.23", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-tooltip": "^9.4.41", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-badge": { + "version": "9.2.44", + "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.44.tgz", + "integrity": "sha512-c/CF17QDAZ2/+atCxNgqpqUKvbqTLViNwro8FP9LsLfSVN9dNcAknLhPi8VMHjcdCUNTItm3gv4/ZFqnrQbURQ==", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-breadcrumb": { + "version": "9.0.41", + "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.0.41.tgz", + "integrity": "sha512-JQBMUMFb5xsNuKR4bQCum6ad2D3RZ75dFxEEfufp133zFr6bt/2a96Xmc3IxZ8KFDQaJj9zLA0tvaeWNOhliqQ==", + "dependencies": { + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-button": "^9.3.94", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-link": "^9.3.1", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-button": { + "version": "9.3.94", + "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.3.94.tgz", + "integrity": "sha512-8FepyrHjD0c9JQmvFP+N0zMyFW6jmLlwwtg8ThPCQJlInLZA4NrwEDmCl1cshyHBuTaSOBxuPGvTQHQetprMug==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-card": { + "version": "9.0.96", + "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.0.96.tgz", + "integrity": "sha512-Tj26e6n4aETiuGQsKDCp4aVMlx76mplFRH6cvmtttBM7Ej/gjBB3a8fBjW4rhbX5x28NwJyeLiXgKmU6O1pvrg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-text": "^9.4.26", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-carousel": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.2.0.tgz", + "integrity": "sha512-WcPQpOmcUWeFIScb0Y/yN+dkVyNCuKQ8CMHLM7UPp/OuoUfESO1kr6pnJtYtDjCMRUIB9lKw1wy5hDSLQAQ/vA==", + "dependencies": { + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-button": "^9.3.94", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "embla-carousel": "^8.3.0", + "embla-carousel-autoplay": "^8.3.0", + "embla-carousel-fade": "^8.3.0" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-checkbox": { + "version": "9.2.39", + "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.2.39.tgz", + "integrity": "sha512-6KFC7q9WvpPtMDKAowAfVsjhmQ1mUYeeKS2M/3N34hyZz5AbeFIHpczxxn7O0Q95bAeqy1+09lWbwwlJXRpwYw==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-label": "^9.1.77", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-combobox": { + "version": "9.13.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.13.10.tgz", + "integrity": "sha512-c3/UmhqbCZg8TySVT/utBovX2QDhR/ljZ3r8+wbKmkiaGU1JD0DL2nOJm9pX6guSQCnFNovKwwojykOBnpkv4Q==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-portal": "^9.4.37", + "@fluentui/react-positioning": "^9.15.10", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-components": { + "version": "9.55.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.55.1.tgz", + "integrity": "sha512-OuAQoNOAZerAk54DHnUqrSqauOn941oKbEp1PRqkFGjLCa8C78JRujTlLvoKo8osMSB8so6jyGTsfHJtLkpceA==", + "dependencies": { + "@fluentui/react-accordion": "^9.5.7", + "@fluentui/react-alert": "9.0.0-beta.124", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-avatar": "^9.6.41", + "@fluentui/react-badge": "^9.2.44", + "@fluentui/react-breadcrumb": "^9.0.41", + "@fluentui/react-button": "^9.3.94", + "@fluentui/react-card": "^9.0.96", + "@fluentui/react-carousel": "^9.2.0", + "@fluentui/react-checkbox": "^9.2.39", + "@fluentui/react-combobox": "^9.13.10", + "@fluentui/react-dialog": "^9.11.18", + "@fluentui/react-divider": "^9.2.76", + "@fluentui/react-drawer": "^9.5.18", + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-image": "^9.1.74", + "@fluentui/react-infobutton": "9.0.0-beta.102", + "@fluentui/react-infolabel": "^9.0.48", + "@fluentui/react-input": "^9.4.91", + "@fluentui/react-label": "^9.1.77", + "@fluentui/react-link": "^9.3.1", + "@fluentui/react-menu": "^9.14.18", + "@fluentui/react-message-bar": "^9.2.14", + "@fluentui/react-motion": "^9.6.0", + "@fluentui/react-overflow": "^9.1.32", + "@fluentui/react-persona": "^9.2.100", + "@fluentui/react-popover": "^9.9.23", + "@fluentui/react-portal": "^9.4.37", + "@fluentui/react-positioning": "^9.15.10", + "@fluentui/react-progress": "^9.1.89", + "@fluentui/react-provider": "^9.17.6", + "@fluentui/react-radio": "^9.2.34", + "@fluentui/react-rating": "^9.0.21", + "@fluentui/react-search": "^9.0.20", + "@fluentui/react-select": "^9.1.89", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-skeleton": "^9.1.18", + "@fluentui/react-slider": "^9.1.96", + "@fluentui/react-spinbutton": "^9.2.90", + "@fluentui/react-spinner": "^9.5.1", + "@fluentui/react-swatch-picker": "^9.1.12", + "@fluentui/react-switch": "^9.1.96", + "@fluentui/react-table": "^9.15.20", + "@fluentui/react-tabs": "^9.6.0", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-tag-picker": "^9.3.6", + "@fluentui/react-tags": "^9.3.20", + "@fluentui/react-teaching-popover": "^9.1.20", + "@fluentui/react-text": "^9.4.26", + "@fluentui/react-textarea": "^9.3.90", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-toast": "^9.3.58", + "@fluentui/react-toolbar": "^9.2.8", + "@fluentui/react-tooltip": "^9.4.41", + "@fluentui/react-tree": "^9.8.4", + "@fluentui/react-utilities": "^9.18.16", + "@fluentui/react-virtualizer": "9.0.0-alpha.86", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-context-selector": { + "version": "9.1.68", + "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.68.tgz", + "integrity": "sha512-PJwmvRevT/oyk/Gs0bnCb9UsQX/pXhM7lAHWq4ssnQLSmrdxJY/cwqAadQydJsA/itUy+FhgiEbPYGiEeB1GGA==", + "dependencies": { + "@fluentui/react-utilities": "^9.18.16", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0", + "scheduler": ">=0.19.0 <=0.23.0" + } + }, + "node_modules/@fluentui/react-dialog": { + "version": "9.11.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.11.18.tgz", + "integrity": "sha512-wTH3xfcnSZmUVQV5L0oM1MJqgT4uA/EN8Enf9lRZx+aeyjX7IYywxm9YcIkgn4nZtj66gHFFlcAaR8aJgGUTfw==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-motion": "^9.6.0", + "@fluentui/react-portal": "^9.4.37", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-divider": { + "version": "9.2.76", + "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.76.tgz", + "integrity": "sha512-r8+637gYDtffENjEUtGu4l9LTceOHF4oV7X8Wf9Cw1ZVHExDVXCnQ2QpNxDrR+tFW0oOHWNfvn6gJ0A/43acmw==", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-drawer": { + "version": "9.5.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.5.18.tgz", + "integrity": "sha512-umNPJcCBGEBXt6MKPaBKHIejjjR/zPbgme3gF3gxHVmelKdbPuLvjnaL0F83e4pSmV/f655/SIYdQ6Lve3ShrQ==", + "dependencies": { + "@fluentui/react-dialog": "^9.11.18", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-motion": "^9.6.0", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-field": { + "version": "9.1.78", + "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.1.78.tgz", + "integrity": "sha512-uYJ9rmSOtbaLZU4QYWsTjrvuqP631iynt7XZZEBIvyRcuwnzWvXEG3ohYbc3+vY06SQI7L/iWjkSc+ESwWyo/Q==", + "dependencies": { + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-label": "^9.1.77", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, "node_modules/@fluentui/react-focus": { "version": "8.9.15", "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.9.15.tgz", @@ -3267,6 +3751,18 @@ "react": ">=16.8.0 <19.0.0" } }, + "node_modules/@fluentui/react-icons": { + "version": "2.0.264", + "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.264.tgz", + "integrity": "sha512-Rhjx5vYmTzbe6q/50qBy9G4jpFwJQuBA4oAaluG2Pw9Cb50cz8O3ZQVRopNIi65xdAwuR0jTWPf869Iy1G6/sA==", + "dependencies": { + "@griffel/react": "^1.0.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.8.0 <19.0.0" + } + }, "node_modules/@fluentui/react-icons-mdl2": { "version": "1.3.76", "resolved": "https://registry.npmjs.org/@fluentui/react-icons-mdl2/-/react-icons-mdl2-1.3.76.tgz", @@ -3298,6 +3794,318 @@ "react-dom": ">=16.8.0 <19.0.0" } }, + "node_modules/@fluentui/react-image": { + "version": "9.1.74", + "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.74.tgz", + "integrity": "sha512-O8Yl7NkIvqi878uGEBvyOCxmkEIBREqI5X2iEXLl0HsAnS72tE0UfWXO1jUwqqHImG415XN9HKyvYmCFQpnUPQ==", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-infobutton": { + "version": "9.0.0-beta.102", + "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.102.tgz", + "integrity": "sha512-3kA4F0Vga8Ds6JGlBajLCCDOo/LmPuS786Wg7ui4ZTDYVIMzy1yp2XuVcZniifBFvEp0HQCUoDPWUV0VI3FfzQ==", + "dependencies": { + "@fluentui/react-icons": "^2.0.237", + "@fluentui/react-jsx-runtime": "^9.0.36", + "@fluentui/react-label": "^9.1.68", + "@fluentui/react-popover": "^9.9.6", + "@fluentui/react-tabster": "^9.21.0", + "@fluentui/react-theme": "^9.1.19", + "@fluentui/react-utilities": "^9.18.7", + "@griffel/react": "^1.5.14", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-infolabel": { + "version": "9.0.48", + "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.0.48.tgz", + "integrity": "sha512-LsdFBfu9aBZ8GRZm4Q6jTrrnpG0p3KIpivB7bsp7lp4Mbea3gODJzBsklE4pMCMWd2Fug/4MTgv9ZlS1cj1y1A==", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-label": "^9.1.77", + "@fluentui/react-popover": "^9.9.23", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-input": { + "version": "9.4.91", + "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.4.91.tgz", + "integrity": "sha512-fZOftICkuT+efuw1c6qfqWK5O9UCE86ERCNli3GiQRxxEj/lOZkBx1QUoKoJZkXHXvy+lLIIAT5cyLBKPsmgOQ==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-jsx-runtime": { + "version": "9.0.45", + "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.45.tgz", + "integrity": "sha512-MJg+Hdkdy8pXn+7nsLYQGSET4ypf+azQIHoFanhm2ZWOSjAcCKcOTsE33Z6KFxZ7dSUyH9njn7qK2Gt4YeW2MA==", + "dependencies": { + "@fluentui/react-utilities": "^9.18.16", + "@swc/helpers": "^0.5.1", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-jsx-runtime/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/@fluentui/react-label": { + "version": "9.1.77", + "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.77.tgz", + "integrity": "sha512-XdjdieXDnvc4oL4o35Zc0RaebcEbyXZ5NUMRZSRSTe/2Q4gvEbtY2DL5+kTERtUiYHZF96zdtuJy0zWSnkyFYg==", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-link": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.3.1.tgz", + "integrity": "sha512-wvy8Hluvho/TiA6OE+24yUejQ8qAGqsj88E56wT0wqYFrnUIN3sGZmyjiKVkhH1xzce7YrTAv4KJKhug1sWsuQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-menu": { + "version": "9.14.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.14.18.tgz", + "integrity": "sha512-rpVTAliTYjkDyzPIVdlGaBj7o/0SQfU+Vhrr9A1kdSJNWMzjbL4VcT3jJzOCwZ9c7ib9hHUAbmI3nVVJm/l24g==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-portal": "^9.4.37", + "@fluentui/react-positioning": "^9.15.10", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-message-bar": { + "version": "9.2.14", + "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.2.14.tgz", + "integrity": "sha512-ev2CCjau6lZ4R9Fd2O+DqMmk+g98kY4FDliD5MocCpVCL+oM6wjhWsRJ1O2joIyQgFKwufxj1fxZkk/YhZJBRA==", + "dependencies": { + "@fluentui/react-button": "^9.3.94", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-link": "^9.3.1", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "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.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-motion": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.6.0.tgz", + "integrity": "sha512-Jxiz1EXernadWbQ2oMBEzjmKqDeHZXuyeC8GO8ReXo+utupI/pWC1xtn3tQRcIs+2RnI812ertWULcl7n8adqA==", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-utilities": "^9.18.16", + "@swc/helpers": "^0.5.1", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-motion-components-preview": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.2.0.tgz", + "integrity": "sha512-VSGts+QsJl5hO/Zl7gk6KTXeYx9uFMnDx6Y1OOeIwf1HpQS4YlhCmrTOUpV/89z8W3sXgJZvFyTUxV5pf87UCg==", + "dependencies": { + "@fluentui/react-motion": "*", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-motion/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/@fluentui/react-overflow": { + "version": "9.1.32", + "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.1.32.tgz", + "integrity": "sha512-MG15Z4XZatJ/df+5wgsunBlZkdNKdOae5ZGWO98FH6YkmWqDCq0MTKMJu5ugEfHf9j5UUTgwKyMrJ/vHztXKUA==", + "dependencies": { + "@fluentui/priority-overflow": "^9.1.13", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-persona": { + "version": "9.2.100", + "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.2.100.tgz", + "integrity": "sha512-UkEa47KKFGDHHqFVaPilSNLPmPBweP6TjkpnMm94dsl8TiCaJpSaiPDVQ6iVbWMK92wjRdBv3OlbZmJroVqkDQ==", + "dependencies": { + "@fluentui/react-avatar": "^9.6.41", + "@fluentui/react-badge": "^9.2.44", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-popover": { + "version": "9.9.23", + "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.9.23.tgz", + "integrity": "sha512-1AOYiefOwqJ8+ctGvfOE4RjLHZGs8y2jlY3Liei0u7vVKiVIUaYP/cck7sCSbx4HCiqb1Prl60CTsJemmhuRkw==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-portal": "^9.4.37", + "@fluentui/react-positioning": "^9.15.10", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-portal": { + "version": "9.4.37", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.4.37.tgz", + "integrity": "sha512-wWjuCP/PAHvHFCyjONYyHE5CRh94WMLtVIAAGlN9GQRo3U2nbvG2V422Vlro1e4zYb2T8Kf2wJ9VFkffD1j7bQ==", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "use-disposable": "^1.0.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, "node_modules/@fluentui/react-portal-compat-context": { "version": "9.0.12", "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.12.tgz", @@ -3310,6 +4118,621 @@ "react": ">=16.14.0 <19.0.0" } }, + "node_modules/@fluentui/react-positioning": { + "version": "9.15.10", + "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.15.10.tgz", + "integrity": "sha512-5vWtRO4AEWz9lw5KK191arOWjXzGYffSU6lMtvWsprqwFhYeVcu/OCGNElZote7RFz1t9Pjsx8sVbbp7TlVbJA==", + "dependencies": { + "@floating-ui/devtools": "0.2.1", + "@floating-ui/dom": "^1.2.0", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-progress": { + "version": "9.1.89", + "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.1.89.tgz", + "integrity": "sha512-t31AJ1Z5rCiaFzgqRbZGYwW8IQ1W1AJBPkMQ8sO390GYrJyPXaBL3g3qW8fFFgp69sEQjoWENGjU5su6ovS5Xw==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-provider": { + "version": "9.17.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.17.6.tgz", + "integrity": "sha512-4+mUgtIenOoP3DAEvnhF9Ga6UxDxUSFsW8xtkFeavKWk8QznDU5b88qd3pLhMQzemSF3REgnNbQknzgbOyXMwg==", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/core": "^1.16.0", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-radio": { + "version": "9.2.34", + "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.2.34.tgz", + "integrity": "sha512-ZVlsEwNXjGA4vny8MjwA1/bGjAS1CI+svzfeeOCIN3SxVpr4R3Nme4bnOesi/fk7XBFWO2QGMOa1ycSawQ0x9Q==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-label": "^9.1.77", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-rating": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.0.21.tgz", + "integrity": "sha512-ijzxAbsXXcLy58+q/z8vf5pDEv1Atfen/PGkr+3XdwA132M2bVIyrIagXIvNh1t2WY1fbhs/vivVKyKcLbmJgQ==", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-search": { + "version": "9.0.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.0.20.tgz", + "integrity": "sha512-Alz3xUJNuOTl3ViCtSeQUisLpDhhVF0rUvfqn1+q691N8SQamBOOXEffnyIHrDIwnlCQm/wOIuC8PFmZqthv1w==", + "dependencies": { + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-input": "^9.4.91", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-select": { + "version": "9.1.89", + "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.1.89.tgz", + "integrity": "sha512-s/qhd56XIsC9nqstGDI3Fcnx1UMFlYktJn2lciPUbdNe2EkYSkYCZZqKUlECQH456dl/dJBdWF0oqwvCPxlGKA==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-shared-contexts": { + "version": "9.20.2", + "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.20.2.tgz", + "integrity": "sha512-vNsPDpjhZjkBBTjWOB7ddG/US89lsqAYvOi1ITb7YT5CLMVLzexewcAdSFmF8yrnc1bEOEW1BEH8aJoT0NAHnA==", + "dependencies": { + "@fluentui/react-theme": "^9.1.21", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-skeleton": { + "version": "9.1.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.1.18.tgz", + "integrity": "sha512-FgNJBCdGg2kudn2Og1qXp6fkMd5rVAdKKiTe2yBiaHRPBc3sGJ81DgeXHnfIXlzBoCjbc68DWV90HuK18ElrXQ==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-slider": { + "version": "9.1.96", + "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.1.96.tgz", + "integrity": "sha512-tg442xuE2CS44ezz8oTodLUC9yc+F4L59vQcLZ5OqEQGw+x/Vj+e/x0WDzHaEB4aomLeX5K0G+5gXTeq71pv8w==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-spinbutton": { + "version": "9.2.90", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.2.90.tgz", + "integrity": "sha512-kNoWf7FtkiPawwB5FUXqDp7eTVg3AqTi5yBLs5x5IQDPkdoiVRa6q/NpR+B+DZcg2FN2L2Iz87RHvwuJZ8/hpA==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-spinner": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.5.1.tgz", + "integrity": "sha512-8C7SFwyg72VocnlbAarWu6xT+1QmeCAVe17lUFjQzmDTmPrh3a06HIkvDuuKEYtpyAY3h4m3vXP5azIbnEqjiw==", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-label": "^9.1.77", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-swatch-picker": { + "version": "9.1.12", + "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.1.12.tgz", + "integrity": "sha512-BMUmGW15OyqEKWPdT8Vy/WodqAKpPCGGbMWSNjFvwYPTVwSKLiIRYkC5UsX236CaN0M4z1kI+UKl447+urJH2A==", + "dependencies": { + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-switch": { + "version": "9.1.96", + "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.1.96.tgz", + "integrity": "sha512-x2MZ5Bqm/XOTq9Ce8i2Be8ZZIcAlxJBq66ZFONwFxA3eyZ1Eq1wxg84BCUFogLL/CbzsgW3WQrRvQhIV9OymLQ==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-label": "^9.1.77", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-table": { + "version": "9.15.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.15.20.tgz", + "integrity": "sha512-9knCGNU69PlUCy5WDRa4S50HsoFklI8pgTLtui4IwnXCcsmXl57wv8EjzH89qSsp8ZSgKBWaRyyPG3GQUOsCpg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-avatar": "^9.6.41", + "@fluentui/react-checkbox": "^9.2.39", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-radio": "^9.2.34", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tabs": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.6.0.tgz", + "integrity": "sha512-VGBJ5vPAJB2YO6p1tjIgB4KLdPZyXAJSv2NzjGzr7q/sQuO7IJVWo19RpJGkJfkWbupuCwwqEd41A5gpt/Kscg==", + "dependencies": { + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tabster": { + "version": "9.22.9", + "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.22.9.tgz", + "integrity": "sha512-Mnndzbo3SKbdSkn6LmtZpQvM0sFNW3ryo5ZXcCBjkQPPk2P1kAxGDxSYbFuWDCI2oWa/daJmDJr0IWxr0sQZuA==", + "dependencies": { + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "keyborg": "^2.6.0", + "tabster": "^8.2.0" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tag-picker": { + "version": "9.3.6", + "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.3.6.tgz", + "integrity": "sha512-dnqu+BzWTDq7PmItoZoDDMoH4TQtALf60vOUn4x9R7wtqd6yRQaBuY3dFuHEpBBLL/+qPH1rKNfl4NreQqJSKQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-combobox": "^9.13.10", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-portal": "^9.4.37", + "@fluentui/react-positioning": "^9.15.10", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-tags": "^9.3.20", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tags": { + "version": "9.3.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.3.20.tgz", + "integrity": "sha512-NH5VnmyQXiIcZUctdft00xgvYqcqufogetknM37cEhOg6ERXKSnhT0iMxuznRYHTGZnP2hWbizrSagzHepG9Fw==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-avatar": "^9.6.41", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-teaching-popover": { + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.1.20.tgz", + "integrity": "sha512-aiAxMmTvYgDleCG+JUzm0wqN5+bFqFj5MPj/TGx5fL3htmFWC9t0EYvuf1A9JOzp5K9erecJuQvu4mYs1aBK7g==", + "dependencies": { + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-button": "^9.3.94", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-popover": "^9.9.23", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-text": { + "version": "9.4.26", + "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.26.tgz", + "integrity": "sha512-RRHlT8jwMhncf+EKGACl0ZF3bI5B4OLBIHfB5aoNUjREmqHeX64om8le1+ICk7gQx654eEx8v0PnAplnS1Dnlw==", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-textarea": { + "version": "9.3.90", + "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.3.90.tgz", + "integrity": "sha512-PNNmKUxjZ+pmjnn4TZ7P9xmTXIVvE1KTEIKG7fXRpybfv9RmWizKUdzKMN1yYYEvEFLlKLaGW4gmiWFMVyeC7Q==", + "dependencies": { + "@fluentui/react-field": "^9.1.78", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-theme": { + "version": "9.1.21", + "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.21.tgz", + "integrity": "sha512-xiENKBT1ttcGiOKW0Dv2YEKYg92r1hYd6O/VGCvlX/j5ecclZ7RJO/O94LWQ8YJ22EzEYHeSp4y//uJQV9iU1g==", + "dependencies": { + "@fluentui/tokens": "1.0.0-alpha.18", + "@swc/helpers": "^0.5.1" + } + }, + "node_modules/@fluentui/react-toast": { + "version": "9.3.58", + "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.3.58.tgz", + "integrity": "sha512-ELc0u3zZJcQXgfyGLhxKu4U9Y2OaE6uwWtw6+c1yPlh9meTnqlTJepfHsveJaD86aVSIWhHj5TzSeuSYWaQQdA==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-motion": "^9.6.0", + "@fluentui/react-portal": "^9.4.37", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-toolbar": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.2.8.tgz", + "integrity": "sha512-PmtIFyajVhvoEHoQfE5kgjREhIv/UhSe9PDPOWG6Xf4mF0LrpN1pQDRLbBTR/00G4GTUv41i7hRazpRsngaluQ==", + "dependencies": { + "@fluentui/react-button": "^9.3.94", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-divider": "^9.2.76", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-radio": "^9.2.34", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tooltip": { + "version": "9.4.41", + "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.4.41.tgz", + "integrity": "sha512-KHfCp8uNFSqMVw/7eZ1rqLpTm9eeypmHODh8v0ght7o1Aom/KvMQwiYa21lWnga383bMMSit5+WJtIyaHjpgdg==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-portal": "^9.4.37", + "@fluentui/react-positioning": "^9.15.10", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-tree": { + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.8.4.tgz", + "integrity": "sha512-v4vNkOdOWKg37WsDVPkj9YVHUMPL7lKJR9E3q8d32V7bBQgWQ4jkapWUxFTIEacYvHW0+24ajFj8XvEbFjISzQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-aria": "^9.13.8", + "@fluentui/react-avatar": "^9.6.41", + "@fluentui/react-button": "^9.3.94", + "@fluentui/react-checkbox": "^9.2.39", + "@fluentui/react-context-selector": "^9.1.68", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-motion": "^9.6.0", + "@fluentui/react-motion-components-preview": "^0.2.0", + "@fluentui/react-radio": "^9.2.34", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-tabster": "^9.22.9", + "@fluentui/react-theme": "^9.1.21", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-utilities": { + "version": "9.18.16", + "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.18.16.tgz", + "integrity": "sha512-IXPD/TMsCcA5PVM4AvLT3Wgck/te7OaMj4OqDcVGciob+73MliScmXYz8ZwSIP1fxlo6CBPZo8mPZK8C6nkKQQ==", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.7", + "@fluentui/react-shared-contexts": "^9.20.2", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" + } + }, + "node_modules/@fluentui/react-virtualizer": { + "version": "9.0.0-alpha.86", + "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.86.tgz", + "integrity": "sha512-Ap+FC0+TdMek/oK3HJDnoiF4DZ4/eiMJRiCqWeBpOjUK6dM3nkplBQzgcJRTkHEYUo7PR0G82PxHr0n07lu2qQ==", + "dependencies": { + "@fluentui/react-jsx-runtime": "^9.0.45", + "@fluentui/react-shared-contexts": "^9.20.2", + "@fluentui/react-utilities": "^9.18.16", + "@griffel/react": "^1.5.22", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <19.0.0", + "@types/react-dom": ">=16.9.0 <19.0.0", + "react": ">=16.14.0 <19.0.0", + "react-dom": ">=16.14.0 <19.0.0" + } + }, "node_modules/@fluentui/react-window-provider": { "version": "2.2.28", "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.28.tgz", @@ -3359,6 +4782,14 @@ "react": ">=16.8.0 <19.0.0" } }, + "node_modules/@fluentui/tokens": { + "version": "1.0.0-alpha.18", + "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.18.tgz", + "integrity": "sha512-d7CpB7RJhPlv8r6OjKRsL4mu8dvSiwrGdQuZyRhDjhCa/5u0xSdCxLmwGu4HOTlr9sg9Gf7LbQe2shAlq2J21w==", + "dependencies": { + "@swc/helpers": "^0.5.1" + } + }, "node_modules/@fluentui/utilities": { "version": "8.15.17", "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.15.17.tgz", @@ -3375,6 +4806,39 @@ "react": ">=16.8.0 <19.0.0" } }, + "node_modules/@griffel/core": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.18.0.tgz", + "integrity": "sha512-3Dkn6f7ULeSzJ1wLyLfN1vc+v3q5shuEejeMe4XymBozQo0l35WIfH8FWcwB+Xrgip4fLLOy1p3sYN85gFGZxw==", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@griffel/style-types": "^1.2.0", + "csstype": "^3.1.3", + "rtl-css-js": "^1.16.1", + "stylis": "^4.2.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@griffel/react": { + "version": "1.5.25", + "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.25.tgz", + "integrity": "sha512-ZGiCdn71VIX56fd3AxM7ouCxgClPvunOFIpXxFKebGJ94/rdj4sIbahuI1QBUFuU4/bqUyD6QonjDEpFBl9ORw==", + "dependencies": { + "@griffel/core": "^1.18.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@griffel/style-types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.2.0.tgz", + "integrity": "sha512-x166MNw0vWe5l5qhinfNT4eyWOaP48iFzPyFOfIB0/BVidKTWsEe5PmqRJDDtrJFS3VHhd/tE0oM6tkEMh2tsg==", + "dependencies": { + "csstype": "^3.1.3" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -7912,9 +9376,9 @@ "dev": true }, "node_modules/csstype": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/d3-format": { "version": "1.4.5", @@ -8300,6 +9764,15 @@ "utila": "~0.4" } }, + "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/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -8450,6 +9923,27 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.57.tgz", "integrity": "sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==" }, + "node_modules/embla-carousel": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.3.1.tgz", + "integrity": "sha512-DutFjtEO586XptDn4cwvBJwsR/8fMa4jUk5Jk2g+/elKgu8mdn0Z2sx33g4JskvbLc1/6P8Xg4QlfELGJFcP5A==" + }, + "node_modules/embla-carousel-autoplay": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.3.1.tgz", + "integrity": "sha512-L8THF1AJJSQtlNa1wZ6lEKh/CiZssE3TsVFtabQNsS+pc1O1O/YTIYCC3khdQAztGMOBf3WfVDIY/4AIfQj3JQ==", + "peerDependencies": { + "embla-carousel": "8.3.1" + } + }, + "node_modules/embla-carousel-fade": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/embla-carousel-fade/-/embla-carousel-fade-8.3.1.tgz", + "integrity": "sha512-YUnb222xjkdRDtyC09X59GapaYB6P8baAEHy1rn2UQ0yqixa80kXhG74SoJ6wxLYsZOaw5fZQ2V25p04ltHE/w==", + "peerDependencies": { + "embla-carousel": "8.3.1" + } + }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -14227,6 +15721,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/keyborg": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.6.0.tgz", + "integrity": "sha512-o5kvLbuTF+o326CMVYpjlaykxqYP9DphFQZ2ZpgrvBouyvOxyEB7oqe8nOLFpiV5VCtz0D3pt8gXQYWpLpBnmA==" + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -17066,14 +18565,6 @@ "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-error-overlay": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", @@ -17128,6 +18619,21 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "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/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -17445,6 +18951,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-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -17628,6 +19142,14 @@ "node": ">=v12.22.7" } }, + "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/schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", @@ -18394,6 +19916,11 @@ "webpack": "^5.27.0" } }, + "node_modules/stylis": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", + "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==" + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -18435,6 +19962,15 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/tabster": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.2.0.tgz", + "integrity": "sha512-Gvplk/Yl/12aVFA6FPOqGcq31Qv8hbPfYO0N+6IxrRgRT6eSLsipT6gkZBYjyOwGsp6BD5XlZAuJgupfG/GHoA==", + "dependencies": { + "keyborg": "2.6.0", + "tslib": "^2.3.1" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -19187,6 +20723,17 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, + "node_modules/use-disposable": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.4.tgz", + "integrity": "sha512-j83t6AMLWUyb5zwlTDqf6dP9LezM9R0yTbI/b6olmdaGtCKQUe9pgJWV6dRaaQLcozypjIEp4EmZr2DkZGKLSg==", + "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/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", diff --git a/package.json b/package.json index d85b1bf12..a6dc71a8a 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "dependencies": { "@augloop/types-core": "file:packages/types-core-2.16.189.tgz", "@axe-core/webdriverjs": "4.10.0", + "@fluentui/react-components": "9.55.1", "@azure/msal-browser": "3.26.1", "@babel/core": "7.26.0", "@babel/runtime": "7.26.0", diff --git a/src/app/middleware/localStorageMiddleware.ts b/src/app/middleware/localStorageMiddleware.ts index 582b197f3..9b946c158 100644 --- a/src/app/middleware/localStorageMiddleware.ts +++ b/src/app/middleware/localStorageMiddleware.ts @@ -7,7 +7,8 @@ import { CURRENT_THEME } from '../services/graph-constants'; import { getUniquePaths } from '../services/reducers/collections-reducer.util'; import { CHANGE_THEME_SUCCESS, COLLECTION_CREATE_SUCCESS, - RESOURCEPATHS_ADD_SUCCESS, RESOURCEPATHS_DELETE_SUCCESS, SAMPLES_FETCH_SUCCESS + RESOURCEPATHS_ADD_SUCCESS, RESOURCEPATHS_DELETE_SUCCESS, + SAMPLES_FETCH_SUCCESS } from '../services/redux-constants'; import { saveToLocalStorage } from '../utils/local-storage'; diff --git a/src/app/services/graph-constants.ts b/src/app/services/graph-constants.ts index f12383595..6ad7511ac 100644 --- a/src/app/services/graph-constants.ts +++ b/src/app/services/graph-constants.ts @@ -32,4 +32,5 @@ export const ADMIN_CONSENT_DOC_LINK = 'https://learn.microsoft.com/en-us/graph/s // eslint-disable-next-line max-len export const CONSENT_TYPE_DOC_LINK = 'https://learn.microsoft.com/en-us/graph/api/resources/oauth2permissiongrant?view=graph-rest-1.0#:~:text=(eq%20only).-,consentType,-String' export const CURRENT_THEME='CURRENT_THEME'; -export const EXP_URL='https://default.exp-tas.com/exptas76/9b835cbf-9742-40db-84a7-7a323a77f3eb-gedev/api/v1/tas'; +export const EXP_URL='https://default.exp-tas.com/exptas76/9b835cbf-9742-40db-84a7-7a323a77f3eb-gedev/api/v1/tas' +export const BANNER_IS_VISIBLE = 'bannerIsVisible'; diff --git a/src/app/services/redux-constants.ts b/src/app/services/redux-constants.ts index b0c0cb624..bc4978e6a 100644 --- a/src/app/services/redux-constants.ts +++ b/src/app/services/redux-constants.ts @@ -56,3 +56,4 @@ export const REVOKE_SCOPES_PENDING = 'auth/revokeScopes/pending'; export const REVOKE_SCOPES_SUCCESS = 'auth/revokeScopes/fulfilled'; export const REVOKE_SCOPES_ERROR = 'auth/revokeScopes/rejected'; export const COLLECTION_CREATE_SUCCESS = 'collections/createCollection'; +export const SET_BANNER_STATE = 'banner/setBannerState'; diff --git a/src/app/views/App.tsx b/src/app/views/App.tsx index 12074bd98..ba1757a67 100644 --- a/src/app/views/App.tsx +++ b/src/app/views/App.tsx @@ -1,4 +1,5 @@ import { Announced, getTheme, ITheme, styled } from '@fluentui/react'; +import { FluentProvider, teamsHighContrastTheme, Theme, webDarkTheme, webLightTheme } from '@fluentui/react-components'; import { bindActionCreators, Dispatch } from '@reduxjs/toolkit'; import { Resizable } from 're-resizable'; import { Component } from 'react'; @@ -31,6 +32,7 @@ import { StatusMessages, TermsOfUseMessage } from './app-sections'; import { headerMessaging } from './app-sections/HeaderMessaging'; import { appStyles } from './App.styles'; import { classNames } from './classnames'; +import Notification from './common/banners/Notification'; import { KeyboardCopyEvent } from './common/copy-button/KeyboardCopyEvent'; import PopupsWrapper from './common/popups/PopupsWrapper'; import { createShareLink } from './common/share'; @@ -43,6 +45,7 @@ export interface IAppProps { theme?: ITheme; styles?: object; profile: object; + appTheme: string; graphExplorerMode: Mode; sidebarProperties: ISidebarProps; sampleQuery: IQuery; @@ -404,99 +407,113 @@ class App extends Component { this.removeFlexBasisProperty(); this.removeSidebarHeightProperty(); + const fluentV9Themes: Record= { + 'light': webLightTheme, + 'dark': webDarkTheme, + 'high-contrast': teamsHighContrastTheme + } return ( // @ts-ignore - - -
- - -
- {graphExplorerMode === Mode.Complete && ( - { - if (ref?.style?.width) { - this.resizeSideBar(ref.style.width); - } - }} - className={`ms-Grid-col ms-sm12 ms-md4 ms-lg4 ${sidebarWidth} resizable-sidebar`} - minWidth={'71'} - maxWidth={maxWidth} - enable={{ - right: true - }} - handleClasses={{ - right: classes.vResizeHandle - }} - bounds={'parent'} - size={{ - width: sideWidth, - height: '' - }} - > - - - )} - {graphExplorerMode === Mode.TryIt && + + + +
+ + +
+ {graphExplorerMode === Mode.Complete && ( + { + if (ref?.style?.width) { + this.resizeSideBar(ref.style.width); + } + }} + className={`ms-Grid-col ms-sm12 ms-md4 ms-lg4 ${sidebarWidth} resizable-sidebar`} + minWidth={'71'} + maxWidth={maxWidth} + enable={{ + right: true + }} + handleClasses={{ + right: classes.vResizeHandle + }} + bounds={'parent'} + size={{ + width: sideWidth, + height: '' + }} + > + + + )} + {graphExplorerMode === Mode.TryIt && headerMessaging(query)} - {displayContent && ( - - -
- -
-
-
- -
- + }} + > +
+
- - - )} -
-
- + +
+ +
+
+
+ +
+ +
+
+ + )} +
+
+ +
-
- - - -
-
+ + + + + +
); } } diff --git a/src/app/views/classnames.ts b/src/app/views/classnames.ts index 16766feb7..49d8c49f5 100644 --- a/src/app/views/classnames.ts +++ b/src/app/views/classnames.ts @@ -9,4 +9,4 @@ interface IClassNames { export function classNames({ styles, theme }: IClassNames): any { const getClassNames = classNamesFunction(); return getClassNames(styles, theme); -} +} \ No newline at end of file diff --git a/src/app/views/common/banners/Notification.styles.ts b/src/app/views/common/banners/Notification.styles.ts new file mode 100644 index 000000000..08709d734 --- /dev/null +++ b/src/app/views/common/banners/Notification.styles.ts @@ -0,0 +1,31 @@ +import { makeStyles } from '@fluentui/react-components'; +import polygons from './bgPolygons.svg'; + +export const useNotificationStyles = makeStyles({ + container: { + padding: '8px', + marginBottom: '8px', + backgroundImage: `url(${polygons})`, + backgroundRepeat: 'no-repeat', + backgroundSize: 'contain', + backgroundPosition: 'right', + '&light': { + backgroundColor: '#E8EFFF', + color: '#000000' + }, + '&.dark': { + backgroundColor: '#1D202A', + color: '#ffffff' + }, + '&.highContrast': { + backgroundColor: '#0C3B5E', + color: '#ffffff' + } + }, + body: { + width: '100%', + '@media (min-width: 720px)': { + width: '70%' + } + } +}); diff --git a/src/app/views/common/banners/Notification.tsx b/src/app/views/common/banners/Notification.tsx new file mode 100644 index 000000000..5f031ed8c --- /dev/null +++ b/src/app/views/common/banners/Notification.tsx @@ -0,0 +1,71 @@ +import { + Button, + Link, + MessageBar, + MessageBarActions, + MessageBarBody, + MessageBarTitle +} from '@fluentui/react-components'; +import { DismissRegular, OpenRegular } from '@fluentui/react-icons'; +import { useState } from 'react'; +import { useAppSelector } from '../../../../store'; +import { componentNames, eventTypes, telemetry } from '../../../../telemetry'; +import { BANNER_IS_VISIBLE } from '../../../services/graph-constants'; +import { translateMessage } from '../../../utils/translate-messages'; +import { useNotificationStyles } from './Notification.styles'; + +interface NotificationProps { + header: string; + content: string; + link: string; + linkText: string; +} + +const handleOnClickLink = (e: React.MouseEvent)=>{ + telemetry.trackLinkClickEvent( + (e.currentTarget as HTMLAnchorElement).href, componentNames.GRAPH_EXPLORER_TUTORIAL_LINK) +} + +const Notification: React.FunctionComponent = (props: NotificationProps) => { + const styles = useNotificationStyles(); + const storageBanner = localStorage.getItem(BANNER_IS_VISIBLE); + const [isVisible, setIsVisible] = useState(storageBanner === null || storageBanner === 'true'); + const theme = useAppSelector(s => s.theme); + + const handleDismiss = () => { + telemetry.trackEvent(eventTypes.BUTTON_CLICK_EVENT, { + ComponentName: componentNames.NOTIFICATION_BANNER_DISMISS_BUTTON + }); + localStorage.setItem(BANNER_IS_VISIBLE, 'false'); + setIsVisible(false); + }; + + if (!isVisible) { + return null; + } + + return ( + + + {props.header}

+ {props.content}{' '} + {props.linkText} +
+ } + /> + } + /> +
+ ); +}; + +export default telemetry.trackReactComponent(Notification, componentNames.NOTIFICATION_COMPONENT) \ No newline at end of file diff --git a/src/app/views/common/banners/bgPolygons.svg b/src/app/views/common/banners/bgPolygons.svg new file mode 100644 index 000000000..46b0df881 --- /dev/null +++ b/src/app/views/common/banners/bgPolygons.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/views/common/banners/index.ts b/src/app/views/common/banners/index.ts new file mode 100644 index 000000000..d28e09853 --- /dev/null +++ b/src/app/views/common/banners/index.ts @@ -0,0 +1,5 @@ +import Notification from './Notification' + +export default { + Notification +} \ No newline at end of file diff --git a/src/custom.d.ts b/src/custom.d.ts new file mode 100644 index 000000000..eed6a3df6 --- /dev/null +++ b/src/custom.d.ts @@ -0,0 +1,5 @@ +// custom.d.ts +declare module '*.svg' { + const content: any; + export default content; +} diff --git a/src/messages/GE.json b/src/messages/GE.json index 8d17dc92e..a2587b5c0 100644 --- a/src/messages/GE.json +++ b/src/messages/GE.json @@ -509,6 +509,11 @@ "Revoking default scopes": "Revoking default scopes", "More request area items": "More request area items", "More response items": "More response area items", + "Banner notification 1 header": "New to Graph Explorer?", + "Banner notification 1 content": "Graph Explorer is a developer tool that let's you learn about Microsoft Graph APIs. Use Graph Explorer to try the APIs on the default sample tenant to explore capabilities.", + "Banner notification 1 link text": "Follow a step-by-step tutorial", + "Banner notification 1 link": "https://learn.microsoft.com/graph/graph-explorer/graph-explorer-overview?view=graph-rest-1.0", + "Dismiss banner": "Dismiss banner", "list of permissions": "The following is the list of least-privileged permissions required to call the operations in your API Collection. For more information, see ", "Preview permissions": "Preview permissions", "Select one scope": "Select one scope", diff --git a/src/telemetry/component-names.ts b/src/telemetry/component-names.ts index a8235a5e7..371d2ea02 100644 --- a/src/telemetry/component-names.ts +++ b/src/telemetry/component-names.ts @@ -27,6 +27,7 @@ export const SIGN_IN_WITH_OTHER_ACCOUNT_BUTTON = 'Sign in with other account but export const REVOKE_PERMISSION_CONSENT_BUTTON = 'Revoke consent to permissions button' export const UPLOAD_COLLECTIONS_BUTTON = 'Upload collections button'; export const FILTER_PERMISSIONS_BUTTON = 'Filter permissions button'; +export const NOTIFICATION_BANNER_DISMISS_BUTTON = 'Notification banner dismiss button' // List items export const HISTORY_LIST_ITEM = 'History list item'; @@ -75,6 +76,7 @@ export const GRAPH_TOOLKIT_PLAYGROUND_LINK = 'Graph toolkit playground link'; export const MICROSOFT_APIS_TERMS_OF_USE_LINK = 'Microsoft APIs terms of use link'; export const MICROSOFT_PRIVACY_STATEMENT_LINK = 'Microsoft privacy statement link'; export const MICROSOFT_GRAPH_API_REFERENCE_DOCS_LINK = 'Microsoft graph API reference docs link'; +export const GRAPH_EXPLORER_TUTORIAL_LINK = 'Graph Explorer Tutorial Link'; export const CODE_SNIPPET_LANGUAGES = { CSharp: { sdk: 'C# SDK link', doc: 'C# snippet docs link' @@ -111,3 +113,6 @@ export const FETCH_PERMISSIONS_ACTION = 'Fetch permissions action'; export const MONACO_EDITOR_FORMAT_JSON_ACTION = 'Monaco editor format JSON action'; export const LAUNCH_FEEDBACK_POPUP_ACTION = 'Launch feedback popup action'; export const DOWNLOAD_COLLECTION_PERMISSIONS_BUTTON = 'Download collection permissions button'; + +// Component names +export const NOTIFICATION_COMPONENT = 'Notification' diff --git a/src/telemetry/telemetry.ts b/src/telemetry/telemetry.ts index 454bb615f..1fb1eac83 100644 --- a/src/telemetry/telemetry.ts +++ b/src/telemetry/telemetry.ts @@ -9,9 +9,15 @@ import { } from '@microsoft/applicationinsights-web'; import { ComponentType } from 'react'; -import '../app/utils/string-operations'; +import variantService from '../app/services/variant-service'; +import { + getBrowserScreenSize, + getDeviceScreenScale +} from '../app/utils/device-characteristics-telemetry'; import { validateExternalLink } from '../app/utils/external-link-validation'; import { sanitizeQueryUrl } from '../app/utils/query-url-sanitization'; +import '../app/utils/string-operations'; +import { getVersion } from '../app/utils/version'; import { IQuery } from '../types/query-runner'; import { BUTTON_CLICK_EVENT, @@ -22,22 +28,16 @@ import { import { addCommonTelemetryItemProperties, filterRemoteDependencyData, + filterResizeObserverExceptions, filterTelemetryTypes, - sanitizeTelemetryItemUriProperty, - filterResizeObserverExceptions + sanitizeTelemetryItemUriProperty } from './filters'; import ITelemetry from './ITelemetry'; -import { getVersion } from '../app/utils/version'; -import { - getBrowserScreenSize, - getDeviceScreenScale -} from '../app/utils/device-characteristics-telemetry'; -import variantService from '../app/services/variant-service'; class Telemetry implements ITelemetry { private appInsights: ApplicationInsights; private config: any; - private reactPlugin: any; + private reactPlugin: ReactPlugin; constructor() { this.reactPlugin = new ReactPlugin(); @@ -81,10 +81,10 @@ class Telemetry implements ITelemetry { this.appInsights.trackException({ error, severityLevel, properties }); } - public trackReactComponent( - ComponentToTrack: ComponentType, + public trackReactComponent( + ComponentToTrack: ComponentType, componentName?: string - ): ComponentType { + ): ComponentType { return withAITracking(this.reactPlugin, ComponentToTrack, componentName); } @@ -136,7 +136,7 @@ class Telemetry implements ITelemetry { }; } - private getInstrumentationKey() { + private getInstrumentationKey(): string { return ( (window as any).InstrumentationKey || process.env.REACT_APP_INSTRUMENTATION_KEY ||