Repository: oliverschwendener/ueli
Pull request #1404 (2025-03-31 23:53:10)

add japanese localization
I have added Japanese notation to make it easier for me to use.
I have Mac only, so translations for other OS may be a little less appropriate.

oliverschwendener: Thanks for your contribution. Please make sure that all commits are signed, otherwise we won't merge this PR.
MorimotoShimei: Sorry, added my signature.
MorimotoShimei: Sorry again, my understanding of what to do was insufficient.
Corrected.
oliverschwendener: @MorimotoShimei Are you willing to maintain the Japanese translations in the long term? Meaning, if more extensions and features are added, will you update the translations?
MorimotoShimei: > @MorimotoShimei Are you willing to maintain the Japanese translations in the long term? Meaning, if more extensions and features are added, will you update the translations?

Thanks, but it may be hard to do long term.
I don't know if I will be able to translate each release in time. I have to work for a living.
I'd send PR of the translation when implemented new extensions, I hope you'll take a look at it.
oliverschwendener: > I have to work for a living.

We all have ;) Everyone working on this project is doing it on a voluntary basis.

I'm just afraid that we now add Japanese translations that won't be well maintained with further development. But I guess it's fine as it will just fall back to English if a future extension doesn't support Japanese translations, so no worries. Would be cool if you could check in from time to time. But no pressure :)

Patch:
diff --git a/docs/Extensions/WebSearch/README.md b/docs/Extensions/WebSearch/README.md
index a8a62527..2713bdfe 100644
--- a/docs/Extensions/WebSearch/README.md
+++ b/docs/Extensions/WebSearch/README.md
@@ -7,7 +7,7 @@ This extension allows you to search the web with Google or DuckDuckGo. Search fo
 ## Settings
 
 - Search Engine: the search engine to use.
-- Locale: the location in which you want to search (currently only en-US and de-CH are supported).
+- Locale: the location in which you want to search (currently only en-US, de-CH and ja-JP are supported).
 - Show instant search result: wether to show a search result in the main search view for the current search term.
 
 ## About this extension
diff --git a/electron-builder.config.js b/electron-builder.config.js
index 0e9b7142..65e7baf0 100644
--- a/electron-builder.config.js
+++ b/electron-builder.config.js
@@ -38,7 +38,7 @@ const platformSpecificConfig = {
             identityName: "1915OliverSchwendener.Ueli",
             publisher: "CN=AD6BF16D-50E3-4FD4-B769-78A606AFF75E",
             publisherDisplayName: "Oliver Schwendener",
-            languages: ["en-US", "de-CH"],
+            languages: ["en-US", "de-CH", "ja-JP"],
         },
         win: {
             icon: "assets/Build/app-icon-dark-transparent.png",
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/SettingsWindow/SettingsWindowManager.ts b/src/main/Core/SettingsWindow/SettingsWindowManager.ts
index 0122321a..dc1d0ed2 100644
--- a/src/main/Core/SettingsWindow/SettingsWindowManager.ts
+++ b/src/main/Core/SettingsWindow/SettingsWindowManager.ts
@@ -31,6 +31,7 @@ export class SettingsWindowManager {
         const { t } = this.translator.createT({
             "en-US": { settingsWindowTitle: "Settings" },
             "de-CH": { settingsWindowTitle: "Einstellungen" },
+            "ja-JP": { settingsWindowTitle: "設定" },
         });
 
         return t("settingsWindowTitle");
diff --git a/src/main/Core/TrayIcon/resources.ts b/src/main/Core/TrayIcon/resources.ts
index 06c84159..1dbb777e 100644
--- a/src/main/Core/TrayIcon/resources.ts
+++ b/src/main/Core/TrayIcon/resources.ts
@@ -18,4 +18,12 @@ export const resources: Resources<TrayIconTranslations> = {
         "trayIcon.contextMenu.hotkey": "Tastenkombination",
         "trayIcon.contextMenu.hotkey.tooltip": "Klick um die Tastenkombination zu aktivieren/deaktivieren",
     },
+    "ja-JP": {
+        "trayIcon.contextMenu.about": "Ueliについて",
+        "trayIcon.contextMenu.quit": "終了",
+        "trayIcon.contextMenu.settings": "設定",
+        "trayIcon.contextMenu.show": "入力パネル",
+        "trayIcon.contextMenu.hotkey": "ホットキー",
+        "trayIcon.contextMenu.hotkey.tooltip": "クリックで有効無効を切り替える",
+    },
 };
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/AppearanceSwitcher/AppearanceSwitcher.ts b/src/main/Extensions/AppearanceSwitcher/AppearanceSwitcher.ts
index 5126cc53..ccd9a45f 100644
--- a/src/main/Extensions/AppearanceSwitcher/AppearanceSwitcher.ts
+++ b/src/main/Extensions/AppearanceSwitcher/AppearanceSwitcher.ts
@@ -78,6 +78,12 @@ export class AppearanceSwitcher implements Extension {
                 searchResultItemName: "System-Farbschema umschalten",
                 searchResultItemActionDescription: "System-Farbschema umschalten",
             },
+            "ja-JP": {
+                extensionName: "OSアピアランス切り替え",
+                searchResultItemDescription: "システム",
+                searchResultItemName: "アピアランス切り替え | Toggle System Appearance",
+                searchResultItemActionDescription: "OSのダークモード/ライトモードを切り替えます",
+            },
         };
     }
 }
diff --git a/src/main/Extensions/ApplicationSearch/ApplicationSearch.ts b/src/main/Extensions/ApplicationSearch/ApplicationSearch.ts
index 8fac402d..a7a07580 100644
--- a/src/main/Extensions/ApplicationSearch/ApplicationSearch.ts
+++ b/src/main/Extensions/ApplicationSearch/ApplicationSearch.ts
@@ -104,6 +104,26 @@ export class ApplicationSearch implements Extension {
                 addFileExtension: "Dateierweiterung hinzufügen",
                 includeAppsFromWindowsStore: "Apps aus dem Windows Store einbeziehen",
             },
