@svadmin/core 0.27.1 → 0.28.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@svadmin/core",
3
- "version": "0.27.1",
3
+ "version": "0.28.0",
4
4
  "author": "zuohuadong",
5
5
  "repository": {
6
6
  "type": "git",
@@ -144,6 +144,19 @@ const baseLocales: Record<string, Record<string, string>> = {
144
144
  'devtools.title': '开发者工具 (Ctrl+Shift+D)',
145
145
  // Validation
146
146
  // Chat
147
+ 'chat.title': 'AI 助手',
148
+ 'chat.typing': '输入中...',
149
+ 'chat.clear': '清空',
150
+ 'chat.welcome': '我可以帮你做什么?',
151
+ 'chat.welcomeDesc': '可以询问当前后台、资源和库存运营数据。',
152
+ 'chat.thinking': '思考中...',
153
+ 'chat.placeholder': '输入消息...',
154
+ 'chat.shortcutHint': '切换',
155
+ 'chat.error': '抱歉,处理时出现问题,请重试。',
156
+ 'chat.approvalRequired': '需要确认',
157
+ 'chat.suggestion1': '如何新建一条资源记录?',
158
+ 'chat.suggestion2': '解释当前数据模型',
159
+ 'chat.suggestion3': '帮我写一个筛选条件',
147
160
  'chat.contextInfo': '当前上下文:{resource}',
148
161
  'chat.actionButton': '执行',
149
162
  'chat.historyRestored': '已恢复聊天记录',
@@ -162,6 +175,62 @@ const baseLocales: Record<string, Record<string, string>> = {
162
175
  'settings.appearance': '外观设置',
163
176
  'settings.about': '关于',
164
177
  'settings.general': '通用',
178
+ 'settings.security': '安全设置',
179
+ 'settings.integrations': '第三方集成',
180
+ 'settings.notifications': '通知设置',
181
+ 'settings.api': 'API 设置',
182
+ 'settings.developer': '开发者',
183
+ 'settings.workspace': '工作区',
184
+ 'settings.securityDescription': '管理您的密码、活跃会话和双重身份验证偏好。',
185
+ 'settings.integrationsDescription': '连接和管理工作区的第三方服务扩展。',
186
+ 'settings.notificationsDescription': '配置系统警报的接收方式和时机。',
187
+ 'settings.apiDescription': '生成并管理安全 API 密钥,以便集成外部程序脚本。',
188
+ 'security.twoFactorAuth': '双重身份验证 (2FA)',
189
+ 'security.twoFactorDescription': '启用后,在输入密码后还需要输入手机验证码,为账户增加额外安全保障。',
190
+ 'security.enable2fa': '启用双重身份验证',
191
+ 'security.twoFactorActive': '双重身份验证已启用。新登录时将需要验证码。',
192
+ 'security.twoFactorInactive': '双重身份验证已禁用。建议开启以保护账户安全。',
193
+ 'security.passwordLastChanged': '上次修改:{time}',
194
+ 'security.activeSessions': '活跃会话',
195
+ 'security.sessionsDescription': '以下是已登录您账户的设备。您可以撤销任何不识别的设备。',
196
+ 'security.revokeOthers': '注销其他所有设备',
197
+ 'security.currentSession': '当前设备',
198
+ 'security.revokeSession': '注销此设备',
199
+ 'security.noSessions': '无活跃会话。',
200
+ 'integrations.statusConnected': '已连接',
201
+ 'integrations.statusDisconnected': '未连接',
202
+ 'integrations.enabled': '已启用',
203
+ 'integrations.disabled': '已禁用',
204
+ 'integrations.addMoreHint': '需要自定义集成?请联系管理员注册新的应用程序。',
205
+ 'notifications.emailTitle': '邮件通知',
206
+ 'notifications.emailDescription': '将系统自动发送的通知推送到您的电子邮箱。',
207
+ 'notifications.securityAlerts': '安全警报',
208
+ 'notifications.securityAlertsDesc': '在密码修改、新登录尝试或生成 API 密钥时收到通知。',
209
+ 'notifications.activityLogs': '活动报告',
210
+ 'notifications.activityLogsDesc': '每周获取关于系统审计、资源修改和后台任务的摘要。',
211
+ 'notifications.systemAlerts': '系统报告',
212
+ 'notifications.systemAlertsDesc': '在服务器实例或数据流水线发生故障时接收实时通知。',
213
+ 'notifications.pushTitle': '应用内与浏览器推送',
214
+ 'notifications.pushDescription': '在当前打开的浏览器标签页上接收推送通知。',
215
+ 'notifications.securityPushDesc': '在检测到未经授权的登录时立即在浏览器发出警报。',
216
+ 'notifications.activityPushDesc': '当同事编辑资源时,即时接收操作日志推送。',
217
+ 'notifications.systemPushDesc': '针对任务队列和内存异常的严重警报。',
218
+ 'notifications.smsTitle': '短信紧急警报',
219
+ 'notifications.smsDescription': '可能产生标准资费。仅在需要管理员手动干预的紧急事件时使用。',
220
+ 'notifications.criticalSecurity': '关键安全事件',
221
+ 'notifications.criticalSecurityDesc': '在发生 Root 密码重置或双重身份验证绕过时发送短信警报。',
222
+ 'api.generateTitle': '创建新 API 密钥',
223
+ 'api.generateDesc': '配置权限范围并生成访问令牌。',
224
+ 'api.keyName': '密钥名称',
225
+ 'api.permissions': '权限范围',
226
+ 'api.generateButton': '生成令牌',
227
+ 'api.activeKeysTitle': '活跃 API 密钥',
228
+ 'api.activeKeysDesc': '请妥善保管这些密钥。切勿在公共仓库中分享。',
229
+ 'api.successTitle': 'API 密钥已生成',
230
+ 'api.successHint': '请立即复制此令牌。关闭此提示后,您将无法再次查看它。',
231
+ 'api.noKeys': '尚未生成活跃的 API 密钥。',
232
+ 'error.pageNotFoundDescription': '抱歉,您访问的页面不存在或已被移除。',
233
+ 'error.internalServerErrorDescription': '系统发生了一些问题,请稍后再试或联系支持人员。',
165
234
  'settings.system': '系统',
166
235
  'settings.themeMode': '主题模式',
167
236
  'settings.light': '浅色',
@@ -316,6 +385,127 @@ const baseLocales: Record<string, Record<string, string>> = {
316
385
  'task.status.dead_lettered': '死信',
317
386
  'task.status.retry_scheduled': '等待重试',
318
387
  'task.status.leased': '已领取',
388
+ // Public Profile
389
+ 'publicProfile.title': '公开资料',
390
+ 'publicProfile.projects': '项目',
391
+ 'publicProfile.activity': '动态',
392
+ 'publicProfile.teams': '团队',
393
+ 'publicProfile.profile': '资料',
394
+ 'publicProfile.viewProfile': '查看资料',
395
+ 'publicProfile.followers': '关注者',
396
+ 'publicProfile.following': '关注中',
397
+ 'publicProfile.editProfile': '编辑资料',
398
+ 'publicProfile.sendMessage': '发消息',
399
+ 'publicProfile.addFriend': '添加好友',
400
+ 'publicProfile.projects2Col': '项目 (两列)',
401
+ 'publicProfile.projects3Col': '项目 (三列)',
402
+ 'publicProfile.noProjects': '暂无项目',
403
+ 'publicProfile.noActivity': '暂无动态',
404
+ 'publicProfile.noTeams': '暂无团队',
405
+ 'publicProfile.joinedDate': '加入于 {date}',
406
+ 'publicProfile.projectMembers': '{count} 名成员',
407
+ 'publicProfile.projectTasks': '{count} 个任务',
408
+ 'publicProfile.activityPosted': '发布了内容',
409
+ 'publicProfile.activityCommented': '评论了',
410
+ 'publicProfile.activityJoined': '加入了',
411
+ 'publicProfile.activityCreated': '创建了',
412
+ // Profile variants
413
+ 'profile.company': '公司资料',
414
+ 'profile.companyDescription': '公司简介和统计信息',
415
+ 'profile.gamer': '玩家资料',
416
+ 'profile.gamerDescription': '游戏成就和统计',
417
+ 'profile.default': '个人资料',
418
+ 'profile.defaultDescription': '个人简介和活动',
419
+ 'profile.companyName': '公司名称',
420
+ 'profile.industry': '行业',
421
+ 'profile.employees': '员工数',
422
+ 'profile.founded': '成立时间',
423
+ 'profile.website': '网站',
424
+ 'profile.gamerTag': '玩家标签',
425
+ 'profile.level': '等级',
426
+ 'profile.rank': '排名',
427
+ 'profile.gamesPlayed': '游戏场次',
428
+ 'profile.winRate': '胜率',
429
+ // Account extensions
430
+ 'account.getStarted': '入门指南',
431
+ 'account.getStartedDescription': '按照步骤完成初始设置,快速上手平台功能。',
432
+ 'account.companyProfile': '公司信息',
433
+ 'account.companyProfileDescription': '管理公司基本信息和品牌设置。',
434
+ 'account.settingsPlain': '基本设置',
435
+ 'account.settingsPlainDescription': '管理基本账户设置。',
436
+ 'account.settingsSidebar': '侧栏设置',
437
+ 'account.settingsSidebarDescription': '配置侧边栏布局和行为。',
438
+ 'account.settingsEnterprise': '企业设置',
439
+ 'account.settingsEnterpriseDescription': '管理企业级配置和策略。',
440
+ 'account.importMembers': '导入成员',
441
+ 'account.importMembersDescription': '从 CSV 文件批量导入团队成员。',
442
+ 'account.membersStarter': '成员概览',
443
+ 'account.membersStarterDescription': '查看和管理工作区成员。',
444
+ 'account.securityLog': '安全日志',
445
+ 'account.securityLogDescription': '查看账户安全相关的操作记录。',
446
+ 'account.step': '第 {current} 步(共 {total} 步)',
447
+ 'account.completeSetup': '完成设置',
448
+ 'account.uploadAvatar': '上传头像',
449
+ 'account.connectProvider': '连接服务',
450
+ 'account.setupProfile': '完善资料',
451
+ 'account.setupTeam': '邀请团队',
452
+ 'account.skipSetup': '跳过设置',
453
+ 'account.nextStep': '下一步',
454
+ 'account.prevStep': '上一步',
455
+ 'account.finishSetup': '完成设置',
456
+ 'account.dragOrClick': '拖拽文件或点击上传',
457
+ 'account.supportedFormats': '支持 CSV、XLSX 格式',
458
+ 'account.downloadTemplate': '下载模板',
459
+ 'account.startImport': '开始导入',
460
+ 'account.importProgress': '导入进度',
461
+ 'account.importComplete': '导入完成',
462
+ 'account.imported': '已导入 {count} 条记录',
463
+ 'account.member': '成员',
464
+ 'account.role': '角色',
465
+ 'account.status': '状态',
466
+ 'account.joined': '加入时间',
467
+ 'account.active': '活跃',
468
+ 'account.invited': '已邀请',
469
+ 'account.inactive': '未激活',
470
+ 'account.inviteMember': '邀请成员',
471
+ 'account.removeMember': '移除成员',
472
+ // Network
473
+ 'network.userCards': '用户卡片',
474
+ 'network.userCardsDescription': '以卡片形式浏览用户列表。',
475
+ 'network.teamCrew': '团队花名册',
476
+ 'network.teamCrewDescription': '以表格形式查看团队成员信息。',
477
+ 'network.connect': '关注',
478
+ 'network.connected': '已关注',
479
+ 'network.nftCollection': 'NFT 收藏',
480
+ 'network.nftCount': '{count} 件藏品',
481
+ 'network.floorPrice': '地板价',
482
+ 'network.volume': '交易量',
483
+ 'network.viewCollection': '查看收藏',
484
+ // Auth
485
+ 'auth.twoFactorSetup': '设置双重验证',
486
+ 'auth.twoFactorVerify': '验证身份',
487
+ 'auth.twoFactorRecovery': '恢复代码',
488
+ 'auth.twoFactorScanQR': '使用验证器应用扫描二维码',
489
+ 'auth.twoFactorEnterCode': '输入 6 位验证码',
490
+ 'auth.twoFactorVerifySuccess': '双重验证已成功启用',
491
+ 'auth.twoFactorSaveRecovery': '请妥善保存以下恢复代码',
492
+ 'auth.twoFactorRecoveryHint': '当您无法使用验证器时,可使用恢复代码登录。每个代码只能使用一次。',
493
+ 'auth.twoFactorDisable': '关闭双重验证',
494
+ 'auth.twoFactorDisableConfirm': '确认要关闭双重验证吗?这将降低账户安全性。',
495
+ // Security Log
496
+ 'securityLog.event': '事件',
497
+ 'securityLog.ip': 'IP 地址',
498
+ 'securityLog.device': '设备',
499
+ 'securityLog.location': '位置',
500
+ 'securityLog.time': '时间',
501
+ 'securityLog.loginSuccess': '登录成功',
502
+ 'securityLog.loginFailed': '登录失败',
503
+ 'securityLog.passwordChanged': '密码已修改',
504
+ 'securityLog.twoFactorEnabled': '已启用双重验证',
505
+ 'securityLog.twoFactorDisabled': '已关闭双重验证',
506
+ 'securityLog.apiKeyCreated': 'API 密钥已创建',
507
+ 'securityLog.apiKeyRevoked': 'API 密钥已吊销',
508
+ 'securityLog.sessionRevoked': '会话已注销',
319
509
  },
320
510
  'en': {
321
511
  'common.list': 'List',
@@ -458,6 +648,19 @@ const baseLocales: Record<string, Record<string, string>> = {
458
648
  'devtools.title': 'DevTools (Ctrl+Shift+D)',
459
649
  // Validation
460
650
  // Chat
651
+ 'chat.title': 'AI Assistant',
652
+ 'chat.typing': 'Typing...',
653
+ 'chat.clear': 'Clear',
654
+ 'chat.welcome': 'How can I help?',
655
+ 'chat.welcomeDesc': 'Ask me anything about your admin panel, resources, and inventory operations.',
656
+ 'chat.thinking': 'Thinking...',
657
+ 'chat.placeholder': 'Type a message...',
658
+ 'chat.shortcutHint': 'to toggle',
659
+ 'chat.error': 'Sorry, something went wrong. Please try again.',
660
+ 'chat.approvalRequired': 'Approval required',
661
+ 'chat.suggestion1': 'How do I create a new resource?',
662
+ 'chat.suggestion2': 'Explain the data model',
663
+ 'chat.suggestion3': 'Help me write a filter query',
461
664
  'chat.contextInfo': 'Current context: {resource}',
462
665
  'chat.actionButton': 'Execute',
463
666
  'chat.historyRestored': 'Chat history restored',
@@ -476,6 +679,62 @@ const baseLocales: Record<string, Record<string, string>> = {
476
679
  'settings.appearance': 'Appearance',
477
680
  'settings.about': 'About',
478
681
  'settings.general': 'General',
682
+ 'settings.security': 'Security',
683
+ 'settings.integrations': 'Integrations',
684
+ 'settings.notifications': 'Notifications',
685
+ 'settings.api': 'API Settings',
686
+ 'settings.developer': 'Developer',
687
+ 'settings.workspace': 'Workspace',
688
+ 'settings.securityDescription': 'Manage your password, active sessions, and multi-factor authentication preferences.',
689
+ 'settings.integrationsDescription': 'Connect and manage third-party service extensions for your workspace.',
690
+ 'settings.notificationsDescription': 'Configure how and when you receive system alerts.',
691
+ 'settings.apiDescription': 'Generate and manage secure API keys to integrate external programmatic scripts.',
692
+ 'security.twoFactorAuth': 'Two-Factor Authentication (2FA)',
693
+ 'security.twoFactorDescription': 'Add an extra layer of security to your account by requiring a verification code in addition to your password.',
694
+ 'security.enable2fa': 'Enable 2FA Verification',
695
+ 'security.twoFactorActive': '2FA is currently active. Verification codes will be required on new logins.',
696
+ 'security.twoFactorInactive': '2FA is currently disabled. Protect your account by turning it on.',
697
+ 'security.passwordLastChanged': 'Last changed: {time}',
698
+ 'security.activeSessions': 'Active Sessions',
699
+ 'security.sessionsDescription': 'These are the devices that have logged into your account. Revoke any you do not recognize.',
700
+ 'security.revokeOthers': 'Sign Out Other Devices',
701
+ 'security.currentSession': 'Current Device',
702
+ 'security.revokeSession': 'Sign out device',
703
+ 'security.noSessions': 'No active sessions.',
704
+ 'integrations.statusConnected': 'Connected',
705
+ 'integrations.statusDisconnected': 'Disconnected',
706
+ 'integrations.enabled': 'Enabled',
707
+ 'integrations.disabled': 'Disabled',
708
+ 'integrations.addMoreHint': 'Need custom integrations? Contact your administrator to register new application manifests.',
709
+ 'notifications.emailTitle': 'Email Notifications',
710
+ 'notifications.emailDescription': 'Get automated system messages delivered directly to your mailbox.',
711
+ 'notifications.securityAlerts': 'Security Alerts',
712
+ 'notifications.securityAlertsDesc': 'Get notified of password changes, login attempts, and key generations.',
713
+ 'notifications.activityLogs': 'Activity Reports',
714
+ 'notifications.activityLogsDesc': 'Weekly summaries of system audits, modifications, and background tasks.',
715
+ 'notifications.systemAlerts': 'System Reports',
716
+ 'notifications.systemAlertsDesc': 'Real-time alerts when server instances or data pipelines fail.',
717
+ 'notifications.pushTitle': 'In-App & Push Notifications',
718
+ 'notifications.pushDescription': 'Receive push notifications on your active browser tab.',
719
+ 'notifications.securityPushDesc': 'Immediate browser alerts on unauthorized login detection.',
720
+ 'notifications.activityPushDesc': 'Instant notifications on CRUD logs when colleagues edit resources.',
721
+ 'notifications.systemPushDesc': 'Critical alerts for task queues and memory anomalies.',
722
+ 'notifications.smsTitle': 'SMS Emergency Alerts',
723
+ 'notifications.smsDescription': 'Standard rates apply. Used only for urgent events requiring manual administrator intervention.',
724
+ 'notifications.criticalSecurity': 'Critical Security Events',
725
+ 'notifications.criticalSecurityDesc': 'SMS alert sent when root password resets or 2FA bypass occurs.',
726
+ 'api.generateTitle': 'Create New API Key',
727
+ 'api.generateDesc': 'Configure scopes and generate a token.',
728
+ 'api.keyName': 'Key Name',
729
+ 'api.permissions': 'Permissions',
730
+ 'api.generateButton': 'Generate Token',
731
+ 'api.activeKeysTitle': 'Active API Keys',
732
+ 'api.activeKeysDesc': 'Keep these keys secure. Do not share them in public repositories.',
733
+ 'api.successTitle': 'API Key Generated',
734
+ 'api.successHint': 'Copy this token now. It will not be shown again.',
735
+ 'api.noKeys': 'No active API keys generated yet.',
736
+ 'error.pageNotFoundDescription': 'Sorry, the page you are looking for does not exist or has been moved.',
737
+ 'error.internalServerErrorDescription': 'Something went wrong on our end. Please try again later or contact support.',
479
738
  'settings.system': 'System',
480
739
  'settings.themeMode': 'Theme Mode',
481
740
  'settings.light': 'Light',
@@ -630,6 +889,127 @@ const baseLocales: Record<string, Record<string, string>> = {
630
889
  'task.status.dead_lettered': 'Dead lettered',
631
890
  'task.status.retry_scheduled': 'Retry scheduled',
632
891
  'task.status.leased': 'Leased',
892
+ // Public Profile
893
+ 'publicProfile.title': 'Public Profile',
894
+ 'publicProfile.projects': 'Projects',
895
+ 'publicProfile.activity': 'Activity',
896
+ 'publicProfile.teams': 'Teams',
897
+ 'publicProfile.profile': 'Profile',
898
+ 'publicProfile.viewProfile': 'View Profile',
899
+ 'publicProfile.followers': 'Followers',
900
+ 'publicProfile.following': 'Following',
901
+ 'publicProfile.editProfile': 'Edit Profile',
902
+ 'publicProfile.sendMessage': 'Send Message',
903
+ 'publicProfile.addFriend': 'Add Friend',
904
+ 'publicProfile.projects2Col': 'Projects (2 Columns)',
905
+ 'publicProfile.projects3Col': 'Projects (3 Columns)',
906
+ 'publicProfile.noProjects': 'No projects yet',
907
+ 'publicProfile.noActivity': 'No activity yet',
908
+ 'publicProfile.noTeams': 'No teams yet',
909
+ 'publicProfile.joinedDate': 'Joined {date}',
910
+ 'publicProfile.projectMembers': '{count} members',
911
+ 'publicProfile.projectTasks': '{count} tasks',
912
+ 'publicProfile.activityPosted': 'posted',
913
+ 'publicProfile.activityCommented': 'commented on',
914
+ 'publicProfile.activityJoined': 'joined',
915
+ 'publicProfile.activityCreated': 'created',
916
+ // Profile variants
917
+ 'profile.company': 'Company Profile',
918
+ 'profile.companyDescription': 'Company overview and statistics',
919
+ 'profile.gamer': 'Gamer Profile',
920
+ 'profile.gamerDescription': 'Gaming achievements and stats',
921
+ 'profile.default': 'Default Profile',
922
+ 'profile.defaultDescription': 'Personal overview and activity',
923
+ 'profile.companyName': 'Company Name',
924
+ 'profile.industry': 'Industry',
925
+ 'profile.employees': 'Employees',
926
+ 'profile.founded': 'Founded',
927
+ 'profile.website': 'Website',
928
+ 'profile.gamerTag': 'Gamer Tag',
929
+ 'profile.level': 'Level',
930
+ 'profile.rank': 'Rank',
931
+ 'profile.gamesPlayed': 'Games Played',
932
+ 'profile.winRate': 'Win Rate',
933
+ // Account extensions
934
+ 'account.getStarted': 'Get Started',
935
+ 'account.getStartedDescription': 'Follow the steps to complete your initial setup and get up to speed quickly.',
936
+ 'account.companyProfile': 'Company Profile',
937
+ 'account.companyProfileDescription': 'Manage company information and branding.',
938
+ 'account.settingsPlain': 'Basic Settings',
939
+ 'account.settingsPlainDescription': 'Manage basic account settings.',
940
+ 'account.settingsSidebar': 'Sidebar Settings',
941
+ 'account.settingsSidebarDescription': 'Configure sidebar layout and behavior.',
942
+ 'account.settingsEnterprise': 'Enterprise Settings',
943
+ 'account.settingsEnterpriseDescription': 'Manage enterprise-level configuration and policies.',
944
+ 'account.importMembers': 'Import Members',
945
+ 'account.importMembersDescription': 'Bulk import team members from a CSV file.',
946
+ 'account.membersStarter': 'Members Overview',
947
+ 'account.membersStarterDescription': 'View and manage workspace members.',
948
+ 'account.securityLog': 'Security Log',
949
+ 'account.securityLogDescription': 'View security-related activity logs for your account.',
950
+ 'account.step': 'Step {current} of {total}',
951
+ 'account.completeSetup': 'Complete Setup',
952
+ 'account.uploadAvatar': 'Upload Avatar',
953
+ 'account.connectProvider': 'Connect Provider',
954
+ 'account.setupProfile': 'Set Up Profile',
955
+ 'account.setupTeam': 'Invite Team',
956
+ 'account.skipSetup': 'Skip Setup',
957
+ 'account.nextStep': 'Next Step',
958
+ 'account.prevStep': 'Previous Step',
959
+ 'account.finishSetup': 'Finish Setup',
960
+ 'account.dragOrClick': 'Drag file or click to upload',
961
+ 'account.supportedFormats': 'Supports CSV, XLSX formats',
962
+ 'account.downloadTemplate': 'Download Template',
963
+ 'account.startImport': 'Start Import',
964
+ 'account.importProgress': 'Import Progress',
965
+ 'account.importComplete': 'Import Complete',
966
+ 'account.imported': 'Imported {count} records',
967
+ 'account.member': 'Member',
968
+ 'account.role': 'Role',
969
+ 'account.status': 'Status',
970
+ 'account.joined': 'Joined',
971
+ 'account.active': 'Active',
972
+ 'account.invited': 'Invited',
973
+ 'account.inactive': 'Inactive',
974
+ 'account.inviteMember': 'Invite Member',
975
+ 'account.removeMember': 'Remove Member',
976
+ // Network
977
+ 'network.userCards': 'User Cards',
978
+ 'network.userCardsDescription': 'Browse users in card layout.',
979
+ 'network.teamCrew': 'Team Crew',
980
+ 'network.teamCrewDescription': 'View team members in table layout.',
981
+ 'network.connect': 'Follow',
982
+ 'network.connected': 'Following',
983
+ 'network.nftCollection': 'NFT Collection',
984
+ 'network.nftCount': '{count} items',
985
+ 'network.floorPrice': 'Floor Price',
986
+ 'network.volume': 'Volume',
987
+ 'network.viewCollection': 'View Collection',
988
+ // Auth
989
+ 'auth.twoFactorSetup': 'Set Up Two-Factor Auth',
990
+ 'auth.twoFactorVerify': 'Verify Identity',
991
+ 'auth.twoFactorRecovery': 'Recovery Codes',
992
+ 'auth.twoFactorScanQR': 'Scan the QR code with your authenticator app',
993
+ 'auth.twoFactorEnterCode': 'Enter 6-digit verification code',
994
+ 'auth.twoFactorVerifySuccess': 'Two-factor authentication enabled successfully',
995
+ 'auth.twoFactorSaveRecovery': 'Save these recovery codes in a safe place',
996
+ 'auth.twoFactorRecoveryHint': 'You can use recovery codes to log in when you cannot access your authenticator. Each code can only be used once.',
997
+ 'auth.twoFactorDisable': 'Disable Two-Factor Auth',
998
+ 'auth.twoFactorDisableConfirm': 'Are you sure you want to disable two-factor authentication? This will reduce your account security.',
999
+ // Security Log
1000
+ 'securityLog.event': 'Event',
1001
+ 'securityLog.ip': 'IP Address',
1002
+ 'securityLog.device': 'Device',
1003
+ 'securityLog.location': 'Location',
1004
+ 'securityLog.time': 'Time',
1005
+ 'securityLog.loginSuccess': 'Login Successful',
1006
+ 'securityLog.loginFailed': 'Login Failed',
1007
+ 'securityLog.passwordChanged': 'Password Changed',
1008
+ 'securityLog.twoFactorEnabled': '2FA Enabled',
1009
+ 'securityLog.twoFactorDisabled': '2FA Disabled',
1010
+ 'securityLog.apiKeyCreated': 'API Key Created',
1011
+ 'securityLog.apiKeyRevoked': 'API Key Revoked',
1012
+ 'securityLog.sessionRevoked': 'Session Revoked',
633
1013
  },
634
1014
  };
635
1015
 
@@ -235,6 +235,8 @@ export interface ThemeConfig {
235
235
  disableColorScheme?: boolean;
236
236
  /** Built-in color preset name (e.g. 'indigo', 'blue') or a custom ColorPreset object */
237
237
  colorPreset?: ColorPreset | string;
238
+ /** Layout style option: 'default' or 'clean-flat' for high-contrast flat panel design */
239
+ layoutPreset?: 'default' | 'clean-flat';
238
240
  }
239
241
 
240
242
  const STORAGE_KEY = 'svadmin-theme';
@@ -328,6 +330,13 @@ function applyTheme(m: ThemeMode): void {
328
330
 
329
331
  const strategy = themeConfig.strategy ?? 'standard';
330
332
  const el = document.documentElement;
333
+
334
+ // Apply clean-flat layout preset class to html
335
+ if (themeConfig.layoutPreset === 'clean-flat') {
336
+ el.classList.add('layout-clean-flat');
337
+ } else {
338
+ el.classList.remove('layout-clean-flat');
339
+ }
331
340
 
332
341
  if (strategy === 'dark-first') {
333
342
  // Dark-first: default is dark, add 'light' class for light mode