Repository: oliverschwendener/ueli
Pull request #1403 (2025-03-31 23:22:57)

insert nameTranslation() to Base64, UuidGen
It is a great app with multilingual support.
However, there were a few places where the translation function was not implemented.
I have added implementation where I can fix it quickly.

oliverschwendener: Please make sure that all commits are signed, as stated in the [contribution guidelines](https://github.com/oliverschwendener/ueli/blob/main/CONTRIBUTING.md#commit-signing), otherwise we won't merge this PR.
MorimotoShimei: @oliverschwendener 
Sorry, added my signature.
oliverschwendener: There is still a commit that is unsigned

<img width="1231" alt="image" src="https://github.com/user-attachments/assets/63194bfb-b0ec-4ca6-897c-fbf4a0991728" />

MorimotoShimei: Sorry again, my understanding of what to do was insufficient.
Corrected.

Patch:
diff --git a/package-lock.json b/package-lock.json
index 503b5ca2..f6cba124 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,18 +1,18 @@
 {
     "name": "ueli",
-    "version": "9.19.0",
+    "version": "9.20.0",
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
             "name": "ueli",
-            "version": "9.19.0",
+            "version": "9.20.0",
             "hasInstallScript": true,
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-components": "^9.60.1",
-                "@fluentui/react-icons": "^2.0.279",
-                "@fluentui/react-nav-preview": "^0.13.0",
+                "@fluentui/react-components": "^9.61.6",
+                "@fluentui/react-icons": "^2.0.294",
+                "@fluentui/react-nav-preview": "^0.13.5",
                 "better-sqlite3": "^11.8.1",
                 "color": "^4.2.3",
                 "fast-xml-parser": "^4.5.0",
@@ -50,7 +50,7 @@
                 "tree-kill": "^1.2.2",
                 "typescript": "^5.6.3",
                 "typescript-eslint": "^8.23.0",
-                "vite": "^6.2.4",
+                "vite": "^6.2.5",
                 "vite-plugin-electron": "^0.29.0",
                 "vite-plugin-electron-renderer": "^0.14.6",
                 "vitest": "^3.0.9"
@@ -377,6 +377,15 @@
                 "node": ">=18"
             }
         },