+            "ja-JP": {
+                extensionName: "アプリケーション検索",
+                searchResultItemDescription: "アプリケーション",
+                openApplication: "開く",
+                openApplicationAsAdministrator: "管理者で開く",
+                copyFilePathToClipboard: "パスをクリップボードにコピー",
+                advanced: "詳細",
+
+                // Settings
+                general: "一般",
+                folders: "フォルダ",
+                fileExtensions: "ファイル拡張子",
+                folderDoesNotExist: "フォルダが存在しません",
+                add: "追加",
+                remove: "削除",
+                addFolder: "フォルダ追加",
+                chooseFolder: "フォルダ選択",
+                addFileExtension: "ファイル拡張子を追加",
+                includeAppsFromWindowsStore: "Windowsストアアプリを含む",
+            },
         };
     }
 }
diff --git a/src/main/Extensions/Base64Conversion/Base64Conversion.ts b/src/main/Extensions/Base64Conversion/Base64Conversion.ts
index 52456ebf..8c6be6c4 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",
@@ -162,6 +167,20 @@ export class Base64Conversion implements Extension {
                 encodePrefix: "Präfix für Kodierung",
                 decodePrefix: "Präfix für Dekodierung",
             },
+            "ja-JP": {
+                extensionName: "Base64変換",
+                searchResultItemDescription: "Base64エンコード/デコード",
+                searchResultItemName: "Base64変換 | Base64 Conversion",
+                searchResultItemActionDescription: "Base64変換対象を開く",
+                copyToClipboard: "結果をクリップボードにコピー",
+                encodePlaceHolder: "エンコードしたい文字列を入力",
+                decodePlaceHolder: "デコードしたい文字列を入力",
+                encoded: "エンコード済み",
+                decoded: "デコード済み",
+                encodeDecodePrefix: "変換時に接頭辞を使用する",
+                encodePrefix: "エンコード時の接頭辞",
+                decodePrefix: "デコード時の接頭辞",
+            },
         };
     }
 
diff --git a/src/main/Extensions/BrowserBookmarks/BrowserBookmarks.ts b/src/main/Extensions/BrowserBookmarks/BrowserBookmarks.ts
index 826faa52..c429b73f 100644
--- a/src/main/Extensions/BrowserBookmarks/BrowserBookmarks.ts
+++ b/src/main/Extensions/BrowserBookmarks/BrowserBookmarks.ts
@@ -168,6 +168,18 @@ export class BrowserBookmarks implements Extension {
                 copyUrlToClipboard: "URL in Zwischenablage kopieren",
                 searchResultItemDescription: "{{browserName}} Lesezeichen",
             },
+            "ja-JP": {
+                extensionName: "ブラウザブックマーク",
+                "searchResultStyle.nameOnly": "名前のみ",
+                "searchResultStyle.urlOnly": "URLのみ",
+                "searchResultStyle.nameAndUrl": "名前とURL",
+                selectBrowsers: "ブラウザを選択",
+                iconType: "アイコン",
+                "iconType.favicon": "Favicon",
+                "iconType.browserIcon": "ブラウザのアイコン",
+                copyUrlToClipboard: "クリップボードからURLをコピー",
+                searchResultItemDescription: "{{browserName}} ブックマーク | {{browserName}} Bookmark",
+            },
         };
     }
 
diff --git a/src/main/Extensions/Calculator/CalculatorExtension.ts b/src/main/Extensions/Calculator/CalculatorExtension.ts
index 3b33e10c..a0703bda 100644
--- a/src/main/Extensions/Calculator/CalculatorExtension.ts
+++ b/src/main/Extensions/Calculator/CalculatorExtension.ts
@@ -114,6 +114,14 @@ export class CalculatorExtension implements Extension {
                 decimalSeparator: "Dezimaltrennzeichen",
                 argumentSeparator: "Argumententrennzeichen",
             },
+            "ja-JP": {
+                extensionName: "電卓",
+                calculatorResult: "計算結果",
+                copyResultToClipboard: "計算結果をクリップボードにコピー",
+                precision: "精度",
+                decimalSeparator: "小数点区切り",
+                argumentSeparator: "引数区切り",
+            },
         };
     }
 
diff --git a/src/main/Extensions/ColorConverter/ColorConverterExtension.ts b/src/main/Extensions/ColorConverter/ColorConverterExtension.ts
index f39a09c6..38df5389 100644
--- a/src/main/Extensions/ColorConverter/ColorConverterExtension.ts
+++ b/src/main/Extensions/ColorConverter/ColorConverterExtension.ts
@@ -64,6 +64,13 @@ export class ColorConverterExtension implements Extension {
                 copyColorToClipboard: "Farbe in die Zwischenablage kopieren",
                 extensionName: "Farbkonverter",
             },
+            "ja-JP": {
+                formats: "フォーマット",
+                selectAColorFormat: "色コードを選択",
+                color: "{{ format }} Color",
+                copyColorToClipboard: "色コードをクリップボードにコピー",
+                extensionName: "色コード変換",
+            },
         };
     }
 
diff --git a/src/main/Extensions/CurrencyConversion/CurrencyConversion.ts b/src/main/Extensions/CurrencyConversion/CurrencyConversion.ts
index de003a2b..fcc35509 100644
--- a/src/main/Extensions/CurrencyConversion/CurrencyConversion.ts
+++ b/src/main/Extensions/CurrencyConversion/CurrencyConversion.ts
@@ -132,6 +132,14 @@ export class CurrencyConversion implements Extension {
                 copyToClipboard: "In Zwischenablage kopieren",
                 currencyConversion: "Währungsumrechnung",
             },
+            "ja-JP": {
+                extensionName: "通貨変換",
+                currencies: "通貨単位",
+                defaultTargetCurrency: "既定の通貨",
+                selectCurrencies: "通貨を選択",
+                copyToClipboard: "クリップボードにコピー",
+                currencyConversion: "通貨変換",
+            },
         };
     }
 
