diff --git a/src/components/dialog/content/SettingDialogContent.vue b/src/components/dialog/content/SettingDialogContent.vue
index c1f5e7526..77e28b4b1 100644
--- a/src/components/dialog/content/SettingDialogContent.vue
+++ b/src/components/dialog/content/SettingDialogContent.vue
@@ -10,15 +10,21 @@
/>
+ >
+
+
+
+
@@ -103,8 +109,12 @@ const ServerConfigPanel = defineAsyncComponent(
() => import('./setting/ServerConfigPanel.vue')
)
-const { activeCategory, defaultCategory, allCategories, settingCategories } =
- useSettingUI(defaultPanel)
+const {
+ activeCategory,
+ defaultCategory,
+ settingCategories,
+ groupedMenuTreeNodes
+} = useSettingUI(defaultPanel)
const {
searchQuery,
@@ -183,14 +193,8 @@ watch(activeCategory, (_, oldValue) => {
}
}
-/* Show a separator line above the Keybinding tab */
-/* This indicates the start of custom setting panels */
-.settings-sidebar :deep(.p-listbox-option[aria-label='Keybinding']) {
- position: relative;
-}
-
-.settings-sidebar :deep(.p-listbox-option[aria-label='Keybinding'])::before {
- @apply content-[''] top-0 left-0 absolute w-full;
- border-top: 1px solid var(--p-divider-border-color);
+/* Hide the first group separator */
+.settings-sidebar :deep(.p-listbox-option-group:nth-child(1)) {
+ display: none;
}
diff --git a/src/composables/setting/useSettingUI.ts b/src/composables/setting/useSettingUI.ts
index 0bbb7fb1f..42fc3261a 100644
--- a/src/composables/setting/useSettingUI.ts
+++ b/src/composables/setting/useSettingUI.ts
@@ -82,25 +82,34 @@ export function useSettingUI(
: settingCategories.value[0]
})
- /**
- * Translated all categories with labels
- */
- const translatedCategories = computed(() => {
- return [
- ...settingCategories.value,
- keybindingPanelNode,
- extensionPanelNode,
- ...serverConfigPanelNodeList.value,
- aboutPanelNode
- ].map((node) => ({
- ...node,
- translatedLabel: t(
- `settingsCategories.${normalizeI18nKey(node.label)}`,
- node.label
- )
- }))
+ const translateCategory = (node: SettingTreeNode) => ({
+ ...node,
+ translatedLabel: t(
+ `settingsCategories.${normalizeI18nKey(node.label)}`,
+ node.label
+ )
})
+ const groupedMenuTreeNodes = computed(() => [
+ // Normal settings stored in the settingStore
+ {
+ key: 'settings',
+ label: 'Application Settings',
+ children: settingCategories.value.map(translateCategory)
+ },
+ // Special settings such as about, keybinding, extension, server-config
+ {
+ key: 'specialSettings',
+ label: 'Special Settings',
+ children: [
+ keybindingPanelNode,
+ extensionPanelNode,
+ aboutPanelNode,
+ ...serverConfigPanelNodeList.value
+ ].map(translateCategory)
+ }
+ ])
+
onMounted(() => {
activeCategory.value = defaultCategory.value
})
@@ -108,7 +117,7 @@ export function useSettingUI(
return {
activeCategory,
defaultCategory,
- allCategories: translatedCategories,
+ groupedMenuTreeNodes,
settingCategories
}
}