+        "node_modules/@ctrl/tinycolor": {
+            "version": "3.6.1",
+            "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+            "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/@develar/schema-utils": {
             "version": "2.6.5",
             "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz",
@@ -1435,21 +1444,21 @@
             }
         },
         "node_modules/@fluentui/react-accordion": {
-            "version": "9.6.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.6.1.tgz",
-            "integrity": "sha512-xOUg8yAu4T4sytjA5ZcEkQQF40TL81Iwh//lr5imbzxOIsyVDREo7DDd3i+Ujy3eMn7eJDzD2Nf5yOIU2pDg4A==",
+            "version": "9.6.6",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.6.6.tgz",
+            "integrity": "sha512-7mZtzVjZqch5SgyrEH/Ly55EtuN3Leot1S9BsKEyoEbN2LV9TgmmhP92nQmdHYvThKqXPdtm4NmBzaooOqucIQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-motion": "^9.6.8",
-                "@fluentui/react-motion-components-preview": "^0.4.4",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-motion": "^9.7.1",
+                "@fluentui/react-motion-components-preview": "^0.4.8",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1484,16 +1493,16 @@
             }
         },
         "node_modules/@fluentui/react-aria": {
-            "version": "9.14.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.14.1.tgz",
-            "integrity": "sha512-mKSU5we7BdcDteo9k6XK/zxUSX/K2i7oDmeFCM9URWZiW0+Uy070kys/035lrBYLlwnj26WZ/38rAUI6uhyyaw==",
+            "version": "9.14.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.14.4.tgz",
+            "integrity": "sha512-5LLOVB/hPP5M83i5kwrbB6lIbpHRAXX/Pp54nCdfk9w12BcxzVhm4+c4VPnOFtUlbeR7WmPO8l1kz/zZwRw2Sw==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@swc/helpers": "^0.5.1"
             },
             "peerDependencies": {
@@ -1504,21 +1513,21 @@
             }
         },
         "node_modules/@fluentui/react-avatar": {
-            "version": "9.7.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.7.1.tgz",
-            "integrity": "sha512-ecmU8xkXS+ytypZ7YdZeQTCSrAengxV6uWM7eN0J5jthzFPUeTToq6vraMWPDaZSU/O1R4OonFo59RtoRz8FQA==",
+            "version": "9.7.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.7.4.tgz",
+            "integrity": "sha512-E7zYfDZAbPRYN89Plfr/KwsIJcnwcmmFsEdOlZTOmgtSuevwibA7rDRWRPI8U9E/wG6IBS3ffDTzGlxT1IkzMw==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-badge": "^9.2.51",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-badge": "^9.2.53",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-popover": "^9.10.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-popover": "^9.10.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-tooltip": "^9.6.1",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-tooltip": "^9.6.4",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1530,16 +1539,16 @@
             }
         },
         "node_modules/@fluentui/react-badge": {
-            "version": "9.2.51",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.51.tgz",
-            "integrity": "sha512-EOzf6NapyCifqA9O0zqoLUVf9x/KhWTF3nacL6/mqOl7oD/mZvQuVvm5JJhWXd3DVQScpz371uXorAPJde+ylA==",
+            "version": "9.2.53",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.53.tgz",
+            "integrity": "sha512-EBUIHzn7as+dBRk51gooW8HRVnB6UIsSHnW6Tvnh2lvwzjyeOh4N3cu+UA3KJGxHaxYRgReMTHOIrng8GsDLIA==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1551,20 +1560,20 @@
             }
         },
         "node_modules/@fluentui/react-breadcrumb": {
-            "version": "9.1.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.1.1.tgz",
-            "integrity": "sha512-lTr13BPm44YqTXcHX+he4xIY5at5iF+XZNMkBjDArR/B6HwvvnZnSWrwGvmn2SnsM6VDFTKvvoxpJ3a2nX6w3g==",
+            "version": "9.1.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.1.4.tgz",
+            "integrity": "sha512-INBitKWJxz27GKraFULYIA8BcgxKYFTBAqBIOlthxOlg7c/GfE1muzxpu2HoPdNRwoMpKgSnXoANK2fj7pXWZg==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-button": "^9.4.1",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-button": "^9.4.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-link": "^9.4.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-link": "^9.4.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1576,19 +1585,19 @@
             }
         },
         "node_modules/@fluentui/react-button": {
-            "version": "9.4.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.4.1.tgz",
-            "integrity": "sha512-Z6wuPa1vz6PHTxdsxcDAonwqQqD/JgbQnW+N9ftUJxcQ6l5lC7drzdMqmQX6rqdbh2m093z1uhjw6SC4MijZ3Q==",
+            "version": "9.4.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.4.4.tgz",
+            "integrity": "sha512-MPg0mZxyK0cPcyoziuJ0O8WZ3dCLzlgvkIysY4eJupRU4N9AeBV9gbC5d/uco4c9w87IxqJWMl73QcU6KerAxA==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
+                "@fluentui/react-aria": "^9.14.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1600,18 +1609,18 @@
             }
         },
         "node_modules/@fluentui/react-card": {
-            "version": "9.2.0",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.2.0.tgz",
-            "integrity": "sha512-aY/5OxO0sqeLRwu9LwmabXr+PW/9rElKeklo44/GtpWLYsGahDloO4O1YmBSBsqLPY2eBDE8iMybfkC9KzUvsQ==",
+            "version": "9.2.3",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.2.3.tgz",
+            "integrity": "sha512-qNRibCfhjr8kwtxN9IYZlbsQDcSS6U4oNnnOw3wDGY7SYVPWWj+WxgGRzNsIhrYb3zEupG67b7ZmXgFGGRr8Cg==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
-                "@fluentui/react-text": "^9.4.33",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
+                "@fluentui/react-text": "^9.4.35",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1623,21 +1632,21 @@
             }
         },
         "node_modules/@fluentui/react-carousel": {
-            "version": "9.6.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.6.1.tgz",
-            "integrity": "sha512-oLGh1caPkWRfzEknwbXM+ONqhxd248MefGt8FxHo+w+R1PpgtO2YkeEApYWt2t13JIeCtpbqqe8QgVv/O3vdtQ==",
+            "version": "9.6.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.6.4.tgz",
+            "integrity": "sha512-nuPMJHDoeuJ0PCeHaS80BR3h7WXq8xMeQwTe+6MuZRLuToCy77PeGnXkxFfIfLYkKFGCZjvwaTG4w1qLZY/sdg==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-button": "^9.4.1",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-button": "^9.4.4",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-tooltip": "^9.6.1",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-tooltip": "^9.6.4",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1",
                 "embla-carousel": "^8.5.1",
@@ -1652,19 +1661,42 @@
             }
         },
         "node_modules/@fluentui/react-checkbox": {
-            "version": "9.3.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.3.1.tgz",
-            "integrity": "sha512-YRYLeMoJNwQO7Zg6P0B26EWU2vdviHbAlP3TVrCyBHQrEXT532Xju7zlZ+LcdXN1CsE6/264omePNEDsi9zscg==",
+            "version": "9.3.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.3.4.tgz",
+            "integrity": "sha512-zF/mR5H3857rgxZBpTj0+yWMEAyCd4T6uWWgz2ojEpTqsCx11jQN7TwZWWR4e49XDzBn8/fnc8LrEACLu5cWrw==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
+                "@fluentui/react-field": "^9.2.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-label": "^9.1.84",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-label": "^9.1.86",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
+                "@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-color-picker": {
+            "version": "9.0.2",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.0.2.tgz",
+            "integrity": "sha512-ImgJ8gou+y1gytW5ohckWNeozQMu3qZ7hUkXhvkAiVUv0izS1chDspnLIDZ9v2CSGOyTCacLazaDQfm4L/NHOQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@ctrl/tinycolor": "^3.3.4",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
+                "@fluentui/react-theme": "^9.1.24",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1676,23 +1708,23 @@
             }
         },
         "node_modules/@fluentui/react-combobox": {
-            "version": "9.14.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.14.1.tgz",
-            "integrity": "sha512-KXBc59kwg2NLVBbGL+HkqpeMlt5lYD2rfDoUeHglyIEu9qGdLS+PnzQzHQWeNrLRNRJw5D8eeL0X03z4LT4R4A==",
+            "version": "9.14.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.14.4.tgz",
+            "integrity": "sha512-gxixwpmIa5JjtqGdSqGK20Z5LJY2qDGuK9T7DyCX/mgsIIAPPo+kI023465QXW1xZmsmKy/HGcV3ci0+Ww1dzw==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-context-selector": "^9.1.73",
-                "@fluentui/react-field": "^9.2.1",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-field": "^9.2.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-positioning": "^9.16.4",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-positioning": "^9.16.6",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1704,69 +1736,70 @@
             }
         },
         "node_modules/@fluentui/react-components": {
-            "version": "9.60.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.60.1.tgz",
-            "integrity": "sha512-MCZ/bcWV/NukOuQ89i9d3h0FVW23c7f1g3HZco9l7+TthQ0m4ItHW/za5occ1Y0wIXqkDKEMGFb7+y9hA+PZtA==",
+            "version": "9.61.6",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.61.6.tgz",
+            "integrity": "sha512-iB/iJ9lIVrInq5nlujMny/uUDLg8OrC/kWKHFXm3AtZTlsDU6/CNwGiTCZltXTBiYjA7zgXiloUZRwb8WmQpZg==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-accordion": "^9.6.1",
+                "@fluentui/react-accordion": "^9.6.6",
                 "@fluentui/react-alert": "9.0.0-beta.124",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-avatar": "^9.7.1",
-                "@fluentui/react-badge": "^9.2.51",
-                "@fluentui/react-breadcrumb": "^9.1.1",
-                "@fluentui/react-button": "^9.4.1",
-                "@fluentui/react-card": "^9.2.0",
-                "@fluentui/react-carousel": "^9.6.1",
-                "@fluentui/react-checkbox": "^9.3.1",
-                "@fluentui/react-combobox": "^9.14.1",
-                "@fluentui/react-dialog": "^9.12.1",
-                "@fluentui/react-divider": "^9.2.83",
-                "@fluentui/react-drawer": "^9.7.1",
-                "@fluentui/react-field": "^9.2.1",
-                "@fluentui/react-image": "^9.1.81",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-avatar": "^9.7.4",
+                "@fluentui/react-badge": "^9.2.53",
+                "@fluentui/react-breadcrumb": "^9.1.4",
+                "@fluentui/react-button": "^9.4.4",
+                "@fluentui/react-card": "^9.2.3",
+                "@fluentui/react-carousel": "^9.6.4",
+                "@fluentui/react-checkbox": "^9.3.4",
+                "@fluentui/react-color-picker": "^9.0.2",
+                "@fluentui/react-combobox": "^9.14.4",
+                "@fluentui/react-dialog": "^9.12.6",
+                "@fluentui/react-divider": "^9.2.85",
+                "@fluentui/react-drawer": "^9.7.6",
+                "@fluentui/react-field": "^9.2.4",
+                "@fluentui/react-image": "^9.1.83",
                 "@fluentui/react-infobutton": "9.0.0-beta.102",
-                "@fluentui/react-infolabel": "^9.1.1",
-                "@fluentui/react-input": "^9.5.1",
-                "@fluentui/react-label": "^9.1.84",
-                "@fluentui/react-link": "^9.4.1",
-                "@fluentui/react-list": "^9.1.1",
-                "@fluentui/react-menu": "^9.16.1",
-                "@fluentui/react-message-bar": "^9.4.1",
-                "@fluentui/react-motion": "^9.6.8",
-                "@fluentui/react-overflow": "^9.3.1",
-                "@fluentui/react-persona": "^9.3.1",
-                "@fluentui/react-popover": "^9.10.1",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-positioning": "^9.16.4",
-                "@fluentui/react-progress": "^9.2.1",
-                "@fluentui/react-provider": "^9.20.1",
-                "@fluentui/react-radio": "^9.3.1",
-                "@fluentui/react-rating": "^9.1.1",
-                "@fluentui/react-search": "^9.1.1",
-                "@fluentui/react-select": "^9.2.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-skeleton": "^9.2.1",
-                "@fluentui/react-slider": "^9.3.1",
-                "@fluentui/react-spinbutton": "^9.3.1",
-                "@fluentui/react-spinner": "^9.5.8",
-                "@fluentui/react-swatch-picker": "^9.2.1",
-                "@fluentui/react-switch": "^9.2.1",
-                "@fluentui/react-table": "^9.16.1",
-                "@fluentui/react-tabs": "^9.7.1",
-                "@fluentui/react-tabster": "^9.24.1",
-                "@fluentui/react-tag-picker": "^9.5.1",
-                "@fluentui/react-tags": "^9.4.1",
-                "@fluentui/react-teaching-popover": "^9.4.0",
-                "@fluentui/react-text": "^9.4.33",
-                "@fluentui/react-textarea": "^9.4.1",
+                "@fluentui/react-infolabel": "^9.1.4",
+                "@fluentui/react-input": "^9.5.4",
+                "@fluentui/react-label": "^9.1.86",
+                "@fluentui/react-link": "^9.4.4",
+                "@fluentui/react-list": "^9.1.4",
+                "@fluentui/react-menu": "^9.16.4",
+                "@fluentui/react-message-bar": "^9.4.5",
+                "@fluentui/react-motion": "^9.7.1",
+                "@fluentui/react-overflow": "^9.3.4",
+                "@fluentui/react-persona": "^9.3.4",
+                "@fluentui/react-popover": "^9.10.4",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-positioning": "^9.16.6",
+                "@fluentui/react-progress": "^9.2.4",
+                "@fluentui/react-provider": "^9.20.4",
+                "@fluentui/react-radio": "^9.3.4",
+                "@fluentui/react-rating": "^9.1.4",
+                "@fluentui/react-search": "^9.1.4",
+                "@fluentui/react-select": "^9.2.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-skeleton": "^9.2.4",
+                "@fluentui/react-slider": "^9.3.5",
+                "@fluentui/react-spinbutton": "^9.3.4",
+                "@fluentui/react-spinner": "^9.5.10",
+                "@fluentui/react-swatch-picker": "^9.2.4",
+                "@fluentui/react-switch": "^9.2.4",
+                "@fluentui/react-table": "^9.16.4",
+                "@fluentui/react-tabs": "^9.7.4",
+                "@fluentui/react-tabster": "^9.24.4",
+                "@fluentui/react-tag-picker": "^9.5.4",
+                "@fluentui/react-tags": "^9.5.2",
+                "@fluentui/react-teaching-popover": "^9.4.3",
+                "@fluentui/react-text": "^9.4.35",
+                "@fluentui/react-textarea": "^9.4.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-toast": "^9.4.1",
-                "@fluentui/react-toolbar": "^9.4.0",
-                "@fluentui/react-tooltip": "^9.6.1",
-                "@fluentui/react-tree": "^9.10.1",
-                "@fluentui/react-utilities": "^9.18.21",
-                "@fluentui/react-virtualizer": "9.0.0-alpha.93",
+                "@fluentui/react-toast": "^9.4.6",
+                "@fluentui/react-toolbar": "^9.4.3",
+                "@fluentui/react-tooltip": "^9.6.4",
+                "@fluentui/react-tree": "^9.10.7",
+                "@fluentui/react-utilities": "^9.18.23",
+                "@fluentui/react-virtualizer": "9.0.0-alpha.95",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1778,12 +1811,12 @@
             }
         },
         "node_modules/@fluentui/react-context-selector": {
-            "version": "9.1.73",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.73.tgz",
-            "integrity": "sha512-srXPkgTGAvFjWL3YQxhRyJMpEk2JxSVy7cVY9iwZJoqruQoekUKZEXcJXUeWGTJYDyXpfxoNhyTUCpvScXMAEQ==",
+            "version": "9.1.75",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.75.tgz",
+            "integrity": "sha512-LJcn8mrbkhj5ucTYU3Gk+EJGnEqzRuRC3JOeyNotMPGavUSSCYfjwmG8Q6/Ms7c2tY6kFr+PbJVpkMFgvbG52w==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@swc/helpers": "^0.5.1"
             },
             "peerDependencies": {
@@ -1795,23 +1828,23 @@
             }
         },
         "node_modules/@fluentui/react-dialog": {
-            "version": "9.12.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.12.1.tgz",
-            "integrity": "sha512-CoKXSn0xuAgHONaTAJXonRngInVVEYY7iCKeQc+gbltv+eJKBQEr0MFHYDcpeE3OTIUJIxCqj7CTr62/6tPtzQ==",
+            "version": "9.12.6",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.12.6.tgz",
+            "integrity": "sha512-XjeLVFhPkYv65OzVImlY+KCJI+NN2RTqMkCBZQcU/xfE73YG3sgXK8Y2kMHarL81IlUXsZM24EyvHQrvEYgIiw==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-motion": "^9.6.8",
-                "@fluentui/react-motion-components-preview": "^0.4.4",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-motion": "^9.7.1",
+                "@fluentui/react-motion-components-preview": "^0.4.8",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1823,15 +1856,15 @@
             }
         },
         "node_modules/@fluentui/react-divider": {
-            "version": "9.2.83",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.83.tgz",
-            "integrity": "sha512-NDj0fe1wByJeO5gnChb/T9vobEc0iwjF69U7jCXnF1Gx/6a8C3JkpgVY/EHDAhhIcyiADgD+0tFQoxQzOAZYKw==",
+            "version": "9.2.85",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.85.tgz",
+            "integrity": "sha512-l2lDSfwiyCR9HqD7Js69rH+GXAf0fb1rojHqloAtj1MYuEvBKdANIWMy9x32UfqsNC/72VAl7lwed+RyhHsc2w==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1843,19 +1876,19 @@
             }
         },
         "node_modules/@fluentui/react-drawer": {
-            "version": "9.7.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.7.1.tgz",
-            "integrity": "sha512-m6PiRfw8zXieW4U/vZtyck6uKPV2L5+yiD17+d3yvZjYDvLGsV3LqrpuczK/LZ2u4cAGRgEAifSvs/StRc+USw==",
+            "version": "9.7.6",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.7.6.tgz",
+            "integrity": "sha512-RoaAzNTKf+sfLqSMbxuSau79M58nvBEO4xlchs/6Ei86rsCfyxmC6SQ3Lep3/n338Rds9sVqwNLqGKWoZ2VqPA==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-dialog": "^9.12.1",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-motion": "^9.6.8",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-dialog": "^9.12.6",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-motion": "^9.7.1",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1867,17 +1900,18 @@
             }
         },
         "node_modules/@fluentui/react-field": {
-            "version": "9.2.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.2.1.tgz",
-            "integrity": "sha512-PLCIIJJAP+vFt9SmLu5XXLx+ghmFavk0onerkBwEGC6AVNY8SKVRLZ2xU4d2h1uclBScTkGw6h/0ocg1Rp3DHg==",
+            "version": "9.2.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.2.4.tgz",
+            "integrity": "sha512-IJDn1RQzyYBeNkQRoZ5uGeRQTHV3oAdD9y48ZueX6iZHCUOycjwe0k25JXo+xKmcoiknHhawx0dHttX6dvaqmg==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-label": "^9.1.84",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-label": "^9.1.86",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1889,9 +1923,9 @@
             }
         },
         "node_modules/@fluentui/react-icons": {
-            "version": "2.0.279",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.279.tgz",
-            "integrity": "sha512-117W2i9zgJ+S9MpnjE7EtXwYRNC6J3u4El47lQPkc4m1qZolXa8xDYvwo14CiqO0pe3Eh1jFSCfyshMNvASaeA==",
+            "version": "2.0.294",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.294.tgz",
+            "integrity": "sha512-BoR+wqa+HEn8bB8L+gN/BnxR2LaR2ri6MSRb8W/s9mxy5deodnHalQ1P66vBWlJyaozNcxNHR4COKb4RJvpmeA==",
             "license": "MIT",
             "dependencies": {
                 "@griffel/react": "^1.0.0",
@@ -1902,15 +1936,15 @@
             }
         },
         "node_modules/@fluentui/react-image": {
-            "version": "9.1.81",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.81.tgz",
-            "integrity": "sha512-gwyKlB1KOFMnWrW4KZEg8MR7RGOnn9YVWfjQMdaVLAPZAFch9GoNxas+rLu3Lv5Q9b/xSSkyxGEmVDH/g3TSrg==",
+            "version": "9.1.83",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.83.tgz",
+            "integrity": "sha512-76dLzKEyRhMc1tZefjL9moFtsf9FYXmknxzFMgYxVXPLlB4NIE3+AIuluBB/1ul3e/6y8CFZJ5dIB9MHFKRoug==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1945,18 +1979,19 @@
             }
         },
         "node_modules/@fluentui/react-infolabel": {
-            "version": "9.1.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.1.1.tgz",
-            "integrity": "sha512-7aiYK54tO9MwUtmUHZdMSSKK+50bPd1Ltl7n6P5/OwgOIBYoWH0APUkVBg3jDWf4iyWTZouMdVM5iTsm9JOdGA==",
+            "version": "9.1.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.1.4.tgz",
+            "integrity": "sha512-Nm5F8EVpc07LS8Uwph4jpGEU8ZDM7BmwS5yMsaAtZOXMZn2OsKIRAu7j1BEslUvgwKnQOkD4XY/ty4hWv+pLLw==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-label": "^9.1.84",
-                "@fluentui/react-popover": "^9.10.1",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-label": "^9.1.86",
+                "@fluentui/react-popover": "^9.10.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1968,16 +2003,16 @@
             }
         },
         "node_modules/@fluentui/react-input": {
-            "version": "9.5.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.5.1.tgz",
-            "integrity": "sha512-ryLAJWDuHtstmcfeS1yNhKZjYl5aCBFE9CHQiLs0Vf53/2qTZdYF9Na/uCgsRjxKLux0avTMZobLvpsg1VQgsA==",
+            "version": "9.5.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.5.4.tgz",
+            "integrity": "sha512-tSDBeqnAzIMPyLpVx+Yr9EINNzh+fsU9dRR/XP2uad57jIfaFMKEt8YRrHOXOPYViC+FShYHdhXZfw5i/leWCQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-field": "^9.2.4",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -1989,12 +2024,12 @@
             }
         },
         "node_modules/@fluentui/react-jsx-runtime": {
-            "version": "9.0.51",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.51.tgz",
-            "integrity": "sha512-iIEWe5LThB6C4T2+1EBRvfmSY3Ke3yyEzQkgJ8x28SCGX5WdlHxBp9Xzmh63RCD0YzHTBe5agX++DlnRw9VTkg==",
+            "version": "9.0.53",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.53.tgz",
+            "integrity": "sha512-WZACDUHlvQNIY34n/yMV/lrXyp4kDI8HDs6fqcl+saVpqOeHOK5STDxBSz9fbo3NObUJ2U/QgL+A6XLNA2PqXQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@swc/helpers": "^0.5.1",
                 "react-is": "^17.0.2"
             },