diff --git a/src/main/Extensions/CustomWebSearch/CustomWebSearchExtension.ts b/src/main/Extensions/CustomWebSearch/CustomWebSearchExtension.ts
index 150b4076..a22f0f46 100644
--- a/src/main/Extensions/CustomWebSearch/CustomWebSearchExtension.ts
+++ b/src/main/Extensions/CustomWebSearch/CustomWebSearchExtension.ts
@@ -143,6 +143,28 @@ export class CustomWebSearchExtension implements Extension {
                 remove: "Löschen",
                 cancel: "Abbrechen",
             },
+            "ja-JP": {
+                extensionName: "カスタムウェブ検索",
+                addSearchEngine: "検索エンジンを追加",
+                editSearchEngine: "検索エンジンの設定を編集",
+                searchEngines: "検索エンジン",
+                url: "URL",
+                prefix: "接頭辞",
+                prefixTooltip: "検索のトリガとなる接頭辞です",
+                prefixError: "接頭辞は必須です",
+                prefixInUseError: "この接頭辞は重複しています。別のものにしてください",
+                name: "名前",
+                nameError: "名前は必須です",
+                searchEngineUrl: "URLテンプレート",
+                searchEngineUrlTooltip: "`{{query}}`をURLの検索単語に該当する位置へ置いてください",
+                searchEngineUrlError: "URLテンプレートは`{{query}}`を含んでいる必要があります",
+                encodeSearchTerm: "検索単語をエンコード",
+                encodeSearchTermTooltip: "検索エンジンに渡す前に単語をURLエンコードします",
+                edit: "編集",
+                save: "保存",
+                remove: "削除",
+                cancel: "キャンセル",
+            },
         };
     }
 }
diff --git a/src/main/Extensions/DeeplTranslator/DeeplTranslatorExtension.ts b/src/main/Extensions/DeeplTranslator/DeeplTranslatorExtension.ts
index d9d67264..8925fb32 100644
--- a/src/main/Extensions/DeeplTranslator/DeeplTranslatorExtension.ts
+++ b/src/main/Extensions/DeeplTranslator/DeeplTranslatorExtension.ts
@@ -94,6 +94,13 @@ export class DeeplTranslatorExtension implements Extension {
                 searchResultItemName: "DeepL Übersetzer",
                 searchResultItemActionDescription: "DeepL Übersetzer öffnen",
             },
+            "ja-JP": {
+                extensionName: "DeepL翻訳",
+                openAccount: "DeepLアカウントを開く",
+                searchResultItemDescription: "DeepL翻訳",
+                searchResultItemName: "DeepL翻訳 | DeepL Translator",
+                searchResultItemActionDescription: "DeepL翻訳を開く",
+            },
         };
     }
 
diff --git a/src/main/Extensions/FileSearch/FileSearch.ts b/src/main/Extensions/FileSearch/FileSearch.ts
index 78738512..cdc27d41 100644
--- a/src/main/Extensions/FileSearch/FileSearch.ts
+++ b/src/main/Extensions/FileSearch/FileSearch.ts
@@ -100,6 +100,13 @@ export class FileSearch implements Extension {
                 maxSearchResults: "Maximale Suchergebnisse",
                 searchResultItemName: "Dateien suchen",
             },
+            "ja-JP": {
+                extensionName: "ファイル検索",
+                esFilePath: "すべてCLIのファイルパスにする",
+                fileDoesNotExist: "ファイルが見付かりません",
+                maxSearchResults: "検索上限数",
+                searchResultItemName: "ファイル検索 | Search files",
+            },
         };
     }
 
diff --git a/src/main/Extensions/JetBrainsToolbox/JetBrainsToolboxExtension.ts b/src/main/Extensions/JetBrainsToolbox/JetBrainsToolboxExtension.ts
index ebc15b57..36b0114c 100644
--- a/src/main/Extensions/JetBrainsToolbox/JetBrainsToolboxExtension.ts
+++ b/src/main/Extensions/JetBrainsToolbox/JetBrainsToolboxExtension.ts
@@ -233,6 +233,11 @@ export class JetBrainsToolboxExtension implements Extension {
                 project: "{{tool}} Projekt",
                 openWith: "{{project}} mit {{toolName}} öffnen",
             },
+            "ja-JP": {
+                extensionName: "JetBrains Toolbox",
+                project: "{{tool}} プロジェクト",
+                openWith: "{{project}}を{{toolName}}で開く",
+            },
         };
     }
 }
diff --git a/src/main/Extensions/PasswordGenerator/PasswordGeneratorExtension.ts b/src/main/Extensions/PasswordGenerator/PasswordGeneratorExtension.ts
index 9672bbfa..9f20831a 100644
--- a/src/main/Extensions/PasswordGenerator/PasswordGeneratorExtension.ts
+++ b/src/main/Extensions/PasswordGenerator/PasswordGeneratorExtension.ts
@@ -140,6 +140,23 @@ export class PasswordGeneratorExtension implements Extension {
                 generatorResult: "Generiertes Passwort",
                 copyPasswordToClipboard: "Passwort in die Zwischenablage kopieren",
             },
+            "ja-JP": {
+                extensionName: "パスワード生成",
+                command: "パスワードを生成するコマンド",
+                quantity: "生成するパスワードの数量",
+                passwordLength: "文字列長",
+                includeUppercaseCharacters: "英大文字を含む",
+                includeLowercaseCharacters: "英小文字を含む",
+                includeNumbers: "数字を含む",
+                includeSymbols: "記号を含む",
+                beginWithALetter: "先頭は文字から",
+                noSimilarCharacters: "似ている英数字は使わない(例：i, l, 1, L, o, 0, O, ...)",
+                noDuplicateCharacters: "重複する文字は使わない",
+                noSequentialCharacters: "単純な並びの文字は使わない(例：abc, 123, ...)",
+                resetSymbols: "リセット",
+                generatorResult: "パスワードを生成",
+                copyPasswordToClipboard: "パスワードをクリップボードにコピー",
+            },
         };
     }
 
