129 lines
4.1 KiB
TypeScript
129 lines
4.1 KiB
TypeScript
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 = 'zh-CN'
|
|
|
|
/** @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',
|
|
] 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,
|
|
} as const
|