@@ -2004,15 +2039,15 @@
             }
         },
         "node_modules/@fluentui/react-label": {
-            "version": "9.1.84",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.84.tgz",
-            "integrity": "sha512-8uejw3PGWe2vUvddhMM01kgATbp3q4GYVUxys7CmxFeU9MH9CsZ+2KKgUqcfu1d1UefVx3wINejk7ueECoZ75Q==",
+            "version": "9.1.86",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.86.tgz",
+            "integrity": "sha512-n1g2v1K/xs0zdcg9M/cR8jRgjTlK9LFGVidqlsKoiSPjSyoCMxzOXTyk8IfO6GKih2N41Sea+rDVNhrtz8uVGg==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2024,17 +2059,17 @@
             }
         },
         "node_modules/@fluentui/react-link": {
-            "version": "9.4.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.4.1.tgz",
-            "integrity": "sha512-NqbE5pJjwvblDeiqWwNgcAGDnwrr69ljYFJCIVR8HxgE6GeQCimw6kI8HSrIOAo5SjGBUpLLiHzAOaC9Y/95iA==",
+            "version": "9.4.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.4.4.tgz",
+            "integrity": "sha512-Bk3n8eNil02onLmhdKoDtrO7uj61HRZPh++KSw98YLFd6lD5hKopTMD5Euf7wZ8iJwIRCKXZ9vwWBRv92bRX+Q==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2046,19 +2081,19 @@
             }
         },
         "node_modules/@fluentui/react-list": {
-            "version": "9.1.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.1.1.tgz",
-            "integrity": "sha512-feErZmiogYtZdHBhG8YUKfY7Dp5pisiBEa1LvcsOUe4yXuwtiqLPVAmQZ95+Zoo546EbMJ8lhj7z1NalHxVdnA==",
+            "version": "9.1.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.1.4.tgz",
+            "integrity": "sha512-IGrGw7JmA683TtV4zMEEqHx8fr1uBOCMzt511KEFGVMCEuHC0Cg7pSZ2rfeCBnq2RZ6V1BJsqefLISaYpKMMJw==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-checkbox": "^9.3.1",
-                "@fluentui/react-context-selector": "^9.1.73",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-checkbox": "^9.3.4",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2070,22 +2105,22 @@
             }
         },
         "node_modules/@fluentui/react-menu": {
-            "version": "9.16.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.16.1.tgz",
-            "integrity": "sha512-lCnctf/PUyoHo4Cvs2h/Prq5o+dgtw/460ekjFi4OGH2G8qCJ3kYf9WpRvcDq17EZMiuVKx/0WihuPyvP+BwrA==",
+            "version": "9.16.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.16.4.tgz",
+            "integrity": "sha512-Wt7WT58MeWIzLm48esax9hNCukjIK41sNvGWsEooz8XYD6ndjoy6Q0CiXyrjNFF13i5IuqVSD6bfJ9YCnfB4ow==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-positioning": "^9.16.4",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-positioning": "^9.16.6",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2097,22 +2132,21 @@
             }
         },
         "node_modules/@fluentui/react-message-bar": {
-            "version": "9.4.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.4.1.tgz",
-            "integrity": "sha512-YL10Ifd6EaT0e57T8jWTjz5yd+Jm9YgF573BENOFwG9NQvQ5/ncQBzn0zhnzQfd6qYunZwwYQNIrl7SFPNqLAA==",
+            "version": "9.4.5",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.4.5.tgz",
+            "integrity": "sha512-SLE1LQSnHqzeqiRAbRuTubzp5ubyqmANt0vdflSp0FyKBo7jQmorktM2H00feOXsnOAJ8JukoUul2LjT8/kZSQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-button": "^9.4.1",
+                "@fluentui/react-button": "^9.4.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-link": "^9.4.1",
-                "@fluentui/react-motion": "^9.6.8",
-                "@fluentui/react-motion-components-preview": "^0.4.4",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-link": "^9.4.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
-                "@swc/helpers": "^0.5.1"
+                "@swc/helpers": "^0.5.1",
+                "react-transition-group": "^4.4.1"
             },
             "peerDependencies": {
                 "@types/react": ">=16.8.0 <19.0.0",
@@ -2122,13 +2156,13 @@
             }
         },
         "node_modules/@fluentui/react-motion": {
-            "version": "9.6.8",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.6.8.tgz",
-            "integrity": "sha512-Nl5EtQTuaE40G9xXUVcyYGtBgvgJHqFUyr17iDxE8PFeueRa5WB9NgIQm4muhrUseNm+ayJF297wQdcECOcVuw==",
+            "version": "9.7.1",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.7.1.tgz",
+            "integrity": "sha512-meBaUBruogLUs8aVhikGnjgwVWtXVrBk5GHKzqV4k8gwxPkkLhPahUfrIWRYsPKMitXjifOHSxQds/1qOaWXcg==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@swc/helpers": "^0.5.1",
                 "react-is": "^17.0.2"
             },