diff --git a/src/main/Extensions/SimpleFileSearch/SimpleFileSearchExtension.ts b/src/main/Extensions/SimpleFileSearch/SimpleFileSearchExtension.ts
index 303f313f..888c6ee7 100644
--- a/src/main/Extensions/SimpleFileSearch/SimpleFileSearchExtension.ts
+++ b/src/main/Extensions/SimpleFileSearch/SimpleFileSearchExtension.ts
@@ -216,6 +216,27 @@ export class SimpleFileSearchExtension implements Extension {
                 "searchFor.folders": "Ordner",
                 "searchFor.filesAndFolders": "Dateien und Ordner",
             },
+            "ja-JP": {
+                extensionName: "簡易ファイル検索",
+                file: "ファイル",
+                folder: "フォルダ",
+                openFile: "ファイルを開く",
+                openFolder: "フォルダを開く",
+                folders: "複数フォルダ",
+                path: "パス",
+                recursive: "再帰的",
+                add: "追加",
+                addFolder: "フォルダを追加",
+                remove: "削除",
+                chooseFolder: "フォルダを選択",
+                validFolderPath: "有効なフォルダパス",
+                invalidFolderPath: "このフォルダは存在していないように見えます",
+                cancel: "キャンセル",
+                searchFor: "検索対象",
+                "searchFor.files": "ファイル",
+                "searchFor.folders": "フォルダ",
+                "searchFor.filesAndFolders": "ファイルとフォルダ",
+            },
         };
     }
 
diff --git a/src/main/Extensions/SystemCommands/Linux/linuxTranslations.ts b/src/main/Extensions/SystemCommands/Linux/linuxTranslations.ts
index f24dcf0f..63550a93 100644
--- a/src/main/Extensions/SystemCommands/Linux/linuxTranslations.ts
+++ b/src/main/Extensions/SystemCommands/Linux/linuxTranslations.ts
@@ -17,4 +17,9 @@ export const linuxResources: Resources<LinuxTranslations> = {
         searchResultItemDescription: "Systembefehl",
         emptyTrash: "Papierkorb leeren",
     },
+    "ja-JP": {
+        extensionName: "システムコマンド",
+        searchResultItemDescription: "システムコマンド",
+        emptyTrash: "ゴミ箱を空にする",
+    },
 };
diff --git a/src/main/Extensions/SystemCommands/Windows/windowsTranslations.ts b/src/main/Extensions/SystemCommands/Windows/windowsTranslations.ts
index 540e0b78..f9345974 100644
--- a/src/main/Extensions/SystemCommands/Windows/windowsTranslations.ts
+++ b/src/main/Extensions/SystemCommands/Windows/windowsTranslations.ts
@@ -35,4 +35,15 @@ export const windowsResources: Resources<WindowsTranslations> = {
         searchResultItemDescription: "Systembefehl",
         emptyTrash: "Paperkorb leeren",
     },
+    "ja-JP": {
+        extensionName: "システムコマンド",
+        shutdown: "シャットダウン",
+        restart: "再起動",
+        signOut: "サインアウト",
+        lock: "画面ロック",
+        sleep: "スリープ",
+        hibernate: "ハイバネーション",
+        searchResultItemDescription: "システムコマンド",
+        emptyTrash: "ゴミ箱を空にする",
+    },
 };
diff --git a/src/main/Extensions/SystemCommands/macOS/macOsTranslations.ts b/src/main/Extensions/SystemCommands/macOS/macOsTranslations.ts
index 702e9c72..b60c0182 100644
--- a/src/main/Extensions/SystemCommands/macOS/macOsTranslations.ts
+++ b/src/main/Extensions/SystemCommands/macOS/macOsTranslations.ts
@@ -32,4 +32,14 @@ export const macOsResources: Resources<MacOsTranslations> = {
         lock: "Sperren",
         emptyTrash: "Papierkorb leeren",
     },
+    "ja-JP": {
+        extensionName: "システムコマンド",
+        searchResultItemDescription: "システムコマンド",
+        shutdown: "シャットダウン",
+        restart: "再起動...",
+        logOut: "ログアウト",
+        sleep: "スリープ",
+        lock: "画面ロック",
+        emptyTrash: "ゴミ箱を空にする",
+    },
 };
diff --git a/src/main/Extensions/SystemSettings/SystemSettingsExtension.ts b/src/main/Extensions/SystemSettings/SystemSettingsExtension.ts
index 242db86b..b31d9e19 100644
--- a/src/main/Extensions/SystemSettings/SystemSettingsExtension.ts
+++ b/src/main/Extensions/SystemSettings/SystemSettingsExtension.ts
@@ -56,6 +56,9 @@ export class SystemSettingsExtension implements Extension {
             "de-CH": {
                 extensionName: "Systemeinstellungen",
             },
+            "ja-JP": {
+                extensionName: "システム設定",
+            },
         };
     }
 }
diff --git a/src/main/Extensions/TerminalLauncher/TerminalLauncherExtension.ts b/src/main/Extensions/TerminalLauncher/TerminalLauncherExtension.ts
index c4335d24..776ef228 100644
--- a/src/main/Extensions/TerminalLauncher/TerminalLauncherExtension.ts
+++ b/src/main/Extensions/TerminalLauncher/TerminalLauncherExtension.ts
@@ -84,6 +84,16 @@ export class TerminalLauncherExtension implements Extension {
                 defaultActionDescription: "Befehl in {{terminalId}} ausführen",
                 searchResultItemDescription: "In {{terminalId}} öffnen",
             },
+            "ja-JP": {
+                extensionName: "ターミナル起動",
+                prefix: "接頭辞",
+                prefixDescription:
+                    "ターミナル起動のトリガとなる接頭辞です。次のパターンで使用します： <prefix> <command>",
+                terminals: "ターミナル",
+                selectTerminals: "ターミナルを選択",
+                defaultActionDescription: "{{terminalId}}の起動コマンド",
+                searchResultItemDescription: "{{terminalId}}を起動",
+            },
         };
     }
 
