{"version":3,"file":"theme.mjs","sources":["../../../../packages/utils/theme.ts"],"sourcesContent":["'use strict'\n\nconst root = window\nconst rootNode = root.document.documentElement\nimport { addClass, removeClass } from './dom'\n\nfunction setThemeFn(theme: string) {\n\t// 参数校验\n\tif (!rootNode) {\n\t\tconsole.error('配置或 rootNode 节点不能为空')\n\t\treturn\n\t}\n\n\t// 检测系统主题（现代浏览器）\n\tconst isDarkModeSupported = window.matchMedia && typeof window.matchMedia === 'function'\n\tconst isDarkMode = isDarkModeSupported\n\t\t? window.matchMedia('(prefers-color-scheme: dark)').matches\n\t\t: false // IE 无法检测，默认为 false\n\n\t// 应用主题\n\tconst applyTheme = () => {\n\t\tif (theme === 'auto') {\n\t\t\tif (isDarkMode) {\n\t\t\t\taddClass(rootNode, 'theme-dark')\n\t\t\t\tlocalStorage.setItem('touchui.theme', 'dark')\n\t\t\t} else {\n\t\t\t\tremoveClass(rootNode, 'theme-dark')\n\t\t\t\tlocalStorage.setItem('touchui.theme', 'light')\n\t\t\t}\n\t\t} else {\n\t\t\tif (theme === 'dark') {\n\t\t\t\taddClass(rootNode, 'theme-dark')\n\t\t\t\tlocalStorage.setItem('touchui.theme', 'dark')\n\t\t\t} else {\n\t\t\t\tremoveClass(rootNode, 'theme-dark')\n\t\t\t\tlocalStorage.setItem('touchui.theme', 'light')\n\t\t\t}\n\t\t}\n\t}\n\n\t// 自动检测暗夜模式并监听（仅现代浏览器支持）\n\tif (theme === 'auto' && isDarkModeSupported) {\n\t\tconst mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n\t\tapplyTheme() // 初次应用\n\n\t\t// 注册监听器\n\t\tconst listener = (event: { matches: any }) => {\n\t\t\tif (event.matches) {\n\t\t\t\taddClass(rootNode, 'theme-dark')\n\t\t\t} else {\n\t\t\t\tremoveClass(rootNode, 'theme-dark')\n\t\t\t}\n\t\t}\n\t\tmediaQuery.addEventListener('change', listener)\n\n\t\t// 清理监听器（可选）\n\t\trootNode['_themeListener'] = listener\n\t} else {\n\t\t// 非自动模式或 IE，直接应用主题\n\t\tapplyTheme()\n\n\t\t// 清理监听器（如果存在）\n\t\tif (rootNode['_themeListener']) {\n\t\t\tconst mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n\t\t\tmediaQuery.removeEventListener('change', rootNode['_themeListener'])\n\t\t\tdelete rootNode['_themeListener']\n\t\t}\n\t}\n}\n\nfunction setTheme(theme) {\n\tif (!theme) {\n\t\treturn\n\t}\n\tsetThemeFn(theme)\n}\nfunction getTheme() {\n\treturn localStorage.getItem('touchui.theme')\n}\n\n// 修改导出方式，将setTheme作为具名导出\nexport { setTheme, getTheme }\n\n// export default {\n// \tsetTheme: function (theme) {\n// \t\tif (!theme) {\n// \t\t\treturn\n// \t\t}\n// \t\tsetTheme(theme)\n// \t},\n// \tgetTheme: function () {\n// \t\treturn localStorage.getItem('touchui.theme')\n// \t},\n// }\n"],"names":[],"mappings":";;AAEA,MAAM,IAAO,GAAA,MAAA,CAAA;AACb,MAAM,QAAA,GAAW,KAAK,QAAS,CAAA,eAAA,CAAA;AAG/B,SAAS,WAAW,KAAe,EAAA;AAElC,EAAA,IAAI,CAAC,QAAU,EAAA;AACd,IAAA,OAAA,CAAQ,MAAM,kEAAqB,CAAA,CAAA;AACnC,IAAA,OAAA;AAAA,GACD;AAGA,EAAA,MAAM,mBAAsB,GAAA,MAAA,CAAO,UAAc,IAAA,OAAO,OAAO,UAAe,KAAA,UAAA,CAAA;AAC9E,EAAA,MAAM,aAAa,mBAChB,GAAA,MAAA,CAAO,UAAW,CAAA,8BAA8B,EAAE,OAClD,GAAA,KAAA,CAAA;AAGH,EAAA,MAAM,aAAa,MAAM;AACxB,IAAA,IAAI,UAAU,MAAQ,EAAA;AACrB,MAAA,IAAI,UAAY,EAAA;AACf,QAAA,QAAA,CAAS,UAAU,YAAY,CAAA,CAAA;AAC/B,QAAa,YAAA,CAAA,OAAA,CAAQ,iBAAiB,MAAM,CAAA,CAAA;AAAA,OACtC,MAAA;AACN,QAAA,WAAA,CAAY,UAAU,YAAY,CAAA,CAAA;AAClC,QAAa,YAAA,CAAA,OAAA,CAAQ,iBAAiB,OAAO,CAAA,CAAA;AAAA,OAC9C;AAAA,KACM,MAAA;AACN,MAAA,IAAI,UAAU,MAAQ,EAAA;AACrB,QAAA,QAAA,CAAS,UAAU,YAAY,CAAA,CAAA;AAC/B,QAAa,YAAA,CAAA,OAAA,CAAQ,iBAAiB,MAAM,CAAA,CAAA;AAAA,OACtC,MAAA;AACN,QAAA,WAAA,CAAY,UAAU,YAAY,CAAA,CAAA;AAClC,QAAa,YAAA,CAAA,OAAA,CAAQ,iBAAiB,OAAO,CAAA,CAAA;AAAA,OAC9C;AAAA,KACD;AAAA,GACD,CAAA;AAGA,EAAI,IAAA,KAAA,KAAU,UAAU,mBAAqB,EAAA;AAC5C,IAAM,MAAA,UAAA,GAAa,MAAO,CAAA,UAAA,CAAW,8BAA8B,CAAA,CAAA;AACnE,IAAW,UAAA,EAAA,CAAA;AAGX,IAAM,MAAA,QAAA,GAAW,CAAC,KAA4B,KAAA;AAC7C,MAAA,IAAI,MAAM,OAAS,EAAA;AAClB,QAAA,QAAA,CAAS,UAAU,YAAY,CAAA,CAAA;AAAA,OACzB,MAAA;AACN,QAAA,WAAA,CAAY,UAAU,YAAY,CAAA,CAAA;AAAA,OACnC;AAAA,KACD,CAAA;AACA,IAAW,UAAA,CAAA,gBAAA,CAAiB,UAAU,QAAQ,CAAA,CAAA;AAG9C,IAAA,QAAA,CAAS,gBAAgB,CAAI,GAAA,QAAA,CAAA;AAAA,GACvB,MAAA;AAEN,IAAW,UAAA,EAAA,CAAA;AAGX,IAAI,IAAA,QAAA,CAAS,gBAAgB,CAAG,EAAA;AAC/B,MAAM,MAAA,UAAA,GAAa,MAAO,CAAA,UAAA,CAAW,8BAA8B,CAAA,CAAA;AACnE,MAAA,UAAA,CAAW,mBAAoB,CAAA,QAAA,EAAU,QAAS,CAAA,gBAAgB,CAAC,CAAA,CAAA;AACnE,MAAA,OAAO,SAAS,gBAAgB,CAAA,CAAA;AAAA,KACjC;AAAA,GACD;AACD,CAAA;AAEA,SAAS,SAAS,KAAO,EAAA;AACxB,EAAA,IAAI,CAAC,KAAO,EAAA;AACX,IAAA,OAAA;AAAA,GACD;AACA,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AACjB,CAAA;AACA,SAAS,QAAW,GAAA;AACnB,EAAO,OAAA,YAAA,CAAa,QAAQ,eAAe,CAAA,CAAA;AAC5C;;;;"}