@@ -2140,9 +2174,9 @@
             }
         },
         "node_modules/@fluentui/react-motion-components-preview": {
-            "version": "0.4.4",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.4.4.tgz",
-            "integrity": "sha512-7sSeCD7prMIttXZvhG1UskiEVGJbepObqYPnK8H7zgrAIH2kJmQvTQSAGCwn9lxkl9YuOJDgHA3m3UDdLNge/Q==",
+            "version": "0.4.8",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.4.8.tgz",
+            "integrity": "sha512-lRwU+iHKoVxw+PfEsZrHRnwbJUVLObaQ659oiSBbuUIZlnfaPWBRB7KAn4K7Nzb+cFjQzD8eWtOjx4YEFFy3iQ==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/react-motion": "*",
@@ -2156,23 +2190,23 @@
             }
         },
         "node_modules/@fluentui/react-nav-preview": {
-            "version": "0.13.0",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-nav-preview/-/react-nav-preview-0.13.0.tgz",
-            "integrity": "sha512-CDkd+92l9vfWVY/IyY8JP16Mll54xL/PiBl69ksVrY9NCaPLcyTKGElGUEngz1rIpp8/lqID2aXFy0x9gV3/JA==",
+            "version": "0.13.5",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-nav-preview/-/react-nav-preview-0.13.5.tgz",
+            "integrity": "sha512-J6t7ArhSzhBaW+SOPirpVtoF61uePsxKQZsPrVh1dNskgyXvOwLFiXp9D7YhRAEOeDSPstYgmflMylVw9rxWZg==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-button": "^9.4.1",
-                "@fluentui/react-context-selector": "^9.1.73",
-                "@fluentui/react-divider": "^9.2.83",
-                "@fluentui/react-drawer": "^9.7.1",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-button": "^9.4.4",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-divider": "^9.2.85",
+                "@fluentui/react-drawer": "^9.7.6",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-tooltip": "^9.6.1",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-tooltip": "^9.6.4",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2184,15 +2218,15 @@
             }
         },
         "node_modules/@fluentui/react-overflow": {
-            "version": "9.3.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.3.1.tgz",
-            "integrity": "sha512-jEL+mr+0Df7wad/bgTRkjn7ImEL9GsKG1Ev66ioe/dhmqKrB0fkO9tWD75WVejakRgOVlJUFFtNCkmewGhWnXw==",
+            "version": "9.3.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.3.4.tgz",
+            "integrity": "sha512-Xg9OBQdkNuu5GFsHJ1l4W5SgO9LVh86FIxW8GBGWs1XGBbCveTgYV1kEBDkKNyjLwxGGKlhVcQ8qREkn4QYx8Q==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/priority-overflow": "^9.1.15",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2204,17 +2238,17 @@
             }
         },
         "node_modules/@fluentui/react-persona": {
-            "version": "9.3.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.3.1.tgz",
-            "integrity": "sha512-VMSwDbhB7MMdjaWFROl7kU/933wy6poyP891BjindW/AcvSUfq43f1AglTZbypte9/mI2qn1gDF6hXFS3J8pHg==",
+            "version": "9.3.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.3.4.tgz",
+            "integrity": "sha512-sbt43zzmROD5Y2ENq7T+vrwCuEA/Zu/8fVJKiPN8OD2ZOlSaJluuebKE7JXMLNkhWeS6RLBoIqj6ahsn5R7t4g==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-avatar": "^9.7.1",
-                "@fluentui/react-badge": "^9.2.51",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-avatar": "^9.7.4",
+                "@fluentui/react-badge": "^9.2.53",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2226,21 +2260,21 @@
             }
         },
         "node_modules/@fluentui/react-popover": {
-            "version": "9.10.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.10.1.tgz",
-            "integrity": "sha512-Xy/auK2I6I+35Wqb4ArfMJ6gon/D7wcBvZhX6YEtLWByXCF7Muc5PBwsfimc2MJiCSNYTUXR1Vt1OcvHfk19ww==",
+            "version": "9.10.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.10.4.tgz",
+            "integrity": "sha512-XF8O6EU+WPXJ3tAUqviBEwashcTcs4EKTlkkvTTxiuULZRsmzTyCqffKFBQxgkDRmZIZhOv/3PmP3ADd7cY0nw==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-context-selector": "^9.1.73",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-positioning": "^9.16.4",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-positioning": "^9.16.6",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2252,14 +2286,14 @@
             }
         },
         "node_modules/@fluentui/react-portal": {
-            "version": "9.5.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.5.1.tgz",
-            "integrity": "sha512-YclLVzWP6k/YW/RbgAhZ6EOyXah1vtnws+C00MMunF/HLuB/VKvvEuvN/bfAyrMgXbL44hKC86G9pLfDXCzeoQ==",
+            "version": "9.5.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.5.4.tgz",
+            "integrity": "sha512-qFyI1mj6TWWZGLNtbeCaycbhJ6jrwKDvzn9B3e+l3OhrHpVbc+d1ItLXNBD9JecQKXqF8aT+NSKKXGhrst7X3A==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1",
                 "use-disposable": "^1.0.1"
@@ -2272,16 +2306,16 @@
             }
         },
         "node_modules/@fluentui/react-positioning": {
-            "version": "9.16.4",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.16.4.tgz",
-            "integrity": "sha512-DHONqh3Tu7UhHrupGxKATt88Sdh3FOPaRlXby9cc0diforHiRFmIXOrxJq5U9FdoUhj4qkKUjKCAt5MXhx8noQ==",
+            "version": "9.16.6",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.16.6.tgz",
+            "integrity": "sha512-bnOmUwRvcV4Pz9ccvaL3/TVhkYOviJSWNMP71kp2ZPOSUZOhh0GMTfcETN4bH8nEiITqds8Y9gf1Gzhgagmx/Q==",
             "license": "MIT",
             "dependencies": {
                 "@floating-ui/devtools": "0.2.1",
                 "@floating-ui/dom": "^1.6.12",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2293,16 +2327,16 @@
             }
         },
         "node_modules/@fluentui/react-progress": {
-            "version": "9.2.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.2.1.tgz",
-            "integrity": "sha512-R5ASIl97EGgeLPI06HevhFhYWWdeA+YPsOYXCbC9yKgfQdWU2FqYDQ3BRarXae2nbyKi+ZY9kK/vu5VziB1k/g==",
+            "version": "9.2.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.2.4.tgz",
+            "integrity": "sha512-VuNQCDYb96dsbtB+/CD2+WMWHTv4NltuAjNv/nstak7e3+cP/Mi2WMBP1shHbw0C+KhrIUleuf7gB5DnR0fG2A==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-field": "^9.2.4",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2314,17 +2348,17 @@
             }
         },
         "node_modules/@fluentui/react-provider": {
-            "version": "9.20.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.20.1.tgz",
-            "integrity": "sha512-KDOwXZNbvNUFXzS6Gw1R32M3zz9eUzLXXqAq1PMk1GGSoOCERDlX1kn2VZqmBh8/fgNTSqL7gaUItFY0UPQ/hw==",
+            "version": "9.20.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.20.4.tgz",
+            "integrity": "sha512-Dnjri+7JtSpu24cfcDX6Hk7SMkRG1KVmszHqtAaXpSb4wM9rgv1iIAthyVwPWZD+pTVQlpduYwupqR7c0Rn7gw==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/core": "^1.16.0",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
@@ -2337,18 +2371,18 @@
             }
         },
         "node_modules/@fluentui/react-radio": {
-            "version": "9.3.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.3.1.tgz",
-            "integrity": "sha512-Jl4WygqSjI4i7EmChlQ0u+KgFFxNhQJ7XyRva4SJWU1BphdYhwEGX5aZBuYGfEGIvN3DnGYOppD5G3rviZpsmw==",
+            "version": "9.3.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.3.4.tgz",
+            "integrity": "sha512-ZqgfsOYg+7uWIPQUtqezz4tzMbDRw+binZq0LCc6AHKhBSmYjRY8cI60b6mM30bEwQvM/ob8I/NN3v9CyA6hwA==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-label": "^9.1.84",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-field": "^9.2.4",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-label": "^9.1.86",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2360,16 +2394,17 @@
             }
         },
         "node_modules/@fluentui/react-rating": {
-            "version": "9.1.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.1.1.tgz",
-            "integrity": "sha512-WctqqXyCGZ8MDISynPdLbaq7uCbvYEFki9o+IIoL88ejYMpbR+YfiHyHGin873P0JWl52GhM8WMc8ZkMNWPuGg==",
+            "version": "9.1.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.1.4.tgz",
+            "integrity": "sha512-PNFzUB6EgqJGh4Ml9PHGWffpWl05K8zx2Y2aqFEVorOi6PGVt/HpEswn1NiyNa9FULzCWA/Pncxq9cZ5vHyaXQ==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2381,17 +2416,17 @@
             }
         },
         "node_modules/@fluentui/react-search": {
-            "version": "9.1.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.1.1.tgz",
-            "integrity": "sha512-h6xzd5Hra9lnOtFHVDGWRwLJdAyK5C1ak3S1JW7hNXzyNdIje6ugkVO50UXf7vIRc/34JGgxlXHvFpOy22HLAA==",
+            "version": "9.1.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.1.4.tgz",
+            "integrity": "sha512-WZt/mdsJ1iCvR31UpsuCCcYSavHizHBLjzKnSNvtta+qPEZmf725WRYgb6LsbKOcWTbRpZ/lBxrKC8D6UkX73w==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-input": "^9.5.1",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-input": "^9.5.4",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2403,17 +2438,17 @@
             }
         },
         "node_modules/@fluentui/react-select": {
-            "version": "9.2.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.2.1.tgz",
-            "integrity": "sha512-cDPbJeyFvDWiEsRxU04FrffJ7VGDBjGuhRHwx6Ufi2EpVpc0CmtD7qG3ns4l7oiLR3OTUCfNscmC7TTKxi5SCg==",
+            "version": "9.2.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.2.4.tgz",
+            "integrity": "sha512-pICbvy47CjwXnSLy/pI3SVZBAy1PqWEyJSKDVv+EEv8bUjh4ewH3mvMxqymZv3F3J9oehZ72W7mYqXqAXqOnCA==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
+                "@fluentui/react-field": "^9.2.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2425,9 +2460,9 @@
             }
         },
         "node_modules/@fluentui/react-shared-contexts": {
-            "version": "9.22.0",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.22.0.tgz",
-            "integrity": "sha512-bElZ5019bIENCsa2oaiqOj1nAbcXnRDCk1p/TrotghGpnfLlxMiE0wgcmDoyVxxdmx3cCQYWBX7DJw8dK54c/g==",
+            "version": "9.23.1",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.23.1.tgz",
+            "integrity": "sha512-mP+7talxLz7n0G36o7Asdvst+JPzUbqbnoMKUWRVB5YwzlOXumEgaQDgL1BkRUJYaDGOjIiSTUjHOEkBt7iSdg==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/react-theme": "^9.1.24",
@@ -2439,16 +2474,16 @@
             }
         },
         "node_modules/@fluentui/react-skeleton": {
-            "version": "9.2.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.2.1.tgz",
-            "integrity": "sha512-dTYC3bvBPlKlRSjDewKp/bkA0aMmALlgjos97xxyb5tJDxc+cFAK4EKfMBjEKFWnUgNNgGNmiNA0R5LkUCyzCg==",
+            "version": "9.2.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.2.4.tgz",
+            "integrity": "sha512-Tkz209D7iG5LjGfdZO9T4huCAKdShwFEKSZGbFClljXuZoQBg2jo1bXnWodFZpIsgqqYGyOjb8nSnZIJvR4sdQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-field": "^9.2.4",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2460,17 +2495,17 @@
             }
         },
         "node_modules/@fluentui/react-slider": {
-            "version": "9.3.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.3.1.tgz",
-            "integrity": "sha512-6BEoCo5t8I7S6Y2qIK3W+NthOImimeHCCwZkpIo8mB1Xbv8d/nXEDXUY1lE7wJxNr2eInerz1X1DCGhR/dinxA==",
+            "version": "9.3.5",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.3.5.tgz",
+            "integrity": "sha512-1DU2Hq9mRM6Q+vwTGH6XRcUxPB2Dbqhen+Ph2GkeTU6lne6klYSrYNvDRswM5j4wD9LVPVBcopoTaQmYeBYY3g==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-field": "^9.2.4",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2482,18 +2517,18 @@
             }
         },
         "node_modules/@fluentui/react-spinbutton": {
-            "version": "9.3.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.3.1.tgz",
-            "integrity": "sha512-xysAJGUIMdBeZjbCDqtjyE9kaiEuCZCB8RwrBZ9xu9qVVsQPS+ctVKksRMZvQI5LmO7oMmg5gMEN1jFVWwkM0A==",
+            "version": "9.3.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.3.4.tgz",
+            "integrity": "sha512-l8HvXimtMHGpErGVsone3+ACGwjX5DoV3MMmGM3Bf2eEAE/J+Gm3a+MdXv1FpJRYRiO5U0bacddVaFzfoKPXIQ==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-field": "^9.2.1",
+                "@fluentui/react-field": "^9.2.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2505,16 +2540,16 @@
             }
         },
         "node_modules/@fluentui/react-spinner": {
-            "version": "9.5.8",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.5.8.tgz",
-            "integrity": "sha512-pPZhzObRNPX4dW+9b/RQKS4Zkm/lze5jaMKhv5EVgOWzfp0AvHPFcxG/1QEsaXql9h3fjj++bmF9yHTK5WhZBA==",
+            "version": "9.5.10",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.5.10.tgz",
+            "integrity": "sha512-sEi67xdkRt3IkjCKZhUXAXZvTTYpIdUOF1SG5GweDS9I2RuMeqDzliiP8fZl6+trAEIY8hY8apW8uQVsEuMSFw==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-label": "^9.1.84",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-label": "^9.1.86",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2526,19 +2561,19 @@
             }
         },
         "node_modules/@fluentui/react-swatch-picker": {
-            "version": "9.2.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.2.1.tgz",
-            "integrity": "sha512-0Qs2IJAZIK06PeOS3cpXYYJ20zS11LGD/jaqNvoxJlsAsHNVbPDEJaHA9ROM6xSNrB015uA4heZALili4b4aPg==",
+            "version": "9.2.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.2.4.tgz",
+            "integrity": "sha512-wbtuY3moavKLB99ch3Rm6sqdF39HiaP5V3wNdbc4iOpwJ8g5ygm/1djhyp9R0OuJtPP4RsPR9l6PR0HXwJI7xQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-context-selector": "^9.1.73",
-                "@fluentui/react-field": "^9.2.1",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-field": "^9.2.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2550,19 +2585,19 @@
             }
         },
         "node_modules/@fluentui/react-switch": {
-            "version": "9.2.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.2.1.tgz",
-            "integrity": "sha512-muLUEIxMl085pSsCoJRX/SdV+QHrrnI80fIzIE0Roa+6J6TDfefIlNn2Y6hwI0dMZNsj7G32P+JMCqI7pW93Qw==",
+            "version": "9.2.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.2.4.tgz",
+            "integrity": "sha512-Utqc30tow6N9U/nf7iUmNkDHPAQhXkM81DQdS+SADWqg0zj/Kn9NUuLhTJZpFsIuwFliWGxxJtW9F44pka5rOw==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
+                "@fluentui/react-field": "^9.2.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-label": "^9.1.84",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-label": "^9.1.86",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2574,23 +2609,23 @@
             }
         },
         "node_modules/@fluentui/react-table": {
-            "version": "9.16.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.16.1.tgz",
-            "integrity": "sha512-XDvK7ZdYw7M/vWyFvcgdeWP7Lk78+qjebX98rlTSCNmmA6nCswUueLWEKgIqr53DPTQC2MFEAcJBi3aT75hSIA==",
+            "version": "9.16.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.16.4.tgz",
+            "integrity": "sha512-VA4cxK+jmcomWgH/7E/6d+55TLKSqei8mLkz3duTg9y7WjGmTNuk9G/9Qq500zHAn9YsMJlaGDY78Thm3GBXsg==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-avatar": "^9.7.1",
-                "@fluentui/react-checkbox": "^9.3.1",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-avatar": "^9.7.4",
+                "@fluentui/react-checkbox": "^9.3.4",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-radio": "^9.3.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-radio": "^9.3.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2602,17 +2637,17 @@
             }
         },
         "node_modules/@fluentui/react-tabs": {
-            "version": "9.7.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.7.1.tgz",
-            "integrity": "sha512-tTComkQdnF7QNE0EpnKODMlwnaMn/uCSKBJGPGH4UQMi7UcXAUGUJ6keLHABRYQS6LcvPnAnrkd84e/6aH/9dg==",
+            "version": "9.7.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.7.4.tgz",
+            "integrity": "sha512-94q3sJPSZjtH32XzH2eZaoVZNGMh3JDVsYcWAHkJs0HDYQz1NtiwaiO1mzbYve0LtAufdG+NWDGJg4USUhX4NQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-context-selector": "^9.1.73",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2624,14 +2659,14 @@
             }
         },
         "node_modules/@fluentui/react-tabster": {
-            "version": "9.24.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.24.1.tgz",
-            "integrity": "sha512-sDh6PCGcsZQsDgK8tstXnWmcQo4rhkAv3PC0GPBg0HkvFPZ+TwXGkuJ+9itVpRq+QljBMSgj/30swwg11aiJGA==",
+            "version": "9.24.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.24.4.tgz",
+            "integrity": "sha512-rrBsh10yi4pyr/PJqBuNWgzCboJqMTVy19KLsN0kcGx7052uqYFHwyH/+qXqaHI9RzyhE6c5/tjw62ZSyrZXDg==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1",
                 "keyborg": "^2.6.0",
@@ -2645,25 +2680,25 @@
             }
         },
         "node_modules/@fluentui/react-tag-picker": {
-            "version": "9.5.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.5.1.tgz",
-            "integrity": "sha512-b+vUd81IruFf65HkJl94Qntn6qJ9NZWnHJkNPXQeS4bLCHdWE9KedEmt9pDuz7o9uteCDbz+Z6mFbOPwigJUnQ==",
+            "version": "9.5.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.5.4.tgz",
+            "integrity": "sha512-IDzSTvQR4pzYw0UFjfITkWrYu5gTaCZvdsS5JpPzpM46/rcqeSQX904uurrcXBZu/FFSsJEpAXc033xmvC3KGQ==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-combobox": "^9.14.1",
-                "@fluentui/react-context-selector": "^9.1.73",
-                "@fluentui/react-field": "^9.2.1",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-combobox": "^9.14.4",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-field": "^9.2.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-positioning": "^9.16.4",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
-                "@fluentui/react-tags": "^9.4.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-positioning": "^9.16.6",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
+                "@fluentui/react-tags": "^9.5.2",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2675,20 +2710,20 @@
             }
         },
         "node_modules/@fluentui/react-tags": {
-            "version": "9.4.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.4.1.tgz",
-            "integrity": "sha512-ZFFZmsxO+n1FkwdLES9uMIkhfU/LTTJwT3V7MXw2w/asKF3xl+FtfX+H7+vkWM/w48YbLj/dFWa/JsyEUbbq5g==",
+            "version": "9.5.2",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.5.2.tgz",
+            "integrity": "sha512-7ZXGnc8LnZYZ9SxW6jdxueCbwJ7q7rj0xPYQbV4y95y1NTw5RJtdkYP1Oa81aLH0S9EOx+y3aanLvhncmUuNuQ==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-avatar": "^9.7.1",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-avatar": "^9.7.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2700,21 +2735,21 @@
             }
         },
         "node_modules/@fluentui/react-teaching-popover": {
-            "version": "9.4.0",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.4.0.tgz",
-            "integrity": "sha512-8sTJfTov3rxw/lG+PRCtV2hBU0AIV15sYGO9MjI7UJQQp63OTKDCghhMUS4QekYrdqPWdhZQgQaUrTnWZq5q3A==",
+            "version": "9.4.3",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.4.3.tgz",
+            "integrity": "sha512-0nbpWJsl1PaOaerjcasxNz8nnl4+nUeEDqFbMhRRNfrZik4BbN6lhuIKlWkROqOyhLE7t1mvbT6qo3iTb3W46w==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-button": "^9.4.1",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-button": "^9.4.4",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-popover": "^9.10.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-popover": "^9.10.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1",
                 "use-sync-external-store": "^1.2.0"
@@ -2727,15 +2762,15 @@
             }
         },
         "node_modules/@fluentui/react-text": {
-            "version": "9.4.33",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.33.tgz",
-            "integrity": "sha512-4P32VpjUnGbxBveFuQi+LEzbUx2SrihY0BKLHDredbtz78kBO1MCBNYZ3aPYO8msTgaPB/xKuz82memnfGhQYg==",
+            "version": "9.4.35",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.35.tgz",
+            "integrity": "sha512-uQTKaEaVSc05fIMKzEmmnQx9CJW/dWCEQ0ikO/YrhnES9FdmKKQRdiQ3so7iMa/mG7hj8R7ZfnbYdb07pLXD7A==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2747,16 +2782,16 @@
             }
         },
         "node_modules/@fluentui/react-textarea": {
-            "version": "9.4.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.4.1.tgz",
-            "integrity": "sha512-bFl9H5uInOqfm1m5kaFKZrV8JfRoXQXKqouGQ12JS0F0ZY3Ac7HxvFoF2DnPyJgxoVwrLOVIGvZZkuHYfum8DA==",
+            "version": "9.4.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.4.4.tgz",
+            "integrity": "sha512-t6DVm74vGe9hdczwzDJoEoRt5IjWHR+Is7aYsjx5NFqST0lX4yv4vgJyCqWSYDbhgbAh8jKC25YLTfneXfB7HQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-field": "^9.2.1",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-field": "^9.2.4",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2778,22 +2813,22 @@
             }
         },
         "node_modules/@fluentui/react-toast": {
-            "version": "9.4.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.4.1.tgz",
-            "integrity": "sha512-DjMa50haIDJW7Xh4s3G2EzfHgonbJot3J4+AaKSBgpyvCfwp6m9ru0ZtHKiBvCH0SAuSep8lCB0UQutlWjQdpQ==",
+            "version": "9.4.6",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.4.6.tgz",
+            "integrity": "sha512-6cfGlyZwsAnPJpKtH6TYqf4qenmOKcD3rYzTmYeJbVQReCUQodNQqeVlxxqCW4zNkyCT7ok5B9DRqdob0QCL7g==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
+                "@fluentui/react-aria": "^9.14.4",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-motion": "^9.6.8",
-                "@fluentui/react-motion-components-preview": "^0.4.4",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-motion": "^9.7.1",
+                "@fluentui/react-motion-components-preview": "^0.4.8",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2805,20 +2840,20 @@
             }
         },
         "node_modules/@fluentui/react-toolbar": {
-            "version": "9.4.0",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.4.0.tgz",
-            "integrity": "sha512-vUz6+dNkk4YMBRSvrsC3S7SYKBARS0Z2xo6xRNdDMA3pNV7wFhUOeqBL3TvxvYeoS/08yf4HxYM4JcBpnEZzEQ==",
-            "license": "MIT",
-            "dependencies": {
-                "@fluentui/react-button": "^9.4.1",
-                "@fluentui/react-context-selector": "^9.1.73",
-                "@fluentui/react-divider": "^9.2.83",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-radio": "^9.3.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+            "version": "9.4.3",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.4.3.tgz",
+            "integrity": "sha512-VHUYvE5Y0KPkfrMntla4j+T28bQ0feXpQN3cQrYG9yRvJX1gXUR+w+g2iA9wZSQbcSrQnudrgBo8vxQmR5IpNg==",
+            "license": "MIT",
+            "dependencies": {
+                "@fluentui/react-button": "^9.4.4",
+                "@fluentui/react-context-selector": "^9.1.75",
+                "@fluentui/react-divider": "^9.2.85",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-radio": "^9.3.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2830,19 +2865,19 @@
             }
         },
         "node_modules/@fluentui/react-tooltip": {
-            "version": "9.6.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.6.1.tgz",
-            "integrity": "sha512-8wEh3UASbogfJkXMaPeiqysxl3xuyGv4i7cmGBzCXdZIrILJit+z+wC+iGHkjOUzuaQHVqKktN7L6fnD3zidEA==",
+            "version": "9.6.4",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.6.4.tgz",
+            "integrity": "sha512-Bge8gF2hplPIEIQcEoV4e6qW2pRylhnrfX9R+L5xG21jaeOTJi5rskgemNvMOYecXd6CiWk+zZHOEpY8opGcpA==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-portal": "^9.5.1",
-                "@fluentui/react-positioning": "^9.16.4",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-portal": "^9.5.4",
+                "@fluentui/react-positioning": "^9.16.6",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2854,26 +2889,26 @@
             }
         },
         "node_modules/@fluentui/react-tree": {
-            "version": "9.10.1",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.10.1.tgz",
-            "integrity": "sha512-K1jGgfhVJXTxI5O0nCCEtR+A4N9D5qO3Oxwt7QTxFDkIreB4zqEy3E0u1Dw3JPLmAWbUQrZeIzji2nZ0GMNHHw==",
+            "version": "9.10.7",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.10.7.tgz",
+            "integrity": "sha512-HQDARFmtqzLCCAuvIf8gXR05kSFyCOclNjAC4jULE1YM9ZeHpLMyoCaOts5yXN+JDAod8FrHjHw5fsi96eWPzA==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-aria": "^9.14.1",
-                "@fluentui/react-avatar": "^9.7.1",
-                "@fluentui/react-button": "^9.4.1",
-                "@fluentui/react-checkbox": "^9.3.1",
-                "@fluentui/react-context-selector": "^9.1.73",
+                "@fluentui/react-aria": "^9.14.4",
+                "@fluentui/react-avatar": "^9.7.4",
+                "@fluentui/react-button": "^9.4.4",
+                "@fluentui/react-checkbox": "^9.3.4",
+                "@fluentui/react-context-selector": "^9.1.75",
                 "@fluentui/react-icons": "^2.0.245",
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-motion": "^9.6.8",
-                "@fluentui/react-motion-components-preview": "^0.4.4",
-                "@fluentui/react-radio": "^9.3.1",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-tabster": "^9.24.1",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-motion": "^9.7.1",
+                "@fluentui/react-motion-components-preview": "^0.4.8",
+                "@fluentui/react-radio": "^9.3.4",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-tabster": "^9.24.4",
                 "@fluentui/react-theme": "^9.1.24",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -2885,13 +2920,13 @@
             }
         },
         "node_modules/@fluentui/react-utilities": {
-            "version": "9.18.21",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.18.21.tgz",
-            "integrity": "sha512-R7WDPhqfRyi0z9rhI5q9YGdS+kB2QGJwPHR5u0pkvO6uPVgd8TLFL9m3O97hm9ENy9jt007DJwUOyYIdlwhsEg==",
+            "version": "9.18.23",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.18.23.tgz",
+            "integrity": "sha512-DOwUBsRsSD6weH6W0gtAb0smiPP8B7pzRiKh/urupMsyLdKeOL2fq+dogzP2Ls/lM4PZ08wiOtIvyufeHwAz+w==",
             "license": "MIT",
             "dependencies": {
                 "@fluentui/keyboard-keys": "^9.0.8",
-                "@fluentui/react-shared-contexts": "^9.22.0",
+                "@fluentui/react-shared-contexts": "^9.23.1",
                 "@swc/helpers": "^0.5.1"
             },
             "peerDependencies": {
@@ -2900,14 +2935,14 @@
             }
         },
         "node_modules/@fluentui/react-virtualizer": {
-            "version": "9.0.0-alpha.93",
-            "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.93.tgz",
-            "integrity": "sha512-aLQMEVI1G72tHaVW66Ur7PPdb0axqYymmVEZ7dmAew16/8kSyI8nBGsLRkGEPSZ+JToxiBwr3pmQXgfvYu8G/Q==",
+            "version": "9.0.0-alpha.95",
+            "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.95.tgz",
+            "integrity": "sha512-xB5ClZMwf/l5L9D4b52wk8HuPZEJyD7TyhMotsoD/Fgf0YQluKzihdWP8JoWOLRZRaNEAt70OeF2YPzP2hdhAQ==",
             "license": "MIT",
             "dependencies": {
-                "@fluentui/react-jsx-runtime": "^9.0.51",
-                "@fluentui/react-shared-contexts": "^9.22.0",
-                "@fluentui/react-utilities": "^9.18.21",
+                "@fluentui/react-jsx-runtime": "^9.0.53",
+                "@fluentui/react-shared-contexts": "^9.23.1",
+                "@fluentui/react-utilities": "^9.18.23",
                 "@griffel/react": "^1.5.22",
                 "@swc/helpers": "^0.5.1"
             },
@@ -6179,6 +6214,16 @@
                 "node": ">=8"
             }
         },
