@fudanda/admin-antd 2.20261109.1-beta.1 → 2.20261109.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/ApiTokensPage-w3JGRNQC.js +2 -0
- package/dist/chunks/ApiTokensPage-w3JGRNQC.js.map +1 -0
- package/dist/chunks/{App-CfQx7jWq.js → App-nh6_qOo8.js} +5 -5
- package/dist/chunks/{App-CfQx7jWq.js.map → App-nh6_qOo8.js.map} +1 -1
- package/dist/chunks/{AppModal-CVoUC2t3.js → AppModal-CEouaU03.js} +2 -2
- package/dist/chunks/{AppModal-CVoUC2t3.js.map → AppModal-CEouaU03.js.map} +1 -1
- package/dist/chunks/{ArcBaseAdmin-DQyddbFC.js → ArcBaseAdmin-CX7fQz4x.js} +2 -2
- package/dist/chunks/{ArcBaseAdmin-DQyddbFC.js.map → ArcBaseAdmin-CX7fQz4x.js.map} +1 -1
- package/dist/chunks/{DepartmentsPage-CQx53QGE.js → DepartmentsPage-BdD9VfDI.js} +2 -2
- package/dist/chunks/{DepartmentsPage-CQx53QGE.js.map → DepartmentsPage-BdD9VfDI.js.map} +1 -1
- package/dist/chunks/{DictsPage-BGnamkWk.js → DictsPage-fxBdV1-3.js} +2 -2
- package/dist/chunks/{DictsPage-BGnamkWk.js.map → DictsPage-fxBdV1-3.js.map} +1 -1
- package/dist/chunks/{EntityContextRuntime-CbzeMNXR.js → EntityContextRuntime-CMhoj6qe.js} +2 -2
- package/dist/chunks/{EntityContextRuntime-CbzeMNXR.js.map → EntityContextRuntime-CMhoj6qe.js.map} +1 -1
- package/dist/chunks/EntityContextRuntime-Dc89ZSnM.js +1 -0
- package/dist/chunks/{ExportButton-sMPAV2hd.js → ExportButton-DGxB2tcu.js} +2 -2
- package/dist/chunks/{ExportButton-sMPAV2hd.js.map → ExportButton-DGxB2tcu.js.map} +1 -1
- package/dist/chunks/{FileViewerPreviewPanel-Rti7pUhU.js → FileViewerPreviewPanel-BMZ7FdKV.js} +3 -3
- package/dist/chunks/{FileViewerPreviewPanel-Rti7pUhU.js.map → FileViewerPreviewPanel-BMZ7FdKV.js.map} +1 -1
- package/dist/chunks/{FilesPage-D_iYsUwl.js → FilesPage-DrgWELKy.js} +3 -3
- package/dist/chunks/{FilesPage-D_iYsUwl.js.map → FilesPage-DrgWELKy.js.map} +1 -1
- package/dist/chunks/{IdentitySecurityPage-rDYX5ksX.js → IdentitySecurityPage-BjTKvr-O.js} +2 -2
- package/dist/chunks/{IdentitySecurityPage-rDYX5ksX.js.map → IdentitySecurityPage-BjTKvr-O.js.map} +1 -1
- package/dist/chunks/{LogStatsScaffold-CMIz4z0a.js → LogStatsScaffold-DaB0JeAN.js} +2 -2
- package/dist/chunks/{LogStatsScaffold-CMIz4z0a.js.map → LogStatsScaffold-DaB0JeAN.js.map} +1 -1
- package/dist/chunks/{LoginLogsPage-Bv5pPJb2.js → LoginLogsPage-VmYC7i6q.js} +2 -2
- package/dist/chunks/{LoginLogsPage-Bv5pPJb2.js.map → LoginLogsPage-VmYC7i6q.js.map} +1 -1
- package/dist/chunks/{LoginLogsTable-DYcTx2oR.js → LoginLogsTable-CULcc_e8.js} +2 -2
- package/dist/chunks/{LoginLogsTable-DYcTx2oR.js.map → LoginLogsTable-CULcc_e8.js.map} +1 -1
- package/dist/chunks/{MarkdownPreviewPanel-lqs6AsoN.js → MarkdownPreviewPanel-CBcPc7Wv.js} +2 -2
- package/dist/chunks/{MarkdownPreviewPanel-lqs6AsoN.js.map → MarkdownPreviewPanel-CBcPc7Wv.js.map} +1 -1
- package/dist/chunks/{MasterDetailLayout-B5uqvh98.js → MasterDetailLayout-ByIBpmkZ.js} +2 -2
- package/dist/chunks/{MasterDetailLayout-B5uqvh98.js.map → MasterDetailLayout-ByIBpmkZ.js.map} +1 -1
- package/dist/chunks/{McpSettingsPage-Cdej9Evi.js → McpSettingsPage-C5V_rj2V.js} +2 -2
- package/dist/chunks/{McpSettingsPage-Cdej9Evi.js.map → McpSettingsPage-C5V_rj2V.js.map} +1 -1
- package/dist/chunks/{MemberAssignmentSheet-AKvLbbYW.js → MemberAssignmentSheet-DL0fg1Yf.js} +2 -2
- package/dist/chunks/{MemberAssignmentSheet-AKvLbbYW.js.map → MemberAssignmentSheet-DL0fg1Yf.js.map} +1 -1
- package/dist/chunks/{MenuCommandPalette-ia0pSIFg.js → MenuCommandPalette-C2PvK3Gh.js} +2 -2
- package/dist/chunks/{MenuCommandPalette-ia0pSIFg.js.map → MenuCommandPalette-C2PvK3Gh.js.map} +1 -1
- package/dist/chunks/{MenusPage-Bh55bvKH.js → MenusPage-Bytd1HlW.js} +2 -2
- package/dist/chunks/{MenusPage-Bh55bvKH.js.map → MenusPage-Bytd1HlW.js.map} +1 -1
- package/dist/chunks/{MonacoPreviewPanel-CT_sjf7Z.js → MonacoPreviewPanel-BZrNIcFZ.js} +2 -2
- package/dist/chunks/{MonacoPreviewPanel-CT_sjf7Z.js.map → MonacoPreviewPanel-BZrNIcFZ.js.map} +1 -1
- package/dist/chunks/{NavListPanel-DMIUMh7q.js → NavListPanel-zwUDIYSP.js} +2 -2
- package/dist/chunks/{NavListPanel-DMIUMh7q.js.map → NavListPanel-zwUDIYSP.js.map} +1 -1
- package/dist/chunks/{OperationLogsPage-7XVfmhxP.js → OperationLogsPage-D2BQdGNp.js} +2 -2
- package/dist/chunks/{OperationLogsPage-7XVfmhxP.js.map → OperationLogsPage-D2BQdGNp.js.map} +1 -1
- package/dist/chunks/{OperationLogsTable-gp-WZxiF.js → OperationLogsTable-DaaON4QR.js} +3 -3
- package/dist/chunks/{OperationLogsTable-gp-WZxiF.js.map → OperationLogsTable-DaaON4QR.js.map} +1 -1
- package/dist/chunks/{PDFPreviewPanel-CyfhyWav.js → PDFPreviewPanel-CMmnWBKW.js} +3 -3
- package/dist/chunks/{PDFPreviewPanel-CyfhyWav.js.map → PDFPreviewPanel-CMmnWBKW.js.map} +1 -1
- package/dist/chunks/{PositionsPage-Bwua1vNV.js → PositionsPage-CBZITssT.js} +2 -2
- package/dist/chunks/{PositionsPage-Bwua1vNV.js.map → PositionsPage-CBZITssT.js.map} +1 -1
- package/dist/chunks/{PreferencesSheetBody-C80D3dOM.js → PreferencesSheetBody-B0poTPEA.js} +2 -2
- package/dist/chunks/{PreferencesSheetBody-C80D3dOM.js.map → PreferencesSheetBody-B0poTPEA.js.map} +1 -1
- package/dist/chunks/{ProfilePage-DeTw-59a.js → ProfilePage-DLhacdWt.js} +2 -2
- package/dist/chunks/{ProfilePage-DeTw-59a.js.map → ProfilePage-DLhacdWt.js.map} +1 -1
- package/dist/chunks/{ProjectInfoPage-Bqn3gfXa.js → ProjectInfoPage-CJpGxpu5.js} +2 -2
- package/dist/chunks/{ProjectInfoPage-Bqn3gfXa.js.map → ProjectInfoPage-CJpGxpu5.js.map} +1 -1
- package/dist/chunks/{RelationPanel-Bio-ig-l.js → RelationPanel-BsbfEDo2.js} +2 -2
- package/dist/chunks/{RelationPanel-Bio-ig-l.js.map → RelationPanel-BsbfEDo2.js.map} +1 -1
- package/dist/chunks/{RolesPage-fwUSs2HR.js → RolesPage-46dzdiah.js} +2 -2
- package/dist/chunks/{RolesPage-fwUSs2HR.js.map → RolesPage-46dzdiah.js.map} +1 -1
- package/dist/chunks/{SessionConflictModal-Dw4opoNP.js → SessionConflictModal-Bm38eExL.js} +2 -2
- package/dist/chunks/{SessionConflictModal-Dw4opoNP.js.map → SessionConflictModal-Bm38eExL.js.map} +1 -1
- package/dist/chunks/SettingModuleDetail-BjxUJeH5.js +17 -0
- package/dist/chunks/SettingModuleDetail-BjxUJeH5.js.map +1 -0
- package/dist/chunks/{SettingsPage-Cy5-q-P6.js → SettingsPage-C32Vuizm.js} +2 -2
- package/dist/chunks/{SettingsPage-Cy5-q-P6.js.map → SettingsPage-C32Vuizm.js.map} +1 -1
- package/dist/chunks/{StatCard-BROG4NSp.js → StatCard-CRPfkSBY.js} +2 -2
- package/dist/chunks/{StatCard-BROG4NSp.js.map → StatCard-CRPfkSBY.js.map} +1 -1
- package/dist/chunks/{UserGroupsPage-CsTBkUPy.js → UserGroupsPage-08G5MdGm.js} +2 -2
- package/dist/chunks/{UserGroupsPage-CsTBkUPy.js.map → UserGroupsPage-08G5MdGm.js.map} +1 -1
- package/dist/chunks/{UserLogsPanels-3u8Z93YU.js → UserLogsPanels-nbIrMym9.js} +2 -2
- package/dist/chunks/{UserLogsPanels-3u8Z93YU.js.map → UserLogsPanels-nbIrMym9.js.map} +1 -1
- package/dist/chunks/{UserTransferSelect-ChLj4EkS.js → UserTransferSelect-C8betaWG.js} +2 -2
- package/dist/chunks/{UserTransferSelect-ChLj4EkS.js.map → UserTransferSelect-C8betaWG.js.map} +1 -1
- package/dist/chunks/{UsersPage-CfNnQJi4.js → UsersPage-BjTiNEqF.js} +2 -2
- package/dist/chunks/{UsersPage-CfNnQJi4.js.map → UsersPage-BjTiNEqF.js.map} +1 -1
- package/dist/chunks/{browser-BKLM0ThC-D0TgzKTC.js → browser-BKLM0ThC-Cp7Gi4-F.js} +1 -1
- package/dist/chunks/{code-BkkeN2fd.js → code-LswxAr98.js} +1 -1
- package/dist/chunks/{direct-engine-m32m22nx.js → direct-engine-Dv_6v4sx.js} +1 -1
- package/dist/chunks/{html-BGNWR_Bp.js → html-BokjxlLb.js} +1 -1
- package/dist/chunks/{line-CsTeuEcK.js → line-Bqh6atHH.js} +1 -1
- package/dist/chunks/{lrc-D6gjnGZ5.js → lrc-T5e1svZG.js} +1 -1
- package/dist/chunks/{markdown-BglUe9j8.js → markdown-BpWokN1s.js} +1 -1
- package/dist/chunks/{patch-C97Yl3jr.js → patch-BYVX5C9G.js} +1 -1
- package/dist/chunks/{worker-engine-B7_3qQVS.js → worker-engine-CtUAeI4G.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{src-DAkFn9SG.js → src-D6UlLiVN.js} +2 -2
- package/dist/{src-DAkFn9SG.js.map → src-D6UlLiVN.js.map} +1 -1
- package/package.json +9 -9
- package/dist/chunks/ApiTokensPage-DiRMgViD.js +0 -2
- package/dist/chunks/ApiTokensPage-DiRMgViD.js.map +0 -1
- package/dist/chunks/EntityContextRuntime-C9q95WDf.js +0 -1
- package/dist/chunks/SettingModuleDetail-I9CSJ-fh.js +0 -17
- package/dist/chunks/SettingModuleDetail-I9CSJ-fh.js.map +0 -1
package/dist/chunks/{PreferencesSheetBody-C80D3dOM.js.map → PreferencesSheetBody-B0poTPEA.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreferencesSheetBody-C80D3dOM.js","mappings":"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","names":["__iconData","__iconData$5","createLucideIcon","__iconData$4","__iconData$3","__iconData$2","__iconData$1","matchesPreference","query","search","category","preferenceCategories","item","definition","aliases","searchAliases","option","textMatches","value","getPreferenceCategories","localLockMatch","preferenceDefinitions","canEdit","hasLockPassword","SwatchColorPicker","isCustomized","options","allowClear","Tooltip","clearTitle","onChange","Check","isActive","allowCustom","ColorPicker","v","customTitle","Palette","PrefsLayoutSection","PreferenceSection","prefSection","matchesPref","PreferenceControl","navLayout","setPreferences","label","Info","RadioGroup","preferences","Radio","Switch","PrefDarkToneRow","hint","DARK_SURFACE_TONE_OPTIONS","ScheduleTimeInput","draft","setDraft","useState","previousValue","setPreviousValue","Input","text","isScheduleTime","onCommit","PrefsAppearanceSection","loadingPickerRef","useRef","activeLoadingOptionRef","loadingPickerVisible","usePreferenceFilter","LOADING_STYLE_OPTIONS","loadingPickerNav","setLoadingPickerNav","updateLoadingPickerNav","useCallback","el","useEffect","observer","active","elRect","activeRect","scrollLoadingPicker","direction","mode","handleThemeModeChange","themeColor","color","setThemeColor","THEME_COLOR_PRESETS","preset","isDark","tone","Select","UI_SCALE_OPTIONS","FONT_FAMILY_OPTIONS","Button","ChevronLeft","ScrollArea","LoadingIndicator","ChevronRight","PrefsNavToolbarSection","prefsSearch","PrefsSidebarSection","InputNumber","PrefsGeneralSection","parsed","preferenceOverridesSchema","homePathOptions","_Fragment","hasPassword","openLockPasswordModal","clearLockPassword","autoLockMinutes","setAutoLockMinutes","PrefsTableSection","clearAllListFilterSnapshots","PrefsTabsSection","radio","anim","Popover","PreferencesSheetBody","usePreferences","selected","setSelected","searching","props","categories","canEditPreference","results","visible","base","noSectionTitle","keywords","sections","PreferenceFilterContext","preferenceDefinitionMap","path","Icon","categoryIcons","count","Empty","hasManagedPreferences","LayoutDashboard","Navigation","Menu","Columns3","ListFilter","SlidersHorizontal"],"ignoreList":[0,1,2,3,4,5],"sources":["../../../../node_modules/lucide-react/dist/esm/icons/columns-3.mjs","../../../../node_modules/lucide-react/dist/esm/icons/layout-dashboard.mjs","../../../../node_modules/lucide-react/dist/esm/icons/list-filter.mjs","../../../../node_modules/lucide-react/dist/esm/icons/navigation.mjs","../../../../node_modules/lucide-react/dist/esm/icons/palette.mjs","../../../../node_modules/lucide-react/dist/esm/icons/sliders-horizontal.mjs","../../src/layouts/admin/preference-catalog.ts","../../src/components/SwatchColorPicker.tsx","../../src/layouts/admin/PreferencesSections.tsx","../../src/layouts/admin/PreferencesSheetBody.tsx"],"sourcesContent":[null,null,null,null,null,null,"import { preferenceDefinitions, type PreferenceDefinition, type PreferencePath } from '@fudanda/shared/preferences';\nimport { textMatches } from '@fudanda/react-core/utils/pinyin';\nexport const preferenceCategories = [\n { key: 'layout', label: '布局', description: '选择导航结构和内容区域的呈现方式。' },\n { key: 'appearance', label: '外观', description: '调整主题、颜色、字体和界面动效。' },\n { key: 'navigation', label: '导航', description: '设置面包屑、顶栏工具和时钟。' },\n { key: 'sidebar', label: '侧栏', description: '调整菜单宽度、展开方式和滚动行为。' },\n { key: 'tabs', label: '标签页', description: '设置多页浏览、页面缓存和切换行为。' },\n { key: 'table', label: '表格', description: '设置列表样式、分页和筛选记忆。单张表格的独立设置优先,可在表格中选择“跟随全局偏好”恢复。' },\n { key: 'general', label: '通用', description: '调整首页、时间显示、交互和锁屏设置。' },\n] as const;\nexport type PreferenceCategory = (typeof preferenceCategories)[number]['key'];\nconst searchAliases: Partial<Record<PreferencePath, readonly string[]>> = {\n colorMode: ['主题', '主题模式'], themeColor: ['主题色', '配色', '品牌色'],\n homePath: ['默认首页', '登录跳转', '落地页'],\n sidebarWidth: ['侧栏宽度'], loadingStyle: ['Loading'], reduceMotion: ['减少动画', '关闭动画'],\n};\n/** 搜索与分类共用 shared 字段目录,不改变策略和字段适用规则。 */\nexport function matchesPreference(definition: PreferenceDefinition, search: string): boolean {\n const query = search.trim();\n if (!query)\n return true;\n const category = preferenceCategories.find(item => item.key === definition.group);\n const aliases = searchAliases[definition.path] ?? [];\n return [definition.label, definition.path, definition.description ?? '', category?.label ?? '',\n ...(definition.options?.flatMap(option => [option.label, String(option.value)]) ?? []), ...aliases,\n ].some(value => textMatches(value, query));\n}\nexport function getPreferenceCategories(search: string, canEdit: (path: PreferencePath) => boolean, _quickChatEnabled: boolean, hasLockPassword: boolean, _lockScreenEnabled: boolean) {\n const localLockMatch = !search.trim() || ['通用', '锁屏', '屏幕锁', '锁屏密码', '密码', '锁定', '自动锁屏', '无操作', '空闲', '闲置'].some(value => textMatches(value, search.trim()));\n return preferenceCategories.map(category => ({ ...category,\n fields: preferenceDefinitions.filter(definition => definition.group === category.key && canEdit(definition.path) && matchesPreference(definition, search)),\n localCount: category.key === 'general' && localLockMatch ? (hasLockPassword ? 3 : 2) : 0,\n })).filter(category => category.fields.length > 0 || category.localCount > 0);\n}\n","import { ColorPicker, Tooltip } from '@/ui';\nimport { Check, Palette } from 'lucide-react';\nimport './swatch-color-picker.css';\nexport interface SwatchColorOption {\n /** 存档值:主题预设 key 或 `#rrggbb` */\n key: string;\n /** 悬停提示 */\n label: string;\n /** 色块展示色 */\n color: string;\n}\nexport interface SwatchColorPickerProps {\n /** 当前值:某个选项 key,或 `#rrggbb` 自定义色;标签场景空串表示无颜色 */\n value: string;\n onChange: (value: string) => void;\n options: readonly SwatchColorOption[];\n /** 允许通过取色器选择预设之外的颜色,缺省开启 */\n allowCustom?: boolean;\n customTitle?: string;\n /** 展示「无颜色」选项(选中后 onChange('')),用于颜色可空的场景 */\n allowClear?: boolean;\n clearTitle?: string;\n}\n/**\n * 色板颜色选择器:预设色块 + 自定义取色器,与个人偏好主题色同款交互。\n * value 语义由调用方决定(预设 key 或 hex):色块高亮按 `value === key` 判断,\n * 自定义按钮只在 `value` 是 hex 且不属于任何预设 key 时高亮(预设 key 本身也可能是 hex)。\n */\nexport function SwatchColorPicker({ value, onChange, options, allowCustom = true, customTitle = '自定义颜色', allowClear = false, clearTitle = '无颜色', }: SwatchColorPickerProps) {\n const isCustomized = value.startsWith('#') && !options.some((option) => option.key === value);\n return (<div className=\"swatch-color-picker\">\n {allowClear && (<Tooltip content={clearTitle} position=\"top\">\n <button type=\"button\" aria-label={clearTitle} aria-pressed={value === ''} className={`swatch-color-swatch swatch-color-swatch--clear${value === '' ? ' swatch-color-swatch--active' : ''}`} onClick={() => onChange('')}>\n {value === '' && (<span className=\"swatch-color-swatch__check\">\n <Check size={14} strokeWidth={2.5}/>\n </span>)}\n </button>\n </Tooltip>)}\n {options.map((option) => {\n const isActive = value === option.key;\n return (<Tooltip key={option.key} content={option.label} position=\"top\">\n <button type=\"button\" aria-label={option.label} aria-pressed={isActive} className={`swatch-color-swatch${isActive ? ' swatch-color-swatch--active' : ''}`} style={{ backgroundColor: option.color, color: option.color }} onClick={() => onChange(option.key)} title={option.label}>\n {isActive && (<span className=\"swatch-color-swatch__check\">\n <Check size={14} strokeWidth={2.5}/>\n </span>)}\n </button>\n </Tooltip>);\n })}\n {allowCustom && (<ColorPicker alpha={false} usePopover value={isCustomized ? ColorPicker.colorStringToValue(value) : undefined} onChange={(v) => onChange(v.hex)} popoverProps={{ position: 'top', zIndex: 10010 }}>\n <button type=\"button\" aria-label={customTitle} aria-pressed={isCustomized} className={`swatch-color-swatch swatch-color-swatch--custom${isCustomized ? ' swatch-color-swatch--active' : ''}`} style={isCustomized ? { backgroundColor: value, color: value } : {}} title={customTitle}>\n {isCustomized\n ? <span className=\"swatch-color-swatch__check\"><Check size={14} strokeWidth={2.5}/></span>\n : <span className=\"swatch-color-swatch__icon\"><Palette size={14}/></span>}\n </button>\n </ColorPicker>)}\n </div>);\n}\n","import { preferenceOverridesSchema } from '@fudanda/shared/preferences';\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\nimport { Button, Input, InputNumber, Popover, Radio, RadioGroup, Select, Switch, Tooltip } from '@/ui';\nimport { Check, ChevronLeft, ChevronRight, Info } from 'lucide-react';\nimport { usePreferenceFilter } from '@/components/preferences/preference-filter';\nimport { LOADING_STYLE_OPTIONS, DARK_SURFACE_TONE_OPTIONS, UI_SCALE_OPTIONS, FONT_FAMILY_OPTIONS } from '@fudanda/react-core/hooks/usePreferences';\nimport { clearAllListFilterSnapshots } from '@fudanda/react-core/lib/list-filter-memory';\nimport type { NavLayout, TableSizePreference, RouteAnimation, BorderRadiusPreference, ScheduledDarkMode, TabStyle, TabSize, TabType, DarkSurfaceTone, TopbarClockMode, UserPreferences, UiScale, FontFamilyPreference, WeekStart, TimeDisplay, DoubleRailStyle } from '@fudanda/react-core/hooks/usePreferences';\nimport { isScheduleTime } from '@fudanda/react-core/hooks/usePreferences';\ntype ThemeMode = 'light' | 'dark' | 'system';\nimport { THEME_COLOR_PRESETS } from '@fudanda/react-core/lib/theme-color';\nimport { SwatchColorPicker } from '@/components/SwatchColorPicker';\nimport ScrollArea from '@/components/ScrollArea';\nimport { LoadingIndicator } from '@/components/PageLoading';\nimport { PreferenceControl, PreferenceSection } from '@/components/settings/SettingRow';\n// 偏好设置面板各分区。所有分区组件都返回 Fragment,\n// 使设置块保持为外层 flex 容器的直接子节点(gap 布局不变)。\ninterface PrefsSectionBaseProps {\n readonly prefSection: (label: string) => ReactNode;\n readonly matchesPref: (keywords: string[]) => boolean;\n readonly preferences: UserPreferences;\n readonly setPreferences: (prefs: Partial<UserPreferences>) => void;\n}\n// ── 布局 ──\nexport function PrefsLayoutSection({ prefSection, matchesPref, preferences, setPreferences, navLayout, }: PrefsSectionBaseProps & Readonly<{\n navLayout: NavLayout;\n}>) {\n return (<PreferenceSection title={prefSection('布局')}>\n\n {/* ── 导航布局 ── */}\n {matchesPref(['导航布局', '布局', '左侧菜单', '顶部菜单', '混合菜单', '双列菜单']) && (<PreferenceControl path=\"navLayout\">\n <div>\n <div style={{ marginBottom: 12, fontSize: 13, fontWeight: 500, color: 'var(--arc-antd-color-text-0)' }}>导航布局</div>\n <div className=\"arc-preferences__layout-options\">\n {([\n { value: 'vertical' as NavLayout, label: '左侧菜单' },\n { value: 'horizontal' as NavLayout, label: '顶部菜单' },\n { value: 'mixed' as NavLayout, label: '混合菜单' },\n { value: 'double' as NavLayout, label: '双列菜单' },\n ]).map(({ value, label }) => (<button type=\"button\" key={value} className={`layout-picker__option${navLayout === value ? ' layout-picker__option--active' : ''}`} aria-pressed={navLayout === value} onClick={() => { if (navLayout !== value) setPreferences({ navLayout: value }); }}>\n <div className={`layout-picker__preview layout-picker__preview--${value}`} aria-hidden=\"true\">\n <i className=\"layout-preview__rail\"/><i className=\"layout-preview__menu\"/><i className=\"layout-preview__header\"/>\n <i className=\"layout-preview__content\"><i /><i /><i /></i>\n </div>\n <span className=\"layout-picker__label\">{label}{navLayout === value && <Check size={14}/>}</span>\n </button>))}\n </div>\n </div>\n </PreferenceControl>)}\n\n {/* ── 双列首列形式(仅双列布局适用,依赖 navLayout)── */}\n {navLayout === 'double' && matchesPref(['双列', '双列菜单', '首列', '双列首列', '图标', '图标文字']) && (<PreferenceControl path=\"doubleRailStyle\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 双列首列形式\n <Tooltip content=\"仅图标:与左侧菜单收起时同宽,名称靠悬浮提示,可容纳更多一级模块;图标 + 文字:名称直接可读,但条目更高,矮窗口需要滚动\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.doubleRailStyle ?? 'icon'} onChange={(e) => setPreferences({ doubleRailStyle: e.target.value as DoubleRailStyle })}>\n <Radio value=\"icon\">仅图标</Radio>\n <Radio value=\"icon-text\">图标 + 文字</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 内容宽度 ── */}\n {matchesPref(['内容宽度', '固定宽度', '居中', '内容区']) && (<PreferenceControl path=\"contentWidth\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 固定内容宽度\n <Tooltip content=\"开启后内容区最大宽度为 1440px 并居中,适合宽屏显示器\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={(preferences.contentWidth ?? 'fluid') === 'fixed'} onChange={(v) => setPreferences({ contentWidth: v ? 'fixed' : 'fluid' })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── Logo 图标 ── */}\n {matchesPref(['Logo', 'Logo图标', '图标', '显示Logo']) && (<PreferenceControl path=\"showLogo\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示 Logo 图标</span>\n <Switch checked={preferences.showLogo ?? true} onChange={(v) => setPreferences({ showLogo: v })}/>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n// ── 外观 ──\nfunction PrefDarkToneRow({ label, hint, value, onChange, }: Readonly<{\n label: string;\n hint: string;\n value: DarkSurfaceTone;\n onChange: (tone: DarkSurfaceTone) => void;\n}>) {\n return (<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n {label}\n <Tooltip content={hint} position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={value} onChange={(e) => onChange(e.target.value as DarkSurfaceTone)}>\n {DARK_SURFACE_TONE_OPTIONS.map((option) => (<Radio key={option.value} value={option.value}>{option.label}</Radio>))}\n </RadioGroup>\n </div>);\n}\n/**\n * 保留 HH:mm 的输入草稿,合法才提交;外部值变化时回填,保持输入节点和焦点。\n */\nfunction ScheduleTimeInput({ path, label, value, onCommit }: Readonly<{\n path: 'scheduledDarkStart' | 'scheduledDarkEnd';\n label: string;\n value: string;\n onCommit: (value: string) => void;\n}>) {\n const [draft, setDraft] = useState(value);\n const [previousValue, setPreviousValue] = useState(value);\n if (previousValue !== value) {\n setPreviousValue(value);\n setDraft(value);\n }\n return (<PreferenceControl path={path}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>{label}</span>\n <Input value={draft} placeholder=\"18:00\" aria-label={label} style={{ width: 96 }} onChange={(text) => {\n setDraft(text);\n if (isScheduleTime(text))\n onCommit(text);\n }}/>\n </div>\n </PreferenceControl>);\n}\nexport function PrefsAppearanceSection({ prefSection, matchesPref, preferences, setPreferences, mode, handleThemeModeChange, isDark, themeColor, setThemeColor, }: PrefsSectionBaseProps & Readonly<{\n mode: ThemeMode;\n handleThemeModeChange: (newMode: ThemeMode) => void;\n isDark: boolean;\n themeColor: string;\n setThemeColor: (color: string) => void;\n}>) {\n const loadingPickerRef = useRef<HTMLDivElement>(null);\n const activeLoadingOptionRef = useRef<HTMLButtonElement>(null);\n const isVisible = usePreferenceFilter();\n const loadingPickerVisible = isVisible('loadingStyle') && matchesPref(['加载动画', '加载效果', 'Loading', ...LOADING_STYLE_OPTIONS.map((option) => option.label)]);\n const [loadingPickerNav, setLoadingPickerNav] = useState({ canPrev: false, canNext: false });\n const updateLoadingPickerNav = useCallback(() => {\n const el = loadingPickerRef.current;\n if (!el)\n return;\n setLoadingPickerNav({\n canPrev: el.scrollLeft > 1,\n canNext: el.scrollLeft + el.clientWidth < el.scrollWidth - 1,\n });\n }, []);\n useEffect(() => {\n if (!loadingPickerVisible)\n return;\n const el = loadingPickerRef.current;\n if (!el)\n return;\n updateLoadingPickerNav();\n const observer = new ResizeObserver(updateLoadingPickerNav);\n observer.observe(el);\n return () => observer.disconnect();\n }, [loadingPickerVisible, updateLoadingPickerNav]);\n // 当前选中的动画始终滚入可见区(初次打开即定位,不做平滑滚动避免与抽屉动效打架)。\n // 这里只改挑选项容器自身的 scrollLeft:scrollIntoView 会连带滚动每一个可滚动祖先,\n // 并推抽屉正文一起动——导航布局排在“外观”之前,一打开偏好设置就被拽到加载动画那一屏。\n useEffect(() => {\n const el = loadingPickerRef.current;\n const active = activeLoadingOptionRef.current;\n if (!el || !active)\n return;\n const elRect = el.getBoundingClientRect();\n const activeRect = active.getBoundingClientRect();\n if (activeRect.left < elRect.left)\n el.scrollLeft -= elRect.left - activeRect.left;\n else if (activeRect.right > elRect.right)\n el.scrollLeft += activeRect.right - elRect.right;\n }, [loadingPickerVisible, preferences.loadingStyle]);\n const scrollLoadingPicker = useCallback((direction: 1 | -1) => {\n const el = loadingPickerRef.current;\n if (el)\n el.scrollBy({ left: direction * el.clientWidth, behavior: 'smooth' });\n }, []);\n return (<PreferenceSection title={prefSection('外观')}>\n\n {/* ── 颜色模式 ── */}\n {matchesPref(['颜色模式', '深色', '浅色', '系统', '主题模式']) && (<PreferenceControl path=\"colorMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>颜色模式</span>\n <RadioGroup type=\"button\" value={mode} onChange={(e) => {\n const v = e.target.value as ThemeMode;\n handleThemeModeChange(v);\n }}>\n <Radio value=\"light\">浅色</Radio>\n <Radio value=\"dark\">深色</Radio>\n <Radio value=\"system\">系统</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {/* ── 主题色 ── */}\n {matchesPref(['主题颜色', '主题色', '颜色', '品牌色', '自定义颜色']) && (<PreferenceControl path=\"themeColor\">\n <div>\n <div style={{ marginBottom: 12, fontSize: 13, fontWeight: 500, color: 'var(--arc-antd-color-text-0)' }}>主题颜色</div>\n <SwatchColorPicker value={themeColor} onChange={color => { if (color !== themeColor) setThemeColor(color); }} options={THEME_COLOR_PRESETS.map((preset) => ({\n key: preset.key,\n label: preset.name,\n color: isDark ? preset.dark.primary : preset.light.primary,\n }))}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 定时深色 ── */}\n {matchesPref(['定时深色', '夜间深色', '自动深色', '深色定时', '深色时段']) && (<PreferenceControl path=\"scheduledDarkMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 定时深色\n <Tooltip content=\"时段内无条件使用深色;时段外跟随颜色模式\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.scheduledDarkMode ?? 'off'} onChange={(e) => setPreferences({ scheduledDarkMode: e.target.value as ScheduledDarkMode })}>\n <Radio value=\"off\">关闭</Radio>\n <Radio value=\"custom\">自定义时段</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {matchesPref(['深色开始时间', '开始时间', '定时深色', '夜间开始']) && (<ScheduleTimeInput path=\"scheduledDarkStart\" label=\"深色开始时间\" value={preferences.scheduledDarkStart ?? '18:00'} onCommit={(value) => setPreferences({ scheduledDarkStart: value })}/>)}\n {matchesPref(['深色结束时间', '结束时间', '定时深色', '夜间结束']) && (<ScheduleTimeInput path=\"scheduledDarkEnd\" label=\"深色结束时间\" value={preferences.scheduledDarkEnd ?? '06:00'} onCommit={(value) => setPreferences({ scheduledDarkEnd: value })}/>)}\n\n {!isDark && matchesPref(['顶部栏深色', '深色', '深色模式', '顶部栏', '顶部导航']) && (<PreferenceControl path=\"headerDarkMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>顶部栏深色模式</span>\n <Switch checked={preferences.headerDarkMode ?? false} onChange={(v) => setPreferences({ headerDarkMode: v })}/>\n </div>\n </PreferenceControl>)}\n {!isDark && matchesPref(['侧边栏深色', '深色', '深色模式', '侧边栏']) && (<PreferenceControl path=\"sidebarDarkMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>侧边栏深色模式</span>\n <Switch checked={preferences.sidebarDarkMode ?? false} onChange={(v) => setPreferences({ sidebarDarkMode: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 深色底色档位(仅深色模式下可调;分区深色区域同样跟随) ── */}\n {(isDark || preferences.sidebarDarkMode) && matchesPref(['侧边栏底色', '底色', '色调', '深浅', '侧边栏']) && (<PreferenceControl path=\"darkSidebarTone\">\n <PrefDarkToneRow label=\"侧边栏底色\" hint=\"标准与卡片、表格同色;更深会比标准再暗一档,让侧边栏从内容中分离出来\" value={preferences.darkSidebarTone ?? 'bg-1'} onChange={(tone) => setPreferences({ darkSidebarTone: tone })}/>\n </PreferenceControl>)}\n {(isDark || preferences.headerDarkMode) && matchesPref(['顶部底色', '底色', '色调', '深浅', '顶部', '顶栏', '标签栏', '面包屑']) && (<PreferenceControl path=\"darkHeaderTone\">\n <PrefDarkToneRow label=\"顶部底色\" hint=\"作用于顶栏、头部、面包屑栏与标签栏;更深会让整条顶部区域比内容更暗\" value={preferences.darkHeaderTone ?? 'bg-1'} onChange={(tone) => setPreferences({ darkHeaderTone: tone })}/>\n </PreferenceControl>)}\n {isDark && matchesPref(['主区域底色', '底色', '色调', '深浅', '主区域', '内容区', '画布']) && (<PreferenceControl path=\"darkContentTone\">\n <PrefDarkToneRow label=\"主区域底色\" hint=\"作用于内容画布;更深时卡片与表格会从画布中浮起,形成明度层次\" value={preferences.darkContentTone ?? 'bg-1'} onChange={(tone) => setPreferences({ darkContentTone: tone })}/>\n </PreferenceControl>)}\n\n {/* ── 圆角大小 ── */}\n {matchesPref(['圆角', '圆角大小', '直角', '边框圆角', 'radius', '外观']) && (<PreferenceControl path=\"borderRadius\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 圆角大小\n <Tooltip content=\"调整按钮、卡片、弹窗等组件的圆角风格:直角更硬朗,大圆角更柔和\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.borderRadius ?? 'medium'} onChange={(e) => setPreferences({ borderRadius: e.target.value as BorderRadiusPreference })}>\n <Radio value=\"none\">直角</Radio>\n <Radio value=\"small\">小</Radio>\n <Radio value=\"medium\">默认</Radio>\n <Radio value=\"large\">大</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 界面缩放 ── */}\n {matchesPref(['界面缩放', '缩放', '字号', '字体大小', '放大', '缩小', '外观', '无障碍']) && (<PreferenceControl path=\"uiScale\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4, flexShrink: 0 }}>\n 界面缩放\n <Tooltip content=\"整体放大或缩小界面(含文字、控件与弹层),适合高分屏或需要更大字号的场景\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select value={preferences.uiScale ?? 100} optionList={UI_SCALE_OPTIONS.map((option) => ({ value: option.value, label: option.label }))} onChange={(v) => setPreferences({ uiScale: v as UiScale })} style={{ width: 100 }}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 界面字体 ── */}\n {matchesPref(['字体', '界面字体', 'Inter', '思源', '等宽', '外观']) && (<PreferenceControl path=\"fontFamily\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4, flexShrink: 0 }}>\n 界面字体\n <Tooltip content=\"只使用系统已安装的字体,未安装时按预设回退到系统默认字体\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select value={preferences.fontFamily ?? 'system'} optionList={FONT_FAMILY_OPTIONS.map((option) => ({ value: option.value, label: option.label }))} onChange={(v) => setPreferences({ fontFamily: v as FontFamilyPreference })} style={{ width: 140 }}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 标签栏尺寸 ── */}\n {matchesPref(['标签栏尺寸', 'Tabs尺寸', 'Tabs 大小', '标签控件尺寸', 'small', 'medium', 'large', '外观']) && (<PreferenceControl path=\"tabsSize\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 标签栏尺寸\n <Tooltip content=\"控制页面内部标签栏的尺寸,与多标签页开关无关\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.tabsSize ?? 'small'} onChange={(e) => setPreferences({ tabsSize: e.target.value as TabSize })}>\n <Radio value=\"small\">小</Radio>\n <Radio value=\"medium\">中</Radio>\n <Radio value=\"large\">大</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 标签栏样式 ── */}\n {matchesPref(['标签栏样式', 'Tabs样式', 'Tabs 类型', 'line', 'button', 'card', 'slash', '外观']) && (<PreferenceControl path=\"tabsType\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 标签栏样式\n <Tooltip content=\"控制页面内部标签栏的显示样式\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select value={preferences.tabsType ?? 'line'} optionList={[\n { value: 'line', label: '线条' },\n { value: 'button', label: '按钮' },\n { value: 'card', label: '卡片' },\n { value: 'slash', label: '斜线' },\n ]} onChange={(v) => setPreferences({ tabsType: v as TabType })} style={{ width: 120 }}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 加载动画 ── */}\n {/* 形态名直接取自选项表:新增一种动画不必再来这里补关键词 */}\n {loadingPickerVisible && (<PreferenceControl path=\"loadingStyle\">\n <div>\n <div className=\"loading-style-picker__heading\">\n <span>加载动画</span>\n <Tooltip content=\"用于首次进入系统、菜单首载和页面懒加载\" position=\"right\">\n <Info size={13}/>\n </Tooltip>\n </div>\n <div className=\"loading-style-picker__nav\">\n <Button theme=\"borderless\" size=\"small\" className=\"loading-style-picker__nav-button\" icon={<ChevronLeft size={14}/>} aria-label=\"上一个加载动画\" title=\"上一个\" disabled={!loadingPickerNav.canPrev} onClick={() => scrollLoadingPicker(-1)}/>\n <ScrollArea className=\"loading-style-picker\" scrollRef={loadingPickerRef} horizontal vertical={false} onScroll={updateLoadingPickerNav} aria-label=\"加载动画预览\">\n {LOADING_STYLE_OPTIONS.map((option) => {\n const isActive = preferences.loadingStyle === option.value;\n return (<button type=\"button\" key={option.value} ref={isActive ? activeLoadingOptionRef : undefined} className={`loading-style-picker__option${isActive ? ' loading-style-picker__option--active' : ''}`} aria-pressed={isActive} title={option.isDefault ? `${option.label}(默认)` : option.label} onClick={() => { if (!isActive) setPreferences({ loadingStyle: option.value }); }}>\n <span className=\"loading-style-picker__preview\">\n <LoadingIndicator variant={option.value}/>\n </span>\n <span className=\"loading-style-picker__label\">\n {option.label}\n </span>\n </button>);\n })}\n </ScrollArea>\n <Button theme=\"borderless\" size=\"small\" className=\"loading-style-picker__nav-button\" icon={<ChevronRight size={14}/>} aria-label=\"下一个加载动画\" title=\"下一个\" disabled={!loadingPickerNav.canNext} onClick={() => scrollLoadingPicker(1)}/>\n </div>\n </div>\n </PreferenceControl>)}\n\n {/* ── 无障碍 ── */}\n {matchesPref(['灰色', '灰色模式', '无障碍', '公祭日', '去色']) && (<PreferenceControl path=\"grayscale\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 灰色模式\n <Tooltip content=\"适用于国家公祭日等场景,全局去除色彩\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.grayscale ?? false} onChange={(v) => setPreferences({ grayscale: v, ...(v ? { colorBlind: false } : {}) })}/>\n </div>\n </PreferenceControl>)}\n {matchesPref(['色弱', '色弱模式', '无障碍', '对比度', '色觉']) && (<PreferenceControl path=\"colorBlind\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 色弱模式\n <Tooltip content=\"提高界面对比度,辅助色觉障碍用户\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.colorBlind ?? false} onChange={(v) => setPreferences({ colorBlind: v, ...(v ? { grayscale: false } : {}) })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 减弱动效 ── */}\n {matchesPref(['动效', '动画', '减弱动效', '性能', '晕动', '过渡']) && (<PreferenceControl path=\"reduceMotion\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 减弱动效\n <Tooltip content=\"关闭路由切换、标签页、主题切换扩散等装饰性动画与过渡;加载指示不受影响。适合低配设备或对动效敏感的用户\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.reduceMotion ?? false} onChange={(v) => setPreferences({ reduceMotion: v })}/>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n// ── 导航与工具栏 ──\nexport function PrefsNavToolbarSection({ prefSection, matchesPref, preferences, setPreferences, prefsSearch, }: PrefsSectionBaseProps & Readonly<{\n prefsSearch: string;\n quickChatEnabled: boolean;\n}>) {\n return (<PreferenceSection title={prefSection('导航与工具栏')}>\n\n {/* ── 动态标题 ── */}\n {matchesPref(['动态标题', '浏览器标题', '页面标题', '标题']) && (<PreferenceControl path=\"dynamicTitle\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 动态浏览器标题\n <Tooltip content=\"开启后浏览器标签页标题会随当前页面变化,如「用户管理 - ArcBase」;关闭后固定显示应用名称\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.dynamicTitle ?? true} onChange={(v) => setPreferences({ dynamicTitle: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 面包屑 ── */}\n {matchesPref(['面包屑', '面包屑导航', '导航栏', '路径导航']) && (<PreferenceControl path=\"showBreadcrumb\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 显示面包屑导航\n <Tooltip content=\"在页面顶部显示路径导航(如:首页 / 系统管理 / 用户管理),帮助定位当前位置\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.showBreadcrumb} onChange={(v) => setPreferences({ showBreadcrumb: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.showBreadcrumb || !!prefsSearch.trim()) && matchesPref(['面包屑图标', '图标', '面包屑']) && (<PreferenceControl path=\"breadcrumbIcon\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>面包屑显示图标</span>\n <Switch checked={preferences.breadcrumbIcon ?? false} onChange={(v) => setPreferences({ breadcrumbIcon: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.showBreadcrumb || !!prefsSearch.trim()) && matchesPref(['面包屑首页', '首页', '面包屑']) && (<PreferenceControl path=\"breadcrumbShowHome\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 面包屑从首页开始\n <Tooltip content=\"开启后面包屑导航会以「首页」作为第一项,关闭后直接从当前页面的父级路径开始\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.breadcrumbShowHome ?? true} onChange={(v) => setPreferences({ breadcrumbShowHome: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.showBreadcrumb || !!prefsSearch.trim()) && matchesPref(['面包屑可点击', '点击', '面包屑跳转', '面包屑']) && (<PreferenceControl path=\"breadcrumbClickable\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 面包屑可点击\n <Tooltip content=\"关闭后面包屑仅展示路径文字,不可点击跳转\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.breadcrumbClickable ?? true} onChange={(v) => setPreferences({ breadcrumbClickable: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.showBreadcrumb || !!prefsSearch.trim()) && matchesPref(['面包屑子菜单', '子菜单', '面包屑悬浮', '面包屑展开']) && (<PreferenceControl path=\"breadcrumbSubMenu\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 面包屑子菜单\n <Tooltip content=\"悬停目录层级时弹出子菜单快速导航,支持多级展开\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.breadcrumbSubMenu ?? false} onChange={(v) => setPreferences({ breadcrumbSubMenu: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 菜单搜索 ── */}\n {matchesPref(['菜单搜索', '搜索框', '搜索', '搜索菜单']) && (<PreferenceControl path=\"showMenuSearch\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示菜单搜索框</span>\n <Switch checked={preferences.showMenuSearch ?? true} onChange={(v) => setPreferences({ showMenuSearch: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 收藏 ── */}\n {matchesPref(['收藏', '收藏菜单', '收藏按钮', '显示收藏', '收藏入口', '快捷收藏']) && (<PreferenceControl path=\"showFavorites\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示收藏入口</span>\n <Switch checked={preferences.showFavorites ?? false} onChange={(v) => setPreferences({ showFavorites: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 全屏按钮 ── */}\n {matchesPref(['全屏', '全屏按钮', '显示全屏']) && (<PreferenceControl path=\"showFullscreen\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示全屏按钮</span>\n <Switch checked={preferences.showFullscreen ?? true} onChange={(v) => setPreferences({ showFullscreen: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 回到顶部按钮 ── */}\n {matchesPref(['回到顶部', 'BackTop', '返回顶部', '回到顶', '顶部按钮']) && (<PreferenceControl path=\"showBackTop\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 显示回到顶部按钮\n <Tooltip content=\"内容区域滚动超过 400px 后,右下角浮现回顶按钮\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.showBackTop ?? true} onChange={(v) => setPreferences({ showBackTop: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 快捷聊天 ── */}\n\n {/* ── 顶栏时钟 ── */}\n {matchesPref(['顶栏时钟', '时钟', '时钟显示', '12小时', '24小时']) && (<PreferenceControl path=\"topbarClock\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>顶栏时钟</span>\n <RadioGroup type=\"button\" value={preferences.topbarClock ?? 'off'} onChange={(e) => setPreferences({ topbarClock: e.target.value as TopbarClockMode })}>\n <Radio value=\"off\">关闭</Radio>\n <Radio value=\"12h\">12小时制</Radio>\n <Radio value=\"24h\">24小时制</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {matchesPref(['时钟显示日期', '日期', '时钟日期', '星期']) && (<PreferenceControl path=\"topbarClockShowDate\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>时钟显示日期</span>\n <Switch checked={preferences.topbarClockShowDate ?? true} onChange={(v) => setPreferences({ topbarClockShowDate: v })}/>\n </div>\n </PreferenceControl>)}\n\n </PreferenceSection>);\n}\n// ── 侧边栏 ──\nexport function PrefsSidebarSection({ prefSection, matchesPref, preferences, setPreferences, navLayout, }: PrefsSectionBaseProps & Readonly<{\n navLayout: NavLayout;\n}>) {\n return (<PreferenceSection title={prefSection('侧边栏')}>\n\n {/* ── 侧边栏宽度 ── */}\n {matchesPref(['侧边栏宽度', '侧边栏', '菜单宽度', '展开宽度']) && navLayout !== 'horizontal' && (<PreferenceControl path=\"sidebarWidth\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }}>\n <span style={{ flexShrink: 0 }}>侧边栏宽度</span>\n <InputNumber style={{ width: 110 }} size=\"small\" min={160} max={320} step={4} suffix=\"px\" value={preferences.sidebarWidth ?? 216} onChange={(v) => setPreferences({ sidebarWidth: Number(v) || 216 })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 子菜单箭头位置 ── */}\n {matchesPref(['箭头', '展开箭头', '箭头位置', '展开收起', '子菜单箭头', '侧边栏']) && (<PreferenceControl path=\"sidebarToggleIconPosition\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 子菜单箭头位置\n <Tooltip content=\"侧边栏可展开子菜单的展开/收起箭头显示位置:默认在菜单项右端,可改为显示在左侧\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.sidebarToggleIconPosition ?? 'right'} onChange={(e) => setPreferences({ sidebarToggleIconPosition: e.target.value as 'left' | 'right' })}>\n <Radio value=\"left\">左侧</Radio>\n <Radio value=\"right\">右侧</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 侧边栏分组标题 sticky ── */}\n {matchesPref(['侧边栏', '分组标题', '滚动固定', '侧边栏分组']) && (<PreferenceControl path=\"sidebarStickyScroll\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 侧边栏分组标题滚动固定\n <Tooltip content=\"侧边栏菜单滚动时,分组标题吸附固定在顶部,便于识别当前菜单所属分组\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.sidebarStickyScroll ?? true} onChange={(v) => setPreferences({ sidebarStickyScroll: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 侧栏手风琴展开 ── */}\n {matchesPref(['侧边栏', '手风琴', '排他展开', '侧栏排他']) && (<PreferenceControl path=\"sidebarAccordion\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 侧栏排他展开\n <Tooltip content=\"开启后侧边栏同级菜单同时只允许展开一项,点击其他分组时自动收起之前展开的分组\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.sidebarAccordion ?? false} onChange={(v) => setPreferences({ sidebarAccordion: v })}/>\n </div>\n </PreferenceControl>)}\n {matchesPref(['悬浮展开', '侧边栏悬浮', '侧边栏', 'hover']) && (<PreferenceControl path=\"sidebarHoverTrigger\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 悬浮展开侧边栏\n <Tooltip content=\"开启后侧边栏收起时,鼠标悬浮即可临时展开,移开后自动收起\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.sidebarHoverTrigger ?? false} onChange={(v) => setPreferences({ sidebarHoverTrigger: v })}/>\n </div>\n </PreferenceControl>)}\n {matchesPref(['菜单滚动', '自动定位', '菜单', '滚动定位']) && (<PreferenceControl path=\"scrollMenuIntoView\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 菜单自动滚动定位\n <Tooltip content=\"开启后切换菜单时,侧边栏自动平滑滚动使激活项居中可见\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.scrollMenuIntoView ?? true} onChange={(v) => setPreferences({ scrollMenuIntoView: v })}/>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n// ── 通用 ──\nexport function PrefsGeneralSection({ prefSection, matchesPref, preferences, setPreferences, homePathOptions, autoLockMinutes, setAutoLockMinutes, hasPassword, clearLockPassword, openLockPasswordModal, }: PrefsSectionBaseProps & Readonly<{\n homePathOptions: {\n value: string;\n label: string;\n }[];\n autoLockMinutes: number;\n setAutoLockMinutes: (value: 0 | 5 | 10 | 30) => void;\n hasPassword: () => boolean;\n clearLockPassword: () => void;\n openLockPasswordModal: (mode: 'set' | 'change') => void;\n}>) {\n return (<PreferenceSection title={prefSection('通用')}>\n\n {/* ── 默认首页 ── */}\n {matchesPref(['默认首页', '首页', '登录跳转', '落地页', '默认页面', '登录页面']) && (<PreferenceControl path=\"homePath\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4, flexShrink: 0 }}>\n 登录默认页面\n <Tooltip content=\"登录成功后进入的页面;不影响日常点击「首页」菜单的行为\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select filter style={{ width: 170 }} value={preferences.homePath ?? '/'} onChange={(v) => { const parsed = preferenceOverridesSchema.safeParse({ homePath: v || '/' }); if (parsed.success) setPreferences(parsed.data); }} optionList={homePathOptions}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 时间显示方式 ── */}\n {matchesPref(['时间显示', '相对时间', '绝对时间', '分钟前', '时间格式', '时间戳']) && (<PreferenceControl path=\"timeDisplay\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 时间显示方式\n <Tooltip content=\"列表、消息与时间线里的时间:绝对时间显示完整日期时刻;相对时间显示「3 分钟前」,悬停查看精确时刻。详情页字段始终为绝对时间\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.timeDisplay ?? 'absolute'} onChange={(e) => setPreferences({ timeDisplay: e.target.value as TimeDisplay })}>\n <Radio value=\"absolute\">绝对</Radio>\n <Radio value=\"relative\">相对</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 一周起始日 ── */}\n {matchesPref(['一周起始日', '周一', '周日', '星期', '日历', '日期选择器', '起始日']) && (<PreferenceControl path=\"weekStart\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 一周起始日\n <Tooltip content=\"日期选择器与日历面板每周从哪一天开始排列\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.weekStart ?? 'monday'} onChange={(e) => setPreferences({ weekStart: e.target.value as WeekStart })}>\n <Radio value=\"monday\">周一</Radio>\n <Radio value=\"sunday\">周日</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 聚焦时自动刷新 ── */}\n {matchesPref(['自动刷新', '聚焦', '切回', '窗口', '页签', '重新获取', '过期数据', 'refetch']) && (<PreferenceControl path=\"refetchOnFocus\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 切回窗口时自动刷新数据\n <Tooltip content=\"从其他窗口或页签切回时,自动重新获取已过期的列表与详情数据;网络较差时可关闭\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.refetchOnFocus ?? false} onChange={(v) => setPreferences({ refetchOnFocus: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 页面加载进度条 ── */}\n {matchesPref(['进度条', '加载进度', '页面加载', '顶部进度', 'NProgress']) && (<PreferenceControl path=\"showProgressBar\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 页面加载进度条\n <Tooltip content=\"页面切换时在内容区顶部显示加载进度条\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.showProgressBar ?? true} onChange={(v) => setPreferences({ showProgressBar: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 全局快捷键 ── */}\n {matchesPref(['快捷键', '键盘', '热键', 'Alt', 'Ctrl', '组合键']) && (<PreferenceControl path=\"enableShortcuts\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 启用全局快捷键\n <Tooltip content=\"Alt+L 锁屏、Alt+S 收起/展开侧边栏、Alt+C 内容全屏、Ctrl+K 搜索菜单;关闭后这些组合键不再生效\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.enableShortcuts ?? true} onChange={(v) => setPreferences({ enableShortcuts: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 页面状态同步到地址栏 ── */}\n {matchesPref(['地址栏', 'URL', '深链', '页面状态', '查询参数', '分享', '书签', '标签参数', 'tab参数', '选中项']) && (<PreferenceControl path=\"syncPageStateToUrl\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 页面状态同步到地址栏\n <Tooltip content=\"页面内的 Tab 与分栏选中项以查询参数写入地址栏(如 ?tab=),刷新、收藏或分享链接可直达当前视图;关闭时地址栏保持干净,外部带参链接进入仍会生效一次\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.syncPageStateToUrl ?? false} onChange={(v) => setPreferences({ syncPageStateToUrl: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 退出登录确认 ── */}\n {matchesPref(['退出确认', '退出登录', '二次确认', '注销', '登出']) && (<PreferenceControl path=\"confirmLogout\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 退出登录二次确认\n <Tooltip content=\"关闭后点击「退出登录」将直接退出,不再弹出确认框\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.confirmLogout ?? true} onChange={(v) => setPreferences({ confirmLogout: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 弹窗点击遮罩关闭 ── */}\n {matchesPref(['弹窗', '模态框', '遮罩', '蒙层', '点击关闭', 'maskClosable', '误触']) && (<PreferenceControl path=\"modalClickMaskToClose\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 弹窗点击遮罩关闭\n <Tooltip content=\"开启后,点击弹窗外的遮罩区域可直接关闭弹窗(按 Esc 关闭不受影响);关闭时需点击右上角或底部按钮,可防止误触丢失表单内容\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.modalClickMaskToClose ?? false} onChange={(v) => setPreferences({ modalClickMaskToClose: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 文件默认视图 ── */}\n {matchesPref(['文件视图', '文件列表', '文件管理', '列表', '网格', '文件']) && (<PreferenceControl path=\"filesViewMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>文件列表默认视图</span>\n <RadioGroup type=\"button\" value={preferences.filesViewMode ?? 'list'} onChange={(e) => setPreferences({ filesViewMode: e.target.value as 'list' | 'grid' })}>\n <Radio value=\"list\">列表</Radio>\n <Radio value=\"grid\">网格</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 锁屏 ── */}\n {matchesPref(['锁屏', '屏幕锁', '密码', '锁定']) && (<>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 开启屏幕锁\n <Tooltip content=\"开启后可通过 Alt+L 快捷键或用户菜单锁定屏幕,解锁需输入密码\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={hasPassword()} onChange={(v) => {\n if (v) {\n openLockPasswordModal('set');\n }\n else {\n clearLockPassword();\n }\n }}/>\n </div>\n </>)}\n {matchesPref(['锁屏', '密码', '锁屏密码']) && (<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>锁屏密码</span>\n <Button size=\"small\" theme=\"light\" onClick={() => {\n openLockPasswordModal(hasPassword() ? 'change' : 'set');\n }}>\n {hasPassword() ? '修改密码' : '设置密码'}\n </Button>\n </div>)}\n {hasPassword() && matchesPref(['自动锁屏', '锁屏', '无操作', '空闲', '闲置']) && (<>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 无操作自动锁屏\n <Tooltip content=\"超过设定时长没有任何鼠标/键盘操作时自动锁定屏幕\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select style={{ width: 110 }} value={autoLockMinutes} onChange={(v) => { if (v === 0 || v === 5 || v === 10 || v === 30) setAutoLockMinutes(v); }} optionList={[\n { value: 0, label: '关闭' },\n { value: 5, label: '5 分钟' },\n { value: 10, label: '10 分钟' },\n { value: 30, label: '30 分钟' },\n ]}/>\n </div>\n </>)}\n </PreferenceSection>);\n}\n// ── 表格 ──\nexport function PrefsTableSection({ prefSection, matchesPref, preferences, setPreferences, }: PrefsSectionBaseProps) {\n return (<PreferenceSection title={prefSection('表格')}>\n\n {/* ── 表格设置 ── */}\n {matchesPref(['表格', '边框', '斦马纹', '尺寸', '分页', '列设置', '显示表格', '启用斦马纹']) && (<>\n <PreferenceControl path=\"tableBordered\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示表格边框</span>\n <Switch checked={preferences.tableBordered ?? true} onChange={(v) => setPreferences({ tableBordered: v })}/>\n </div>\n </PreferenceControl>\n <PreferenceControl path=\"tableStriped\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>启用斑马纹</span>\n <Switch checked={preferences.tableStriped ?? false} onChange={(v) => setPreferences({ tableStriped: v })}/>\n </div>\n </PreferenceControl>\n <PreferenceControl path=\"tableSize\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>表格尺寸</span>\n <RadioGroup type=\"button\" value={preferences.tableSize ?? 'default'} onChange={(e) => setPreferences({ tableSize: e.target.value as TableSizePreference })}>\n <Radio value=\"small\">紧凑</Radio>\n <Radio value=\"middle\">适中</Radio>\n <Radio value=\"default\">宽松</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>\n <PreferenceControl path=\"tablePageSize\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>默认分页大小</span>\n <Select value={preferences.tablePageSize ?? 10} onChange={(v) => setPreferences({ tablePageSize: v as UserPreferences['tablePageSize'] })} style={{ width: 100 }} optionList={[10, 20, 50, 100].map((v) => ({ value: v, label: `${v} 条` }))}/>\n </div>\n </PreferenceControl>\n <PreferenceControl path=\"showTableColumnSettings\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示表格列设置按钮</span>\n <Switch checked={preferences.showTableColumnSettings ?? true} onChange={(v) => setPreferences({ showTableColumnSettings: v })}/>\n </div>\n </PreferenceControl>\n </>)}\n\n {/* ── 记住筛选条件 ── */}\n {matchesPref(['筛选', '筛选条件', '记住', '搜索条件', '恢复', '查询条件', '表格']) && (<PreferenceControl path=\"rememberListFilters\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 记住列表筛选条件\n <Tooltip content=\"离开列表页再回来时恢复上次查询的筛选条件(分页回到第 1 页);关闭浏览器即清除\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.rememberListFilters ?? false} onChange={(v) => {\n if (!v)\n clearAllListFilterSnapshots();\n setPreferences({ rememberListFilters: v });\n }}/>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n// ── 标签页 ──\nexport function PrefsTabsSection({ prefSection, matchesPref, preferences, setPreferences, prefsSearch, }: PrefsSectionBaseProps & Readonly<{\n prefsSearch: string;\n}>) {\n return (<PreferenceSection title={prefSection('标签页')}>\n\n {/* ── 多标签页 ── */}\n {matchesPref(['多标签页', '标签页', '标签', '启用标签']) && (<PreferenceControl path=\"enableTabs\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>启用多标签页</span>\n <Switch checked={preferences.enableTabs} onChange={(v) => setPreferences({ enableTabs: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['保存标签', '恢复标签', '标签页', '标签']) && (<PreferenceControl path=\"keepTabs\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 保存标签页\n <Tooltip content=\"刷新页面或重新登录后,自动恢复上次打开的标签页\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.keepTabs ?? true} onChange={(v) => setPreferences({ keepTabs: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['页面缓存', 'keepalive', 'keep-alive', '缓存', '标签页', '标签']) && (<PreferenceControl path=\"enablePageCache\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 页面缓存\n <Tooltip content=\"菜单管理中开启「页面缓存」的页面,切换标签页时保留状态(搜索条件、滚动位置等),关闭标签页时释放\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.enablePageCache ?? true} onChange={(v) => setPreferences({ enablePageCache: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['标签图标', '图标', '标签页', '标签']) && (<PreferenceControl path=\"showTabIcon\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>标签页显示图标</span>\n <Switch checked={preferences.showTabIcon} onChange={(v) => setPreferences({ showTabIcon: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['紧凑标签', '紧凑模式', '页签密度', '标签页', '标签']) && (<PreferenceControl path=\"compactTabs\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 紧凑标签页\n <Tooltip content=\"减少标签栏的高度与页签间距,适合同时打开较多页面\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.compactTabs ?? true} onChange={(v) => setPreferences({ compactTabs: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['标签切换器', '切换器', 'chevron', '标签页', '标签']) && (<PreferenceControl path=\"showTabSwitcher\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示标签切换器</span>\n <Switch checked={preferences.showTabSwitcher ?? true} onChange={(v) => setPreferences({ showTabSwitcher: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['自动隐藏', '隐藏标签', '程序坞', 'dock', '标签页', '标签']) && (<PreferenceControl path=\"autoHideTabs\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 自动隐藏标签栏\n <Tooltip content=\"平时收起为一条细线,鼠标悬停或键盘聚焦时展开;触屏设备上保持常显\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.autoHideTabs ?? false} onChange={(v) => setPreferences({ autoHideTabs: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['最大标签', '标签数量', '标签页', '标签']) && (<PreferenceControl path=\"tabsMaxCount\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>最大标签数</span>\n <InputNumber min={5} max={50} value={preferences.tabsMaxCount} onChange={(v) => setPreferences({ tabsMaxCount: v as number })} style={{ width: 100 }}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['超限策略', 'FIFO', 'LRU', '关闭策略', '标签页', '标签']) && (<PreferenceControl path=\"tabEvictPolicy\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 超限关闭策略\n <Tooltip content=\"FIFO: 关闭最早打开的标签;LRU: 关闭最久未使用的标签\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.tabEvictPolicy ?? 'fifo'} onChange={(e) => setPreferences({ tabEvictPolicy: e.target.value as 'fifo' | 'lru' })}>\n <Radio value=\"fifo\">FIFO</Radio>\n <Radio value=\"lru\">LRU</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['插入位置', '新标签位置', '标签插入', '标签页', '标签']) && (<PreferenceControl path=\"openTabBehavior\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 新标签插入位置\n <Tooltip content=\"末尾:新标签始终排在最右侧;当前后方:新标签紧跟在当前标签之后插入\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.openTabBehavior ?? 'append'} onChange={(e) => setPreferences({ openTabBehavior: e.target.value as 'append' | 'insert-next' })}>\n <Radio value=\"append\">末尾</Radio>\n <Radio value=\"insert-next\">当前后方</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['双击标签', '双击', '标签行为', '标签页', '标签']) && (<PreferenceControl path=\"tabDoubleClickAction\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>双击标签行为</span>\n <RadioGroup type=\"button\" value={preferences.tabDoubleClickAction ?? 'refresh'} onChange={(e) => setPreferences({ tabDoubleClickAction: e.target.value as 'refresh' | 'close' | 'none' })}>\n <Radio value=\"refresh\">刷新</Radio>\n <Radio value=\"close\">关闭</Radio>\n <Radio value=\"none\">无</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['标签风格', '风格', '线条', '胶囊', '卡片', 'chrome', '谷歌', '极简', 'minimal', '分段', 'segment', '方块', 'block', '短线', 'shortline', '圆点', 'dot', '顶线', 'topline', '标签页', '标签']) && (<PreferenceControl path=\"tabStyle\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>标签页风格</span>\n <Select value={preferences.tabStyle ?? 'line'} optionList={[\n { value: 'line', label: '线条' },\n { value: 'pill', label: '胶囊' },\n { value: 'card', label: '卡片' },\n { value: 'chrome', label: '谷歌' },\n { value: 'minimal', label: '极简' },\n { value: 'segment', label: '分段' },\n { value: 'block', label: '方块' },\n { value: 'shortline', label: '短线' },\n { value: 'dot', label: '圆点' },\n { value: 'topline', label: '顶线' },\n ]} onChange={(v) => setPreferences({ tabStyle: v as TabStyle })} style={{ width: 120 }}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['标签动画', '动画', '淡入', '滑入', '缩放', '标签页', '标签']) && (<PreferenceControl path=\"tabAnimation\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>标签页动画</span>\n <RadioGroup type=\"button\" value={preferences.tabAnimation ?? 'none'} onChange={(e) => setPreferences({ tabAnimation: e.target.value as 'none' | 'fade' | 'slide' | 'scale' })}>\n {(['none', 'fade', 'slide', 'scale'] as const).map((anim) => {\n const labels: Record<string, string> = { none: '无', fade: '淡入', slide: '滑入', scale: '缩放' };\n const radio = <Radio key={anim} value={anim}>{labels[anim]}</Radio>;\n if (anim === 'none')\n return radio;\n return (<Popover key={anim} trigger=\"hover\" position=\"bottom\" mouseEnterDelay={100} mouseLeaveDelay={100} content={<div className=\"tab-anim-preview\" data-anim={anim}>\n <span className=\"tab-anim-preview__pill\">首页</span>\n <span className=\"tab-anim-preview__pill tab-anim-preview__pill--active\">用户管理</span>\n <span className=\"tab-anim-preview__pill tab-anim-preview__demo\">角色管理</span>\n </div>}>\n {radio}\n </Popover>);\n })}\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {matchesPref(['路由动画', '切换动画', '动画', '淡入', '上滑', '左滑']) && (<PreferenceControl path=\"routeAnimation\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>路由切换动画</span>\n <RadioGroup type=\"button\" value={preferences.routeAnimation ?? 'fade'} onChange={(e) => setPreferences({ routeAnimation: e.target.value as RouteAnimation })}>\n {(['none', 'fade', 'slide-up', 'slide-left'] as const).map((anim) => {\n const labels: Record<string, string> = { none: '无', fade: '淡入', 'slide-up': '上滑', 'slide-left': '左滑' };\n const radio = <Radio key={anim} value={anim}>{labels[anim]}</Radio>;\n if (anim === 'none')\n return radio;\n return (<Popover key={anim} trigger=\"hover\" position=\"bottom\" mouseEnterDelay={100} mouseLeaveDelay={100} content={<div className=\"route-anim-preview\" data-anim={anim}>\n <div className=\"route-anim-preview__page\">\n <div className=\"route-anim-preview__title\"/>\n <div className=\"route-anim-preview__line\"/>\n <div className=\"route-anim-preview__line route-anim-preview__line--short\"/>\n </div>\n </div>}>\n {radio}\n </Popover>);\n })}\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n","import { textMatches } from '@fudanda/react-core/utils/pinyin';\nimport { useState, type ReactNode } from 'react';\nimport { Empty, Button } from 'antd';\nimport { Columns3, LayoutDashboard, ListFilter, Menu, Navigation, Palette, SlidersHorizontal } from 'lucide-react';\nimport { preferenceDefinitionMap } from '@fudanda/shared/preferences';\nimport ScrollArea from '@/components/ScrollArea';\nimport { usePreferences, type NavLayout, type UserPreferences } from '@fudanda/react-core/hooks/usePreferences';\nimport { PreferenceFilterContext } from '@/components/preferences/preference-filter';\nimport { getPreferenceCategories, matchesPreference, type PreferenceCategory } from './preference-catalog';\ntype ThemeMode = 'light' | 'dark' | 'system';\nimport { PrefsAppearanceSection, PrefsGeneralSection, PrefsLayoutSection, PrefsNavToolbarSection, PrefsSidebarSection, PrefsTableSection, PrefsTabsSection } from './PreferencesSections';\nexport interface PreferencesSheetBodyProps {\n readonly preferences: UserPreferences;\n readonly setPreferences: (prefs: Partial<UserPreferences>) => void;\n readonly navLayout: NavLayout;\n readonly mode: ThemeMode;\n readonly handleThemeModeChange: (newMode: ThemeMode) => void;\n readonly isDark: boolean;\n readonly themeColor: string;\n readonly setThemeColor: (color: string) => void;\n readonly prefsSearch: string;\n readonly quickChatEnabled: boolean;\n readonly homePathOptions: {\n value: string;\n label: string;\n }[];\n readonly autoLockMinutes: number;\n readonly setAutoLockMinutes: (value: 0 | 5 | 10 | 30) => void;\n readonly hasPassword: () => boolean;\n readonly clearLockPassword: () => void;\n readonly openLockPasswordModal: (mode: 'set' | 'change') => void;\n readonly onClearSearch: () => void;\n}\nconst categoryIcons = { layout: LayoutDashboard, appearance: Palette, navigation: Navigation, sidebar: Menu, tabs: Columns3, table: ListFilter, general: SlidersHorizontal };\nconst noSectionTitle = () => null;\n/**\n * 偏好设置抽屉的正文:全部分区 + ColorPicker / Radio / Select 等仅在此处使用的控件。\n * 作为 AdminLayout 的懒加载边界,首次打开抽屉时才下载,不进入布局首屏。\n */\nexport default function PreferencesSheetBody(props: PreferencesSheetBodyProps) {\n const { canEditPreference, hasManagedPreferences } = usePreferences();\n const [selected, setSelected] = useState<PreferenceCategory>('layout');\n const searching = Boolean(props.prefsSearch.trim());\n const categories = getPreferenceCategories('', canEditPreference, props.quickChatEnabled, props.hasPassword(), props.hasPassword());\n const results = getPreferenceCategories(props.prefsSearch, canEditPreference, props.quickChatEnabled, props.hasPassword(), props.hasPassword());\n const active = categories.find(category => category.key === selected) ?? categories[0];\n const visible = searching ? results : active ? [active] : [];\n const base = {\n prefSection: noSectionTitle,\n matchesPref: (keywords: string[]) => !props.prefsSearch.trim() || keywords.some(value => textMatches(value, props.prefsSearch.trim())),\n preferences: props.preferences,\n setPreferences: props.setPreferences,\n };\n const sections: Record<PreferenceCategory, ReactNode> = {\n layout: <PrefsLayoutSection {...base} navLayout={props.navLayout}/>,\n appearance: <PrefsAppearanceSection {...base} mode={props.mode} handleThemeModeChange={props.handleThemeModeChange} isDark={props.isDark} themeColor={props.themeColor} setThemeColor={props.setThemeColor}/>,\n navigation: <PrefsNavToolbarSection {...base} prefsSearch={props.prefsSearch} quickChatEnabled={props.quickChatEnabled}/>,\n sidebar: <PrefsSidebarSection {...base} navLayout={props.navLayout}/>,\n general: <PrefsGeneralSection {...base} homePathOptions={props.homePathOptions} autoLockMinutes={props.autoLockMinutes} setAutoLockMinutes={props.setAutoLockMinutes} hasPassword={props.hasPassword} clearLockPassword={props.clearLockPassword} openLockPasswordModal={props.openLockPasswordModal}/>,\n table: <PrefsTableSection {...base}/>,\n tabs: <PrefsTabsSection {...base} prefsSearch={props.prefsSearch}/>,\n };\n return <PreferenceFilterContext.Provider value={path => matchesPreference(preferenceDefinitionMap[path], props.prefsSearch)}>\n <div className={`arc-preferences__browser${searching ? ' arc-preferences__browser--search' : ''}`}>\n {!searching && categories.length > 0 && <ScrollArea as=\"nav\" className=\"arc-preferences__categories\" aria-label=\"偏好分类\">\n {categories.map(category => {\n const Icon = categoryIcons[category.key];\n return <button type=\"button\" key={category.key} aria-pressed={category.key === active?.key} onClick={() => setSelected(category.key)}><Icon size={16}/><span>{category.label}</span></button>;\n })}\n </ScrollArea>}\n <ScrollArea className=\"arc-preferences__content\" key={searching ? 'search' : active?.key} aria-label=\"偏好设置内容\">\n {searching && <div className=\"arc-preferences__result-summary\" role=\"status\">找到 {results.reduce((count, category) => count + category.fields.length + category.localCount, 0)} 项可调整的设置</div>}\n {visible.map(category => <section key={category.key} className=\"arc-preferences__section\" aria-label={`${category.label}设置`}>\n <div className=\"arc-preferences__section-heading\"><h3>{category.label}</h3><p>{category.description}</p></div>\n {sections[category.key]}\n </section>)}\n {visible.length === 0 && <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={searching ? '没有找到匹配的设置' : '当前没有可调整的个人设置'}>\n {searching && <Button onClick={props.onClearSearch}>清空搜索</Button>}\n </Empty>}\n {hasManagedPreferences && <p className=\"arc-preferences__policy-note\">部分设置由系统统一管理,此处仅展示可调整的项目。</p>}\n </ScrollArea>\n </div>\n </PreferenceFilterContext.Provider>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PreferencesSheetBody-B0poTPEA.js","mappings":"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","names":["__iconData","__iconData$5","createLucideIcon","__iconData$4","__iconData$3","__iconData$2","__iconData$1","matchesPreference","query","search","category","preferenceCategories","item","definition","aliases","searchAliases","option","textMatches","value","getPreferenceCategories","localLockMatch","preferenceDefinitions","canEdit","hasLockPassword","SwatchColorPicker","isCustomized","options","allowClear","Tooltip","clearTitle","onChange","Check","isActive","allowCustom","ColorPicker","v","customTitle","Palette","PrefsLayoutSection","PreferenceSection","prefSection","matchesPref","PreferenceControl","navLayout","setPreferences","label","Info","RadioGroup","preferences","Radio","Switch","PrefDarkToneRow","hint","DARK_SURFACE_TONE_OPTIONS","ScheduleTimeInput","draft","setDraft","useState","previousValue","setPreviousValue","Input","text","isScheduleTime","onCommit","PrefsAppearanceSection","loadingPickerRef","useRef","activeLoadingOptionRef","loadingPickerVisible","usePreferenceFilter","LOADING_STYLE_OPTIONS","loadingPickerNav","setLoadingPickerNav","updateLoadingPickerNav","useCallback","el","useEffect","observer","active","elRect","activeRect","scrollLoadingPicker","direction","mode","handleThemeModeChange","themeColor","color","setThemeColor","THEME_COLOR_PRESETS","preset","isDark","tone","Select","UI_SCALE_OPTIONS","FONT_FAMILY_OPTIONS","Button","ChevronLeft","ScrollArea","LoadingIndicator","ChevronRight","PrefsNavToolbarSection","prefsSearch","PrefsSidebarSection","InputNumber","PrefsGeneralSection","parsed","preferenceOverridesSchema","homePathOptions","_Fragment","hasPassword","openLockPasswordModal","clearLockPassword","autoLockMinutes","setAutoLockMinutes","PrefsTableSection","clearAllListFilterSnapshots","PrefsTabsSection","radio","anim","Popover","PreferencesSheetBody","usePreferences","selected","setSelected","searching","props","categories","canEditPreference","results","visible","base","noSectionTitle","keywords","sections","PreferenceFilterContext","preferenceDefinitionMap","path","Icon","categoryIcons","count","Empty","hasManagedPreferences","LayoutDashboard","Navigation","Menu","Columns3","ListFilter","SlidersHorizontal"],"ignoreList":[0,1,2,3,4,5],"sources":["../../../../node_modules/lucide-react/dist/esm/icons/columns-3.mjs","../../../../node_modules/lucide-react/dist/esm/icons/layout-dashboard.mjs","../../../../node_modules/lucide-react/dist/esm/icons/list-filter.mjs","../../../../node_modules/lucide-react/dist/esm/icons/navigation.mjs","../../../../node_modules/lucide-react/dist/esm/icons/palette.mjs","../../../../node_modules/lucide-react/dist/esm/icons/sliders-horizontal.mjs","../../src/layouts/admin/preference-catalog.ts","../../src/components/SwatchColorPicker.tsx","../../src/layouts/admin/PreferencesSections.tsx","../../src/layouts/admin/PreferencesSheetBody.tsx"],"sourcesContent":[null,null,null,null,null,null,"import { preferenceDefinitions, type PreferenceDefinition, type PreferencePath } from '@fudanda/shared/preferences';\nimport { textMatches } from '@fudanda/react-core/utils/pinyin';\nexport const preferenceCategories = [\n { key: 'layout', label: '布局', description: '选择导航结构和内容区域的呈现方式。' },\n { key: 'appearance', label: '外观', description: '调整主题、颜色、字体和界面动效。' },\n { key: 'navigation', label: '导航', description: '设置面包屑、顶栏工具和时钟。' },\n { key: 'sidebar', label: '侧栏', description: '调整菜单宽度、展开方式和滚动行为。' },\n { key: 'tabs', label: '标签页', description: '设置多页浏览、页面缓存和切换行为。' },\n { key: 'table', label: '表格', description: '设置列表样式、分页和筛选记忆。单张表格的独立设置优先,可在表格中选择“跟随全局偏好”恢复。' },\n { key: 'general', label: '通用', description: '调整首页、时间显示、交互和锁屏设置。' },\n] as const;\nexport type PreferenceCategory = (typeof preferenceCategories)[number]['key'];\nconst searchAliases: Partial<Record<PreferencePath, readonly string[]>> = {\n colorMode: ['主题', '主题模式'], themeColor: ['主题色', '配色', '品牌色'],\n homePath: ['默认首页', '登录跳转', '落地页'],\n sidebarWidth: ['侧栏宽度'], loadingStyle: ['Loading'], reduceMotion: ['减少动画', '关闭动画'],\n};\n/** 搜索与分类共用 shared 字段目录,不改变策略和字段适用规则。 */\nexport function matchesPreference(definition: PreferenceDefinition, search: string): boolean {\n const query = search.trim();\n if (!query)\n return true;\n const category = preferenceCategories.find(item => item.key === definition.group);\n const aliases = searchAliases[definition.path] ?? [];\n return [definition.label, definition.path, definition.description ?? '', category?.label ?? '',\n ...(definition.options?.flatMap(option => [option.label, String(option.value)]) ?? []), ...aliases,\n ].some(value => textMatches(value, query));\n}\nexport function getPreferenceCategories(search: string, canEdit: (path: PreferencePath) => boolean, _quickChatEnabled: boolean, hasLockPassword: boolean, _lockScreenEnabled: boolean) {\n const localLockMatch = !search.trim() || ['通用', '锁屏', '屏幕锁', '锁屏密码', '密码', '锁定', '自动锁屏', '无操作', '空闲', '闲置'].some(value => textMatches(value, search.trim()));\n return preferenceCategories.map(category => ({ ...category,\n fields: preferenceDefinitions.filter(definition => definition.group === category.key && canEdit(definition.path) && matchesPreference(definition, search)),\n localCount: category.key === 'general' && localLockMatch ? (hasLockPassword ? 3 : 2) : 0,\n })).filter(category => category.fields.length > 0 || category.localCount > 0);\n}\n","import { ColorPicker, Tooltip } from '@/ui';\nimport { Check, Palette } from 'lucide-react';\nimport './swatch-color-picker.css';\nexport interface SwatchColorOption {\n /** 存档值:主题预设 key 或 `#rrggbb` */\n key: string;\n /** 悬停提示 */\n label: string;\n /** 色块展示色 */\n color: string;\n}\nexport interface SwatchColorPickerProps {\n /** 当前值:某个选项 key,或 `#rrggbb` 自定义色;标签场景空串表示无颜色 */\n value: string;\n onChange: (value: string) => void;\n options: readonly SwatchColorOption[];\n /** 允许通过取色器选择预设之外的颜色,缺省开启 */\n allowCustom?: boolean;\n customTitle?: string;\n /** 展示「无颜色」选项(选中后 onChange('')),用于颜色可空的场景 */\n allowClear?: boolean;\n clearTitle?: string;\n}\n/**\n * 色板颜色选择器:预设色块 + 自定义取色器,与个人偏好主题色同款交互。\n * value 语义由调用方决定(预设 key 或 hex):色块高亮按 `value === key` 判断,\n * 自定义按钮只在 `value` 是 hex 且不属于任何预设 key 时高亮(预设 key 本身也可能是 hex)。\n */\nexport function SwatchColorPicker({ value, onChange, options, allowCustom = true, customTitle = '自定义颜色', allowClear = false, clearTitle = '无颜色', }: SwatchColorPickerProps) {\n const isCustomized = value.startsWith('#') && !options.some((option) => option.key === value);\n return (<div className=\"swatch-color-picker\">\n {allowClear && (<Tooltip content={clearTitle} position=\"top\">\n <button type=\"button\" aria-label={clearTitle} aria-pressed={value === ''} className={`swatch-color-swatch swatch-color-swatch--clear${value === '' ? ' swatch-color-swatch--active' : ''}`} onClick={() => onChange('')}>\n {value === '' && (<span className=\"swatch-color-swatch__check\">\n <Check size={14} strokeWidth={2.5}/>\n </span>)}\n </button>\n </Tooltip>)}\n {options.map((option) => {\n const isActive = value === option.key;\n return (<Tooltip key={option.key} content={option.label} position=\"top\">\n <button type=\"button\" aria-label={option.label} aria-pressed={isActive} className={`swatch-color-swatch${isActive ? ' swatch-color-swatch--active' : ''}`} style={{ backgroundColor: option.color, color: option.color }} onClick={() => onChange(option.key)} title={option.label}>\n {isActive && (<span className=\"swatch-color-swatch__check\">\n <Check size={14} strokeWidth={2.5}/>\n </span>)}\n </button>\n </Tooltip>);\n })}\n {allowCustom && (<ColorPicker alpha={false} usePopover value={isCustomized ? ColorPicker.colorStringToValue(value) : undefined} onChange={(v) => onChange(v.hex)} popoverProps={{ position: 'top', zIndex: 10010 }}>\n <button type=\"button\" aria-label={customTitle} aria-pressed={isCustomized} className={`swatch-color-swatch swatch-color-swatch--custom${isCustomized ? ' swatch-color-swatch--active' : ''}`} style={isCustomized ? { backgroundColor: value, color: value } : {}} title={customTitle}>\n {isCustomized\n ? <span className=\"swatch-color-swatch__check\"><Check size={14} strokeWidth={2.5}/></span>\n : <span className=\"swatch-color-swatch__icon\"><Palette size={14}/></span>}\n </button>\n </ColorPicker>)}\n </div>);\n}\n","import { preferenceOverridesSchema } from '@fudanda/shared/preferences';\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\nimport { Button, Input, InputNumber, Popover, Radio, RadioGroup, Select, Switch, Tooltip } from '@/ui';\nimport { Check, ChevronLeft, ChevronRight, Info } from 'lucide-react';\nimport { usePreferenceFilter } from '@/components/preferences/preference-filter';\nimport { LOADING_STYLE_OPTIONS, DARK_SURFACE_TONE_OPTIONS, UI_SCALE_OPTIONS, FONT_FAMILY_OPTIONS } from '@fudanda/react-core/hooks/usePreferences';\nimport { clearAllListFilterSnapshots } from '@fudanda/react-core/lib/list-filter-memory';\nimport type { NavLayout, TableSizePreference, RouteAnimation, BorderRadiusPreference, ScheduledDarkMode, TabStyle, TabSize, TabType, DarkSurfaceTone, TopbarClockMode, UserPreferences, UiScale, FontFamilyPreference, WeekStart, TimeDisplay, DoubleRailStyle } from '@fudanda/react-core/hooks/usePreferences';\nimport { isScheduleTime } from '@fudanda/react-core/hooks/usePreferences';\ntype ThemeMode = 'light' | 'dark' | 'system';\nimport { THEME_COLOR_PRESETS } from '@fudanda/react-core/lib/theme-color';\nimport { SwatchColorPicker } from '@/components/SwatchColorPicker';\nimport ScrollArea from '@/components/ScrollArea';\nimport { LoadingIndicator } from '@/components/PageLoading';\nimport { PreferenceControl, PreferenceSection } from '@/components/settings/SettingRow';\n// 偏好设置面板各分区。所有分区组件都返回 Fragment,\n// 使设置块保持为外层 flex 容器的直接子节点(gap 布局不变)。\ninterface PrefsSectionBaseProps {\n readonly prefSection: (label: string) => ReactNode;\n readonly matchesPref: (keywords: string[]) => boolean;\n readonly preferences: UserPreferences;\n readonly setPreferences: (prefs: Partial<UserPreferences>) => void;\n}\n// ── 布局 ──\nexport function PrefsLayoutSection({ prefSection, matchesPref, preferences, setPreferences, navLayout, }: PrefsSectionBaseProps & Readonly<{\n navLayout: NavLayout;\n}>) {\n return (<PreferenceSection title={prefSection('布局')}>\n\n {/* ── 导航布局 ── */}\n {matchesPref(['导航布局', '布局', '左侧菜单', '顶部菜单', '混合菜单', '双列菜单']) && (<PreferenceControl path=\"navLayout\">\n <div>\n <div style={{ marginBottom: 12, fontSize: 13, fontWeight: 500, color: 'var(--arc-antd-color-text-0)' }}>导航布局</div>\n <div className=\"arc-preferences__layout-options\">\n {([\n { value: 'vertical' as NavLayout, label: '左侧菜单' },\n { value: 'horizontal' as NavLayout, label: '顶部菜单' },\n { value: 'mixed' as NavLayout, label: '混合菜单' },\n { value: 'double' as NavLayout, label: '双列菜单' },\n ]).map(({ value, label }) => (<button type=\"button\" key={value} className={`layout-picker__option${navLayout === value ? ' layout-picker__option--active' : ''}`} aria-pressed={navLayout === value} onClick={() => { if (navLayout !== value) setPreferences({ navLayout: value }); }}>\n <div className={`layout-picker__preview layout-picker__preview--${value}`} aria-hidden=\"true\">\n <i className=\"layout-preview__rail\"/><i className=\"layout-preview__menu\"/><i className=\"layout-preview__header\"/>\n <i className=\"layout-preview__content\"><i /><i /><i /></i>\n </div>\n <span className=\"layout-picker__label\">{label}{navLayout === value && <Check size={14}/>}</span>\n </button>))}\n </div>\n </div>\n </PreferenceControl>)}\n\n {/* ── 双列首列形式(仅双列布局适用,依赖 navLayout)── */}\n {navLayout === 'double' && matchesPref(['双列', '双列菜单', '首列', '双列首列', '图标', '图标文字']) && (<PreferenceControl path=\"doubleRailStyle\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 双列首列形式\n <Tooltip content=\"仅图标:与左侧菜单收起时同宽,名称靠悬浮提示,可容纳更多一级模块;图标 + 文字:名称直接可读,但条目更高,矮窗口需要滚动\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.doubleRailStyle ?? 'icon'} onChange={(e) => setPreferences({ doubleRailStyle: e.target.value as DoubleRailStyle })}>\n <Radio value=\"icon\">仅图标</Radio>\n <Radio value=\"icon-text\">图标 + 文字</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 内容宽度 ── */}\n {matchesPref(['内容宽度', '固定宽度', '居中', '内容区']) && (<PreferenceControl path=\"contentWidth\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 固定内容宽度\n <Tooltip content=\"开启后内容区最大宽度为 1440px 并居中,适合宽屏显示器\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={(preferences.contentWidth ?? 'fluid') === 'fixed'} onChange={(v) => setPreferences({ contentWidth: v ? 'fixed' : 'fluid' })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── Logo 图标 ── */}\n {matchesPref(['Logo', 'Logo图标', '图标', '显示Logo']) && (<PreferenceControl path=\"showLogo\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示 Logo 图标</span>\n <Switch checked={preferences.showLogo ?? true} onChange={(v) => setPreferences({ showLogo: v })}/>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n// ── 外观 ──\nfunction PrefDarkToneRow({ label, hint, value, onChange, }: Readonly<{\n label: string;\n hint: string;\n value: DarkSurfaceTone;\n onChange: (tone: DarkSurfaceTone) => void;\n}>) {\n return (<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n {label}\n <Tooltip content={hint} position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={value} onChange={(e) => onChange(e.target.value as DarkSurfaceTone)}>\n {DARK_SURFACE_TONE_OPTIONS.map((option) => (<Radio key={option.value} value={option.value}>{option.label}</Radio>))}\n </RadioGroup>\n </div>);\n}\n/**\n * 保留 HH:mm 的输入草稿,合法才提交;外部值变化时回填,保持输入节点和焦点。\n */\nfunction ScheduleTimeInput({ path, label, value, onCommit }: Readonly<{\n path: 'scheduledDarkStart' | 'scheduledDarkEnd';\n label: string;\n value: string;\n onCommit: (value: string) => void;\n}>) {\n const [draft, setDraft] = useState(value);\n const [previousValue, setPreviousValue] = useState(value);\n if (previousValue !== value) {\n setPreviousValue(value);\n setDraft(value);\n }\n return (<PreferenceControl path={path}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>{label}</span>\n <Input value={draft} placeholder=\"18:00\" aria-label={label} style={{ width: 96 }} onChange={(text) => {\n setDraft(text);\n if (isScheduleTime(text))\n onCommit(text);\n }}/>\n </div>\n </PreferenceControl>);\n}\nexport function PrefsAppearanceSection({ prefSection, matchesPref, preferences, setPreferences, mode, handleThemeModeChange, isDark, themeColor, setThemeColor, }: PrefsSectionBaseProps & Readonly<{\n mode: ThemeMode;\n handleThemeModeChange: (newMode: ThemeMode) => void;\n isDark: boolean;\n themeColor: string;\n setThemeColor: (color: string) => void;\n}>) {\n const loadingPickerRef = useRef<HTMLDivElement>(null);\n const activeLoadingOptionRef = useRef<HTMLButtonElement>(null);\n const isVisible = usePreferenceFilter();\n const loadingPickerVisible = isVisible('loadingStyle') && matchesPref(['加载动画', '加载效果', 'Loading', ...LOADING_STYLE_OPTIONS.map((option) => option.label)]);\n const [loadingPickerNav, setLoadingPickerNav] = useState({ canPrev: false, canNext: false });\n const updateLoadingPickerNav = useCallback(() => {\n const el = loadingPickerRef.current;\n if (!el)\n return;\n setLoadingPickerNav({\n canPrev: el.scrollLeft > 1,\n canNext: el.scrollLeft + el.clientWidth < el.scrollWidth - 1,\n });\n }, []);\n useEffect(() => {\n if (!loadingPickerVisible)\n return;\n const el = loadingPickerRef.current;\n if (!el)\n return;\n updateLoadingPickerNav();\n const observer = new ResizeObserver(updateLoadingPickerNav);\n observer.observe(el);\n return () => observer.disconnect();\n }, [loadingPickerVisible, updateLoadingPickerNav]);\n // 当前选中的动画始终滚入可见区(初次打开即定位,不做平滑滚动避免与抽屉动效打架)。\n // 这里只改挑选项容器自身的 scrollLeft:scrollIntoView 会连带滚动每一个可滚动祖先,\n // 并推抽屉正文一起动——导航布局排在“外观”之前,一打开偏好设置就被拽到加载动画那一屏。\n useEffect(() => {\n const el = loadingPickerRef.current;\n const active = activeLoadingOptionRef.current;\n if (!el || !active)\n return;\n const elRect = el.getBoundingClientRect();\n const activeRect = active.getBoundingClientRect();\n if (activeRect.left < elRect.left)\n el.scrollLeft -= elRect.left - activeRect.left;\n else if (activeRect.right > elRect.right)\n el.scrollLeft += activeRect.right - elRect.right;\n }, [loadingPickerVisible, preferences.loadingStyle]);\n const scrollLoadingPicker = useCallback((direction: 1 | -1) => {\n const el = loadingPickerRef.current;\n if (el)\n el.scrollBy({ left: direction * el.clientWidth, behavior: 'smooth' });\n }, []);\n return (<PreferenceSection title={prefSection('外观')}>\n\n {/* ── 颜色模式 ── */}\n {matchesPref(['颜色模式', '深色', '浅色', '系统', '主题模式']) && (<PreferenceControl path=\"colorMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>颜色模式</span>\n <RadioGroup type=\"button\" value={mode} onChange={(e) => {\n const v = e.target.value as ThemeMode;\n handleThemeModeChange(v);\n }}>\n <Radio value=\"light\">浅色</Radio>\n <Radio value=\"dark\">深色</Radio>\n <Radio value=\"system\">系统</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {/* ── 主题色 ── */}\n {matchesPref(['主题颜色', '主题色', '颜色', '品牌色', '自定义颜色']) && (<PreferenceControl path=\"themeColor\">\n <div>\n <div style={{ marginBottom: 12, fontSize: 13, fontWeight: 500, color: 'var(--arc-antd-color-text-0)' }}>主题颜色</div>\n <SwatchColorPicker value={themeColor} onChange={color => { if (color !== themeColor) setThemeColor(color); }} options={THEME_COLOR_PRESETS.map((preset) => ({\n key: preset.key,\n label: preset.name,\n color: isDark ? preset.dark.primary : preset.light.primary,\n }))}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 定时深色 ── */}\n {matchesPref(['定时深色', '夜间深色', '自动深色', '深色定时', '深色时段']) && (<PreferenceControl path=\"scheduledDarkMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 定时深色\n <Tooltip content=\"时段内无条件使用深色;时段外跟随颜色模式\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.scheduledDarkMode ?? 'off'} onChange={(e) => setPreferences({ scheduledDarkMode: e.target.value as ScheduledDarkMode })}>\n <Radio value=\"off\">关闭</Radio>\n <Radio value=\"custom\">自定义时段</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {matchesPref(['深色开始时间', '开始时间', '定时深色', '夜间开始']) && (<ScheduleTimeInput path=\"scheduledDarkStart\" label=\"深色开始时间\" value={preferences.scheduledDarkStart ?? '18:00'} onCommit={(value) => setPreferences({ scheduledDarkStart: value })}/>)}\n {matchesPref(['深色结束时间', '结束时间', '定时深色', '夜间结束']) && (<ScheduleTimeInput path=\"scheduledDarkEnd\" label=\"深色结束时间\" value={preferences.scheduledDarkEnd ?? '06:00'} onCommit={(value) => setPreferences({ scheduledDarkEnd: value })}/>)}\n\n {!isDark && matchesPref(['顶部栏深色', '深色', '深色模式', '顶部栏', '顶部导航']) && (<PreferenceControl path=\"headerDarkMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>顶部栏深色模式</span>\n <Switch checked={preferences.headerDarkMode ?? false} onChange={(v) => setPreferences({ headerDarkMode: v })}/>\n </div>\n </PreferenceControl>)}\n {!isDark && matchesPref(['侧边栏深色', '深色', '深色模式', '侧边栏']) && (<PreferenceControl path=\"sidebarDarkMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>侧边栏深色模式</span>\n <Switch checked={preferences.sidebarDarkMode ?? false} onChange={(v) => setPreferences({ sidebarDarkMode: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 深色底色档位(仅深色模式下可调;分区深色区域同样跟随) ── */}\n {(isDark || preferences.sidebarDarkMode) && matchesPref(['侧边栏底色', '底色', '色调', '深浅', '侧边栏']) && (<PreferenceControl path=\"darkSidebarTone\">\n <PrefDarkToneRow label=\"侧边栏底色\" hint=\"标准与卡片、表格同色;更深会比标准再暗一档,让侧边栏从内容中分离出来\" value={preferences.darkSidebarTone ?? 'bg-1'} onChange={(tone) => setPreferences({ darkSidebarTone: tone })}/>\n </PreferenceControl>)}\n {(isDark || preferences.headerDarkMode) && matchesPref(['顶部底色', '底色', '色调', '深浅', '顶部', '顶栏', '标签栏', '面包屑']) && (<PreferenceControl path=\"darkHeaderTone\">\n <PrefDarkToneRow label=\"顶部底色\" hint=\"作用于顶栏、头部、面包屑栏与标签栏;更深会让整条顶部区域比内容更暗\" value={preferences.darkHeaderTone ?? 'bg-1'} onChange={(tone) => setPreferences({ darkHeaderTone: tone })}/>\n </PreferenceControl>)}\n {isDark && matchesPref(['主区域底色', '底色', '色调', '深浅', '主区域', '内容区', '画布']) && (<PreferenceControl path=\"darkContentTone\">\n <PrefDarkToneRow label=\"主区域底色\" hint=\"作用于内容画布;更深时卡片与表格会从画布中浮起,形成明度层次\" value={preferences.darkContentTone ?? 'bg-1'} onChange={(tone) => setPreferences({ darkContentTone: tone })}/>\n </PreferenceControl>)}\n\n {/* ── 圆角大小 ── */}\n {matchesPref(['圆角', '圆角大小', '直角', '边框圆角', 'radius', '外观']) && (<PreferenceControl path=\"borderRadius\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 圆角大小\n <Tooltip content=\"调整按钮、卡片、弹窗等组件的圆角风格:直角更硬朗,大圆角更柔和\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.borderRadius ?? 'medium'} onChange={(e) => setPreferences({ borderRadius: e.target.value as BorderRadiusPreference })}>\n <Radio value=\"none\">直角</Radio>\n <Radio value=\"small\">小</Radio>\n <Radio value=\"medium\">默认</Radio>\n <Radio value=\"large\">大</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 界面缩放 ── */}\n {matchesPref(['界面缩放', '缩放', '字号', '字体大小', '放大', '缩小', '外观', '无障碍']) && (<PreferenceControl path=\"uiScale\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4, flexShrink: 0 }}>\n 界面缩放\n <Tooltip content=\"整体放大或缩小界面(含文字、控件与弹层),适合高分屏或需要更大字号的场景\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select value={preferences.uiScale ?? 100} optionList={UI_SCALE_OPTIONS.map((option) => ({ value: option.value, label: option.label }))} onChange={(v) => setPreferences({ uiScale: v as UiScale })} style={{ width: 100 }}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 界面字体 ── */}\n {matchesPref(['字体', '界面字体', 'Inter', '思源', '等宽', '外观']) && (<PreferenceControl path=\"fontFamily\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4, flexShrink: 0 }}>\n 界面字体\n <Tooltip content=\"只使用系统已安装的字体,未安装时按预设回退到系统默认字体\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select value={preferences.fontFamily ?? 'system'} optionList={FONT_FAMILY_OPTIONS.map((option) => ({ value: option.value, label: option.label }))} onChange={(v) => setPreferences({ fontFamily: v as FontFamilyPreference })} style={{ width: 140 }}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 标签栏尺寸 ── */}\n {matchesPref(['标签栏尺寸', 'Tabs尺寸', 'Tabs 大小', '标签控件尺寸', 'small', 'medium', 'large', '外观']) && (<PreferenceControl path=\"tabsSize\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 标签栏尺寸\n <Tooltip content=\"控制页面内部标签栏的尺寸,与多标签页开关无关\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.tabsSize ?? 'small'} onChange={(e) => setPreferences({ tabsSize: e.target.value as TabSize })}>\n <Radio value=\"small\">小</Radio>\n <Radio value=\"medium\">中</Radio>\n <Radio value=\"large\">大</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 标签栏样式 ── */}\n {matchesPref(['标签栏样式', 'Tabs样式', 'Tabs 类型', 'line', 'button', 'card', 'slash', '外观']) && (<PreferenceControl path=\"tabsType\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 标签栏样式\n <Tooltip content=\"控制页面内部标签栏的显示样式\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select value={preferences.tabsType ?? 'line'} optionList={[\n { value: 'line', label: '线条' },\n { value: 'button', label: '按钮' },\n { value: 'card', label: '卡片' },\n { value: 'slash', label: '斜线' },\n ]} onChange={(v) => setPreferences({ tabsType: v as TabType })} style={{ width: 120 }}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 加载动画 ── */}\n {/* 形态名直接取自选项表:新增一种动画不必再来这里补关键词 */}\n {loadingPickerVisible && (<PreferenceControl path=\"loadingStyle\">\n <div>\n <div className=\"loading-style-picker__heading\">\n <span>加载动画</span>\n <Tooltip content=\"用于首次进入系统、菜单首载和页面懒加载\" position=\"right\">\n <Info size={13}/>\n </Tooltip>\n </div>\n <div className=\"loading-style-picker__nav\">\n <Button theme=\"borderless\" size=\"small\" className=\"loading-style-picker__nav-button\" icon={<ChevronLeft size={14}/>} aria-label=\"上一个加载动画\" title=\"上一个\" disabled={!loadingPickerNav.canPrev} onClick={() => scrollLoadingPicker(-1)}/>\n <ScrollArea className=\"loading-style-picker\" scrollRef={loadingPickerRef} horizontal vertical={false} onScroll={updateLoadingPickerNav} aria-label=\"加载动画预览\">\n {LOADING_STYLE_OPTIONS.map((option) => {\n const isActive = preferences.loadingStyle === option.value;\n return (<button type=\"button\" key={option.value} ref={isActive ? activeLoadingOptionRef : undefined} className={`loading-style-picker__option${isActive ? ' loading-style-picker__option--active' : ''}`} aria-pressed={isActive} title={option.isDefault ? `${option.label}(默认)` : option.label} onClick={() => { if (!isActive) setPreferences({ loadingStyle: option.value }); }}>\n <span className=\"loading-style-picker__preview\">\n <LoadingIndicator variant={option.value}/>\n </span>\n <span className=\"loading-style-picker__label\">\n {option.label}\n </span>\n </button>);\n })}\n </ScrollArea>\n <Button theme=\"borderless\" size=\"small\" className=\"loading-style-picker__nav-button\" icon={<ChevronRight size={14}/>} aria-label=\"下一个加载动画\" title=\"下一个\" disabled={!loadingPickerNav.canNext} onClick={() => scrollLoadingPicker(1)}/>\n </div>\n </div>\n </PreferenceControl>)}\n\n {/* ── 无障碍 ── */}\n {matchesPref(['灰色', '灰色模式', '无障碍', '公祭日', '去色']) && (<PreferenceControl path=\"grayscale\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 灰色模式\n <Tooltip content=\"适用于国家公祭日等场景,全局去除色彩\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.grayscale ?? false} onChange={(v) => setPreferences({ grayscale: v, ...(v ? { colorBlind: false } : {}) })}/>\n </div>\n </PreferenceControl>)}\n {matchesPref(['色弱', '色弱模式', '无障碍', '对比度', '色觉']) && (<PreferenceControl path=\"colorBlind\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 色弱模式\n <Tooltip content=\"提高界面对比度,辅助色觉障碍用户\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.colorBlind ?? false} onChange={(v) => setPreferences({ colorBlind: v, ...(v ? { grayscale: false } : {}) })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 减弱动效 ── */}\n {matchesPref(['动效', '动画', '减弱动效', '性能', '晕动', '过渡']) && (<PreferenceControl path=\"reduceMotion\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 减弱动效\n <Tooltip content=\"关闭路由切换、标签页、主题切换扩散等装饰性动画与过渡;加载指示不受影响。适合低配设备或对动效敏感的用户\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.reduceMotion ?? false} onChange={(v) => setPreferences({ reduceMotion: v })}/>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n// ── 导航与工具栏 ──\nexport function PrefsNavToolbarSection({ prefSection, matchesPref, preferences, setPreferences, prefsSearch, }: PrefsSectionBaseProps & Readonly<{\n prefsSearch: string;\n quickChatEnabled: boolean;\n}>) {\n return (<PreferenceSection title={prefSection('导航与工具栏')}>\n\n {/* ── 动态标题 ── */}\n {matchesPref(['动态标题', '浏览器标题', '页面标题', '标题']) && (<PreferenceControl path=\"dynamicTitle\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 动态浏览器标题\n <Tooltip content=\"开启后浏览器标签页标题会随当前页面变化,如「用户管理 - ArcBase」;关闭后固定显示应用名称\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.dynamicTitle ?? true} onChange={(v) => setPreferences({ dynamicTitle: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 面包屑 ── */}\n {matchesPref(['面包屑', '面包屑导航', '导航栏', '路径导航']) && (<PreferenceControl path=\"showBreadcrumb\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 显示面包屑导航\n <Tooltip content=\"在页面顶部显示路径导航(如:首页 / 系统管理 / 用户管理),帮助定位当前位置\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.showBreadcrumb} onChange={(v) => setPreferences({ showBreadcrumb: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.showBreadcrumb || !!prefsSearch.trim()) && matchesPref(['面包屑图标', '图标', '面包屑']) && (<PreferenceControl path=\"breadcrumbIcon\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>面包屑显示图标</span>\n <Switch checked={preferences.breadcrumbIcon ?? false} onChange={(v) => setPreferences({ breadcrumbIcon: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.showBreadcrumb || !!prefsSearch.trim()) && matchesPref(['面包屑首页', '首页', '面包屑']) && (<PreferenceControl path=\"breadcrumbShowHome\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 面包屑从首页开始\n <Tooltip content=\"开启后面包屑导航会以「首页」作为第一项,关闭后直接从当前页面的父级路径开始\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.breadcrumbShowHome ?? true} onChange={(v) => setPreferences({ breadcrumbShowHome: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.showBreadcrumb || !!prefsSearch.trim()) && matchesPref(['面包屑可点击', '点击', '面包屑跳转', '面包屑']) && (<PreferenceControl path=\"breadcrumbClickable\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 面包屑可点击\n <Tooltip content=\"关闭后面包屑仅展示路径文字,不可点击跳转\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.breadcrumbClickable ?? true} onChange={(v) => setPreferences({ breadcrumbClickable: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.showBreadcrumb || !!prefsSearch.trim()) && matchesPref(['面包屑子菜单', '子菜单', '面包屑悬浮', '面包屑展开']) && (<PreferenceControl path=\"breadcrumbSubMenu\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 面包屑子菜单\n <Tooltip content=\"悬停目录层级时弹出子菜单快速导航,支持多级展开\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.breadcrumbSubMenu ?? false} onChange={(v) => setPreferences({ breadcrumbSubMenu: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 菜单搜索 ── */}\n {matchesPref(['菜单搜索', '搜索框', '搜索', '搜索菜单']) && (<PreferenceControl path=\"showMenuSearch\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示菜单搜索框</span>\n <Switch checked={preferences.showMenuSearch ?? true} onChange={(v) => setPreferences({ showMenuSearch: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 收藏 ── */}\n {matchesPref(['收藏', '收藏菜单', '收藏按钮', '显示收藏', '收藏入口', '快捷收藏']) && (<PreferenceControl path=\"showFavorites\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示收藏入口</span>\n <Switch checked={preferences.showFavorites ?? false} onChange={(v) => setPreferences({ showFavorites: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 全屏按钮 ── */}\n {matchesPref(['全屏', '全屏按钮', '显示全屏']) && (<PreferenceControl path=\"showFullscreen\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示全屏按钮</span>\n <Switch checked={preferences.showFullscreen ?? true} onChange={(v) => setPreferences({ showFullscreen: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 回到顶部按钮 ── */}\n {matchesPref(['回到顶部', 'BackTop', '返回顶部', '回到顶', '顶部按钮']) && (<PreferenceControl path=\"showBackTop\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 显示回到顶部按钮\n <Tooltip content=\"内容区域滚动超过 400px 后,右下角浮现回顶按钮\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.showBackTop ?? true} onChange={(v) => setPreferences({ showBackTop: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 快捷聊天 ── */}\n\n {/* ── 顶栏时钟 ── */}\n {matchesPref(['顶栏时钟', '时钟', '时钟显示', '12小时', '24小时']) && (<PreferenceControl path=\"topbarClock\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>顶栏时钟</span>\n <RadioGroup type=\"button\" value={preferences.topbarClock ?? 'off'} onChange={(e) => setPreferences({ topbarClock: e.target.value as TopbarClockMode })}>\n <Radio value=\"off\">关闭</Radio>\n <Radio value=\"12h\">12小时制</Radio>\n <Radio value=\"24h\">24小时制</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {matchesPref(['时钟显示日期', '日期', '时钟日期', '星期']) && (<PreferenceControl path=\"topbarClockShowDate\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>时钟显示日期</span>\n <Switch checked={preferences.topbarClockShowDate ?? true} onChange={(v) => setPreferences({ topbarClockShowDate: v })}/>\n </div>\n </PreferenceControl>)}\n\n </PreferenceSection>);\n}\n// ── 侧边栏 ──\nexport function PrefsSidebarSection({ prefSection, matchesPref, preferences, setPreferences, navLayout, }: PrefsSectionBaseProps & Readonly<{\n navLayout: NavLayout;\n}>) {\n return (<PreferenceSection title={prefSection('侧边栏')}>\n\n {/* ── 侧边栏宽度 ── */}\n {matchesPref(['侧边栏宽度', '侧边栏', '菜单宽度', '展开宽度']) && navLayout !== 'horizontal' && (<PreferenceControl path=\"sidebarWidth\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }}>\n <span style={{ flexShrink: 0 }}>侧边栏宽度</span>\n <InputNumber style={{ width: 110 }} size=\"small\" min={160} max={320} step={4} suffix=\"px\" value={preferences.sidebarWidth ?? 216} onChange={(v) => setPreferences({ sidebarWidth: Number(v) || 216 })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 子菜单箭头位置 ── */}\n {matchesPref(['箭头', '展开箭头', '箭头位置', '展开收起', '子菜单箭头', '侧边栏']) && (<PreferenceControl path=\"sidebarToggleIconPosition\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 子菜单箭头位置\n <Tooltip content=\"侧边栏可展开子菜单的展开/收起箭头显示位置:默认在菜单项右端,可改为显示在左侧\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.sidebarToggleIconPosition ?? 'right'} onChange={(e) => setPreferences({ sidebarToggleIconPosition: e.target.value as 'left' | 'right' })}>\n <Radio value=\"left\">左侧</Radio>\n <Radio value=\"right\">右侧</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 侧边栏分组标题 sticky ── */}\n {matchesPref(['侧边栏', '分组标题', '滚动固定', '侧边栏分组']) && (<PreferenceControl path=\"sidebarStickyScroll\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 侧边栏分组标题滚动固定\n <Tooltip content=\"侧边栏菜单滚动时,分组标题吸附固定在顶部,便于识别当前菜单所属分组\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.sidebarStickyScroll ?? true} onChange={(v) => setPreferences({ sidebarStickyScroll: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 侧栏手风琴展开 ── */}\n {matchesPref(['侧边栏', '手风琴', '排他展开', '侧栏排他']) && (<PreferenceControl path=\"sidebarAccordion\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 侧栏排他展开\n <Tooltip content=\"开启后侧边栏同级菜单同时只允许展开一项,点击其他分组时自动收起之前展开的分组\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.sidebarAccordion ?? false} onChange={(v) => setPreferences({ sidebarAccordion: v })}/>\n </div>\n </PreferenceControl>)}\n {matchesPref(['悬浮展开', '侧边栏悬浮', '侧边栏', 'hover']) && (<PreferenceControl path=\"sidebarHoverTrigger\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 悬浮展开侧边栏\n <Tooltip content=\"开启后侧边栏收起时,鼠标悬浮即可临时展开,移开后自动收起\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.sidebarHoverTrigger ?? false} onChange={(v) => setPreferences({ sidebarHoverTrigger: v })}/>\n </div>\n </PreferenceControl>)}\n {matchesPref(['菜单滚动', '自动定位', '菜单', '滚动定位']) && (<PreferenceControl path=\"scrollMenuIntoView\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 菜单自动滚动定位\n <Tooltip content=\"开启后切换菜单时,侧边栏自动平滑滚动使激活项居中可见\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.scrollMenuIntoView ?? true} onChange={(v) => setPreferences({ scrollMenuIntoView: v })}/>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n// ── 通用 ──\nexport function PrefsGeneralSection({ prefSection, matchesPref, preferences, setPreferences, homePathOptions, autoLockMinutes, setAutoLockMinutes, hasPassword, clearLockPassword, openLockPasswordModal, }: PrefsSectionBaseProps & Readonly<{\n homePathOptions: {\n value: string;\n label: string;\n }[];\n autoLockMinutes: number;\n setAutoLockMinutes: (value: 0 | 5 | 10 | 30) => void;\n hasPassword: () => boolean;\n clearLockPassword: () => void;\n openLockPasswordModal: (mode: 'set' | 'change') => void;\n}>) {\n return (<PreferenceSection title={prefSection('通用')}>\n\n {/* ── 默认首页 ── */}\n {matchesPref(['默认首页', '首页', '登录跳转', '落地页', '默认页面', '登录页面']) && (<PreferenceControl path=\"homePath\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4, flexShrink: 0 }}>\n 登录默认页面\n <Tooltip content=\"登录成功后进入的页面;不影响日常点击「首页」菜单的行为\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select filter style={{ width: 170 }} value={preferences.homePath ?? '/'} onChange={(v) => { const parsed = preferenceOverridesSchema.safeParse({ homePath: v || '/' }); if (parsed.success) setPreferences(parsed.data); }} optionList={homePathOptions}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 时间显示方式 ── */}\n {matchesPref(['时间显示', '相对时间', '绝对时间', '分钟前', '时间格式', '时间戳']) && (<PreferenceControl path=\"timeDisplay\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 时间显示方式\n <Tooltip content=\"列表、消息与时间线里的时间:绝对时间显示完整日期时刻;相对时间显示「3 分钟前」,悬停查看精确时刻。详情页字段始终为绝对时间\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.timeDisplay ?? 'absolute'} onChange={(e) => setPreferences({ timeDisplay: e.target.value as TimeDisplay })}>\n <Radio value=\"absolute\">绝对</Radio>\n <Radio value=\"relative\">相对</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 一周起始日 ── */}\n {matchesPref(['一周起始日', '周一', '周日', '星期', '日历', '日期选择器', '起始日']) && (<PreferenceControl path=\"weekStart\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 一周起始日\n <Tooltip content=\"日期选择器与日历面板每周从哪一天开始排列\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.weekStart ?? 'monday'} onChange={(e) => setPreferences({ weekStart: e.target.value as WeekStart })}>\n <Radio value=\"monday\">周一</Radio>\n <Radio value=\"sunday\">周日</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 聚焦时自动刷新 ── */}\n {matchesPref(['自动刷新', '聚焦', '切回', '窗口', '页签', '重新获取', '过期数据', 'refetch']) && (<PreferenceControl path=\"refetchOnFocus\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 切回窗口时自动刷新数据\n <Tooltip content=\"从其他窗口或页签切回时,自动重新获取已过期的列表与详情数据;网络较差时可关闭\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.refetchOnFocus ?? false} onChange={(v) => setPreferences({ refetchOnFocus: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 页面加载进度条 ── */}\n {matchesPref(['进度条', '加载进度', '页面加载', '顶部进度', 'NProgress']) && (<PreferenceControl path=\"showProgressBar\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 页面加载进度条\n <Tooltip content=\"页面切换时在内容区顶部显示加载进度条\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.showProgressBar ?? true} onChange={(v) => setPreferences({ showProgressBar: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 全局快捷键 ── */}\n {matchesPref(['快捷键', '键盘', '热键', 'Alt', 'Ctrl', '组合键']) && (<PreferenceControl path=\"enableShortcuts\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 启用全局快捷键\n <Tooltip content=\"Alt+L 锁屏、Alt+S 收起/展开侧边栏、Alt+C 内容全屏、Ctrl+K 搜索菜单;关闭后这些组合键不再生效\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.enableShortcuts ?? true} onChange={(v) => setPreferences({ enableShortcuts: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 页面状态同步到地址栏 ── */}\n {matchesPref(['地址栏', 'URL', '深链', '页面状态', '查询参数', '分享', '书签', '标签参数', 'tab参数', '选中项']) && (<PreferenceControl path=\"syncPageStateToUrl\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 页面状态同步到地址栏\n <Tooltip content=\"页面内的 Tab 与分栏选中项以查询参数写入地址栏(如 ?tab=),刷新、收藏或分享链接可直达当前视图;关闭时地址栏保持干净,外部带参链接进入仍会生效一次\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.syncPageStateToUrl ?? false} onChange={(v) => setPreferences({ syncPageStateToUrl: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 退出登录确认 ── */}\n {matchesPref(['退出确认', '退出登录', '二次确认', '注销', '登出']) && (<PreferenceControl path=\"confirmLogout\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 退出登录二次确认\n <Tooltip content=\"关闭后点击「退出登录」将直接退出,不再弹出确认框\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.confirmLogout ?? true} onChange={(v) => setPreferences({ confirmLogout: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 弹窗点击遮罩关闭 ── */}\n {matchesPref(['弹窗', '模态框', '遮罩', '蒙层', '点击关闭', 'maskClosable', '误触']) && (<PreferenceControl path=\"modalClickMaskToClose\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 弹窗点击遮罩关闭\n <Tooltip content=\"开启后,点击弹窗外的遮罩区域可直接关闭弹窗(按 Esc 关闭不受影响);关闭时需点击右上角或底部按钮,可防止误触丢失表单内容\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.modalClickMaskToClose ?? false} onChange={(v) => setPreferences({ modalClickMaskToClose: v })}/>\n </div>\n </PreferenceControl>)}\n\n {/* ── 文件默认视图 ── */}\n {matchesPref(['文件视图', '文件列表', '文件管理', '列表', '网格', '文件']) && (<PreferenceControl path=\"filesViewMode\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>文件列表默认视图</span>\n <RadioGroup type=\"button\" value={preferences.filesViewMode ?? 'list'} onChange={(e) => setPreferences({ filesViewMode: e.target.value as 'list' | 'grid' })}>\n <Radio value=\"list\">列表</Radio>\n <Radio value=\"grid\">网格</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n\n {/* ── 锁屏 ── */}\n {matchesPref(['锁屏', '屏幕锁', '密码', '锁定']) && (<>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 开启屏幕锁\n <Tooltip content=\"开启后可通过 Alt+L 快捷键或用户菜单锁定屏幕,解锁需输入密码\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={hasPassword()} onChange={(v) => {\n if (v) {\n openLockPasswordModal('set');\n }\n else {\n clearLockPassword();\n }\n }}/>\n </div>\n </>)}\n {matchesPref(['锁屏', '密码', '锁屏密码']) && (<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>锁屏密码</span>\n <Button size=\"small\" theme=\"light\" onClick={() => {\n openLockPasswordModal(hasPassword() ? 'change' : 'set');\n }}>\n {hasPassword() ? '修改密码' : '设置密码'}\n </Button>\n </div>)}\n {hasPassword() && matchesPref(['自动锁屏', '锁屏', '无操作', '空闲', '闲置']) && (<>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 无操作自动锁屏\n <Tooltip content=\"超过设定时长没有任何鼠标/键盘操作时自动锁定屏幕\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Select style={{ width: 110 }} value={autoLockMinutes} onChange={(v) => { if (v === 0 || v === 5 || v === 10 || v === 30) setAutoLockMinutes(v); }} optionList={[\n { value: 0, label: '关闭' },\n { value: 5, label: '5 分钟' },\n { value: 10, label: '10 分钟' },\n { value: 30, label: '30 分钟' },\n ]}/>\n </div>\n </>)}\n </PreferenceSection>);\n}\n// ── 表格 ──\nexport function PrefsTableSection({ prefSection, matchesPref, preferences, setPreferences, }: PrefsSectionBaseProps) {\n return (<PreferenceSection title={prefSection('表格')}>\n\n {/* ── 表格设置 ── */}\n {matchesPref(['表格', '边框', '斦马纹', '尺寸', '分页', '列设置', '显示表格', '启用斦马纹']) && (<>\n <PreferenceControl path=\"tableBordered\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示表格边框</span>\n <Switch checked={preferences.tableBordered ?? true} onChange={(v) => setPreferences({ tableBordered: v })}/>\n </div>\n </PreferenceControl>\n <PreferenceControl path=\"tableStriped\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>启用斑马纹</span>\n <Switch checked={preferences.tableStriped ?? false} onChange={(v) => setPreferences({ tableStriped: v })}/>\n </div>\n </PreferenceControl>\n <PreferenceControl path=\"tableSize\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>表格尺寸</span>\n <RadioGroup type=\"button\" value={preferences.tableSize ?? 'default'} onChange={(e) => setPreferences({ tableSize: e.target.value as TableSizePreference })}>\n <Radio value=\"small\">紧凑</Radio>\n <Radio value=\"middle\">适中</Radio>\n <Radio value=\"default\">宽松</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>\n <PreferenceControl path=\"tablePageSize\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>默认分页大小</span>\n <Select value={preferences.tablePageSize ?? 10} onChange={(v) => setPreferences({ tablePageSize: v as UserPreferences['tablePageSize'] })} style={{ width: 100 }} optionList={[10, 20, 50, 100].map((v) => ({ value: v, label: `${v} 条` }))}/>\n </div>\n </PreferenceControl>\n <PreferenceControl path=\"showTableColumnSettings\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示表格列设置按钮</span>\n <Switch checked={preferences.showTableColumnSettings ?? true} onChange={(v) => setPreferences({ showTableColumnSettings: v })}/>\n </div>\n </PreferenceControl>\n </>)}\n\n {/* ── 记住筛选条件 ── */}\n {matchesPref(['筛选', '筛选条件', '记住', '搜索条件', '恢复', '查询条件', '表格']) && (<PreferenceControl path=\"rememberListFilters\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 记住列表筛选条件\n <Tooltip content=\"离开列表页再回来时恢复上次查询的筛选条件(分页回到第 1 页);关闭浏览器即清除\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.rememberListFilters ?? false} onChange={(v) => {\n if (!v)\n clearAllListFilterSnapshots();\n setPreferences({ rememberListFilters: v });\n }}/>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n// ── 标签页 ──\nexport function PrefsTabsSection({ prefSection, matchesPref, preferences, setPreferences, prefsSearch, }: PrefsSectionBaseProps & Readonly<{\n prefsSearch: string;\n}>) {\n return (<PreferenceSection title={prefSection('标签页')}>\n\n {/* ── 多标签页 ── */}\n {matchesPref(['多标签页', '标签页', '标签', '启用标签']) && (<PreferenceControl path=\"enableTabs\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>启用多标签页</span>\n <Switch checked={preferences.enableTabs} onChange={(v) => setPreferences({ enableTabs: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['保存标签', '恢复标签', '标签页', '标签']) && (<PreferenceControl path=\"keepTabs\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 保存标签页\n <Tooltip content=\"刷新页面或重新登录后,自动恢复上次打开的标签页\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.keepTabs ?? true} onChange={(v) => setPreferences({ keepTabs: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['页面缓存', 'keepalive', 'keep-alive', '缓存', '标签页', '标签']) && (<PreferenceControl path=\"enablePageCache\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 页面缓存\n <Tooltip content=\"菜单管理中开启「页面缓存」的页面,切换标签页时保留状态(搜索条件、滚动位置等),关闭标签页时释放\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.enablePageCache ?? true} onChange={(v) => setPreferences({ enablePageCache: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['标签图标', '图标', '标签页', '标签']) && (<PreferenceControl path=\"showTabIcon\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>标签页显示图标</span>\n <Switch checked={preferences.showTabIcon} onChange={(v) => setPreferences({ showTabIcon: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['紧凑标签', '紧凑模式', '页签密度', '标签页', '标签']) && (<PreferenceControl path=\"compactTabs\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 紧凑标签页\n <Tooltip content=\"减少标签栏的高度与页签间距,适合同时打开较多页面\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.compactTabs ?? true} onChange={(v) => setPreferences({ compactTabs: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['标签切换器', '切换器', 'chevron', '标签页', '标签']) && (<PreferenceControl path=\"showTabSwitcher\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>显示标签切换器</span>\n <Switch checked={preferences.showTabSwitcher ?? true} onChange={(v) => setPreferences({ showTabSwitcher: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['自动隐藏', '隐藏标签', '程序坞', 'dock', '标签页', '标签']) && (<PreferenceControl path=\"autoHideTabs\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 自动隐藏标签栏\n <Tooltip content=\"平时收起为一条细线,鼠标悬停或键盘聚焦时展开;触屏设备上保持常显\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <Switch checked={preferences.autoHideTabs ?? false} onChange={(v) => setPreferences({ autoHideTabs: v })}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['最大标签', '标签数量', '标签页', '标签']) && (<PreferenceControl path=\"tabsMaxCount\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>最大标签数</span>\n <InputNumber min={5} max={50} value={preferences.tabsMaxCount} onChange={(v) => setPreferences({ tabsMaxCount: v as number })} style={{ width: 100 }}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['超限策略', 'FIFO', 'LRU', '关闭策略', '标签页', '标签']) && (<PreferenceControl path=\"tabEvictPolicy\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 超限关闭策略\n <Tooltip content=\"FIFO: 关闭最早打开的标签;LRU: 关闭最久未使用的标签\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.tabEvictPolicy ?? 'fifo'} onChange={(e) => setPreferences({ tabEvictPolicy: e.target.value as 'fifo' | 'lru' })}>\n <Radio value=\"fifo\">FIFO</Radio>\n <Radio value=\"lru\">LRU</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['插入位置', '新标签位置', '标签插入', '标签页', '标签']) && (<PreferenceControl path=\"openTabBehavior\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n 新标签插入位置\n <Tooltip content=\"末尾:新标签始终排在最右侧;当前后方:新标签紧跟在当前标签之后插入\" position=\"right\">\n <Info size={13} style={{ color: 'var(--arc-antd-color-text-2)', cursor: 'help' }}/>\n </Tooltip>\n </span>\n <RadioGroup type=\"button\" value={preferences.openTabBehavior ?? 'append'} onChange={(e) => setPreferences({ openTabBehavior: e.target.value as 'append' | 'insert-next' })}>\n <Radio value=\"append\">末尾</Radio>\n <Radio value=\"insert-next\">当前后方</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['双击标签', '双击', '标签行为', '标签页', '标签']) && (<PreferenceControl path=\"tabDoubleClickAction\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>双击标签行为</span>\n <RadioGroup type=\"button\" value={preferences.tabDoubleClickAction ?? 'refresh'} onChange={(e) => setPreferences({ tabDoubleClickAction: e.target.value as 'refresh' | 'close' | 'none' })}>\n <Radio value=\"refresh\">刷新</Radio>\n <Radio value=\"close\">关闭</Radio>\n <Radio value=\"none\">无</Radio>\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['标签风格', '风格', '线条', '胶囊', '卡片', 'chrome', '谷歌', '极简', 'minimal', '分段', 'segment', '方块', 'block', '短线', 'shortline', '圆点', 'dot', '顶线', 'topline', '标签页', '标签']) && (<PreferenceControl path=\"tabStyle\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>标签页风格</span>\n <Select value={preferences.tabStyle ?? 'line'} optionList={[\n { value: 'line', label: '线条' },\n { value: 'pill', label: '胶囊' },\n { value: 'card', label: '卡片' },\n { value: 'chrome', label: '谷歌' },\n { value: 'minimal', label: '极简' },\n { value: 'segment', label: '分段' },\n { value: 'block', label: '方块' },\n { value: 'shortline', label: '短线' },\n { value: 'dot', label: '圆点' },\n { value: 'topline', label: '顶线' },\n ]} onChange={(v) => setPreferences({ tabStyle: v as TabStyle })} style={{ width: 120 }}/>\n </div>\n </PreferenceControl>)}\n {(preferences.enableTabs || !!prefsSearch.trim()) && matchesPref(['标签动画', '动画', '淡入', '滑入', '缩放', '标签页', '标签']) && (<PreferenceControl path=\"tabAnimation\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>标签页动画</span>\n <RadioGroup type=\"button\" value={preferences.tabAnimation ?? 'none'} onChange={(e) => setPreferences({ tabAnimation: e.target.value as 'none' | 'fade' | 'slide' | 'scale' })}>\n {(['none', 'fade', 'slide', 'scale'] as const).map((anim) => {\n const labels: Record<string, string> = { none: '无', fade: '淡入', slide: '滑入', scale: '缩放' };\n const radio = <Radio key={anim} value={anim}>{labels[anim]}</Radio>;\n if (anim === 'none')\n return radio;\n return (<Popover key={anim} trigger=\"hover\" position=\"bottom\" mouseEnterDelay={100} mouseLeaveDelay={100} content={<div className=\"tab-anim-preview\" data-anim={anim}>\n <span className=\"tab-anim-preview__pill\">首页</span>\n <span className=\"tab-anim-preview__pill tab-anim-preview__pill--active\">用户管理</span>\n <span className=\"tab-anim-preview__pill tab-anim-preview__demo\">角色管理</span>\n </div>}>\n {radio}\n </Popover>);\n })}\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n {matchesPref(['路由动画', '切换动画', '动画', '淡入', '上滑', '左滑']) && (<PreferenceControl path=\"routeAnimation\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>路由切换动画</span>\n <RadioGroup type=\"button\" value={preferences.routeAnimation ?? 'fade'} onChange={(e) => setPreferences({ routeAnimation: e.target.value as RouteAnimation })}>\n {(['none', 'fade', 'slide-up', 'slide-left'] as const).map((anim) => {\n const labels: Record<string, string> = { none: '无', fade: '淡入', 'slide-up': '上滑', 'slide-left': '左滑' };\n const radio = <Radio key={anim} value={anim}>{labels[anim]}</Radio>;\n if (anim === 'none')\n return radio;\n return (<Popover key={anim} trigger=\"hover\" position=\"bottom\" mouseEnterDelay={100} mouseLeaveDelay={100} content={<div className=\"route-anim-preview\" data-anim={anim}>\n <div className=\"route-anim-preview__page\">\n <div className=\"route-anim-preview__title\"/>\n <div className=\"route-anim-preview__line\"/>\n <div className=\"route-anim-preview__line route-anim-preview__line--short\"/>\n </div>\n </div>}>\n {radio}\n </Popover>);\n })}\n </RadioGroup>\n </div>\n </PreferenceControl>)}\n </PreferenceSection>);\n}\n","import { textMatches } from '@fudanda/react-core/utils/pinyin';\nimport { useState, type ReactNode } from 'react';\nimport { Empty, Button } from 'antd';\nimport { Columns3, LayoutDashboard, ListFilter, Menu, Navigation, Palette, SlidersHorizontal } from 'lucide-react';\nimport { preferenceDefinitionMap } from '@fudanda/shared/preferences';\nimport ScrollArea from '@/components/ScrollArea';\nimport { usePreferences, type NavLayout, type UserPreferences } from '@fudanda/react-core/hooks/usePreferences';\nimport { PreferenceFilterContext } from '@/components/preferences/preference-filter';\nimport { getPreferenceCategories, matchesPreference, type PreferenceCategory } from './preference-catalog';\ntype ThemeMode = 'light' | 'dark' | 'system';\nimport { PrefsAppearanceSection, PrefsGeneralSection, PrefsLayoutSection, PrefsNavToolbarSection, PrefsSidebarSection, PrefsTableSection, PrefsTabsSection } from './PreferencesSections';\nexport interface PreferencesSheetBodyProps {\n readonly preferences: UserPreferences;\n readonly setPreferences: (prefs: Partial<UserPreferences>) => void;\n readonly navLayout: NavLayout;\n readonly mode: ThemeMode;\n readonly handleThemeModeChange: (newMode: ThemeMode) => void;\n readonly isDark: boolean;\n readonly themeColor: string;\n readonly setThemeColor: (color: string) => void;\n readonly prefsSearch: string;\n readonly quickChatEnabled: boolean;\n readonly homePathOptions: {\n value: string;\n label: string;\n }[];\n readonly autoLockMinutes: number;\n readonly setAutoLockMinutes: (value: 0 | 5 | 10 | 30) => void;\n readonly hasPassword: () => boolean;\n readonly clearLockPassword: () => void;\n readonly openLockPasswordModal: (mode: 'set' | 'change') => void;\n readonly onClearSearch: () => void;\n}\nconst categoryIcons = { layout: LayoutDashboard, appearance: Palette, navigation: Navigation, sidebar: Menu, tabs: Columns3, table: ListFilter, general: SlidersHorizontal };\nconst noSectionTitle = () => null;\n/**\n * 偏好设置抽屉的正文:全部分区 + ColorPicker / Radio / Select 等仅在此处使用的控件。\n * 作为 AdminLayout 的懒加载边界,首次打开抽屉时才下载,不进入布局首屏。\n */\nexport default function PreferencesSheetBody(props: PreferencesSheetBodyProps) {\n const { canEditPreference, hasManagedPreferences } = usePreferences();\n const [selected, setSelected] = useState<PreferenceCategory>('layout');\n const searching = Boolean(props.prefsSearch.trim());\n const categories = getPreferenceCategories('', canEditPreference, props.quickChatEnabled, props.hasPassword(), props.hasPassword());\n const results = getPreferenceCategories(props.prefsSearch, canEditPreference, props.quickChatEnabled, props.hasPassword(), props.hasPassword());\n const active = categories.find(category => category.key === selected) ?? categories[0];\n const visible = searching ? results : active ? [active] : [];\n const base = {\n prefSection: noSectionTitle,\n matchesPref: (keywords: string[]) => !props.prefsSearch.trim() || keywords.some(value => textMatches(value, props.prefsSearch.trim())),\n preferences: props.preferences,\n setPreferences: props.setPreferences,\n };\n const sections: Record<PreferenceCategory, ReactNode> = {\n layout: <PrefsLayoutSection {...base} navLayout={props.navLayout}/>,\n appearance: <PrefsAppearanceSection {...base} mode={props.mode} handleThemeModeChange={props.handleThemeModeChange} isDark={props.isDark} themeColor={props.themeColor} setThemeColor={props.setThemeColor}/>,\n navigation: <PrefsNavToolbarSection {...base} prefsSearch={props.prefsSearch} quickChatEnabled={props.quickChatEnabled}/>,\n sidebar: <PrefsSidebarSection {...base} navLayout={props.navLayout}/>,\n general: <PrefsGeneralSection {...base} homePathOptions={props.homePathOptions} autoLockMinutes={props.autoLockMinutes} setAutoLockMinutes={props.setAutoLockMinutes} hasPassword={props.hasPassword} clearLockPassword={props.clearLockPassword} openLockPasswordModal={props.openLockPasswordModal}/>,\n table: <PrefsTableSection {...base}/>,\n tabs: <PrefsTabsSection {...base} prefsSearch={props.prefsSearch}/>,\n };\n return <PreferenceFilterContext.Provider value={path => matchesPreference(preferenceDefinitionMap[path], props.prefsSearch)}>\n <div className={`arc-preferences__browser${searching ? ' arc-preferences__browser--search' : ''}`}>\n {!searching && categories.length > 0 && <ScrollArea as=\"nav\" className=\"arc-preferences__categories\" aria-label=\"偏好分类\">\n {categories.map(category => {\n const Icon = categoryIcons[category.key];\n return <button type=\"button\" key={category.key} aria-pressed={category.key === active?.key} onClick={() => setSelected(category.key)}><Icon size={16}/><span>{category.label}</span></button>;\n })}\n </ScrollArea>}\n <ScrollArea className=\"arc-preferences__content\" key={searching ? 'search' : active?.key} aria-label=\"偏好设置内容\">\n {searching && <div className=\"arc-preferences__result-summary\" role=\"status\">找到 {results.reduce((count, category) => count + category.fields.length + category.localCount, 0)} 项可调整的设置</div>}\n {visible.map(category => <section key={category.key} className=\"arc-preferences__section\" aria-label={`${category.label}设置`}>\n <div className=\"arc-preferences__section-heading\"><h3>{category.label}</h3><p>{category.description}</p></div>\n {sections[category.key]}\n </section>)}\n {visible.length === 0 && <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={searching ? '没有找到匹配的设置' : '当前没有可调整的个人设置'}>\n {searching && <Button onClick={props.onClearSearch}>清空搜索</Button>}\n </Empty>}\n {hasManagedPreferences && <p className=\"arc-preferences__policy-note\">部分设置由系统统一管理,此处仅展示可调整的项目。</p>}\n </ScrollArea>\n </div>\n </PreferenceFilterContext.Provider>;\n}\n"]}
|