import enUS from '@/assets/system/en-US.png' import idID from '@/assets/system/id-ID.webp' import msMY from '@/assets/system/ms-MY.png' import zhCN from '@/assets/system/zh-CN.png' /** @description 应用启动阶段使用的根节点 ID。 */ export const APP_ROOT_ELEMENT_ID = 'root' /** @description 应用名称,用于文档标题和分享元信息。 */ export const APP_NAME = '36字花' /** @description 应用默认页面描述,用于 SEO 和分享卡片。 */ export const APP_DEFAULT_DESCRIPTION = '36-character-flower real-time game portal built with React, TanStack Router, TanStack Query, and Zustand.' /** @description 应用偏好持久化到浏览器时使用的存储键。 */ export const APP_PREFERENCES_STORAGE_KEY = 'app-preferences' /** @description 音频偏好持久化到浏览器时使用的存储键。 */ export const AUDIO_PREFERENCES_STORAGE_KEY = 'audio-preferences' /** @description 接口请求默认超时时间,单位为毫秒。 */ export const DEFAULT_REQUEST_TIMEOUT_MS = 15_000 /** @description 请求默认声明可接收的响应内容类型。 */ export const DEFAULT_REQUEST_ACCEPT_HEADER = 'application/json' /** @description 请求层统一使用的错误提示文案。 */ export const API_ERROR_MESSAGES = { timeout: 'Request timed out', unexpected: 'Unexpected request error', } as const /** @description TanStack Query 默认缓存新鲜时间,单位为毫秒。 */ export const QUERY_DEFAULT_STALE_TIME_MS = 30_000 /** @description TanStack Query 默认缓存回收时间,单位为毫秒。 */ export const QUERY_DEFAULT_GC_TIME_MS = 5 * 60_000 /** @description 查询请求默认允许的最大重试次数。 */ export const QUERY_RETRY_LIMIT = 2 /** @description 可被视为瞬时失败并允许重试的 HTTP 状态码集合。 */ export const QUERY_RETRYABLE_STATUS_CODES = [ 408, 429, 500, 502, 503, 504, ] as const /** @description 桌面端布局切换起始断点,单位为像素。 */ export const DESKTOP_LAYOUT_MIN_WIDTH_PX = 1024 /** @description 应用支持的语言代码列表。 */ export const SUPPORTED_LANGUAGES = ['zh-CN', 'en-US', 'ms-MY', 'id-ID'] as const /** @description 应用无法解析用户语言时使用的默认语言。 */ export const DEFAULT_APP_LANGUAGE = 'en-US' /** @description 语言切换面板展示的语言选项配置。 */ export const LANGUAGE_OPTIONS: Array<{ code: (typeof SUPPORTED_LANGUAGES)[number] icon: string labelKey: string }> = [ { code: 'zh-CN', icon: zhCN, labelKey: 'language.zhCN', }, { code: 'en-US', icon: enUS, labelKey: 'language.enUS', }, { code: 'ms-MY', icon: msMY, labelKey: 'language.msMY', }, { code: 'id-ID', icon: idID, labelKey: 'language.idID', }, ] /** @description 按语言代码快速取得国旗图标资源的映射表。 */ export const LANGUAGE_ICON_MAP = new Map( LANGUAGE_OPTIONS.map((language) => [language.code, language.icon] as const), ) /** @description 浏览器全屏状态变更事件名,包含 WebKit/Firefox/IE 兼容事件。 */ export const FULLSCREEN_CHANGE_EVENTS = [ 'fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange', ] as const /** @description 通知弹窗默认停留时间,单位为毫秒。 */ export const DEFAULT_ALERT_DURATION_MS = 2600 /** @description 通知弹窗关闭动画持续时间,单位为毫秒。 */ export const NOTIFICATION_EXIT_DURATION_MS = 220 /** @description 全局弹窗注册键列表,用于统一控制弹窗开关状态。 */ export const MODAL_KEYS = [ 'desktopLogin', 'desktopRegister', 'desktopLanguage', 'desktopRules', 'desktopUserInfo', 'desktopNotice', 'desktopAutoSetting', 'desktopProcedures', 'desktopWithdrawTopup', 'desktopPeriodHistory', ] as const /** @description 全局弹窗默认可见状态。 */ export const INITIAL_MODAL_VISIBILITY = { desktopLogin: false, desktopRegister: false, desktopLanguage: false, desktopRules: false, desktopUserInfo: false, desktopNotice: false, desktopAutoSetting: false, desktopProcedures: false, desktopWithdrawTopup: false, desktopPeriodHistory: false, } as const