+        "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==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/runtime": "^7.8.7",
+                "csstype": "^3.0.2"
+            }
+        },
         "node_modules/dotenv": {
             "version": "16.4.5",
             "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
@@ -6564,27 +6609,27 @@
             "dev": true
         },
         "node_modules/embla-carousel": {
-            "version": "8.5.2",
-            "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.5.2.tgz",
-            "integrity": "sha512-xQ9oVLrun/eCG/7ru3R+I5bJ7shsD8fFwLEY7yPe27/+fDHCNj0OT5EoG5ZbFyOxOcG6yTwW8oTz/dWyFnyGpg==",
+            "version": "8.6.0",
+            "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz",
+            "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==",
             "license": "MIT"
         },
         "node_modules/embla-carousel-autoplay": {
-            "version": "8.5.2",
-            "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.5.2.tgz",
-            "integrity": "sha512-27emJ0px3q/c0kCHCjwRrEbYcyYUPfGO3g5IBWF1i7714TTzE6L9P81V6PHLoSMAKJ1aHoT2e7YFOsuFKCbyag==",
+            "version": "8.6.0",
+            "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.6.0.tgz",
+            "integrity": "sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==",
             "license": "MIT",
             "peerDependencies": {
-                "embla-carousel": "8.5.2"
+                "embla-carousel": "8.6.0"
             }
         },
         "node_modules/embla-carousel-fade": {
-            "version": "8.5.2",
-            "resolved": "https://registry.npmjs.org/embla-carousel-fade/-/embla-carousel-fade-8.5.2.tgz",
-            "integrity": "sha512-QJ46Xy+mpijjquQeIY0d0sPSy34XduREUnz7tn1K20hcKyZYTONNIXQZu3GGNwG59cvhMqYJMw9ki92Rjd14YA==",
+            "version": "8.6.0",
+            "resolved": "https://registry.npmjs.org/embla-carousel-fade/-/embla-carousel-fade-8.6.0.tgz",
+            "integrity": "sha512-qaYsx5mwCz72ZrjlsXgs1nKejSrW+UhkbOMwLgfRT7w2LtdEB03nPRI06GHuHv5ac2USvbEiX2/nAHctcDwvpg==",
             "license": "MIT",
             "peerDependencies": {
-                "embla-carousel": "8.5.2"
+                "embla-carousel": "8.6.0"
             }
         },
         "node_modules/emoji-regex": {
@@ -9338,6 +9383,15 @@
                 "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
             }
         },