diff --git a/src/main/Extensions/UeliCommand/UeliCommandExtension.ts b/src/main/Extensions/UeliCommand/UeliCommandExtension.ts
index c136c3ad..2a45e927 100644
--- a/src/main/Extensions/UeliCommand/UeliCommandExtension.ts
+++ b/src/main/Extensions/UeliCommand/UeliCommandExtension.ts
@@ -173,6 +173,17 @@ export class UeliCommandExtension implements Extension {
                 disableHotkey: "Tastenkombination deaktivieren",
                 enableHotkey: "Tastenkombination aktivieren",
             },
+            "ja-JP": {
+                extensionName: "Ueliコマンド",
+                description: "Ueliコマンド",
+                openSettings: "Ueli設定を開く | Open Ueli settings",
+                openExtensions: "Ueli拡張機能を開く | Browse Ueli extensions",
+                centerWindow: "入力パネルを中央に移動 | Center Ueli window",
+                quitUeli: "Ueliを終了 | Quit Ueli",
+                rescanExtensions: "拡張機能を再読み込み | Rescan extensions",
+                disableHotkey: "ホットキーを無効にする | Disable hotkey",
+                enableHotkey: "ホットキーを有効にする | Enable hotkey",
+            },
         };
     }
 }
diff --git a/src/main/Extensions/UuidGenerator/UuidGeneratorExtension.ts b/src/main/Extensions/UuidGenerator/UuidGeneratorExtension.ts
index fd3cb00a..291a239c 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",
@@ -171,6 +176,25 @@ export class UuidGeneratorExtension implements Extension {
                 addSearchResultFormat: "Format hinzufügen",
                 removeSearchResultFormat: "Format entfernen",
             },
+            "ja-JP": {
+                copyUuidToClipboard: "UUIDをクリップボードにコピー",
+                copyUuidsToClipboard: "複数UUIDをクリップボードにコピー",
+                extensionName: "UUID/GUIDを生成",
+                generatorResult: "UUID/GUID",
+                openGeneratorDescription: "複数UUID/GUIDを生成",
+                openGeneratorName: "UUID/GUIDを生成 | UUID / GUID Generator",
+                uuidVersion: "UUIDバージョン",
+                numberOfUuids: "生成するUUIDの数",
+                validateStrictly: "UUIDの構造を検証する",
+                uppercase: "大文字に変換",
+                hyphens: "ハイフンで区切る",
+                braces: "括弧で囲む",
+                quotes: "引用符で囲む",
+                defaultGeneratorFormat: "生成する書式の設定",
+                searchResultFormats: "検索",
+                addSearchResultFormat: "書式を追加",
+                removeSearchResultFormat: "書式を削除",
+            },
         };
     }
 
diff --git a/src/main/Extensions/VSCode/VSCodeExtension.ts b/src/main/Extensions/VSCode/VSCodeExtension.ts
index 204fb6d4..894d87b7 100644
--- a/src/main/Extensions/VSCode/VSCodeExtension.ts
+++ b/src/main/Extensions/VSCode/VSCodeExtension.ts
@@ -219,6 +219,16 @@ export class VSCodeExtension implements Extension {
                     "Use %s where the selected file/project should be inserted. It uses the --file-uri or --folder-uri switch",
                 showPath: "Show file/folder path",
             },
+            "ja-JP": {
+                extensionName: "Visual Studio Code",
+                prefix: "接頭辞",
+                prefixDescription:
+                    "Visual Studio Code起動のトリガとなる接頭辞です。次のパターンで使用します： <prefix> <command>",
+                command: "コマンド",
+                commandTooltip:
+                    "%s が開きたいファイル/プロジェクトに置換されます。これは起動スイッチの --file-uri もしくは --folder-uri で使用されます",
+                showPath: "Show file/folder path",
+            },
         };
     }
 
diff --git a/src/main/Extensions/WebSearch/DuckDuckGoWebSearchEngine.ts b/src/main/Extensions/WebSearch/DuckDuckGoWebSearchEngine.ts
index 8d006c83..458259b9 100644
--- a/src/main/Extensions/WebSearch/DuckDuckGoWebSearchEngine.ts
+++ b/src/main/Extensions/WebSearch/DuckDuckGoWebSearchEngine.ts
@@ -40,6 +40,7 @@ export class DuckDuckGoWebSearchEngine implements WebSearchEngine {
         const map: Record<string, string> = {
             "en-US": "us-en",
             "de-CH": "ch-de",
+            "ja-JP": "jp-jp",
         };
 
         return map[locale] ?? map["en-US"];
diff --git a/src/main/Extensions/WebSearch/WebSearchExtension.ts b/src/main/Extensions/WebSearch/WebSearchExtension.ts
index 9cfb6e10..7d117b6b 100644
--- a/src/main/Extensions/WebSearch/WebSearchExtension.ts
+++ b/src/main/Extensions/WebSearch/WebSearchExtension.ts
@@ -143,6 +143,12 @@ export class WebSearchExtension implements Extension {
                 locale: "Sprachregion",
                 showInstantSearchResult: "Sofortiges Suchergebnis anzeigen",
             },
+            "ja-JP": {
+                extensionName: "ウェブ検索",
+                searchEngine: "検索エンジン",
+                locale: "言語",
+                showInstantSearchResult: "検索結果を表示",
+            },
         };
     }
 
diff --git a/src/main/Extensions/Workflow/WorkflowExtension.ts b/src/main/Extensions/Workflow/WorkflowExtension.ts
index 42dddc33..7fbef973 100644
--- a/src/main/Extensions/Workflow/WorkflowExtension.ts
+++ b/src/main/Extensions/Workflow/WorkflowExtension.ts
@@ -160,6 +160,48 @@ export class WorkflowExtension implements Extension {
                 yes: "Ja",
                 no: "Nein",
             },