+        "node_modules/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==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
         "node_modules/object-keys": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
@@ -9822,6 +9876,23 @@
                 "node": ">=10"
             }
         },
+        "node_modules/prop-types": {
+            "version": "15.8.1",
+            "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+            "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+            "license": "MIT",
+            "dependencies": {
+                "loose-envify": "^1.4.0",
+                "object-assign": "^4.1.1",
+                "react-is": "^16.13.1"
+            }
+        },
+        "node_modules/prop-types/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==",
+            "license": "MIT"
+        },
         "node_modules/pump": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -10012,6 +10083,22 @@
                 "react-dom": ">=18"
             }
         },
+        "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==",
+            "license": "BSD-3-Clause",
+            "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/read-binary-file-arch": {
             "version": "1.0.6",
             "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz",
@@ -11278,9 +11365,9 @@
             }
         },
         "node_modules/use-sync-external-store": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz",
-            "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==",
+            "version": "1.5.0",
+            "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
+            "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
             "license": "MIT",
             "peerDependencies": {
                 "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -11327,9 +11414,9 @@
             }
         },
         "node_modules/vite": {
-            "version": "6.2.4",
-            "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz",
-            "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==",
+            "version": "6.2.5",
+            "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
+            "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
diff --git a/package.json b/package.json
index 5b264d95..33c4a5f8 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
     "name": "ueli",
     "description": "Cross-Platform Keystroke Launcher",
-    "version": "9.19.0",
+    "version": "9.20.0",
     "license": "MIT",
     "author": {
         "email": "oliver.schwendener@proton.me",
@@ -50,15 +50,15 @@
         "tree-kill": "^1.2.2",
         "typescript": "^5.6.3",
         "typescript-eslint": "^8.23.0",
-        "vite": "^6.2.4",
+        "vite": "^6.2.5",
         "vite-plugin-electron": "^0.29.0",
         "vite-plugin-electron-renderer": "^0.14.6",
         "vitest": "^3.0.9"
     },
     "dependencies": {
-        "@fluentui/react-components": "^9.60.1",
-        "@fluentui/react-icons": "^2.0.279",
-        "@fluentui/react-nav-preview": "^0.13.0",
+        "@fluentui/react-components": "^9.61.6",
+        "@fluentui/react-icons": "^2.0.294",
+        "@fluentui/react-nav-preview": "^0.13.5",
         "better-sqlite3": "^11.8.1",
         "color": "^4.2.3",
         "fast-xml-parser": "^4.5.0",
diff --git a/src/common/Core/ContextBridge.ts b/src/common/Core/ContextBridge.ts
index 175a4d00..df9404e4 100644
--- a/src/common/Core/ContextBridge.ts
+++ b/src/common/Core/ContextBridge.ts
@@ -24,6 +24,8 @@ export type ContextBridge = {
         on: IpcRenderer["on"];
         off: IpcRenderer["off"];
         send: IpcRenderer["send"];
+        sendSync: IpcRenderer["sendSync"];
+        invoke: IpcRenderer["invoke"];
     };
 
     autostartIsEnabled: () => boolean;
@@ -58,6 +60,7 @@ export type ContextBridge = {
     removeExcludedSearchResultItem: (itemId: string) => Promise<void>;
     removeFavorite: (id: string) => Promise<void>;
     resetAllSettings: () => Promise<void>;
+    restartApp: () => void;
     searchIndexCacheFileExists: () => boolean;
     showOpenDialog: (options: OpenDialogOptions) => Promise<OpenDialogReturnValue>;
     showSaveDialog: (options: SaveDialogOptions) => Promise<SaveDialogReturnValue>;
diff --git a/src/main/Core/App/AppModule.ts b/src/main/Core/App/AppModule.ts
new file mode 100644
index 00000000..b1a87162
--- /dev/null
+++ b/src/main/Core/App/AppModule.ts
@@ -0,0 +1,13 @@
+import type { UeliModuleRegistry } from "@Core/ModuleRegistry";
+
+export class App {
+    public static bootstrap(moduleRegistry: UeliModuleRegistry) {
+        const app = moduleRegistry.get("App");
+        const ipcMain = moduleRegistry.get("IpcMain");
+
+        ipcMain.on("restartApp", () => {
+            app.relaunch();
+            app.exit();
+        });
+    }
+}
diff --git a/src/main/Core/App/index.ts b/src/main/Core/App/index.ts
new file mode 100644
index 00000000..e3e636e2
--- /dev/null
+++ b/src/main/Core/App/index.ts
@@ -0,0 +1,1 @@
+export * from "./AppModule";
diff --git a/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathResolver.ts b/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathResolver.ts
new file mode 100644
index 00000000..5e0b6f2f
--- /dev/null
+++ b/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathResolver.ts
@@ -0,0 +1,42 @@
+import type { FileSystemUtility } from "@Core/FileSystemUtility";
+import type { App } from "electron";
+import { join } from "path";
+
+type Config = { settingsFilePath?: string };
+
+export class CustomSettingsFilePathResolver {
+    private configFilePath: string;
+
+    public constructor(
+        private readonly app: App,
+        private readonly fileSystemUtility: FileSystemUtility,
+    ) {
+        this.configFilePath = join(this.app.getPath("home"), "ueli9.config.json");
+    }
+
+    public isEnabled(): boolean {
+        return this.resolve() !== undefined;
+    }
+
+    public resolve(): string | undefined {
+        return this.getConfig().settingsFilePath;
+    }
+
+    public async writeFilePathToConfigFile(filePath: string) {
+        const config = this.getConfig();
+        config.settingsFilePath = filePath;
+        await this.fileSystemUtility.writeJsonFile(config, this.configFilePath);
+    }
+
+    public async remove() {
+        const config = this.getConfig();
+        delete config.settingsFilePath;
+        this.fileSystemUtility.writeJsonFileSync(config, this.configFilePath);
+    }
+
+    private getConfig(): Config {
+        return this.fileSystemUtility.existsSync(this.configFilePath)
+            ? this.fileSystemUtility.readJsonFileSync<Config>(this.configFilePath)
+            : {};
+    }
+}
diff --git a/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathValidator.ts b/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathValidator.ts
new file mode 100644
index 00000000..be2dbcbc
--- /dev/null
+++ b/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathValidator.ts
@@ -0,0 +1,18 @@
+import type { FileSystemUtility } from "@Core/FileSystemUtility";
+
+export class CustomSettingsFilePathValidator {
+    public constructor(private readonly fileSystemUtility: FileSystemUtility) {}
+
+    public validate(filePath: string): boolean {
+        if (!this.fileSystemUtility.existsSync(filePath)) {
+            return false;
+        }
+
+        try {
+            this.fileSystemUtility.readJsonFileSync(filePath);
+            return true;
+        } catch (error) {
+            return false;
+        }
+    }
+}
diff --git a/src/main/Core/SettingsFile/Resolver/DefaultSettingsFilePathResolver.ts b/src/main/Core/SettingsFile/Resolver/DefaultSettingsFilePathResolver.ts
new file mode 100644
index 00000000..874efab6
--- /dev/null
+++ b/src/main/Core/SettingsFile/Resolver/DefaultSettingsFilePathResolver.ts
@@ -0,0 +1,10 @@
+import type { App } from "electron";
+import { join } from "path";
+
+export class DefaultSettingsFilePathResolver {
+    public constructor(private readonly app: App) {}
+
+    public resolve(): string {
+        return join(this.app.getPath("userData"), "ueli9.settings.json");
+    }
+}
diff --git a/src/main/Core/SettingsFile/Resolver/index.ts b/src/main/Core/SettingsFile/Resolver/index.ts
new file mode 100644
index 00000000..6170f1d8
--- /dev/null
+++ b/src/main/Core/SettingsFile/Resolver/index.ts
@@ -0,0 +1,2 @@
+export * from "./CustomSettingsFilePathResolver";
+export * from "./DefaultSettingsFilePathResolver";
diff --git a/src/main/Core/SettingsFile/SettingsFileModule.ts b/src/main/Core/SettingsFile/SettingsFileModule.ts
index 16093a15..f7e542b8 100644
--- a/src/main/Core/SettingsFile/SettingsFileModule.ts
+++ b/src/main/Core/SettingsFile/SettingsFileModule.ts
@@ -1,12 +1,46 @@
 import type { UeliModuleRegistry } from "@Core/ModuleRegistry";
-import { join } from "path";
+import { CustomSettingsFilePathResolver, DefaultSettingsFilePathResolver } from "./Resolver";
+import { CustomSettingsFilePathValidator } from "./Resolver/CustomSettingsFilePathValidator";
 
 export class SettingsFileModule {
     public static bootstrap(moduleRegistry: UeliModuleRegistry) {
-        const app = moduleRegistry.get("App");
+        const customSettingsFilePathResolver = new CustomSettingsFilePathResolver(
+            moduleRegistry.get("App"),
+            moduleRegistry.get("FileSystemUtility"),
+        );
+
+        const customSettingsFilePathValidator = new CustomSettingsFilePathValidator(
+            moduleRegistry.get("FileSystemUtility"),
+        );
+
+        const defaultSettingsFilePathResolver = new DefaultSettingsFilePathResolver(moduleRegistry.get("App"));
+
+        const resolveFilePath = () =>
+            customSettingsFilePathResolver.resolve() ?? defaultSettingsFilePathResolver.resolve();
+
+        const ipcMain = moduleRegistry.get("IpcMain");
+
+        ipcMain.on("removeCustomSettingsFilePath", () => {
+            customSettingsFilePathResolver.remove();
+        });
+
+        ipcMain.handle("setCustomSettingsFilePath", async (_, { filePath }: { filePath: string }) => {
+            await customSettingsFilePathResolver.writeFilePathToConfigFile(filePath);
+        });
+
+        ipcMain.on("getCustomSettingsFilePath", (event) => {
+            event.returnValue = customSettingsFilePathResolver.resolve();
+        });
+
+        ipcMain.on("isValidSettingsFile", (event, { filePath }: { filePath: string }) => {
+            event.returnValue = customSettingsFilePathValidator.validate(filePath);
+        });
+
+        const logger = moduleRegistry.get("Logger");
+        logger.info(`Reading settings from ${resolveFilePath()}`);
 
         moduleRegistry.register("SettingsFile", {
-            path: join(app.getPath("userData"), "ueli9.settings.json"),
+            path: resolveFilePath(),
         });
     }
 }
diff --git a/src/main/Core/index.ts b/src/main/Core/index.ts
index 3db80bf0..c7542a78 100644
--- a/src/main/Core/index.ts
+++ b/src/main/Core/index.ts
@@ -1,5 +1,6 @@
 export * from "./AboutUeli";
 export * from "./ActionHandler";
+export * from "./App";
 export * from "./AppleScriptUtility";
 export * from "./AssetPathResolver";
 export * from "./Autostart";
diff --git a/src/main/Extensions/Base64Conversion/Base64Conversion.ts b/src/main/Extensions/Base64Conversion/Base64Conversion.ts
index 52456ebf..6bbc98ef 100644
--- a/src/main/Extensions/Base64Conversion/Base64Conversion.ts
+++ b/src/main/Extensions/Base64Conversion/Base64Conversion.ts
@@ -19,6 +19,11 @@ export class Base64Conversion implements Extension {
     public readonly id = "Base64Conversion";
     public readonly name = "Base64 Conversion";
 
+    public readonly nameTranslation = {
+        key: "extensionName",
+        namespace: "extension[Base64Conversion]",
+    };
+
     public readonly defaultSettings: Settings = {
         encodeDecodePrefix: "b64",
         encodePrefix: "b64e",
diff --git a/src/main/Extensions/UuidGenerator/UuidGeneratorExtension.ts b/src/main/Extensions/UuidGenerator/UuidGeneratorExtension.ts
index fd3cb00a..799a8ef3 100644
--- a/src/main/Extensions/UuidGenerator/UuidGeneratorExtension.ts
+++ b/src/main/Extensions/UuidGenerator/UuidGeneratorExtension.ts
@@ -27,6 +27,11 @@ export class UuidGeneratorExtension implements Extension {
         searchResultFormats: [],
     };
 
+    public readonly nameTranslation = {
+        key: "extensionName",
+        namespace: "extension[UuidGenerator]",
+    };
+
     public readonly author = {
         name: "Christopher Steiner",
         githubUserName: "ChristopherSteiner",
diff --git a/src/main/index.ts b/src/main/index.ts
index dcd21d23..e0ac25b7 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -44,6 +44,7 @@ if (!app.requestSingleInstanceLock()) {
     moduleRegistry.register("SystemPreferences", systemPreferences);
 
     // Core Modules
+    Core.App.bootstrap(moduleRegistry);
     Core.OperatingSystemModule.bootstrap(moduleRegistry);
     Core.CommandlineSwitchModule.bootstrap(moduleRegistry);
     Core.TaskSchedulerModule.bootstrap(moduleRegistry);
diff --git a/src/preload/index.ts b/src/preload/index.ts
index 06dc9a01..8d6f5bb7 100644
--- a/src/preload/index.ts
+++ b/src/preload/index.ts
@@ -6,6 +6,8 @@ const contextBridgeImplementation: ContextBridge = {
         on: (channel, listener) => ipcRenderer.on(channel, listener),
         off: (channel, listener) => ipcRenderer.off(channel, listener),
         send: (channel, args) => ipcRenderer.send(channel, args),
+        sendSync: (channel, args) => ipcRenderer.sendSync(channel, args),
+        invoke: (channel, args) => ipcRenderer.invoke(channel, args),
     },
 
     autostartIsEnabled: () => ipcRenderer.sendSync("autostartIsEnabled"),
@@ -47,6 +49,7 @@ const contextBridgeImplementation: ContextBridge = {
         ipcRenderer.invoke("removeExcludedSearchResultItem", { itemId }),
     removeFavorite: (id) => ipcRenderer.invoke("removeFavorite", { id }),
     resetAllSettings: () => ipcRenderer.invoke("resetAllSettings"),
+    restartApp: () => ipcRenderer.send("restartApp"),
     showOpenDialog: (options) => ipcRenderer.invoke("showOpenDialog", { options }),
     showSaveDialog: (options) => ipcRenderer.invoke("showSaveDialog", { options }),
     triggerExtensionRescan: (extensionId) => ipcRenderer.invoke("triggerExtensionRescan", { extensionId }),
diff --git a/src/renderer/Core/I18n/getCoreResources.ts b/src/renderer/Core/I18n/getCoreResources.ts
index 9d4de4e2..f90b548b 100644
--- a/src/renderer/Core/I18n/getCoreResources.ts
+++ b/src/renderer/Core/I18n/getCoreResources.ts
@@ -82,6 +82,20 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     importExportDescription: "Import or export all settings from or to a JSON file",
                     importSettings: "Import",
                     exportSettings: "Export",
+                    customSettingsFilePath: "Custom settings file path",
+                    setCustomSettingsFilePath: "Set custom settings file path",
+                    selectFile: "Select file",
+                    customSettingsFilePathDialogTitle: "A custom settings file path has been set",
+                    customSettingsFilePathDialogDescription:
+                        "To make the custom settings file path take effect, you need to restart Ueli. Do you want to restart now?",
+                    restartNow: "Yes, restart now",
+                    no: "No",
+                    remove: "Remove",
+                    customSettingsFileValidationDialogTitle:
+                        "The selected file doesn't seem to be a valid settings file",
+                    customSettingsFileValidationDialogDescription:
+                        "Make sure that the selected file exists and contains valid JSON.",
+                    close: "Close",
                 },
                 "de-CH": {
                     title: "Allgemein",
@@ -119,6 +133,20 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                         "Importiere oder exportiere alle Einstellungen von oder in eine JSON-Datei",
                     importSettings: "Import",
                     exportSettings: "Export",
+                    customSettingsFilePath: "Benutzerdefinierter Einstellungsdateipfad",
+                    setCustomSettingsFilePath: "Benutzerdefinierten Einstellungsdateipfad festlegen",
+                    selectFile: "Datei auswählen",
+                    customSettingsFilePathDialogTitle: "Ein benutzerdefinierter Einstellungsdateipfad wurde festgelegt",
+                    customSettingsFilePathDialogDescription:
+                        "Um den benutzerdefinierten Einstellungsdateipfad wirksam zu machen, musst du Ueli neu starten. Willst du jetzt neu starten?",
+                    restartNow: "Ja, jetzt neu starten",
+                    no: "Nein",
+                    remove: "Entfernen",
+                    customSettingsFileValidationDialogTitle:
+                        "Die ausgewählte Datei scheint keine gültige Einstellungsdatei zu sein",
+                    customSettingsFileValidationDialogDescription:
+                        "Stelle sicher, dass die ausgewählte Datei existiert und gültiges JSON enthält.",
+                    close: "Schliessen",
                 },
             },
         },
diff --git a/src/renderer/Core/Settings/Pages/General/General.tsx b/src/renderer/Core/Settings/Pages/General/General.tsx
index 02f3ef9d..095acb5f 100644
--- a/src/renderer/Core/Settings/Pages/General/General.tsx
+++ b/src/renderer/Core/Settings/Pages/General/General.tsx
@@ -8,6 +8,7 @@ import { HotkeySettings } from "./HotKey";
 import { ImportExport } from "./ImportExport";
 import { Language } from "./Language";
 import { SearchHistory } from "./SearchHistory";
+import { SetCustomSettingsFilePath } from "./SetCustomSettingsFilePath";
 import { UrlImageGenerator } from "./UrlImageGenerator";
 
 export const General = () => {
@@ -32,6 +33,9 @@ export const General = () => {
             <SettingGroup title={t("importExport")}>
                 <ImportExport />
             </SettingGroup>
+            <SettingGroup title={t("customSettingsFilePath")}>
+                <SetCustomSettingsFilePath />
+            </SettingGroup>
         </SettingGroupList>
     );
 };
diff --git a/src/renderer/Core/Settings/Pages/General/SetCustomSettingsFilePath.tsx b/src/renderer/Core/Settings/Pages/General/SetCustomSettingsFilePath.tsx
new file mode 100644
index 00000000..e4232f51
--- /dev/null
+++ b/src/renderer/Core/Settings/Pages/General/SetCustomSettingsFilePath.tsx
@@ -0,0 +1,115 @@
+import { Setting } from "@Core/Settings/Setting";
+import {
+    Button,
+    Dialog,
+    DialogActions,
+    DialogBody,
+    DialogContent,
+    DialogSurface,
+    DialogTitle,
+    DialogTrigger,
+    Tooltip,
+} from "@fluentui/react-components";
+import { DismissRegular, DocumentRegular } from "@fluentui/react-icons";
+import { useState } from "react";
+import { useTranslation } from "react-i18next";
+
+export const SetCustomSettingsFilePath = () => {
+    const { t } = useTranslation("settingsGeneral");
+
+    const [dialogIsOpen, setDialogIsOpen] = useState(false);
+    const [validationDialogIsOpen, setValidationDialogIsOpen] = useState(false);
+
+    const [customSettingsFilePath, setCustomSettingsFilePath] = useState<string | undefined>(
+        window.ContextBridge.ipcRenderer.sendSync("getCustomSettingsFilePath"),
+    );
+
+    const removeCustomSettingsFilePath = () => {
+        window.ContextBridge.ipcRenderer.send("removeCustomSettingsFilePath");
+        setCustomSettingsFilePath(undefined);
+    };
+
+    const selectFile = async (): Promise<string | undefined> => {
+        const { canceled, filePaths } = await window.ContextBridge.showOpenDialog({
+            defaultPath: "ueli9.settings.json",
+            properties: ["openFile"],
+            filters: [{ name: "JSON", extensions: ["json"] }],
+        });
+
+        return !canceled && filePaths.length ? filePaths[0] : undefined;
+    };
+
+    const selectCustomSettingsFilePath = async (filePath: string) => {
+        const isValid: boolean = window.ContextBridge.ipcRenderer.sendSync("isValidSettingsFile", { filePath });
+
+        if (!isValid) {
+            setValidationDialogIsOpen(true);
+            return;
+        }
+
+        await window.ContextBridge.ipcRenderer.invoke("setCustomSettingsFilePath", { filePath });
+        setCustomSettingsFilePath(filePath);
+        setDialogIsOpen(true);
+    };
+
+    return (
+        <Setting
+            label={t("setCustomSettingsFilePath")}
+            description={customSettingsFilePath}
+            control={
+                <div style={{ display: "flex", flexDirection: "row", gap: 4 }}>
+                    <Tooltip withArrow relationship="label" content={t("selectFile")}>
+                        <Button
+                            onClick={async () => {
+                                const filePath = await selectFile();
+                                if (filePath) {
+                                    await selectCustomSettingsFilePath(filePath);
+                                }
+                            }}
+                            icon={<DocumentRegular />}
+                        />
+                    </Tooltip>
+                    <Dialog open={dialogIsOpen} onOpenChange={(_, { open }) => setDialogIsOpen(open)}>
+                        <DialogSurface>
+                            <DialogBody>
+                                <DialogTitle>{t("customSettingsFilePathDialogTitle")}</DialogTitle>
+                                <DialogContent>{t("customSettingsFilePathDialogDescription")}</DialogContent>
+                                <DialogActions>
+                                    <Button onClick={() => window.ContextBridge.restartApp()} appearance="primary">
+                                        {t("restartNow")}
+                                    </Button>
+                                    <DialogTrigger disableButtonEnhancement>
+                                        <Button appearance="secondary">{t("no")}</Button>
+                                    </DialogTrigger>
+                                </DialogActions>
+                            </DialogBody>
+                        </DialogSurface>
+                    </Dialog>
+                    <Dialog
+                        open={validationDialogIsOpen}
+                        onOpenChange={(_, { open }) => setValidationDialogIsOpen(open)}
+                    >
+                        <DialogSurface>
+                            <DialogBody>
+                                <DialogTitle>{t("customSettingsFileValidationDialogTitle")}</DialogTitle>
+                                <DialogContent>{t("customSettingsFileValidationDialogDescription")}</DialogContent>
+                                <DialogActions>
+                                    <DialogTrigger disableButtonEnhancement>
+                                        <Button appearance="secondary">{t("close")}</Button>
+                                    </DialogTrigger>
+                                </DialogActions>
+                            </DialogBody>
+                        </DialogSurface>
+                    </Dialog>
+                    <Tooltip withArrow content={t("remove")} relationship="label">
+                        <Button
+                            disabled={!customSettingsFilePath}
+                            onClick={() => removeCustomSettingsFilePath()}
+                            icon={<DismissRegular />}
+                        />
+                    </Tooltip>
+                </div>
+            }
+        />
+    );
+};
diff --git a/src/renderer/Extensions/SimpleFileSearch/EditFolder.tsx b/src/renderer/Extensions/SimpleFileSearch/EditFolder.tsx
index 072e90fa..5a166855 100644
--- a/src/renderer/Extensions/SimpleFileSearch/EditFolder.tsx
+++ b/src/renderer/Extensions/SimpleFileSearch/EditFolder.tsx
@@ -117,7 +117,7 @@ export const EditFolder = ({ initialFolderSetting, onSave }: EditFolderProps) =>
                             </Field>
 
                             <div style={{ display: "flex", flexDirection: "column" }}>
-                                <label id="searchFor">Search for</label>
+                                <label id="searchFor">{t("searchFor")}</label>
                                 <Dropdown
                                     id="searchFor"
                                     value={t(`searchFor.${temporaryFolderSetting.searchFor}`)}
@@ -126,9 +126,9 @@ export const EditFolder = ({ initialFolderSetting, onSave }: EditFolderProps) =>
                                         setSearchFor(optionValue as FolderSetting["searchFor"])
                                     }
                                 >
-                                    <Option value="files">Files</Option>
-                                    <Option value="folders">Folders</Option>
-                                    <Option value="filesAndFolders">Files and Folders</Option>
+                                    <Option value="files">{t("searchFor.files")}</Option>
+                                    <Option value="folders">{t("searchFor.folders")}</Option>
+                                    <Option value="filesAndFolders">{t("searchFor.filesAndFolders")}</Option>
                                 </Dropdown>
                             </div>
 


Test patch:
diff --git a/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathResolver.test.ts b/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathResolver.test.ts
new file mode 100644
index 00000000..cb43d382
--- /dev/null
+++ b/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathResolver.test.ts
@@ -0,0 +1,198 @@
+import type { FileSystemUtility } from "@Core/FileSystemUtility";
+import type { App } from "electron";
+import { join } from "path";
+import { describe, expect, it, vi } from "vitest";
+import { CustomSettingsFilePathResolver } from "./CustomSettingsFilePathResolver";
+
+describe(CustomSettingsFilePathResolver, () => {
+    const createCustomSettingsFilePathResolver = ({
+        homePath,
+        configFileExists,
+        config,
+    }: {
+        homePath: string;
+        configFileExists: boolean;
+        config: Record<string, string>;
+    }) => {
+        const getPathMock = vi.fn().mockReturnValue(homePath);
+        const existsSyncMock = vi.fn().mockReturnValue(configFileExists);
+        const readJsonFileSyncMock = vi.fn().mockReturnValue(config);
+        const writeJsonFileMock = vi.fn();
+        const writeJsonFileSyncMock = vi.fn();
+
+        const app = <App>{ getPath: (n) => getPathMock(n) };
+
+        const fileSystemUtility = <FileSystemUtility>{
+            existsSync: (f) => existsSyncMock(f),
+            readJsonFileSync: (f) => readJsonFileSyncMock(f),
+            writeJsonFile: (d, f) => writeJsonFileMock(d, f),
+            writeJsonFileSync: (d, f) => writeJsonFileSyncMock(d, f),
+        };
+
+        const customSettingsFilePathResolver = new CustomSettingsFilePathResolver(app, fileSystemUtility);
+
+        return {
+            customSettingsFilePathResolver,
+            getPathMock,
+            existsSyncMock,
+            readJsonFileSyncMock,
+            writeJsonFileMock,
+            writeJsonFileSyncMock,
+        };
+    };
+
+    describe(CustomSettingsFilePathResolver.prototype.isEnabled, () => {
+        it("should return false if config file does not exist", () => {
+            const { customSettingsFilePathResolver, getPathMock, existsSyncMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: {},
+                    configFileExists: false,
+                });
+
+            expect(customSettingsFilePathResolver.isEnabled()).toBe(false);
+
+            expect(getPathMock).toHaveBeenCalledWith("home");
+            expect(existsSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+        });
+
+        it("should return false if config file exists but doesnt have a settingsFilePath property", () => {
+            const { customSettingsFilePathResolver, getPathMock, existsSyncMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: {},
+                    configFileExists: true,
+                });
+
+            expect(customSettingsFilePathResolver.isEnabled()).toBe(false);
+
+            expect(getPathMock).toHaveBeenCalledWith("home");
+            expect(existsSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+        });
+
+        it("should return true if config file exists and has a settingsFilePath property", () => {
+            const { customSettingsFilePathResolver, getPathMock, existsSyncMock, readJsonFileSyncMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: { settingsFilePath: "my-custon-settings-file.json" },
+                    configFileExists: true,
+                });
+
+            expect(customSettingsFilePathResolver.isEnabled()).toBe(true);
+
+            expect(getPathMock).toHaveBeenCalledWith("home");
+            expect(existsSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+            expect(readJsonFileSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+        });
+    });
+
+    describe(CustomSettingsFilePathResolver.prototype.remove, () => {
+        it("should write the new settings file path to the config file", async () => {
+            const { customSettingsFilePathResolver, readJsonFileSyncMock, writeJsonFileSyncMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: { settingsFilePath: "old-file.json" },
+                    configFileExists: true,
+                });
+
+            await customSettingsFilePathResolver.remove();
+
+            expect(readJsonFileSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+            expect(writeJsonFileSyncMock).toHaveBeenCalledWith({}, join("home", "ueli9.config.json"));
+        });
+
+        it("should do nothing if the current settings dont have a settingsFilePath property", async () => {
+            const { customSettingsFilePathResolver, readJsonFileSyncMock, writeJsonFileSyncMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: {},
+                    configFileExists: true,
+                });
+
+            await customSettingsFilePathResolver.remove();
+
+            expect(readJsonFileSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+            expect(writeJsonFileSyncMock).toHaveBeenCalledWith({}, join("home", "ueli9.config.json"));
+        });
+    });
+
+    describe(CustomSettingsFilePathResolver.prototype.resolve, () => {
+        it("should return undefined if config file does not exist", () => {
+            const { customSettingsFilePathResolver, getPathMock, existsSyncMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: {},
+                    configFileExists: false,
+                });
+
+            expect(customSettingsFilePathResolver.resolve()).toBe(undefined);
+            expect(getPathMock).toHaveBeenCalledWith("home");
+            expect(existsSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+        });
+
+        it("should return undefined if config file exists but doesnt have a settingsFilePath property", () => {
+            const { customSettingsFilePathResolver, getPathMock, existsSyncMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: {},
+                    configFileExists: true,
+                });
+
+            expect(customSettingsFilePathResolver.resolve()).toBe(undefined);
+            expect(getPathMock).toHaveBeenCalledWith("home");
+            expect(existsSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+        });
+
+        it("should return the settingsFilePath if config file exists and has a settingsFilePath property", () => {
+            const { customSettingsFilePathResolver, getPathMock, existsSyncMock, readJsonFileSyncMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: { settingsFilePath: "myCustomConfigFile.json" },
+                    configFileExists: true,
+                });
+
+            expect(customSettingsFilePathResolver.resolve()).toBe("myCustomConfigFile.json");
+            expect(getPathMock).toHaveBeenCalledWith("home");
+            expect(existsSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+            expect(readJsonFileSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+        });
+    });
+
+    describe(CustomSettingsFilePathResolver.prototype.writeFilePathToConfigFile, () => {
+        it("should update the existing settingsFilePath in the config file", async () => {
+            const { customSettingsFilePathResolver, readJsonFileSyncMock, writeJsonFileMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: { settingsFilePath: "old-file.json" },
+                    configFileExists: true,
+                });
+
+            await customSettingsFilePathResolver.writeFilePathToConfigFile("new-file.json");
+
+            expect(readJsonFileSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+
+            expect(writeJsonFileMock).toHaveBeenCalledWith(
+                { settingsFilePath: "new-file.json" },
+                join("home", "ueli9.config.json"),
+            );
+        });
+
+        it("should add the the new settingsFilePath to the config file if it the property is not there yet", async () => {
+            const { customSettingsFilePathResolver, readJsonFileSyncMock, writeJsonFileMock } =
+                createCustomSettingsFilePathResolver({
+                    homePath: "home",
+                    config: {},
+                    configFileExists: true,
+                });
+
+            await customSettingsFilePathResolver.writeFilePathToConfigFile("new-file.json");
+
+            expect(readJsonFileSyncMock).toHaveBeenCalledWith(join("home", "ueli9.config.json"));
+
+            expect(writeJsonFileMock).toHaveBeenCalledWith(
+                { settingsFilePath: "new-file.json" },
+                join("home", "ueli9.config.json"),
+            );
+        });
+    });
+});
diff --git a/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathValidator.test.ts b/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathValidator.test.ts
new file mode 100644
index 00000000..d94ff71a
--- /dev/null
+++ b/src/main/Core/SettingsFile/Resolver/CustomSettingsFilePathValidator.test.ts
@@ -0,0 +1,55 @@
+import type { FileSystemUtility } from "@Core/FileSystemUtility";
+import { describe, expect, it, vi } from "vitest";
+import { CustomSettingsFilePathValidator } from "./CustomSettingsFilePathValidator";
+
+describe(CustomSettingsFilePathValidator, () => {
+    describe(CustomSettingsFilePathValidator.prototype.validate, () => {
+        it("should return false if the file does not exist", () => {
+            const existsSyncMock = vi.fn().mockReturnValue(false);
+
+            const fileSystemUtility = <FileSystemUtility>{ existsSync: (f) => existsSyncMock(f) };
+
+            const customSettingsFilePathValidator = new CustomSettingsFilePathValidator(fileSystemUtility);
+
+            expect(customSettingsFilePathValidator.validate("non-existing-file.json")).toBe(false);
+            expect(existsSyncMock).toHaveBeenCalledWith("non-existing-file.json");
+        });
+
+        it("should return false if the file is not a valid JSON", () => {
+            const existsSyncMock = vi.fn().mockReturnValue(true);
+
+            const readJsonFileSyncMock = vi.fn().mockImplementation(() => {
+                throw new Error("Invalid JSON");
+            });
+
+            const fileSystemUtility = <FileSystemUtility>{
+                existsSync: (f) => existsSyncMock(f),
+                readJsonFileSync: (f) => readJsonFileSyncMock(f),
+            };
+
+            const customSettingsFilePathValidator = new CustomSettingsFilePathValidator(fileSystemUtility);
+
+            expect(customSettingsFilePathValidator.validate("invalid-json-file.json")).toBe(false);
+
+            expect(existsSyncMock).toHaveBeenCalledWith("invalid-json-file.json");
+            expect(readJsonFileSyncMock).toHaveBeenCalledWith("invalid-json-file.json");
+        });
+
+        it("should return true if the file exists and is a valid JSON", () => {
+            const existsSyncMock = vi.fn().mockReturnValue(true);
+            const readJsonFileSyncMock = vi.fn().mockReturnValue({});
+
+            const fileSystemUtility = <FileSystemUtility>{
+                existsSync: (f) => existsSyncMock(f),
+                readJsonFileSync: (f) => readJsonFileSyncMock(f),
+            };
+
+            const customSettingsFilePathValidator = new CustomSettingsFilePathValidator(fileSystemUtility);
+
+            expect(customSettingsFilePathValidator.validate("invalid-json-file.json")).toBe(true);
+
+            expect(existsSyncMock).toHaveBeenCalledWith("invalid-json-file.json");
+            expect(readJsonFileSyncMock).toHaveBeenCalledWith("invalid-json-file.json");
+        });
+    });
+});