+            "ja-JP": {
+                extensionName: "ワークフロー",
+                searchResultItemDescription: "ワークフロー",
+                searchResultItemActionDescription: "ワークフローを呼び出す",
+
+                // Settings
+                addWorkflow: "ワークフローを追加",
+                editWorkflow: "編集",
+                deleteWorkflow: "削除",
+                newWorkflow: "新規ワークフロー",
+                workflows: "ワークフロー",
+                actions: "アクション",
+                workflowName: "名前",
+                workflowNamePlaceholder: "ワークフローに名前を付ける",
+                cancel: "キャンセル",
+                save: "保存",
+                type: "タイプ",
+                selectFile: "ファイルを選択",
+                selectFolder: "フォルダを選択",
+                "type.OpenFile": "ファイルを開く",
+                "type.OpenUrl": "URLを開く",
+                "type.OpenTerminal": "ターミナルを開く",
+                "type.ExecuteCommand": "コマンドを実行",
+                newAction: "新規アクション",
+                actionName: "アクション名",
+                actionNamePlaceholder: "アクションに名前を付ける",
+                addAction: "アクションを追加",
+                "argType.OpenFile": "ファイルパス",
+                "argType.OpenUrl": "URL",
+                "argType.OpenTerminal.command": "ターミナルで実行するコマンド",
+                "argType.ExecuteCommand": "実行コマンド",
+                "argType.OpenFile.placeholder": "ファイルパスを追加",
+                "argType.OpenTerminal.terminal.placeholder": "ターミナルを選択",
+                "argType.OpenTerminal.command.placeholder": "ターミナルで実行するコマンドを追加",
+                "argType.OpenUrl.placeholder": "URLを追加",
+                "argType.ExecuteCommand.placeholder": "コマンドを追加",
+                removeAction: "アクションを削除",
+                removeWorkflowConfirmationTitle: `"{{workflowName}}を削除してもよいですか"`,
+                removeWorkflowConfirmationContent: "本当に削除してもよいですか？",
+                yes: "はい、削除してください",
+                no: "いいえ、やめてください",
+            },
         };
     }
 
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..f106caad 100644
--- a/src/renderer/Core/I18n/getCoreResources.ts
+++ b/src/renderer/Core/I18n/getCoreResources.ts
@@ -21,6 +21,14 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     copiedToClipboard: "Kopiert",
                     rescanning: "Scanne neu...",
                 },
+                "ja-JP": {
+                    settings: "設定",
+                    generalSettings: "一般",
+                    extensionSettings: "拡張機能",
+                    actions: "アクション",
+                    copiedToClipboard: "クリップボードにコピーしました",
+                    rescanning: "再読み込み中...",
+                },
             },
         },
         {
@@ -42,6 +50,14 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     "searchResultGroup.searchResults": "Suchergebnisse",
                     searchBarPlaceholderText: "Suchbegriff eingeben...",
                 },
+                "ja-JP": {
+                    noResultsFoundFor: "検索結果がありません：",
+                    noResultsFound: "見つかりません",
+                    searchHistory: "検索履歴",
+                    "searchResultGroup.favorites": "お気に入り",
+                    "searchResultGroup.searchResults": "検索結果",
+                    searchBarPlaceholderText: "入力してください...",
+                },
             },
         },
         {
@@ -82,6 +98,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 +149,56 @@ 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",
+                },
+                "ja-JP": {
+                    title: "一般",
+                    general: "一般",
+                    hotkey: "ホットキー",
+                    hotkeyEnabled: "ホットキー有効化",
+                    hotkeyBinding: "ホットキーバインド",
+                    validHotkeyBinding: "有効なホットキー",
+                    invalidHotkeyBinding: "無効なホットキー",
+                    invalidHotkeyBindingAltGr: "Ctrl+AltをAltGrの代わりに使います",
+                    saveHotkeyBinding: "保存",
+                    hotkeyBindingMoreInfo: "詳細",
+                    language: "言語",
+                    autostart: "自動開始",
+                    autostartDescription: "コンピュータにログインしたらUeliを自動開始します",
+                    searchHistory: "検索履歴",
+                    searchHistoryEnabled: "検索履歴",
+                    searchHistoryEnabledDescription: "過去の検索履歴を見ることができます",
+                    searchHistoryLimit: "検索履歴の保持上限",
+                    searchHistoryLimitHint: "検索履歴を保持できる数を設定します",
+                    waylandWarning: "ホットキーがおそらく動作していません",
+                    waylandWarningMoreInfo: "詳細",
+                    showAppIconInDock: "アプリケーションのアイコンをドックに表示",
+                    icons: "アイコン",
+                    faviconApi: "Favicon API",
+                    faviconApiDescription: "URLからFaviconを取得します",
+                    webBrowser: "ウェブブラウザ",
+                    useDefaultWebBrowser: "システムのデフォルトブラウザを使用します",
+                    customWebBrowserExecutableFilePath: "ブラウザのパス",
+                    customWebBrowserExecutableFilePathSelectFile: "ファイルを選択",
+                    customWebBrowserCommandlineArguments: "引数",
+                    customWebBrowserName: "ブラウザ名",
+                    importExport: "インポート/エクスポート",
+                    importExportDescription: "全ての設定をJSONでインポート/エクスポートします",
+                    importSettings: "インポート",
+                    exportSettings: "エクスポート",
                 },
             },
         },
@@ -175,6 +255,31 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     "themeSource.light": "Hell",
                     "themeSource.dark": "Dunkel",
                 },
+                "ja-JP": {
+                    title: "外見",
+                    searchBar: "検索バー",
+                    searchBarSize: "大きさ",
+                    "searchBarSize.large": "広い",
+                    "searchBarSize.medium": "中間",
+                    "searchBarSize.small": "狭い",
+                    searchBarAppearance: "検索バーの外見",
+                    "searchBarAppearance.auto": "自動",
+                    "searchBarAppearance.outline": "外周線",
+                    "searchBarAppearance.underline": "下線",
+                    "searchBarAppearance.filled-darker": "背景を暗く",
+                    "searchBarAppearance.filled-lighter": "背景を明るく",
+                    searchResultListLayout: "検索結果をリストにする",
+                    "searchResultListLayout.compact": "簡易",
+                    "searchResultListLayout.detailed": "詳細",
+                    searchBarPlaceholderText: "プレースホルダ",
+                    searchBarPlaceholderTextReset: "リセット",
+                    searchBarShowIcon: "検索アイコンを表示",
+                    themeName: "テーマ",
+                    themeSource: "カラーモード",
+                    "themeSource.system": "システム",
+                    "themeSource.light": "ライトモード",
+                    "themeSource.dark": "ダークモード",
+                },
             },
         },
         {
@@ -196,6 +301,14 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     invokeSearchResultItem: "Suchergebniss ausführen",
                     dragAndDrop: "Drag & Drop",
                 },
+                "ja-JP": {
+                    title: "キーボート & マウス",
+                    singleClickBehavior: "シングルクリックの挙動",
+                    doubleClickBehavior: "ダブルクリックの挙動",
+                    selectSearchResultItem: "検索結果を選択",
+                    invokeSearchResultItem: "検索結果を実行する",
+                    dragAndDrop: "Drag & Drop",
+                },
             },
         },
         {
@@ -224,6 +337,17 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     resetAllSettingsCancel: "Abbrechen",
                     resetAllSettingsConfirm: "Ja, ich bin sicher",
                 },
+                "ja-JP": {
+                    title: "Debug",
+                    resetAllSettings: "全設定をリセット",
+                    resetAllSettingsHint: "すべての設定を初期値にリセットします。変更した内容はすべて失われます",
+                    resetAllSettingsButton: "リセット",
+                    resetAllSettingsDialogTitle: "本当にリセットしますか？",
+                    resetAllSettingsDialogContent:
+                        "すべての設定が初期値にリセットされ、あなたが加えた変更は消失します。",
+                    resetAllSettingsCancel: "リセットをやめます",
+                    resetAllSettingsConfirm: "はい、リセットして変更内容をすべて消してください",
+                },
             },
         },
         {
@@ -235,6 +359,9 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                 "de-CH": {
                     title: "Über",
                 },
+                "ja-JP": {
+                    title: "Ueliについて",
+                },
             },
         },
         {
@@ -260,6 +387,16 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     failedRescan: "Fehler beim neu Scannen. Überprüfe die Logs für mehr Informationen.",
                     noSettingsAvailable: "Keine Einstellungen verfügbar",
                 },
+                "ja-JP": {
+                    title: "拡張機能",
+                    name: "拡張名",
+                    author: "作者",
+                    enabled: "有効",
+                    rescan: "再読み込み",
+                    successfulRescan: "再読み込み完了",
+                    failedRescan: "再読み込みに失敗しました。ログを参照してください",
+                    noSettingsAvailable: "設定項目はありません",
+                },
             },
         },
         {
@@ -293,6 +430,20 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     removeExcludedItem: "Element entfernen",
                     keyboardShortcutForManualRescan: "Tastatur-Shortcut für manuelles neu Scannen",
                 },
+                "ja-JP": {
+                    title: "検索エンジン",
+                    searchEngine: "検索エンジン",
+                    automaticRescan: "自動再読み込み",
+                    fuzziness: "あいまい検索",
+                    maxResultLength: "検索結果の上限",
+                    rescanIntervalInSeconds: "再読み込み間隔 (秒)",
+                    rescanIntervalTooShort: "再読み込み間隔は10秒以上にしてください",
+                    rescanIntervalResetToDefault: "初期値にリセット",
+                    excludedItems: "除外対象",
+                    noExcludedItems: "除外対象はありません",
+                    removeExcludedItem: "削除",
+                    keyboardShortcutForManualRescan: "再読み込みのキーボードショートカット",
+                },
             },
         },
         {
@@ -308,6 +459,11 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     numberOfColumns: "Anzahl Spalten",
                     remove: "Entfernen",
                 },
+                "ja-JP": {
+                    title: "お気に入り",
+                    numberOfColumns: "カラム数",
+                    remove: "削除",
+                },
             },
         },
         {
@@ -343,6 +499,21 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     "scrollBehavior.instant": "Sofort",
                     visibleOnAllWorkspaces: "Auf allen Workspaces sichtbar",
                 },
+                "ja-JP": {
+                    title: "入力パネル",
+                    hideWindowOn: "非表示にするタイミング",
+                    "hideWindow.placeholder": "選択した",
+                    "hideWindowOn.blur": "フォーカスが外れた",
+                    "hideWindowOn.afterInvocation": "呼び出し後",
+                    "hideWindowOn.escapePressed": "ESCキーを押した",
+                    alwaysOnTop: "最前面に表示",
+                    showOnStartup: "開始時に表示",
+                    scrollBehavior: "スクロールバーの挙動",
+                    "scrollBehavior.auto": "自動",
+                    "scrollBehavior.smooth": "滑らか",
+                    "scrollBehavior.instant": "アイテム単位",
+                    visibleOnAllWorkspaces: "すべてのワークスペースで表示",
+                },
             },
         },
         {
@@ -362,6 +533,13 @@ export const getCoreResources = (): { namespace: string; resources: Resources<Tr
                     addToFavorites: "Zu Favoriten hinzufügen",
                     removeFromFavorites: "Von Favoriten entfernen",
                 },
+                "ja-JP": {
+                    excludeFromSearchResults: "検索結果から除く",
+                    openUrlInBrowser: "URLをブラウザで開く",
+                    showInFileExplorer: "ファイルを表示する",
+                    addToFavorites: "お気に入りに追加",
+                    removeFromFavorites: "お気に入りから削除",
+                },
             },
         },
     ];
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/Language.tsx b/src/renderer/Core/Settings/Pages/General/Language.tsx
index 57a7e91d..d5319b77 100644
--- a/src/renderer/Core/Settings/Pages/General/Language.tsx
+++ b/src/renderer/Core/Settings/Pages/General/Language.tsx
@@ -10,6 +10,7 @@ export const Language = () => {
     const languages = [
         { name: "English (US)", locale: "en-US" },
         { name: "Deutsch (Schweiz)", locale: "de-CH" },
+        { name: "日本語 (日本)", locale: "ja-JP" },
     ];
 
     const { value: language, updateValue: setLanguage } = useSetting({
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>
 
diff --git a/src/renderer/Extensions/WebSearch/WebSearchSettings.tsx b/src/renderer/Extensions/WebSearch/WebSearchSettings.tsx
index 51f9f589..b972b3da 100644
--- a/src/renderer/Extensions/WebSearch/WebSearchSettings.tsx
+++ b/src/renderer/Extensions/WebSearch/WebSearchSettings.tsx
@@ -27,6 +27,7 @@ export const WebSearchSettings = () => {
     const locales = [
         { locale: "en-US", label: "English (US)" },
         { locale: "de-CH", label: "Deutsch (Schweiz)" },
+        { locale: "ja-JP", label: "日本語 (日本)" },
     ];
 
     return (


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");
+        });
+    });
+});
diff --git a/src/main/Core/Translator/Translator.test.ts b/src/main/Core/Translator/Translator.test.ts
index d0078d01..0a146e1f 100644
--- a/src/main/Core/Translator/Translator.test.ts
+++ b/src/main/Core/Translator/Translator.test.ts
@@ -12,6 +12,7 @@ describe(Translator, () => {
         const { t } = translator.createT({
             "en-US": { message: "Hello" },
             "de-CH": { message: "Hoi", otherMessage: "Es anders hoi" },
+            "ja-JP": { message: "ようこそ" },
         });
 
         expect(t("message")).toBe("Hello");
diff --git a/src/main/Extensions/ApplicationSearch/ApplicationSearch.test.ts b/src/main/Extensions/ApplicationSearch/ApplicationSearch.test.ts
index f47af11c..89a4edf3 100644
--- a/src/main/Extensions/ApplicationSearch/ApplicationSearch.test.ts
+++ b/src/main/Extensions/ApplicationSearch/ApplicationSearch.test.ts
@@ -84,7 +84,7 @@ describe(ApplicationSearch, () => {
         it("should return true on Linux", () => testIsSupported({ expected: true, operatingSystem: "Linux" }));
     });
 
-    it("should support en-US and de-DE translations", () => {
+    it("should support en-US, de-DE and ja-JP translations", () => {
         const translations = new ApplicationSearch(
             "Windows",
             <ApplicationRepository>{},
@@ -94,6 +94,7 @@ describe(ApplicationSearch, () => {
 
         expect(Object.keys(translations)).to.include("en-US");
         expect(Object.keys(translations)).to.include("de-CH");
+        expect(Object.keys(translations)).to.include("ja-JP");
     });
 
     it("should return the correct image for the given operating system", () => {
diff --git a/src/main/Extensions/ColorConverter/ColorConverterExtension.test.ts b/src/main/Extensions/ColorConverter/ColorConverterExtension.test.ts
index 63468ae9..38991fd1 100644
--- a/src/main/Extensions/ColorConverter/ColorConverterExtension.test.ts
+++ b/src/main/Extensions/ColorConverter/ColorConverterExtension.test.ts
@@ -130,7 +130,7 @@ describe(ColorConverterExtension, () => {
     });
 
     describe(ColorConverterExtension.prototype.getI18nResources, () =>
-        it("should support en-US and de-CH", () =>
+        it("should support en-US, de-CH and ja-JP", () =>
             expect(
                 Object.keys(
                     new ColorConverterExtension(
@@ -141,6 +141,6 @@ describe(ColorConverterExtension, () => {
                         <ColorPreviewGenerator>{},
                     ).getI18nResources(),
                 ),
-            ).toEqual(["en-US", "de-CH"])),
+            ).toEqual(["en-US", "de-CH", "ja-JP"])),
     );
 });
diff --git a/src/main/Extensions/TerminalLauncher/TerminalLauncherExtension.test.ts b/src/main/Extensions/TerminalLauncher/TerminalLauncherExtension.test.ts
index 5ce1491a..f95ca8e8 100644
--- a/src/main/Extensions/TerminalLauncher/TerminalLauncherExtension.test.ts
+++ b/src/main/Extensions/TerminalLauncher/TerminalLauncherExtension.test.ts
@@ -138,7 +138,7 @@ describe(TerminalLauncherExtension, () => {
     });
 
     describe(TerminalLauncherExtension.prototype.getI18nResources, () => {
-        it("should return i18n resources for en-US and de-CH", () => {
+        it("should return i18n resources for en-US, de-CH and ja-JP", () => {
             const extension = new TerminalLauncherExtension(
                 "Windows",
                 <AssetPathResolver>{},
@@ -146,7 +146,7 @@ describe(TerminalLauncherExtension, () => {
                 <Translator>{},
                 <TerminalRegistry>{},
             );
-            expect(Object.keys(extension.getI18nResources())).toEqual(["en-US", "de-CH"]);
+            expect(Object.keys(extension.getI18nResources())).toEqual(["en-US", "de-CH", "ja-JP"]);
         });
     });
 });
diff --git a/src/main/Extensions/WebSearch/WebSearchExtension.test.ts b/src/main/Extensions/WebSearch/WebSearchExtension.test.ts
index f198e455..66590594 100644
--- a/src/main/Extensions/WebSearch/WebSearchExtension.test.ts
+++ b/src/main/Extensions/WebSearch/WebSearchExtension.test.ts
@@ -245,9 +245,9 @@ describe(WebSearchExtension, () => {
         ]);
     });
 
-    it("should support en-US and de-CH locales", () => {
+    it("should support en-US, de-CH and ja-JP locales", () => {
         expect(
             Object.keys(new WebSearchExtension(<AssetPathResolver>{}, <SettingsManager>{}, []).getI18nResources()),
-        ).toEqual(["en-US", "de-CH"]);
+        ).toEqual(["en-US", "de-CH", "ja-JP"]);
     });
 });