@robot-admin/layout 3.1.0 → 3.2.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/CHANGELOG.md +164 -153
- package/README.md +518 -469
- package/dist/core/index.cjs +8 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +6 -1
- package/dist/core/index.d.ts +6 -1
- package/dist/core/index.js +7 -1
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +1 -39
- package/dist/index.css +1 -1
- package/dist/index.d.cts +1336 -348
- package/dist/index.d.ts +1336 -348
- package/dist/index.js +3 -2338
- package/dist/naive/index.cjs +1 -0
- package/dist/naive/index.d.cts +2927 -0
- package/dist/naive/index.d.ts +2927 -0
- package/dist/naive/index.js +3 -0
- package/dist/naive-Bd8pxcrF.js +1635 -0
- package/dist/naive-Bd8pxcrF.js.map +1 -0
- package/dist/naive-BfZUS_c8.cjs +28 -0
- package/dist/naive-BfZUS_c8.cjs.map +1 -0
- package/dist/vue/index.cjs +1 -0
- package/dist/vue/index.d.cts +1181 -0
- package/dist/vue/index.d.ts +1181 -0
- package/dist/vue/index.js +2 -0
- package/dist/vue-BRQ1Fg0b.js +739 -0
- package/dist/vue-BRQ1Fg0b.js.map +1 -0
- package/dist/vue-DhbxgFgz.cjs +2 -0
- package/dist/vue-DhbxgFgz.cjs.map +1 -0
- package/package.json +128 -102
- package/src/styles/layouts.scss +137 -82
- package/src/styles/settings.scss +421 -391
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
package/dist/core/index.cjs
CHANGED
|
@@ -29,6 +29,7 @@ __export(core_exports, {
|
|
|
29
29
|
THEME_PRESETS: () => THEME_PRESETS,
|
|
30
30
|
TRANSITION_MAP: () => TRANSITION_MAP,
|
|
31
31
|
adjustColor: () => adjustColor,
|
|
32
|
+
assertLayoutSettingsRelationships: () => assertLayoutSettingsRelationships,
|
|
32
33
|
sanitizeLayoutSettingsConfig: () => sanitizeLayoutSettingsConfig,
|
|
33
34
|
sanitizeSettingsPatch: () => sanitizeSettingsPatch
|
|
34
35
|
});
|
|
@@ -67,6 +68,11 @@ var NUMBER_RANGES = {
|
|
|
67
68
|
headerHeight: [32, 160]
|
|
68
69
|
};
|
|
69
70
|
var SETTINGS_CONFIG_SCHEMA_VERSION = 1;
|
|
71
|
+
function assertLayoutSettingsRelationships(settings) {
|
|
72
|
+
if (settings.sidebarCollapsedWidth > settings.sidebarWidth) {
|
|
73
|
+
throw new RangeError("sidebarCollapsedWidth \u4E0D\u80FD\u5927\u4E8E sidebarWidth");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
70
76
|
function sanitizeSettingsPatch(input) {
|
|
71
77
|
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
72
78
|
throw new TypeError("settings \u5FC5\u987B\u662F\u5BF9\u8C61");
|
|
@@ -290,7 +296,7 @@ var DEFAULT_SETTINGS = {
|
|
|
290
296
|
headerHeight: 56,
|
|
291
297
|
// 高级
|
|
292
298
|
enableHotkeys: true,
|
|
293
|
-
version: "3.
|
|
299
|
+
version: "3.2.0"
|
|
294
300
|
};
|
|
295
301
|
var COLOR_SWATCHES = PRESET_COLORS.map((c) => c.value);
|
|
296
302
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -304,6 +310,7 @@ var COLOR_SWATCHES = PRESET_COLORS.map((c) => c.value);
|
|
|
304
310
|
THEME_PRESETS,
|
|
305
311
|
TRANSITION_MAP,
|
|
306
312
|
adjustColor,
|
|
313
|
+
assertLayoutSettingsRelationships,
|
|
307
314
|
sanitizeLayoutSettingsConfig,
|
|
308
315
|
sanitizeSettingsPatch
|
|
309
316
|
});
|
package/dist/core/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/index.ts","../../src/core/settings.ts","../../src/constants/index.ts"],"sourcesContent":["export {\n adjustColor,\n sanitizeLayoutSettingsConfig,\n sanitizeSettingsPatch,\n SETTINGS_CONFIG_SCHEMA_VERSION,\n} from \"./settings\";\nexport type { LayoutSettingsConfig, LayoutVisualEffects } from \"./settings\";\n\nexport {\n BORDER_RADIUS_MAP,\n COLOR_SWATCHES,\n DEFAULT_SETTINGS,\n LAYOUT_MODES,\n PRESET_COLORS,\n THEME_PRESETS,\n TRANSITION_MAP,\n} from \"../constants\";\n\nexport type {\n BorderRadiusSize,\n LayoutInfo,\n LayoutMode,\n MenuExpandMode,\n PresetColor,\n SettingsDrawerActions,\n SettingsState,\n SettingsStoreOptions,\n TagsViewStyle,\n ThemeMode,\n ThemePreset,\n TransitionType,\n} from \"./types\";\n","import type { SettingsState } from \"./types\";\n\nconst ENUM_SETTINGS = {\n themeMode: new Set([\"light\", \"dark\", \"system\"]),\n borderRadius: new Set([\"small\", \"medium\", \"large\"]),\n transitionType: new Set([\"fade\", \"slide\", \"zoom\", \"none\"]),\n layoutMode: new Set([\n \"side\",\n \"top\",\n \"mix\",\n \"mix-top\",\n \"reverse-horizontal-mix\",\n \"card-layout\",\n ]),\n menuExpandMode: new Set([\"inline\", \"panel\"]),\n tagsViewStyle: new Set([\"default\", \"card\", \"smart\"]),\n} as const;\n\nconst BOOLEAN_SETTINGS: ReadonlySet<keyof SettingsState> = new Set([\n \"enableTransition\",\n \"collapsed\",\n \"fixedHeader\",\n \"showBreadcrumb\",\n \"showBreadcrumbIcon\",\n \"showTagsView\",\n \"showFooter\",\n \"enableHotkeys\",\n]);\n\nconst NUMBER_RANGES: Partial<\n Record<keyof SettingsState, readonly [number, number]>\n> = {\n tagsViewHeight: [24, 100],\n sidebarWidth: [120, 480],\n sidebarCollapsedWidth: [32, 160],\n headerHeight: [32, 160],\n};\n\n/** 当前导入导出配置格式版本。 */\nexport const SETTINGS_CONFIG_SCHEMA_VERSION = 1 as const;\n\nexport interface LayoutVisualEffects {\n gray?: boolean;\n colorWeak?: boolean;\n watermark?: {\n enabled: boolean;\n text: string;\n };\n}\n\n/** 经校验后可原子应用的布局配置。 */\nexport interface LayoutSettingsConfig extends LayoutVisualEffects {\n schemaVersion?: number;\n settings?: Partial<SettingsState>;\n}\n\n/**\n * 校验来自配置文件等不可信来源的设置。\n * 未知键为向前兼容而忽略;已知键的非法值会让整次导入失败。\n */\nexport function sanitizeSettingsPatch(input: unknown): Partial<SettingsState> {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n throw new TypeError(\"settings 必须是对象\");\n }\n\n const source = input as Record<string, unknown>;\n const result: Partial<SettingsState> = {};\n const assign = (key: keyof SettingsState, value: unknown) => {\n (result as Record<string, unknown>)[key] = value;\n };\n\n for (const [key, allowed] of Object.entries(ENUM_SETTINGS)) {\n const value = source[key];\n if (value === undefined) continue;\n if (typeof value !== \"string\" || !allowed.has(value as never)) {\n throw new RangeError(`无效的设置项 ${key}: ${String(value)}`);\n }\n assign(key as keyof SettingsState, value);\n }\n\n for (const key of BOOLEAN_SETTINGS) {\n const value = source[key];\n if (value === undefined) continue;\n if (typeof value !== \"boolean\") {\n throw new TypeError(`设置项 ${key} 必须是布尔值`);\n }\n assign(key, value);\n }\n\n for (const [key, range] of Object.entries(NUMBER_RANGES)) {\n const value = source[key];\n if (value === undefined) continue;\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value < range[0] ||\n value > range[1]\n ) {\n throw new RangeError(`设置项 ${key} 超出允许范围`);\n }\n assign(key as keyof SettingsState, value);\n }\n\n if (source.primaryColor !== undefined) {\n if (\n typeof source.primaryColor !== \"string\" ||\n !/^#[0-9a-fA-F]{6}$/.test(source.primaryColor)\n ) {\n throw new RangeError(\"primaryColor 必须是 #rrggbb 格式\");\n }\n result.primaryColor = source.primaryColor;\n }\n\n if (source.version !== undefined) {\n if (typeof source.version !== \"string\" || source.version.length > 50) {\n throw new TypeError(\"version 必须是长度不超过 50 的字符串\");\n }\n result.version = source.version;\n }\n\n return result;\n}\n\n/**\n * 一次性校验完整导入文件。此函数不修改任何响应式状态或浏览器 API,\n * 消费方可以在成功返回后再原子应用结果。\n */\nexport function sanitizeLayoutSettingsConfig(\n input: unknown,\n): LayoutSettingsConfig {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n throw new TypeError(\"配置文件根节点必须是对象\");\n }\n\n const source = input as Record<string, unknown>;\n const result: LayoutSettingsConfig = {};\n\n if (source.schemaVersion !== undefined) {\n if (\n typeof source.schemaVersion !== \"number\" ||\n !Number.isInteger(source.schemaVersion) ||\n source.schemaVersion < 1 ||\n source.schemaVersion > SETTINGS_CONFIG_SCHEMA_VERSION\n ) {\n throw new RangeError(\"不支持的配置格式版本\");\n }\n result.schemaVersion = source.schemaVersion;\n }\n\n if (source.settings !== undefined) {\n result.settings = sanitizeSettingsPatch(source.settings);\n }\n\n for (const key of [\"gray\", \"colorWeak\"] as const) {\n const value = source[key];\n if (value === undefined) continue;\n if (typeof value !== \"boolean\") {\n throw new TypeError(`${key} 必须是布尔值`);\n }\n result[key] = value;\n }\n\n if (source.watermark !== undefined) {\n if (\n !source.watermark ||\n typeof source.watermark !== \"object\" ||\n Array.isArray(source.watermark)\n ) {\n throw new TypeError(\"watermark 必须是对象\");\n }\n const watermark = source.watermark as Record<string, unknown>;\n if (\n typeof watermark.enabled !== \"boolean\" ||\n typeof watermark.text !== \"string\" ||\n watermark.text.length > 200\n ) {\n throw new TypeError(\"watermark 配置无效\");\n }\n result.watermark = {\n enabled: watermark.enabled,\n text: watermark.text,\n };\n }\n\n return result;\n}\n\n/**\n * 调整颜色亮度。\n * @returns 调整后的 #rrggbb;输入非法时原样返回。\n */\nexport function adjustColor(color: string, amount: number): string {\n if (typeof color !== \"string\") return \"#000000\";\n if (!Number.isFinite(amount)) return color;\n const normalizedAmount = Math.round(amount);\n const trimmedColor = color.trim();\n let hex = trimmedColor.startsWith(\"#\") ? trimmedColor.slice(1) : trimmedColor;\n if (hex.length === 3) {\n hex = hex\n .split(\"\")\n .map((character) => character + character)\n .join(\"\");\n }\n if (!/^[0-9a-fA-F]{6}$/.test(hex)) return color;\n\n const value = parseInt(hex, 16);\n const red = Math.min(255, Math.max(0, (value >> 16) + normalizedAmount));\n const green = Math.min(\n 255,\n Math.max(0, ((value >> 8) & 0x00ff) + normalizedAmount),\n );\n const blue = Math.min(\n 255,\n Math.max(0, (value & 0x0000ff) + normalizedAmount),\n );\n return `#${((red << 16) | (green << 8) | blue).toString(16).padStart(6, \"0\")}`;\n}\n","/**\n * 布局和设置系统 - 常量定义\n */\n\nimport type {\n ThemePreset,\n SettingsState,\n LayoutInfo,\n PresetColor,\n} from \"../core/types\";\n\n// ============ 主题色预设 ============\nexport const PRESET_COLORS: PresetColor[] = [\n { name: \"拂晓蓝\", value: \"#409eff\" },\n { name: \"薄暮红\", value: \"#f5222d\" },\n { name: \"火山橙\", value: \"#fa541c\" },\n { name: \"日暮黄\", value: \"#faad14\" },\n { name: \"极光绿\", value: \"#52c41a\" },\n { name: \"明青\", value: \"#13c2c2\" },\n { name: \"极客蓝\", value: \"#2f54eb\" },\n { name: \"酱紫\", value: \"#722ed1\" },\n] as const;\n\n// ============ 主题预设方案 ============\nexport const THEME_PRESETS: ThemePreset[] = [\n {\n name: \"科技蓝\",\n icon: \"💙\",\n primaryColor: \"#409eff\",\n },\n {\n name: \"清新绿\",\n icon: \"💚\",\n primaryColor: \"#52c41a\",\n },\n {\n name: \"商务灰\",\n icon: \"🖤\",\n primaryColor: \"#595959\",\n },\n {\n name: \"活力橙\",\n icon: \"🧡\",\n primaryColor: \"#fa8c16\",\n },\n {\n name: \"优雅紫\",\n icon: \"💜\",\n primaryColor: \"#722ed1\",\n },\n {\n name: \"经典红\",\n icon: \"❤️\",\n primaryColor: \"#f5222d\",\n },\n];\n\n// ============ 布局模式信息 ============\nexport const LAYOUT_MODES: LayoutInfo[] = [\n {\n mode: \"side\",\n label: \"左侧菜单\",\n description: \"经典的左侧导航布局\",\n icon: \"i-mdi:page-layout-sidebar-left\",\n },\n {\n mode: \"top\",\n label: \"顶部菜单\",\n description: \"顶部水平导航布局\",\n icon: \"i-mdi:page-layout-header\",\n },\n {\n mode: \"mix\",\n label: \"混合菜单\",\n description: \"顶部 + 侧边混合布局\",\n icon: \"i-mdi:view-dashboard-outline\",\n },\n {\n mode: \"mix-top\",\n label: \"顶部混合\",\n description: \"侧边优先的混合布局\",\n icon: \"i-mdi:view-dashboard-variant-outline\",\n },\n {\n mode: \"reverse-horizontal-mix\",\n label: \"反转混合\",\n description: \"反转的水平混合布局\",\n icon: \"i-mdi:page-layout-header-footer\",\n },\n {\n mode: \"card-layout\",\n label: \"卡片布局\",\n description: \"卡片式布局风格\",\n icon: \"i-mdi:card-outline\",\n },\n];\n\n// ============ 圆角映射 ============\nexport const BORDER_RADIUS_MAP = {\n small: \"4px\",\n medium: \"6px\",\n large: \"8px\",\n} as const;\n\n// ============ 动画映射 ============\nexport const TRANSITION_MAP = {\n fade: \"fade-transform\",\n slide: \"fade-slide\",\n zoom: \"fade-zoom\",\n none: \"\",\n} as const;\n\n// ============ 默认配置 ============\nexport const DEFAULT_SETTINGS: SettingsState = {\n // 外观\n themeMode: \"light\",\n primaryColor: \"#409eff\",\n borderRadius: \"medium\",\n transitionType: \"slide\",\n enableTransition: true,\n\n // 布局\n layoutMode: \"side\",\n menuExpandMode: \"inline\",\n collapsed: false,\n fixedHeader: true,\n showBreadcrumb: true,\n showBreadcrumbIcon: true,\n showTagsView: true,\n tagsViewHeight: 44,\n tagsViewStyle: \"default\",\n showFooter: true,\n sidebarWidth: 220,\n sidebarCollapsedWidth: 64,\n headerHeight: 56,\n\n // 高级\n enableHotkeys: true,\n version: \"3.1.0\",\n};\n\n// ============ 其他常量 ============\n\n/** Color swatches for color picker */\nexport const COLOR_SWATCHES = PRESET_COLORS.map((c) => c.value);\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/index.ts","../../src/core/settings.ts","../../src/constants/index.ts"],"sourcesContent":["export {\r\n adjustColor,\r\n assertLayoutSettingsRelationships,\r\n sanitizeLayoutSettingsConfig,\r\n sanitizeSettingsPatch,\r\n SETTINGS_CONFIG_SCHEMA_VERSION,\r\n} from \"./settings\";\r\nexport type { LayoutSettingsConfig, LayoutVisualEffects } from \"./settings\";\r\n\r\nexport {\r\n BORDER_RADIUS_MAP,\r\n COLOR_SWATCHES,\r\n DEFAULT_SETTINGS,\r\n LAYOUT_MODES,\r\n PRESET_COLORS,\r\n THEME_PRESETS,\r\n TRANSITION_MAP,\r\n} from \"../constants\";\r\n\r\nexport type {\r\n BorderRadiusSize,\r\n LayoutInfo,\r\n LayoutMode,\r\n MenuExpandMode,\r\n PresetColor,\r\n SettingsDrawerActions,\r\n SettingsState,\r\n SettingsStoreOptions,\r\n TagsViewStyle,\r\n ThemeMode,\r\n ThemePreset,\r\n TransitionType,\r\n} from \"./types\";\r\n","import type { SettingsState } from \"./types\";\r\n\r\nconst ENUM_SETTINGS = {\r\n themeMode: new Set([\"light\", \"dark\", \"system\"]),\r\n borderRadius: new Set([\"small\", \"medium\", \"large\"]),\r\n transitionType: new Set([\"fade\", \"slide\", \"zoom\", \"none\"]),\r\n layoutMode: new Set([\r\n \"side\",\r\n \"top\",\r\n \"mix\",\r\n \"mix-top\",\r\n \"reverse-horizontal-mix\",\r\n \"card-layout\",\r\n ]),\r\n menuExpandMode: new Set([\"inline\", \"panel\"]),\r\n tagsViewStyle: new Set([\"default\", \"card\", \"smart\"]),\r\n} as const;\r\n\r\nconst BOOLEAN_SETTINGS: ReadonlySet<keyof SettingsState> = new Set([\r\n \"enableTransition\",\r\n \"collapsed\",\r\n \"fixedHeader\",\r\n \"showBreadcrumb\",\r\n \"showBreadcrumbIcon\",\r\n \"showTagsView\",\r\n \"showFooter\",\r\n \"enableHotkeys\",\r\n]);\r\n\r\nconst NUMBER_RANGES: Partial<\r\n Record<keyof SettingsState, readonly [number, number]>\r\n> = {\r\n tagsViewHeight: [24, 100],\r\n sidebarWidth: [120, 480],\r\n sidebarCollapsedWidth: [32, 160],\r\n headerHeight: [32, 160],\r\n};\r\n\r\n/** 当前导入导出配置格式版本。 */\r\nexport const SETTINGS_CONFIG_SCHEMA_VERSION = 1 as const;\r\n\r\nexport interface LayoutVisualEffects {\r\n gray?: boolean;\r\n colorWeak?: boolean;\r\n watermark?: {\r\n enabled: boolean;\r\n text: string;\r\n };\r\n}\r\n\r\n/** 经校验后可原子应用的布局配置。 */\r\nexport interface LayoutSettingsConfig extends LayoutVisualEffects {\r\n schemaVersion?: number;\r\n settings?: Partial<SettingsState>;\r\n}\r\n\r\n/** 校验需要跨字段判断的布局尺寸约束。 */\r\nexport function assertLayoutSettingsRelationships(\r\n settings: Pick<SettingsState, \"sidebarCollapsedWidth\" | \"sidebarWidth\">,\r\n): void {\r\n if (settings.sidebarCollapsedWidth > settings.sidebarWidth) {\r\n throw new RangeError(\"sidebarCollapsedWidth 不能大于 sidebarWidth\");\r\n }\r\n}\r\n\r\n/**\r\n * 校验来自配置文件等不可信来源的设置。\r\n * 未知键为向前兼容而忽略;已知键的非法值会让整次导入失败。\r\n */\r\nexport function sanitizeSettingsPatch(input: unknown): Partial<SettingsState> {\r\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\r\n throw new TypeError(\"settings 必须是对象\");\r\n }\r\n\r\n const source = input as Record<string, unknown>;\r\n const result: Partial<SettingsState> = {};\r\n const assign = (key: keyof SettingsState, value: unknown) => {\r\n (result as Record<string, unknown>)[key] = value;\r\n };\r\n\r\n for (const [key, allowed] of Object.entries(ENUM_SETTINGS)) {\r\n const value = source[key];\r\n if (value === undefined) continue;\r\n if (typeof value !== \"string\" || !allowed.has(value as never)) {\r\n throw new RangeError(`无效的设置项 ${key}: ${String(value)}`);\r\n }\r\n assign(key as keyof SettingsState, value);\r\n }\r\n\r\n for (const key of BOOLEAN_SETTINGS) {\r\n const value = source[key];\r\n if (value === undefined) continue;\r\n if (typeof value !== \"boolean\") {\r\n throw new TypeError(`设置项 ${key} 必须是布尔值`);\r\n }\r\n assign(key, value);\r\n }\r\n\r\n for (const [key, range] of Object.entries(NUMBER_RANGES)) {\r\n const value = source[key];\r\n if (value === undefined) continue;\r\n if (\r\n typeof value !== \"number\" ||\r\n !Number.isFinite(value) ||\r\n value < range[0] ||\r\n value > range[1]\r\n ) {\r\n throw new RangeError(`设置项 ${key} 超出允许范围`);\r\n }\r\n assign(key as keyof SettingsState, value);\r\n }\r\n\r\n if (source.primaryColor !== undefined) {\r\n if (\r\n typeof source.primaryColor !== \"string\" ||\r\n !/^#[0-9a-fA-F]{6}$/.test(source.primaryColor)\r\n ) {\r\n throw new RangeError(\"primaryColor 必须是 #rrggbb 格式\");\r\n }\r\n result.primaryColor = source.primaryColor;\r\n }\r\n\r\n if (source.version !== undefined) {\r\n if (typeof source.version !== \"string\" || source.version.length > 50) {\r\n throw new TypeError(\"version 必须是长度不超过 50 的字符串\");\r\n }\r\n result.version = source.version;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * 一次性校验完整导入文件。此函数不修改任何响应式状态或浏览器 API,\r\n * 消费方可以在成功返回后再原子应用结果。\r\n */\r\nexport function sanitizeLayoutSettingsConfig(\r\n input: unknown,\r\n): LayoutSettingsConfig {\r\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\r\n throw new TypeError(\"配置文件根节点必须是对象\");\r\n }\r\n\r\n const source = input as Record<string, unknown>;\r\n const result: LayoutSettingsConfig = {};\r\n\r\n if (source.schemaVersion !== undefined) {\r\n if (\r\n typeof source.schemaVersion !== \"number\" ||\r\n !Number.isInteger(source.schemaVersion) ||\r\n source.schemaVersion < 1 ||\r\n source.schemaVersion > SETTINGS_CONFIG_SCHEMA_VERSION\r\n ) {\r\n throw new RangeError(\"不支持的配置格式版本\");\r\n }\r\n result.schemaVersion = source.schemaVersion;\r\n }\r\n\r\n if (source.settings !== undefined) {\r\n result.settings = sanitizeSettingsPatch(source.settings);\r\n }\r\n\r\n for (const key of [\"gray\", \"colorWeak\"] as const) {\r\n const value = source[key];\r\n if (value === undefined) continue;\r\n if (typeof value !== \"boolean\") {\r\n throw new TypeError(`${key} 必须是布尔值`);\r\n }\r\n result[key] = value;\r\n }\r\n\r\n if (source.watermark !== undefined) {\r\n if (\r\n !source.watermark ||\r\n typeof source.watermark !== \"object\" ||\r\n Array.isArray(source.watermark)\r\n ) {\r\n throw new TypeError(\"watermark 必须是对象\");\r\n }\r\n const watermark = source.watermark as Record<string, unknown>;\r\n if (\r\n typeof watermark.enabled !== \"boolean\" ||\r\n typeof watermark.text !== \"string\" ||\r\n watermark.text.length > 200\r\n ) {\r\n throw new TypeError(\"watermark 配置无效\");\r\n }\r\n result.watermark = {\r\n enabled: watermark.enabled,\r\n text: watermark.text,\r\n };\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * 调整颜色亮度。\r\n * @returns 调整后的 #rrggbb;输入非法时原样返回。\r\n */\r\nexport function adjustColor(color: string, amount: number): string {\r\n if (typeof color !== \"string\") return \"#000000\";\r\n if (!Number.isFinite(amount)) return color;\r\n const normalizedAmount = Math.round(amount);\r\n const trimmedColor = color.trim();\r\n let hex = trimmedColor.startsWith(\"#\") ? trimmedColor.slice(1) : trimmedColor;\r\n if (hex.length === 3) {\r\n hex = hex\r\n .split(\"\")\r\n .map((character) => character + character)\r\n .join(\"\");\r\n }\r\n if (!/^[0-9a-fA-F]{6}$/.test(hex)) return color;\r\n\r\n const value = parseInt(hex, 16);\r\n const red = Math.min(255, Math.max(0, (value >> 16) + normalizedAmount));\r\n const green = Math.min(\r\n 255,\r\n Math.max(0, ((value >> 8) & 0x00ff) + normalizedAmount),\r\n );\r\n const blue = Math.min(\r\n 255,\r\n Math.max(0, (value & 0x0000ff) + normalizedAmount),\r\n );\r\n return `#${((red << 16) | (green << 8) | blue).toString(16).padStart(6, \"0\")}`;\r\n}\r\n","/**\r\n * 布局和设置系统 - 常量定义\r\n */\r\n\r\nimport type {\r\n ThemePreset,\r\n SettingsState,\r\n LayoutInfo,\r\n PresetColor,\r\n} from \"../core/types\";\r\n\r\n// ============ 主题色预设 ============\r\nexport const PRESET_COLORS: PresetColor[] = [\r\n { name: \"拂晓蓝\", value: \"#409eff\" },\r\n { name: \"薄暮红\", value: \"#f5222d\" },\r\n { name: \"火山橙\", value: \"#fa541c\" },\r\n { name: \"日暮黄\", value: \"#faad14\" },\r\n { name: \"极光绿\", value: \"#52c41a\" },\r\n { name: \"明青\", value: \"#13c2c2\" },\r\n { name: \"极客蓝\", value: \"#2f54eb\" },\r\n { name: \"酱紫\", value: \"#722ed1\" },\r\n] as const;\r\n\r\n// ============ 主题预设方案 ============\r\nexport const THEME_PRESETS: ThemePreset[] = [\r\n {\r\n name: \"科技蓝\",\r\n icon: \"💙\",\r\n primaryColor: \"#409eff\",\r\n },\r\n {\r\n name: \"清新绿\",\r\n icon: \"💚\",\r\n primaryColor: \"#52c41a\",\r\n },\r\n {\r\n name: \"商务灰\",\r\n icon: \"🖤\",\r\n primaryColor: \"#595959\",\r\n },\r\n {\r\n name: \"活力橙\",\r\n icon: \"🧡\",\r\n primaryColor: \"#fa8c16\",\r\n },\r\n {\r\n name: \"优雅紫\",\r\n icon: \"💜\",\r\n primaryColor: \"#722ed1\",\r\n },\r\n {\r\n name: \"经典红\",\r\n icon: \"❤️\",\r\n primaryColor: \"#f5222d\",\r\n },\r\n];\r\n\r\n// ============ 布局模式信息 ============\r\nexport const LAYOUT_MODES: LayoutInfo[] = [\r\n {\r\n mode: \"side\",\r\n label: \"左侧菜单\",\r\n description: \"经典的左侧导航布局\",\r\n icon: \"i-mdi:page-layout-sidebar-left\",\r\n },\r\n {\r\n mode: \"top\",\r\n label: \"顶部菜单\",\r\n description: \"顶部水平导航布局\",\r\n icon: \"i-mdi:page-layout-header\",\r\n },\r\n {\r\n mode: \"mix\",\r\n label: \"混合菜单\",\r\n description: \"顶部 + 侧边混合布局\",\r\n icon: \"i-mdi:view-dashboard-outline\",\r\n },\r\n {\r\n mode: \"mix-top\",\r\n label: \"顶部混合\",\r\n description: \"侧边优先的混合布局\",\r\n icon: \"i-mdi:view-dashboard-variant-outline\",\r\n },\r\n {\r\n mode: \"reverse-horizontal-mix\",\r\n label: \"反转混合\",\r\n description: \"反转的水平混合布局\",\r\n icon: \"i-mdi:page-layout-header-footer\",\r\n },\r\n {\r\n mode: \"card-layout\",\r\n label: \"卡片布局\",\r\n description: \"卡片式布局风格\",\r\n icon: \"i-mdi:card-outline\",\r\n },\r\n];\r\n\r\n// ============ 圆角映射 ============\r\nexport const BORDER_RADIUS_MAP = {\r\n small: \"4px\",\r\n medium: \"6px\",\r\n large: \"8px\",\r\n} as const;\r\n\r\n// ============ 动画映射 ============\r\nexport const TRANSITION_MAP = {\r\n fade: \"fade-transform\",\r\n slide: \"fade-slide\",\r\n zoom: \"fade-zoom\",\r\n none: \"\",\r\n} as const;\r\n\r\n// ============ 默认配置 ============\r\nexport const DEFAULT_SETTINGS: SettingsState = {\r\n // 外观\r\n themeMode: \"light\",\r\n primaryColor: \"#409eff\",\r\n borderRadius: \"medium\",\r\n transitionType: \"slide\",\r\n enableTransition: true,\r\n\r\n // 布局\r\n layoutMode: \"side\",\r\n menuExpandMode: \"inline\",\r\n collapsed: false,\r\n fixedHeader: true,\r\n showBreadcrumb: true,\r\n showBreadcrumbIcon: true,\r\n showTagsView: true,\r\n tagsViewHeight: 44,\r\n tagsViewStyle: \"default\",\r\n showFooter: true,\r\n sidebarWidth: 220,\r\n sidebarCollapsedWidth: 64,\r\n headerHeight: 56,\r\n\r\n // 高级\r\n enableHotkeys: true,\r\n version: \"3.2.0\",\r\n};\r\n\r\n// ============ 其他常量 ============\r\n\r\n/** Color swatches for color picker */\r\nexport const COLOR_SWATCHES = PRESET_COLORS.map((c) => c.value);\r\n"],"mappings":"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","names":[]}
|
package/dist/core/index.d.cts
CHANGED
|
@@ -31,6 +31,7 @@ interface SettingsState {
|
|
|
31
31
|
sidebarCollapsedWidth: number;
|
|
32
32
|
headerHeight: number;
|
|
33
33
|
enableHotkeys: boolean;
|
|
34
|
+
/** @deprecated 包版本不应参与配置迁移,请使用 SETTINGS_CONFIG_SCHEMA_VERSION。 */
|
|
34
35
|
version: string;
|
|
35
36
|
}
|
|
36
37
|
/** 主题预设方案。 */
|
|
@@ -46,6 +47,8 @@ interface SettingsStoreOptions {
|
|
|
46
47
|
id?: string;
|
|
47
48
|
defaults?: Partial<SettingsState>;
|
|
48
49
|
onThemeModeChange?: (mode: ThemeMode) => void | Promise<void>;
|
|
50
|
+
/** 是否自动同步 CSS 变量;默认 true,微前端可关闭后自行绑定作用域。 */
|
|
51
|
+
syncCssVariables?: boolean;
|
|
49
52
|
}
|
|
50
53
|
/** 由宿主应用实现的高副作用操作。 */
|
|
51
54
|
interface SettingsDrawerActions {
|
|
@@ -80,6 +83,8 @@ interface LayoutSettingsConfig extends LayoutVisualEffects {
|
|
|
80
83
|
schemaVersion?: number;
|
|
81
84
|
settings?: Partial<SettingsState>;
|
|
82
85
|
}
|
|
86
|
+
/** 校验需要跨字段判断的布局尺寸约束。 */
|
|
87
|
+
declare function assertLayoutSettingsRelationships(settings: Pick<SettingsState, "sidebarCollapsedWidth" | "sidebarWidth">): void;
|
|
83
88
|
/**
|
|
84
89
|
* 校验来自配置文件等不可信来源的设置。
|
|
85
90
|
* 未知键为向前兼容而忽略;已知键的非法值会让整次导入失败。
|
|
@@ -118,4 +123,4 @@ declare const DEFAULT_SETTINGS: SettingsState;
|
|
|
118
123
|
/** Color swatches for color picker */
|
|
119
124
|
declare const COLOR_SWATCHES: string[];
|
|
120
125
|
|
|
121
|
-
export { BORDER_RADIUS_MAP, type BorderRadiusSize, COLOR_SWATCHES, DEFAULT_SETTINGS, LAYOUT_MODES, type LayoutInfo, type LayoutMode, type LayoutSettingsConfig, type LayoutVisualEffects, type MenuExpandMode, PRESET_COLORS, type PresetColor, SETTINGS_CONFIG_SCHEMA_VERSION, type SettingsDrawerActions, type SettingsState, type SettingsStoreOptions, THEME_PRESETS, TRANSITION_MAP, type TagsViewStyle, type ThemeMode, type ThemePreset, type TransitionType, adjustColor, sanitizeLayoutSettingsConfig, sanitizeSettingsPatch };
|
|
126
|
+
export { BORDER_RADIUS_MAP, type BorderRadiusSize, COLOR_SWATCHES, DEFAULT_SETTINGS, LAYOUT_MODES, type LayoutInfo, type LayoutMode, type LayoutSettingsConfig, type LayoutVisualEffects, type MenuExpandMode, PRESET_COLORS, type PresetColor, SETTINGS_CONFIG_SCHEMA_VERSION, type SettingsDrawerActions, type SettingsState, type SettingsStoreOptions, THEME_PRESETS, TRANSITION_MAP, type TagsViewStyle, type ThemeMode, type ThemePreset, type TransitionType, adjustColor, assertLayoutSettingsRelationships, sanitizeLayoutSettingsConfig, sanitizeSettingsPatch };
|
package/dist/core/index.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ interface SettingsState {
|
|
|
31
31
|
sidebarCollapsedWidth: number;
|
|
32
32
|
headerHeight: number;
|
|
33
33
|
enableHotkeys: boolean;
|
|
34
|
+
/** @deprecated 包版本不应参与配置迁移,请使用 SETTINGS_CONFIG_SCHEMA_VERSION。 */
|
|
34
35
|
version: string;
|
|
35
36
|
}
|
|
36
37
|
/** 主题预设方案。 */
|
|
@@ -46,6 +47,8 @@ interface SettingsStoreOptions {
|
|
|
46
47
|
id?: string;
|
|
47
48
|
defaults?: Partial<SettingsState>;
|
|
48
49
|
onThemeModeChange?: (mode: ThemeMode) => void | Promise<void>;
|
|
50
|
+
/** 是否自动同步 CSS 变量;默认 true,微前端可关闭后自行绑定作用域。 */
|
|
51
|
+
syncCssVariables?: boolean;
|
|
49
52
|
}
|
|
50
53
|
/** 由宿主应用实现的高副作用操作。 */
|
|
51
54
|
interface SettingsDrawerActions {
|
|
@@ -80,6 +83,8 @@ interface LayoutSettingsConfig extends LayoutVisualEffects {
|
|
|
80
83
|
schemaVersion?: number;
|
|
81
84
|
settings?: Partial<SettingsState>;
|
|
82
85
|
}
|
|
86
|
+
/** 校验需要跨字段判断的布局尺寸约束。 */
|
|
87
|
+
declare function assertLayoutSettingsRelationships(settings: Pick<SettingsState, "sidebarCollapsedWidth" | "sidebarWidth">): void;
|
|
83
88
|
/**
|
|
84
89
|
* 校验来自配置文件等不可信来源的设置。
|
|
85
90
|
* 未知键为向前兼容而忽略;已知键的非法值会让整次导入失败。
|
|
@@ -118,4 +123,4 @@ declare const DEFAULT_SETTINGS: SettingsState;
|
|
|
118
123
|
/** Color swatches for color picker */
|
|
119
124
|
declare const COLOR_SWATCHES: string[];
|
|
120
125
|
|
|
121
|
-
export { BORDER_RADIUS_MAP, type BorderRadiusSize, COLOR_SWATCHES, DEFAULT_SETTINGS, LAYOUT_MODES, type LayoutInfo, type LayoutMode, type LayoutSettingsConfig, type LayoutVisualEffects, type MenuExpandMode, PRESET_COLORS, type PresetColor, SETTINGS_CONFIG_SCHEMA_VERSION, type SettingsDrawerActions, type SettingsState, type SettingsStoreOptions, THEME_PRESETS, TRANSITION_MAP, type TagsViewStyle, type ThemeMode, type ThemePreset, type TransitionType, adjustColor, sanitizeLayoutSettingsConfig, sanitizeSettingsPatch };
|
|
126
|
+
export { BORDER_RADIUS_MAP, type BorderRadiusSize, COLOR_SWATCHES, DEFAULT_SETTINGS, LAYOUT_MODES, type LayoutInfo, type LayoutMode, type LayoutSettingsConfig, type LayoutVisualEffects, type MenuExpandMode, PRESET_COLORS, type PresetColor, SETTINGS_CONFIG_SCHEMA_VERSION, type SettingsDrawerActions, type SettingsState, type SettingsStoreOptions, THEME_PRESETS, TRANSITION_MAP, type TagsViewStyle, type ThemeMode, type ThemePreset, type TransitionType, adjustColor, assertLayoutSettingsRelationships, sanitizeLayoutSettingsConfig, sanitizeSettingsPatch };
|
package/dist/core/index.js
CHANGED
|
@@ -31,6 +31,11 @@ var NUMBER_RANGES = {
|
|
|
31
31
|
headerHeight: [32, 160]
|
|
32
32
|
};
|
|
33
33
|
var SETTINGS_CONFIG_SCHEMA_VERSION = 1;
|
|
34
|
+
function assertLayoutSettingsRelationships(settings) {
|
|
35
|
+
if (settings.sidebarCollapsedWidth > settings.sidebarWidth) {
|
|
36
|
+
throw new RangeError("sidebarCollapsedWidth \u4E0D\u80FD\u5927\u4E8E sidebarWidth");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
34
39
|
function sanitizeSettingsPatch(input) {
|
|
35
40
|
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
36
41
|
throw new TypeError("settings \u5FC5\u987B\u662F\u5BF9\u8C61");
|
|
@@ -254,7 +259,7 @@ var DEFAULT_SETTINGS = {
|
|
|
254
259
|
headerHeight: 56,
|
|
255
260
|
// 高级
|
|
256
261
|
enableHotkeys: true,
|
|
257
|
-
version: "3.
|
|
262
|
+
version: "3.2.0"
|
|
258
263
|
};
|
|
259
264
|
var COLOR_SWATCHES = PRESET_COLORS.map((c) => c.value);
|
|
260
265
|
export {
|
|
@@ -267,6 +272,7 @@ export {
|
|
|
267
272
|
THEME_PRESETS,
|
|
268
273
|
TRANSITION_MAP,
|
|
269
274
|
adjustColor,
|
|
275
|
+
assertLayoutSettingsRelationships,
|
|
270
276
|
sanitizeLayoutSettingsConfig,
|
|
271
277
|
sanitizeSettingsPatch
|
|
272
278
|
};
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/settings.ts","../../src/constants/index.ts"],"sourcesContent":["import type { SettingsState } from \"./types\";\n\nconst ENUM_SETTINGS = {\n themeMode: new Set([\"light\", \"dark\", \"system\"]),\n borderRadius: new Set([\"small\", \"medium\", \"large\"]),\n transitionType: new Set([\"fade\", \"slide\", \"zoom\", \"none\"]),\n layoutMode: new Set([\n \"side\",\n \"top\",\n \"mix\",\n \"mix-top\",\n \"reverse-horizontal-mix\",\n \"card-layout\",\n ]),\n menuExpandMode: new Set([\"inline\", \"panel\"]),\n tagsViewStyle: new Set([\"default\", \"card\", \"smart\"]),\n} as const;\n\nconst BOOLEAN_SETTINGS: ReadonlySet<keyof SettingsState> = new Set([\n \"enableTransition\",\n \"collapsed\",\n \"fixedHeader\",\n \"showBreadcrumb\",\n \"showBreadcrumbIcon\",\n \"showTagsView\",\n \"showFooter\",\n \"enableHotkeys\",\n]);\n\nconst NUMBER_RANGES: Partial<\n Record<keyof SettingsState, readonly [number, number]>\n> = {\n tagsViewHeight: [24, 100],\n sidebarWidth: [120, 480],\n sidebarCollapsedWidth: [32, 160],\n headerHeight: [32, 160],\n};\n\n/** 当前导入导出配置格式版本。 */\nexport const SETTINGS_CONFIG_SCHEMA_VERSION = 1 as const;\n\nexport interface LayoutVisualEffects {\n gray?: boolean;\n colorWeak?: boolean;\n watermark?: {\n enabled: boolean;\n text: string;\n };\n}\n\n/** 经校验后可原子应用的布局配置。 */\nexport interface LayoutSettingsConfig extends LayoutVisualEffects {\n schemaVersion?: number;\n settings?: Partial<SettingsState>;\n}\n\n/**\n * 校验来自配置文件等不可信来源的设置。\n * 未知键为向前兼容而忽略;已知键的非法值会让整次导入失败。\n */\nexport function sanitizeSettingsPatch(input: unknown): Partial<SettingsState> {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n throw new TypeError(\"settings 必须是对象\");\n }\n\n const source = input as Record<string, unknown>;\n const result: Partial<SettingsState> = {};\n const assign = (key: keyof SettingsState, value: unknown) => {\n (result as Record<string, unknown>)[key] = value;\n };\n\n for (const [key, allowed] of Object.entries(ENUM_SETTINGS)) {\n const value = source[key];\n if (value === undefined) continue;\n if (typeof value !== \"string\" || !allowed.has(value as never)) {\n throw new RangeError(`无效的设置项 ${key}: ${String(value)}`);\n }\n assign(key as keyof SettingsState, value);\n }\n\n for (const key of BOOLEAN_SETTINGS) {\n const value = source[key];\n if (value === undefined) continue;\n if (typeof value !== \"boolean\") {\n throw new TypeError(`设置项 ${key} 必须是布尔值`);\n }\n assign(key, value);\n }\n\n for (const [key, range] of Object.entries(NUMBER_RANGES)) {\n const value = source[key];\n if (value === undefined) continue;\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value < range[0] ||\n value > range[1]\n ) {\n throw new RangeError(`设置项 ${key} 超出允许范围`);\n }\n assign(key as keyof SettingsState, value);\n }\n\n if (source.primaryColor !== undefined) {\n if (\n typeof source.primaryColor !== \"string\" ||\n !/^#[0-9a-fA-F]{6}$/.test(source.primaryColor)\n ) {\n throw new RangeError(\"primaryColor 必须是 #rrggbb 格式\");\n }\n result.primaryColor = source.primaryColor;\n }\n\n if (source.version !== undefined) {\n if (typeof source.version !== \"string\" || source.version.length > 50) {\n throw new TypeError(\"version 必须是长度不超过 50 的字符串\");\n }\n result.version = source.version;\n }\n\n return result;\n}\n\n/**\n * 一次性校验完整导入文件。此函数不修改任何响应式状态或浏览器 API,\n * 消费方可以在成功返回后再原子应用结果。\n */\nexport function sanitizeLayoutSettingsConfig(\n input: unknown,\n): LayoutSettingsConfig {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n throw new TypeError(\"配置文件根节点必须是对象\");\n }\n\n const source = input as Record<string, unknown>;\n const result: LayoutSettingsConfig = {};\n\n if (source.schemaVersion !== undefined) {\n if (\n typeof source.schemaVersion !== \"number\" ||\n !Number.isInteger(source.schemaVersion) ||\n source.schemaVersion < 1 ||\n source.schemaVersion > SETTINGS_CONFIG_SCHEMA_VERSION\n ) {\n throw new RangeError(\"不支持的配置格式版本\");\n }\n result.schemaVersion = source.schemaVersion;\n }\n\n if (source.settings !== undefined) {\n result.settings = sanitizeSettingsPatch(source.settings);\n }\n\n for (const key of [\"gray\", \"colorWeak\"] as const) {\n const value = source[key];\n if (value === undefined) continue;\n if (typeof value !== \"boolean\") {\n throw new TypeError(`${key} 必须是布尔值`);\n }\n result[key] = value;\n }\n\n if (source.watermark !== undefined) {\n if (\n !source.watermark ||\n typeof source.watermark !== \"object\" ||\n Array.isArray(source.watermark)\n ) {\n throw new TypeError(\"watermark 必须是对象\");\n }\n const watermark = source.watermark as Record<string, unknown>;\n if (\n typeof watermark.enabled !== \"boolean\" ||\n typeof watermark.text !== \"string\" ||\n watermark.text.length > 200\n ) {\n throw new TypeError(\"watermark 配置无效\");\n }\n result.watermark = {\n enabled: watermark.enabled,\n text: watermark.text,\n };\n }\n\n return result;\n}\n\n/**\n * 调整颜色亮度。\n * @returns 调整后的 #rrggbb;输入非法时原样返回。\n */\nexport function adjustColor(color: string, amount: number): string {\n if (typeof color !== \"string\") return \"#000000\";\n if (!Number.isFinite(amount)) return color;\n const normalizedAmount = Math.round(amount);\n const trimmedColor = color.trim();\n let hex = trimmedColor.startsWith(\"#\") ? trimmedColor.slice(1) : trimmedColor;\n if (hex.length === 3) {\n hex = hex\n .split(\"\")\n .map((character) => character + character)\n .join(\"\");\n }\n if (!/^[0-9a-fA-F]{6}$/.test(hex)) return color;\n\n const value = parseInt(hex, 16);\n const red = Math.min(255, Math.max(0, (value >> 16) + normalizedAmount));\n const green = Math.min(\n 255,\n Math.max(0, ((value >> 8) & 0x00ff) + normalizedAmount),\n );\n const blue = Math.min(\n 255,\n Math.max(0, (value & 0x0000ff) + normalizedAmount),\n );\n return `#${((red << 16) | (green << 8) | blue).toString(16).padStart(6, \"0\")}`;\n}\n","/**\n * 布局和设置系统 - 常量定义\n */\n\nimport type {\n ThemePreset,\n SettingsState,\n LayoutInfo,\n PresetColor,\n} from \"../core/types\";\n\n// ============ 主题色预设 ============\nexport const PRESET_COLORS: PresetColor[] = [\n { name: \"拂晓蓝\", value: \"#409eff\" },\n { name: \"薄暮红\", value: \"#f5222d\" },\n { name: \"火山橙\", value: \"#fa541c\" },\n { name: \"日暮黄\", value: \"#faad14\" },\n { name: \"极光绿\", value: \"#52c41a\" },\n { name: \"明青\", value: \"#13c2c2\" },\n { name: \"极客蓝\", value: \"#2f54eb\" },\n { name: \"酱紫\", value: \"#722ed1\" },\n] as const;\n\n// ============ 主题预设方案 ============\nexport const THEME_PRESETS: ThemePreset[] = [\n {\n name: \"科技蓝\",\n icon: \"💙\",\n primaryColor: \"#409eff\",\n },\n {\n name: \"清新绿\",\n icon: \"💚\",\n primaryColor: \"#52c41a\",\n },\n {\n name: \"商务灰\",\n icon: \"🖤\",\n primaryColor: \"#595959\",\n },\n {\n name: \"活力橙\",\n icon: \"🧡\",\n primaryColor: \"#fa8c16\",\n },\n {\n name: \"优雅紫\",\n icon: \"💜\",\n primaryColor: \"#722ed1\",\n },\n {\n name: \"经典红\",\n icon: \"❤️\",\n primaryColor: \"#f5222d\",\n },\n];\n\n// ============ 布局模式信息 ============\nexport const LAYOUT_MODES: LayoutInfo[] = [\n {\n mode: \"side\",\n label: \"左侧菜单\",\n description: \"经典的左侧导航布局\",\n icon: \"i-mdi:page-layout-sidebar-left\",\n },\n {\n mode: \"top\",\n label: \"顶部菜单\",\n description: \"顶部水平导航布局\",\n icon: \"i-mdi:page-layout-header\",\n },\n {\n mode: \"mix\",\n label: \"混合菜单\",\n description: \"顶部 + 侧边混合布局\",\n icon: \"i-mdi:view-dashboard-outline\",\n },\n {\n mode: \"mix-top\",\n label: \"顶部混合\",\n description: \"侧边优先的混合布局\",\n icon: \"i-mdi:view-dashboard-variant-outline\",\n },\n {\n mode: \"reverse-horizontal-mix\",\n label: \"反转混合\",\n description: \"反转的水平混合布局\",\n icon: \"i-mdi:page-layout-header-footer\",\n },\n {\n mode: \"card-layout\",\n label: \"卡片布局\",\n description: \"卡片式布局风格\",\n icon: \"i-mdi:card-outline\",\n },\n];\n\n// ============ 圆角映射 ============\nexport const BORDER_RADIUS_MAP = {\n small: \"4px\",\n medium: \"6px\",\n large: \"8px\",\n} as const;\n\n// ============ 动画映射 ============\nexport const TRANSITION_MAP = {\n fade: \"fade-transform\",\n slide: \"fade-slide\",\n zoom: \"fade-zoom\",\n none: \"\",\n} as const;\n\n// ============ 默认配置 ============\nexport const DEFAULT_SETTINGS: SettingsState = {\n // 外观\n themeMode: \"light\",\n primaryColor: \"#409eff\",\n borderRadius: \"medium\",\n transitionType: \"slide\",\n enableTransition: true,\n\n // 布局\n layoutMode: \"side\",\n menuExpandMode: \"inline\",\n collapsed: false,\n fixedHeader: true,\n showBreadcrumb: true,\n showBreadcrumbIcon: true,\n showTagsView: true,\n tagsViewHeight: 44,\n tagsViewStyle: \"default\",\n showFooter: true,\n sidebarWidth: 220,\n sidebarCollapsedWidth: 64,\n headerHeight: 56,\n\n // 高级\n enableHotkeys: true,\n version: \"3.1.0\",\n};\n\n// ============ 其他常量 ============\n\n/** Color swatches for color picker */\nexport const COLOR_SWATCHES = PRESET_COLORS.map((c) => c.value);\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/settings.ts","../../src/constants/index.ts"],"sourcesContent":["import type { SettingsState } from \"./types\";\r\n\r\nconst ENUM_SETTINGS = {\r\n themeMode: new Set([\"light\", \"dark\", \"system\"]),\r\n borderRadius: new Set([\"small\", \"medium\", \"large\"]),\r\n transitionType: new Set([\"fade\", \"slide\", \"zoom\", \"none\"]),\r\n layoutMode: new Set([\r\n \"side\",\r\n \"top\",\r\n \"mix\",\r\n \"mix-top\",\r\n \"reverse-horizontal-mix\",\r\n \"card-layout\",\r\n ]),\r\n menuExpandMode: new Set([\"inline\", \"panel\"]),\r\n tagsViewStyle: new Set([\"default\", \"card\", \"smart\"]),\r\n} as const;\r\n\r\nconst BOOLEAN_SETTINGS: ReadonlySet<keyof SettingsState> = new Set([\r\n \"enableTransition\",\r\n \"collapsed\",\r\n \"fixedHeader\",\r\n \"showBreadcrumb\",\r\n \"showBreadcrumbIcon\",\r\n \"showTagsView\",\r\n \"showFooter\",\r\n \"enableHotkeys\",\r\n]);\r\n\r\nconst NUMBER_RANGES: Partial<\r\n Record<keyof SettingsState, readonly [number, number]>\r\n> = {\r\n tagsViewHeight: [24, 100],\r\n sidebarWidth: [120, 480],\r\n sidebarCollapsedWidth: [32, 160],\r\n headerHeight: [32, 160],\r\n};\r\n\r\n/** 当前导入导出配置格式版本。 */\r\nexport const SETTINGS_CONFIG_SCHEMA_VERSION = 1 as const;\r\n\r\nexport interface LayoutVisualEffects {\r\n gray?: boolean;\r\n colorWeak?: boolean;\r\n watermark?: {\r\n enabled: boolean;\r\n text: string;\r\n };\r\n}\r\n\r\n/** 经校验后可原子应用的布局配置。 */\r\nexport interface LayoutSettingsConfig extends LayoutVisualEffects {\r\n schemaVersion?: number;\r\n settings?: Partial<SettingsState>;\r\n}\r\n\r\n/** 校验需要跨字段判断的布局尺寸约束。 */\r\nexport function assertLayoutSettingsRelationships(\r\n settings: Pick<SettingsState, \"sidebarCollapsedWidth\" | \"sidebarWidth\">,\r\n): void {\r\n if (settings.sidebarCollapsedWidth > settings.sidebarWidth) {\r\n throw new RangeError(\"sidebarCollapsedWidth 不能大于 sidebarWidth\");\r\n }\r\n}\r\n\r\n/**\r\n * 校验来自配置文件等不可信来源的设置。\r\n * 未知键为向前兼容而忽略;已知键的非法值会让整次导入失败。\r\n */\r\nexport function sanitizeSettingsPatch(input: unknown): Partial<SettingsState> {\r\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\r\n throw new TypeError(\"settings 必须是对象\");\r\n }\r\n\r\n const source = input as Record<string, unknown>;\r\n const result: Partial<SettingsState> = {};\r\n const assign = (key: keyof SettingsState, value: unknown) => {\r\n (result as Record<string, unknown>)[key] = value;\r\n };\r\n\r\n for (const [key, allowed] of Object.entries(ENUM_SETTINGS)) {\r\n const value = source[key];\r\n if (value === undefined) continue;\r\n if (typeof value !== \"string\" || !allowed.has(value as never)) {\r\n throw new RangeError(`无效的设置项 ${key}: ${String(value)}`);\r\n }\r\n assign(key as keyof SettingsState, value);\r\n }\r\n\r\n for (const key of BOOLEAN_SETTINGS) {\r\n const value = source[key];\r\n if (value === undefined) continue;\r\n if (typeof value !== \"boolean\") {\r\n throw new TypeError(`设置项 ${key} 必须是布尔值`);\r\n }\r\n assign(key, value);\r\n }\r\n\r\n for (const [key, range] of Object.entries(NUMBER_RANGES)) {\r\n const value = source[key];\r\n if (value === undefined) continue;\r\n if (\r\n typeof value !== \"number\" ||\r\n !Number.isFinite(value) ||\r\n value < range[0] ||\r\n value > range[1]\r\n ) {\r\n throw new RangeError(`设置项 ${key} 超出允许范围`);\r\n }\r\n assign(key as keyof SettingsState, value);\r\n }\r\n\r\n if (source.primaryColor !== undefined) {\r\n if (\r\n typeof source.primaryColor !== \"string\" ||\r\n !/^#[0-9a-fA-F]{6}$/.test(source.primaryColor)\r\n ) {\r\n throw new RangeError(\"primaryColor 必须是 #rrggbb 格式\");\r\n }\r\n result.primaryColor = source.primaryColor;\r\n }\r\n\r\n if (source.version !== undefined) {\r\n if (typeof source.version !== \"string\" || source.version.length > 50) {\r\n throw new TypeError(\"version 必须是长度不超过 50 的字符串\");\r\n }\r\n result.version = source.version;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * 一次性校验完整导入文件。此函数不修改任何响应式状态或浏览器 API,\r\n * 消费方可以在成功返回后再原子应用结果。\r\n */\r\nexport function sanitizeLayoutSettingsConfig(\r\n input: unknown,\r\n): LayoutSettingsConfig {\r\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\r\n throw new TypeError(\"配置文件根节点必须是对象\");\r\n }\r\n\r\n const source = input as Record<string, unknown>;\r\n const result: LayoutSettingsConfig = {};\r\n\r\n if (source.schemaVersion !== undefined) {\r\n if (\r\n typeof source.schemaVersion !== \"number\" ||\r\n !Number.isInteger(source.schemaVersion) ||\r\n source.schemaVersion < 1 ||\r\n source.schemaVersion > SETTINGS_CONFIG_SCHEMA_VERSION\r\n ) {\r\n throw new RangeError(\"不支持的配置格式版本\");\r\n }\r\n result.schemaVersion = source.schemaVersion;\r\n }\r\n\r\n if (source.settings !== undefined) {\r\n result.settings = sanitizeSettingsPatch(source.settings);\r\n }\r\n\r\n for (const key of [\"gray\", \"colorWeak\"] as const) {\r\n const value = source[key];\r\n if (value === undefined) continue;\r\n if (typeof value !== \"boolean\") {\r\n throw new TypeError(`${key} 必须是布尔值`);\r\n }\r\n result[key] = value;\r\n }\r\n\r\n if (source.watermark !== undefined) {\r\n if (\r\n !source.watermark ||\r\n typeof source.watermark !== \"object\" ||\r\n Array.isArray(source.watermark)\r\n ) {\r\n throw new TypeError(\"watermark 必须是对象\");\r\n }\r\n const watermark = source.watermark as Record<string, unknown>;\r\n if (\r\n typeof watermark.enabled !== \"boolean\" ||\r\n typeof watermark.text !== \"string\" ||\r\n watermark.text.length > 200\r\n ) {\r\n throw new TypeError(\"watermark 配置无效\");\r\n }\r\n result.watermark = {\r\n enabled: watermark.enabled,\r\n text: watermark.text,\r\n };\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * 调整颜色亮度。\r\n * @returns 调整后的 #rrggbb;输入非法时原样返回。\r\n */\r\nexport function adjustColor(color: string, amount: number): string {\r\n if (typeof color !== \"string\") return \"#000000\";\r\n if (!Number.isFinite(amount)) return color;\r\n const normalizedAmount = Math.round(amount);\r\n const trimmedColor = color.trim();\r\n let hex = trimmedColor.startsWith(\"#\") ? trimmedColor.slice(1) : trimmedColor;\r\n if (hex.length === 3) {\r\n hex = hex\r\n .split(\"\")\r\n .map((character) => character + character)\r\n .join(\"\");\r\n }\r\n if (!/^[0-9a-fA-F]{6}$/.test(hex)) return color;\r\n\r\n const value = parseInt(hex, 16);\r\n const red = Math.min(255, Math.max(0, (value >> 16) + normalizedAmount));\r\n const green = Math.min(\r\n 255,\r\n Math.max(0, ((value >> 8) & 0x00ff) + normalizedAmount),\r\n );\r\n const blue = Math.min(\r\n 255,\r\n Math.max(0, (value & 0x0000ff) + normalizedAmount),\r\n );\r\n return `#${((red << 16) | (green << 8) | blue).toString(16).padStart(6, \"0\")}`;\r\n}\r\n","/**\r\n * 布局和设置系统 - 常量定义\r\n */\r\n\r\nimport type {\r\n ThemePreset,\r\n SettingsState,\r\n LayoutInfo,\r\n PresetColor,\r\n} from \"../core/types\";\r\n\r\n// ============ 主题色预设 ============\r\nexport const PRESET_COLORS: PresetColor[] = [\r\n { name: \"拂晓蓝\", value: \"#409eff\" },\r\n { name: \"薄暮红\", value: \"#f5222d\" },\r\n { name: \"火山橙\", value: \"#fa541c\" },\r\n { name: \"日暮黄\", value: \"#faad14\" },\r\n { name: \"极光绿\", value: \"#52c41a\" },\r\n { name: \"明青\", value: \"#13c2c2\" },\r\n { name: \"极客蓝\", value: \"#2f54eb\" },\r\n { name: \"酱紫\", value: \"#722ed1\" },\r\n] as const;\r\n\r\n// ============ 主题预设方案 ============\r\nexport const THEME_PRESETS: ThemePreset[] = [\r\n {\r\n name: \"科技蓝\",\r\n icon: \"💙\",\r\n primaryColor: \"#409eff\",\r\n },\r\n {\r\n name: \"清新绿\",\r\n icon: \"💚\",\r\n primaryColor: \"#52c41a\",\r\n },\r\n {\r\n name: \"商务灰\",\r\n icon: \"🖤\",\r\n primaryColor: \"#595959\",\r\n },\r\n {\r\n name: \"活力橙\",\r\n icon: \"🧡\",\r\n primaryColor: \"#fa8c16\",\r\n },\r\n {\r\n name: \"优雅紫\",\r\n icon: \"💜\",\r\n primaryColor: \"#722ed1\",\r\n },\r\n {\r\n name: \"经典红\",\r\n icon: \"❤️\",\r\n primaryColor: \"#f5222d\",\r\n },\r\n];\r\n\r\n// ============ 布局模式信息 ============\r\nexport const LAYOUT_MODES: LayoutInfo[] = [\r\n {\r\n mode: \"side\",\r\n label: \"左侧菜单\",\r\n description: \"经典的左侧导航布局\",\r\n icon: \"i-mdi:page-layout-sidebar-left\",\r\n },\r\n {\r\n mode: \"top\",\r\n label: \"顶部菜单\",\r\n description: \"顶部水平导航布局\",\r\n icon: \"i-mdi:page-layout-header\",\r\n },\r\n {\r\n mode: \"mix\",\r\n label: \"混合菜单\",\r\n description: \"顶部 + 侧边混合布局\",\r\n icon: \"i-mdi:view-dashboard-outline\",\r\n },\r\n {\r\n mode: \"mix-top\",\r\n label: \"顶部混合\",\r\n description: \"侧边优先的混合布局\",\r\n icon: \"i-mdi:view-dashboard-variant-outline\",\r\n },\r\n {\r\n mode: \"reverse-horizontal-mix\",\r\n label: \"反转混合\",\r\n description: \"反转的水平混合布局\",\r\n icon: \"i-mdi:page-layout-header-footer\",\r\n },\r\n {\r\n mode: \"card-layout\",\r\n label: \"卡片布局\",\r\n description: \"卡片式布局风格\",\r\n icon: \"i-mdi:card-outline\",\r\n },\r\n];\r\n\r\n// ============ 圆角映射 ============\r\nexport const BORDER_RADIUS_MAP = {\r\n small: \"4px\",\r\n medium: \"6px\",\r\n large: \"8px\",\r\n} as const;\r\n\r\n// ============ 动画映射 ============\r\nexport const TRANSITION_MAP = {\r\n fade: \"fade-transform\",\r\n slide: \"fade-slide\",\r\n zoom: \"fade-zoom\",\r\n none: \"\",\r\n} as const;\r\n\r\n// ============ 默认配置 ============\r\nexport const DEFAULT_SETTINGS: SettingsState = {\r\n // 外观\r\n themeMode: \"light\",\r\n primaryColor: \"#409eff\",\r\n borderRadius: \"medium\",\r\n transitionType: \"slide\",\r\n enableTransition: true,\r\n\r\n // 布局\r\n layoutMode: \"side\",\r\n menuExpandMode: \"inline\",\r\n collapsed: false,\r\n fixedHeader: true,\r\n showBreadcrumb: true,\r\n showBreadcrumbIcon: true,\r\n showTagsView: true,\r\n tagsViewHeight: 44,\r\n tagsViewStyle: \"default\",\r\n showFooter: true,\r\n sidebarWidth: 220,\r\n sidebarCollapsedWidth: 64,\r\n headerHeight: 56,\r\n\r\n // 高级\r\n enableHotkeys: true,\r\n version: \"3.2.0\",\r\n};\r\n\r\n// ============ 其他常量 ============\r\n\r\n/** Color swatches for color picker */\r\nexport const COLOR_SWATCHES = PRESET_COLORS.map((c) => c.value);\r\n"],"mappings":";AAEA,IAAM,gBAAgB;AAAA,EACpB,WAAW,oBAAI,IAAI,CAAC,SAAS,QAAQ,QAAQ,CAAC;AAAA,EAC9C,cAAc,oBAAI,IAAI,CAAC,SAAS,UAAU,OAAO,CAAC;AAAA,EAClD,gBAAgB,oBAAI,IAAI,CAAC,QAAQ,SAAS,QAAQ,MAAM,CAAC;AAAA,EACzD,YAAY,oBAAI,IAAI;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,gBAAgB,oBAAI,IAAI,CAAC,UAAU,OAAO,CAAC;AAAA,EAC3C,eAAe,oBAAI,IAAI,CAAC,WAAW,QAAQ,OAAO,CAAC;AACrD;AAEA,IAAM,mBAAqD,oBAAI,IAAI;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,gBAEF;AAAA,EACF,gBAAgB,CAAC,IAAI,GAAG;AAAA,EACxB,cAAc,CAAC,KAAK,GAAG;AAAA,EACvB,uBAAuB,CAAC,IAAI,GAAG;AAAA,EAC/B,cAAc,CAAC,IAAI,GAAG;AACxB;AAGO,IAAM,iCAAiC;AAkBvC,SAAS,kCACd,UACM;AACN,MAAI,SAAS,wBAAwB,SAAS,cAAc;AAC1D,UAAM,IAAI,WAAW,6DAAyC;AAAA,EAChE;AACF;AAMO,SAAS,sBAAsB,OAAwC;AAC5E,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,IAAI,UAAU,yCAAgB;AAAA,EACtC;AAEA,QAAM,SAAS;AACf,QAAM,SAAiC,CAAC;AACxC,QAAM,SAAS,CAAC,KAA0B,UAAmB;AAC3D,IAAC,OAAmC,GAAG,IAAI;AAAA,EAC7C;AAEA,aAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC1D,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,UAAU,OAAW;AACzB,QAAI,OAAO,UAAU,YAAY,CAAC,QAAQ,IAAI,KAAc,GAAG;AAC7D,YAAM,IAAI,WAAW,wCAAU,GAAG,KAAK,OAAO,KAAK,CAAC,EAAE;AAAA,IACxD;AACA,WAAO,KAA4B,KAAK;AAAA,EAC1C;AAEA,aAAW,OAAO,kBAAkB;AAClC,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,UAAU,OAAW;AACzB,QAAI,OAAO,UAAU,WAAW;AAC9B,YAAM,IAAI,UAAU,sBAAO,GAAG,uCAAS;AAAA,IACzC;AACA,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,aAAa,GAAG;AACxD,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,UAAU,OAAW;AACzB,QACE,OAAO,UAAU,YACjB,CAAC,OAAO,SAAS,KAAK,KACtB,QAAQ,MAAM,CAAC,KACf,QAAQ,MAAM,CAAC,GACf;AACA,YAAM,IAAI,WAAW,sBAAO,GAAG,uCAAS;AAAA,IAC1C;AACA,WAAO,KAA4B,KAAK;AAAA,EAC1C;AAEA,MAAI,OAAO,iBAAiB,QAAW;AACrC,QACE,OAAO,OAAO,iBAAiB,YAC/B,CAAC,oBAAoB,KAAK,OAAO,YAAY,GAC7C;AACA,YAAM,IAAI,WAAW,sDAA6B;AAAA,IACpD;AACA,WAAO,eAAe,OAAO;AAAA,EAC/B;AAEA,MAAI,OAAO,YAAY,QAAW;AAChC,QAAI,OAAO,OAAO,YAAY,YAAY,OAAO,QAAQ,SAAS,IAAI;AACpE,YAAM,IAAI,UAAU,sFAA0B;AAAA,IAChD;AACA,WAAO,UAAU,OAAO;AAAA,EAC1B;AAEA,SAAO;AACT;AAMO,SAAS,6BACd,OACsB;AACtB,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,IAAI,UAAU,0EAAc;AAAA,EACpC;AAEA,QAAM,SAAS;AACf,QAAM,SAA+B,CAAC;AAEtC,MAAI,OAAO,kBAAkB,QAAW;AACtC,QACE,OAAO,OAAO,kBAAkB,YAChC,CAAC,OAAO,UAAU,OAAO,aAAa,KACtC,OAAO,gBAAgB,KACvB,OAAO,gBAAgB,gCACvB;AACA,YAAM,IAAI,WAAW,8DAAY;AAAA,IACnC;AACA,WAAO,gBAAgB,OAAO;AAAA,EAChC;AAEA,MAAI,OAAO,aAAa,QAAW;AACjC,WAAO,WAAW,sBAAsB,OAAO,QAAQ;AAAA,EACzD;AAEA,aAAW,OAAO,CAAC,QAAQ,WAAW,GAAY;AAChD,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,UAAU,OAAW;AACzB,QAAI,OAAO,UAAU,WAAW;AAC9B,YAAM,IAAI,UAAU,GAAG,GAAG,uCAAS;AAAA,IACrC;AACA,WAAO,GAAG,IAAI;AAAA,EAChB;AAEA,MAAI,OAAO,cAAc,QAAW;AAClC,QACE,CAAC,OAAO,aACR,OAAO,OAAO,cAAc,YAC5B,MAAM,QAAQ,OAAO,SAAS,GAC9B;AACA,YAAM,IAAI,UAAU,0CAAiB;AAAA,IACvC;AACA,UAAM,YAAY,OAAO;AACzB,QACE,OAAO,UAAU,YAAY,aAC7B,OAAO,UAAU,SAAS,YAC1B,UAAU,KAAK,SAAS,KACxB;AACA,YAAM,IAAI,UAAU,oCAAgB;AAAA,IACtC;AACA,WAAO,YAAY;AAAA,MACjB,SAAS,UAAU;AAAA,MACnB,MAAM,UAAU;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,YAAY,OAAe,QAAwB;AACjE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,CAAC,OAAO,SAAS,MAAM,EAAG,QAAO;AACrC,QAAM,mBAAmB,KAAK,MAAM,MAAM;AAC1C,QAAM,eAAe,MAAM,KAAK;AAChC,MAAI,MAAM,aAAa,WAAW,GAAG,IAAI,aAAa,MAAM,CAAC,IAAI;AACjE,MAAI,IAAI,WAAW,GAAG;AACpB,UAAM,IACH,MAAM,EAAE,EACR,IAAI,CAAC,cAAc,YAAY,SAAS,EACxC,KAAK,EAAE;AAAA,EACZ;AACA,MAAI,CAAC,mBAAmB,KAAK,GAAG,EAAG,QAAO;AAE1C,QAAM,QAAQ,SAAS,KAAK,EAAE;AAC9B,QAAM,MAAM,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,MAAM,gBAAgB,CAAC;AACvE,QAAM,QAAQ,KAAK;AAAA,IACjB;AAAA,IACA,KAAK,IAAI,IAAK,SAAS,IAAK,OAAU,gBAAgB;AAAA,EACxD;AACA,QAAM,OAAO,KAAK;AAAA,IAChB;AAAA,IACA,KAAK,IAAI,IAAI,QAAQ,OAAY,gBAAgB;AAAA,EACnD;AACA,SAAO,KAAM,OAAO,KAAO,SAAS,IAAK,MAAM,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAC9E;;;ACrNO,IAAM,gBAA+B;AAAA,EAC1C,EAAE,MAAM,sBAAO,OAAO,UAAU;AAAA,EAChC,EAAE,MAAM,sBAAO,OAAO,UAAU;AAAA,EAChC,EAAE,MAAM,sBAAO,OAAO,UAAU;AAAA,EAChC,EAAE,MAAM,sBAAO,OAAO,UAAU;AAAA,EAChC,EAAE,MAAM,sBAAO,OAAO,UAAU;AAAA,EAChC,EAAE,MAAM,gBAAM,OAAO,UAAU;AAAA,EAC/B,EAAE,MAAM,sBAAO,OAAO,UAAU;AAAA,EAChC,EAAE,MAAM,gBAAM,OAAO,UAAU;AACjC;AAGO,IAAM,gBAA+B;AAAA,EAC1C;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AACF;AAGO,IAAM,eAA6B;AAAA,EACxC;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AACF;AAGO,IAAM,oBAAoB;AAAA,EAC/B,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAGO,IAAM,iBAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AACR;AAGO,IAAM,mBAAkC;AAAA;AAAA,EAE7C,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,kBAAkB;AAAA;AAAA,EAGlB,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,cAAc;AAAA;AAAA,EAGd,eAAe;AAAA,EACf,SAAS;AACX;AAKO,IAAM,iBAAiB,cAAc,IAAI,CAAC,MAAM,EAAE,KAAK;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,39 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`vue`),t=require(`naive-ui`),n=require(`vue-router`),r=require(`pinia`);var i=Symbol(`layout-context`),a=Symbol(`layout-settings`),o=Symbol(`menu-collapse`),s=Symbol(`drawer-handlers`);function c(){let t=(0,e.inject)(i);if(!t)throw Error(`[Layout] LayoutContext not provided. 请在上层组件中使用 provide(LAYOUT_CONTEXT_KEY, ...) 注入布局数据。`);return t}function l(t){return(0,e.provide)(i,t),t}var u={name:`Admin`,subtitle:``,logoSrc:``,logoType:`image`,logoSize:36,homePath:`/home`,copyright:``};function d(e){return typeof e.name==`string`&&e.meta.keepAlive===!0}function f(t={}){let{maxCacheCount:r=20,enableDevLog:i=!1,exposeToWindow:a=!1}=t,o=(0,n.useRoute)(),s=Number.isFinite(r)&&r>0?Math.floor(r):20,c=(0,e.ref)([]),l=(0,e.ref)(s),u=e=>{e&&!c.value.includes(e)&&(c.value.push(e),c.value.length>l.value&&c.value.shift(),i&&console.debug(`[KeepAlive] ✅ 缓存: ${e} (${c.value.length}/${l.value})`))},f=e=>{let t=c.value.indexOf(e);t>-1&&(c.value.splice(t,1),i&&console.debug(`[KeepAlive] ❌ 移除: ${e}`))},p=()=>{c.value=[],i&&console.debug(`[KeepAlive] 🗑️ 清空所有缓存`)},m=()=>c.value;if(a&&typeof window<`u`){let t=window;t.__clearCache__=p,t.__removeCache__=f,t.__getCachedViews__=m,(0,e.onUnmounted)(()=>{t.__clearCache__===p&&delete t.__clearCache__,t.__removeCache__===f&&delete t.__removeCache__,t.__getCachedViews__===m&&delete t.__getCachedViews__})}return(0,e.watch)(()=>[o.name,o.meta.keepAlive],()=>{d(o)&&u(o.name)},{immediate:!0}),{cachedViews:c,maxCacheCount:l,addCache:u,removeCache:f,clearAllCache:p}}var p=(0,e.defineComponent)({name:`SideLayout`,__name:`index`,props:{collapsed:{type:Boolean,default:!1}},emits:[`update:collapsed`],setup(n,{expose:r,emit:i}){let a=n,o=i,s=c(),{cachedViews:l,maxCacheCount:u}=f(),d=(0,e.ref)(a.collapsed);(0,e.watch)(()=>a.collapsed,e=>{d.value=e});let p=(0,e.computed)(()=>d.value),m=e=>{d.value=e,o(`update:collapsed`,e)};return r({collapsed:p,toggleCollapse:()=>{let e=!d.value;d.value=e,o(`update:collapsed`,e)}}),(n,r)=>{let i=(0,e.resolveComponent)(`RouterView`);return(0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(t.NLayout),{"has-sider":``},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NLayoutSider),{bordered:``,"collapse-mode":`width`,"collapsed-width":(0,e.unref)(s).sidebarCollapsedWidth.value,width:(0,e.unref)(s).sidebarWidth.value,"native-scrollbar":!1,collapsed:p.value,"onUpdate:collapsed":m,class:(0,e.normalizeClass)([`layout-sider`,`no-horizontal-scroll`,(0,e.unref)(s).isDark.value?`dark-theme`:`light-theme`])},{default:(0,e.withCtx)(()=>[(0,e.renderSlot)(n.$slots,`logo`),(0,e.renderSlot)(n.$slots,`menu`,{collapsed:p.value})]),_:3},8,[`collapsed-width`,`width`,`collapsed`,`class`]),(0,e.createVNode)((0,e.unref)(t.NLayout),null,{default:(0,e.withCtx)(()=>[(0,e.renderSlot)(n.$slots,`header`),(0,e.createVNode)((0,e.unref)(t.NLayoutContent),{class:`content-with-header p16px app-content`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(i,null,{default:(0,e.withCtx)(({Component:t,route:n})=>[(0,e.createVNode)(e.Transition,{name:(0,e.unref)(s).transitionName.value,mode:`out-in`},{default:(0,e.withCtx)(()=>[((0,e.openBlock)(),(0,e.createBlock)(e.KeepAlive,{include:(0,e.unref)(l),max:(0,e.unref)(u)},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t),{key:n.path}))],1032,[`include`,`max`]))]),_:2},1032,[`name`])]),_:1})]),_:1}),(0,e.renderSlot)(n.$slots,`footer`)]),_:3})]),_:3})}}}),m={class:`responsive-menu__visible`},h={class:`responsive-menu__more`},g=(0,e.defineComponent)({name:`ResponsiveMenu`,__name:`index`,props:{data:{}},setup(r){let i=r,a=(0,n.useRoute)(),o=(0,n.useRouter)(),s=c(),l=(0,e.computed)(()=>i.data||[]),u=(0,e.computed)(()=>a.path),d=s.isDark,f={itemTextColor:`rgba(51, 65, 85, 0.85)`,itemTextColorHover:`rgba(30, 64, 175, 0.95)`,itemTextColorActive:`rgba(30, 64, 175, 1)`,itemTextColorActiveHover:`rgba(30, 64, 175, 1)`,itemTextColorChildActive:`rgba(30, 64, 175, 1)`,itemIconColor:`rgba(51, 65, 85, 0.7)`,itemIconColorHover:`rgba(30, 64, 175, 0.85)`,itemIconColorActive:`rgba(30, 64, 175, 1)`,itemIconColorActiveHover:`rgba(30, 64, 175, 1)`,itemIconColorChildActive:`rgba(30, 64, 175, 1)`,itemColorHover:`rgba(30, 64, 175, 0.06)`,itemColorActive:`rgba(30, 64, 175, 0.1)`,itemColorActiveHover:`rgba(30, 64, 175, 0.12)`,itemColorActiveCollapsed:`rgba(30, 64, 175, 0.1)`,arrowColor:`rgba(51, 65, 85, 0.6)`,arrowColorHover:`rgba(30, 64, 175, 0.8)`,arrowColorActive:`rgba(30, 64, 175, 1)`,arrowColorChildActive:`rgba(30, 64, 175, 1)`,itemHeight:`42px`,itemPadding:`0 18px`,itemBorderRadius:`10px`,groupTextColor:`rgba(51, 65, 85, 0.65)`},p={itemTextColor:`rgba(226, 232, 240, 0.85)`,itemTextColorHover:`rgba(255, 255, 255, 0.95)`,itemTextColorActive:`rgba(147, 197, 253, 1)`,itemTextColorActiveHover:`rgba(147, 197, 253, 1)`,itemTextColorChildActive:`rgba(147, 197, 253, 1)`,itemIconColor:`rgba(226, 232, 240, 0.7)`,itemIconColorHover:`rgba(255, 255, 255, 0.85)`,itemIconColorActive:`rgba(147, 197, 253, 1)`,itemIconColorActiveHover:`rgba(147, 197, 253, 1)`,itemIconColorChildActive:`rgba(147, 197, 253, 1)`,itemColorHover:`rgba(59, 130, 246, 0.1)`,itemColorActive:`rgba(59, 130, 246, 0.15)`,itemColorActiveHover:`rgba(59, 130, 246, 0.18)`,itemColorActiveCollapsed:`rgba(59, 130, 246, 0.15)`,arrowColor:`rgba(226, 232, 240, 0.5)`,arrowColorHover:`rgba(255, 255, 255, 0.7)`,arrowColorActive:`rgba(147, 197, 253, 1)`,arrowColorChildActive:`rgba(147, 197, 253, 1)`,itemHeight:`42px`,itemPadding:`0 18px`,itemBorderRadius:`10px`,groupTextColor:`rgba(226, 232, 240, 0.6)`},g=(0,e.computed)(()=>d.value?p:f),_=(t,n=18)=>s.iconComponent?()=>(0,e.h)(s.iconComponent,{name:t,size:n}):()=>(0,e.h)(`i`,{class:t,style:{fontSize:`${n}px`,display:`inline-flex`,alignItems:`center`}}),v=e=>({key:e.path||``,label:e.meta?.title||e.name||``,icon:e.meta?.icon?_(e.meta.icon,18):void 0,children:e.children?.length?e.children.map(v):void 0}),y=(0,e.ref)(),b=(0,e.ref)([]),x=(0,e.ref)([]),S=(0,e.computed)(()=>b.value.map(v)),C=(0,e.computed)(()=>x.value.map(e=>({key:e.path||``,label:e.meta?.title||e.name||``,icon:e.meta?.icon?_(e.meta.icon,16):void 0,children:e.children?.length?e.children.map(e=>({key:e.path||``,label:e.meta?.title||e.name||``,icon:e.meta?.icon?_(e.meta.icon,16):void 0})):void 0}))),w=e=>{e&&o.push(e)},T=e=>{let t=e.meta?.title||e.name||``,n=0;for(let e of t){let t=e.charCodeAt(0);t>=19968&&t<=40959||t>=13312&&t<=19903||t>=12288&&t<=12351||t>=65280&&t<=65519||t>=12352&&t<=12447||t>=12448&&t<=12543?n+=15:n+=8}let r=e.meta?.icon?26:0;return n+r+36+8+8},E=e=>{if(!l.value.length)return 0;let t=0;for(let e of l.value)t+=T(e);if(t+15<=e)return l.value.length;let n=0,r=0,i=e-80-15;for(let e of l.value){let t=T(e);if(n+t<=i)n+=t,r++;else break}return Math.max(r,1)},D=()=>{if(!y.value||!l.value.length)return;let e=y.value.offsetWidth;if(e<=0)return;let t=E(e);b.value=l.value.slice(0,t),x.value=l.value.slice(t)},O=null,k=()=>{O&&clearTimeout(O),O=setTimeout(()=>D(),100)},A=null;return(0,e.onMounted)(()=>{(0,e.nextTick)(()=>D()),y.value&&typeof ResizeObserver<`u`?(A=new ResizeObserver(()=>k()),A.observe(y.value)):typeof window<`u`&&window.addEventListener(`resize`,k,{passive:!0})}),(0,e.onUnmounted)(()=>{A?.disconnect(),typeof window<`u`&&window.removeEventListener(`resize`,k),O&&clearTimeout(O)}),(0,e.watch)(()=>i.data,()=>(0,e.nextTick)(()=>D()),{deep:!0}),(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{ref_key:`containerRef`,ref:y,class:`responsive-menu`},[(0,e.createElementVNode)(`div`,m,[S.value.length>0?((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(t.NMenu),{key:0,mode:`horizontal`,value:u.value,options:S.value,"theme-overrides":g.value,"onUpdate:value":w},null,8,[`value`,`options`,`theme-overrides`])):(0,e.createCommentVNode)(``,!0)]),x.value.length>0?((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(t.NDropdown),{key:0,options:C.value,placement:`bottom-end`,trigger:`hover`,onSelect:w},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,h,[(0,e.createVNode)((0,e.unref)(t.NButton),{text:``,class:`responsive-menu__more-btn`},{default:(0,e.withCtx)(()=>[...r[0]||=[(0,e.createElementVNode)(`span`,{class:`dots-icon`},[(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`)],-1)]]),_:1})])]),_:1},8,[`options`])):(0,e.createCommentVNode)(``,!0)],512))}}),_=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},v=_(g,[[`__scopeId`,`data-v-01fd38ee`]]),y={class:`top-layout-container`},b={class:`navbar-left`},x={class:`logo-container`},S=[`src`,`width`,`height`],C=[`src`,`width`,`height`,`alt`],w={class:`brand-name`},T={class:`brand-title`},E={class:`brand-subtitle`},D={class:`navbar-center`},O={class:`page-content`},k=(0,e.defineComponent)({name:`TopLayout`,__name:`index`,setup(n){let r=c(),{cachedViews:i,maxCacheCount:a}=f(),o=r.isDark,s=(0,e.computed)(()=>r.menus.value),l=(0,e.computed)(()=>r.showTagsView.value),d=(0,e.computed)(()=>r.tagsViewHeight.value),p=(0,e.computed)(()=>r.showFooter.value),m=(0,e.computed)(()=>r.transitionName.value),h={...u,...r.brand};return(n,r)=>{let c=(0,e.resolveComponent)(`RouterView`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,y,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`top-navbar`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,b,[(0,e.renderSlot)(n.$slots,`logo`,{},()=>[(0,e.createElementVNode)(`div`,x,[r[0]||=(0,e.createElementVNode)(`div`,{class:`logo-glow`},null,-1),h.logoType===`video`&&h.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`video`,{key:0,src:h.logoSrc,width:h.logoSize||36,height:h.logoSize||36,autoplay:``,loop:``,muted:``,playsinline:``,class:`logo-video`},` 您的浏览器不支持 video 标签。 `,8,S)):h.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`img`,{key:1,src:h.logoSrc,width:h.logoSize||36,height:h.logoSize||36,class:`logo-video`,alt:h.name||`Logo`},null,8,C)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,w,[(0,e.createElementVNode)(`span`,T,(0,e.toDisplayString)(h.name),1),(0,e.createElementVNode)(`span`,E,(0,e.toDisplayString)(h.subtitle),1)]),r[1]||=(0,e.createElementVNode)(`div`,{class:`navbar-divider`},null,-1)])]),(0,e.createElementVNode)(`div`,D,[(0,e.renderSlot)(n.$slots,`menu`,{},()=>[(0,e.createVNode)(v,{data:s.value},null,8,[`data`])])]),(0,e.renderSlot)(n.$slots,`header-extra`)],2),l.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`tags-view-container`,style:(0,e.normalizeStyle)({height:`${d.value}px`})},[(0,e.renderSlot)(n.$slots,`tags-view`)],4)):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)((0,e.unref)(t.NLayout),null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NLayoutContent),{class:`main-content`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,O,[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(({Component:t,route:n})=>[(0,e.createVNode)(e.Transition,{name:m.value,mode:`out-in`},{default:(0,e.withCtx)(()=>[((0,e.openBlock)(),(0,e.createBlock)(e.KeepAlive,{include:(0,e.unref)(i),max:(0,e.unref)(a)},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t),{key:n.path}))],1032,[`include`,`max`]))]),_:2},1032,[`name`])]),_:1})])]),_:1}),p.value?(0,e.renderSlot)(n.$slots,`footer`,{},void 0,void 0,0):(0,e.createCommentVNode)(``,!0)]),_:3})])}}});function A(e,t){if(!e)return!1;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean);return n.length===0?r.length===0:n.every((e,t)=>r[t]===e)}function j(t){let{menus:r,floatingSecondMenu:i=!1}=t,a=(0,n.useRoute)(),o=(0,n.useRouter)(),s=(0,e.ref)(``),c=(0,e.ref)(null),l=(0,e.ref)(!1),u=(0,e.computed)(()=>c.value||p.value||null),d=e=>A(e,a.path),f=e=>{for(let t of e)if(d(t.path)||t.children?.length&&f(t.children))return t;return null},p=(0,e.computed)(()=>r.value.find(e=>e.path===s.value)),m=(0,e.computed)(()=>p.value?.children||[]),h=t=>{t.disabled||((0,e.toValue)(i)?t.children&&t.children.length>0?l.value&&s.value===t.path?l.value=!1:(s.value=t.path||``,l.value=!0):(s.value=t.path||``,l.value=!1,t.path&&o.push(t.path)):(!t.children||t.children.length===0)&&t.path&&o.push(t.path))},g=e=>{!e.disabled&&e.path&&o.push(e.path)},_=()=>{let t=r.value,n=f(t);n?(s.value=n.path||``,(0,e.toValue)(i)&&n.children?.length&&(l.value=!0)):t.length>0&&!s.value&&(s.value=t[0].path||``)};return(0,e.watch)(()=>a.path,()=>_(),{immediate:!0}),(0,e.watch)(r,e=>{e&&e.length>0&&_()},{immediate:!0}),(0,e.onMounted)(()=>_()),{activeFirstMenu:s,activeFirstMenuItem:p,currentSecondMenus:m,hoveredMenuItem:c,displayMenuItem:u,showSecondMenu:l,handleFirstMenuClick:h,handleSecondMenuClick:g,isMenuItemActive:d}}var ee={class:`mix-layout-container`},te={class:`logo-container`},ne=[`src`,`width`,`height`],re=[`src`,`width`,`height`,`alt`],ie={class:`first-menu-list`},ae=[`tabindex`,`aria-disabled`,`onClick`,`onKeydown`],oe={class:`menu-item-content`},se={key:1,class:`menu-item-text`},ce={class:`menu-item-label`},le={class:`second-menu-header`},ue={class:`menu-title`},de={class:`second-menu-list`},fe=[`tabindex`,`aria-disabled`,`onClick`,`onKeydown`],pe={class:`menu-item-label`},me={class:`main-layout`},M=(0,e.defineComponent)({name:`MixLayout`,__name:`index`,setup(n){let r=c(),{cachedViews:i,maxCacheCount:a}=f(),o=r.isDark,s=(0,e.computed)(()=>r.menus.value),l=(0,e.computed)(()=>r.showFooter.value),d=(0,e.computed)(()=>r.transitionName.value),p={...u,...r.brand},m=j({menus:r.menus,floatingSecondMenu:(0,e.computed)(()=>!0)}),h=r.iconComponent??(0,e.defineComponent)({name:`LayoutIcon`,props:{name:String,size:{type:Number,default:18}},setup(t){return()=>(0,e.h)(`i`,{class:t.name,style:{fontSize:`${t.size}px`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`}})}});return(n,r)=>{let c=(0,e.resolveComponent)(`RouterView`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,ee,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`first-level-menu`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,te,[(0,e.renderSlot)(n.$slots,`logo`,{},()=>[r[0]||=(0,e.createElementVNode)(`div`,{class:`logo-glow`},null,-1),p.logoType===`video`&&p.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`video`,{key:0,src:p.logoSrc,width:p.logoSize||40,height:p.logoSize||40,autoplay:``,loop:``,muted:``,playsinline:``,class:`logo-video`},` 您的浏览器不支持 video 标签。 `,8,ne)):p.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`img`,{key:1,src:p.logoSrc,width:p.logoSize||40,height:p.logoSize||40,class:`logo-video`,alt:p.name||`Logo`},null,8,re)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,ie,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(s.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:(0,e.normalizeClass)([`first-menu-item`,{active:(0,e.unref)(m).activeFirstMenu.value===t.path}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled||void 0,onClick:n=>(0,e.unref)(m).handleFirstMenuClick(t),onKeydown:[(0,e.withKeys)(n=>(0,e.unref)(m).handleFirstMenuClick(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(n=>(0,e.unref)(m).handleFirstMenuClick(t),[`prevent`]),[`space`])]},[(0,e.createElementVNode)(`div`,oe,[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(h)),{key:0,name:t.meta.icon,size:22},null,8,[`name`])):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,se,(0,e.toDisplayString)((t.meta?.title||``)[0]),1))]),(0,e.createElementVNode)(`span`,ce,(0,e.toDisplayString)(t.meta?.title),1)],42,ae))),128))])],2),(0,e.createVNode)(e.Transition,{name:`slide-fade`},{default:(0,e.withCtx)(()=>[(0,e.unref)(m).showSecondMenu.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`second-level-menu-popup`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,le,[(0,e.unref)(m).displayMenuItem.value?.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(h)),{key:0,name:(0,e.unref)(m).displayMenuItem.value.meta.icon,size:20},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,ue,(0,e.toDisplayString)((0,e.unref)(m).displayMenuItem.value?.meta?.title),1)]),(0,e.createElementVNode)(`div`,de,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(m).displayMenuItem.value?.children||[],t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:(0,e.normalizeClass)([`second-menu-item`,{active:(0,e.unref)(m).isMenuItemActive(t.path)}]),role:`link`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled||void 0,onClick:n=>(0,e.unref)(m).handleSecondMenuClick(t),onKeydown:[(0,e.withKeys)(n=>(0,e.unref)(m).handleSecondMenuClick(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(n=>(0,e.unref)(m).handleSecondMenuClick(t),[`prevent`]),[`space`])]},[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(h)),{key:0,name:t.meta.icon,size:16},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,pe,(0,e.toDisplayString)(t.meta?.title),1)],42,fe))),128))])],2)):(0,e.createCommentVNode)(``,!0)]),_:1}),(0,e.createElementVNode)(`div`,me,[(0,e.renderSlot)(n.$slots,`header`),(0,e.createVNode)((0,e.unref)(t.NLayout),null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NLayoutContent),{class:`content-with-header p16px app-content`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(({Component:t,route:n})=>[(0,e.createVNode)(e.Transition,{name:d.value,mode:`out-in`},{default:(0,e.withCtx)(()=>[((0,e.openBlock)(),(0,e.createBlock)(e.KeepAlive,{include:(0,e.unref)(i),max:(0,e.unref)(a)},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t),{key:n.path}))],1032,[`include`,`max`]))]),_:2},1032,[`name`])]),_:1})]),_:1}),l.value?(0,e.renderSlot)(n.$slots,`footer`,{},void 0,void 0,0):(0,e.createCommentVNode)(``,!0)]),_:3})])])}}}),he={class:`mix-top-layout-container`},ge={class:`logo-container`},N=[`src`,`width`,`height`],P=[`src`,`width`,`height`,`alt`],F={class:`first-menu-list`},I=[`tabindex`,`aria-disabled`,`aria-current`,`onClick`,`onKeydown`],L={class:`menu-item-content`},_e={key:1,class:`menu-item-text`},ve={class:`menu-item-label`},ye={class:`main-area`},be={class:`navbar-left`},xe={class:`brand-name`},Se={class:`brand-title`},Ce={class:`brand-subtitle`},we={class:`navbar-center`},Te={class:`page-content`},R=(0,e.defineComponent)({name:`MixTopLayout`,__name:`index`,setup(n){let r=c(),{cachedViews:i,maxCacheCount:a}=f(),o=r.isDark,s=(0,e.computed)(()=>r.menus.value),l=(0,e.computed)(()=>r.showTagsView.value),d=(0,e.computed)(()=>r.tagsViewHeight.value),p=(0,e.computed)(()=>r.showFooter.value),m=(0,e.computed)(()=>r.transitionName.value),h={...u,...r.brand},g=j({menus:r.menus,floatingSecondMenu:(0,e.computed)(()=>!1)}),_=r.iconComponent??(0,e.defineComponent)({name:`LayoutIcon`,props:{name:String,size:{type:Number,default:18}},setup(t){return()=>(0,e.h)(`i`,{class:t.name,style:{fontSize:`${t.size}px`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`}})}});return(n,r)=>{let c=(0,e.resolveComponent)(`RouterView`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,he,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`first-level-sidebar`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,ge,[(0,e.renderSlot)(n.$slots,`logo`,{},()=>[r[0]||=(0,e.createElementVNode)(`div`,{class:`logo-glow`},null,-1),h.logoType===`video`&&h.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`video`,{key:0,src:h.logoSrc,width:h.logoSize||40,height:h.logoSize||40,autoplay:``,loop:``,muted:``,playsinline:``,class:`logo-video`},` 您的浏览器不支持 video 标签。 `,8,N)):h.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`img`,{key:1,src:h.logoSrc,width:h.logoSize||40,height:h.logoSize||40,class:`logo-video`,alt:h.name||`Logo`},null,8,P)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,F,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(s.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:(0,e.normalizeClass)([`first-menu-item`,{active:(0,e.unref)(g).activeFirstMenu.value===t.path}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled||void 0,"aria-current":(0,e.unref)(g).activeFirstMenu.value===t.path?`page`:void 0,onClick:n=>(0,e.unref)(g).handleFirstMenuClick(t),onKeydown:[(0,e.withKeys)(n=>(0,e.unref)(g).handleFirstMenuClick(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(n=>(0,e.unref)(g).handleFirstMenuClick(t),[`prevent`]),[`space`])]},[(0,e.createElementVNode)(`div`,L,[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(_)),{key:0,name:t.meta.icon,size:22},null,8,[`name`])):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,_e,(0,e.toDisplayString)((t.meta?.title||``)[0]),1))]),(0,e.createElementVNode)(`span`,ve,(0,e.toDisplayString)(t.meta?.title),1)],42,I))),128))])],2),(0,e.createElementVNode)(`div`,ye,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`top-navbar`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,be,[(0,e.renderSlot)(n.$slots,`brand`,{},()=>[(0,e.createElementVNode)(`div`,xe,[(0,e.createElementVNode)(`span`,Se,(0,e.toDisplayString)(h.name),1),(0,e.createElementVNode)(`span`,Ce,(0,e.toDisplayString)(h.subtitle),1)]),r[1]||=(0,e.createElementVNode)(`div`,{class:`navbar-divider`},null,-1)])]),(0,e.createElementVNode)(`div`,we,[(0,e.renderSlot)(n.$slots,`top-menu`,{},()=>[(0,e.unref)(g).currentSecondMenus.value.length>0?((0,e.openBlock)(),(0,e.createBlock)(v,{key:0,data:(0,e.unref)(g).currentSecondMenus.value},null,8,[`data`])):(0,e.createCommentVNode)(``,!0)])]),(0,e.renderSlot)(n.$slots,`header-extra`)],2),l.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`tags-view-container`,style:(0,e.normalizeStyle)({height:`${d.value}px`})},[(0,e.renderSlot)(n.$slots,`tags-view`)],4)):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)((0,e.unref)(t.NLayout),{class:`content-layout`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NLayoutContent),{class:`main-content`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,Te,[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(({Component:t,route:n})=>[(0,e.createVNode)(e.Transition,{name:m.value,mode:`out-in`},{default:(0,e.withCtx)(()=>[((0,e.openBlock)(),(0,e.createBlock)(e.KeepAlive,{include:(0,e.unref)(i),max:(0,e.unref)(a)},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t),{key:n.path}))],1032,[`include`,`max`]))]),_:2},1032,[`name`])]),_:1})])]),_:1}),p.value?(0,e.renderSlot)(n.$slots,`footer`,{},void 0,void 0,0):(0,e.createCommentVNode)(``,!0)]),_:3})])])}}}),Ee={class:`reverse-horizontal-mix-layout-container`},De={class:`navbar-left`},Oe={class:`logo-container`},ke=[`src`,`width`,`height`],Ae=[`src`,`width`,`height`,`alt`],je={class:`brand-name`},Me={class:`brand-title`},Ne={class:`brand-subtitle`},Pe={class:`navbar-center`},Fe={class:`main-area`},Ie={class:`page-content`},Le=[`aria-expanded`,`onKeydown`],Re={class:`header-icon`},ze={class:`header-title`},Be={class:`sidebar-menu-list`},Ve={key:0,class:`menu-group`},He={class:`group-title`},Ue=[`tabindex`,`aria-disabled`,`aria-current`,`onClick`,`onKeydown`],We={class:`item-title`},Ge=[`tabindex`,`aria-disabled`,`aria-current`,`onClick`,`onKeydown`],Ke={class:`item-title`},z=(0,e.defineComponent)({name:`ReverseHorizontalMixLayout`,__name:`index`,setup(n){let r=c(),{cachedViews:i,maxCacheCount:a}=f(),o=r.isDark,s=(0,e.computed)(()=>r.menus.value),l=(0,e.computed)(()=>r.showTagsView.value),d=(0,e.computed)(()=>r.tagsViewHeight.value),p=(0,e.computed)(()=>r.showFooter.value),m=(0,e.computed)(()=>r.transitionName.value),h={...u,...r.brand},g=j({menus:r.menus,floatingSecondMenu:(0,e.computed)(()=>!1)}),_=(0,e.ref)(!1),y=()=>{_.value=!_.value},b=r.iconComponent??(0,e.defineComponent)({name:`LayoutIcon`,props:{name:String,size:{type:Number,default:18}},setup(t){return()=>(0,e.h)(`i`,{class:t.name,style:{fontSize:`${t.size}px`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`}})}});return(n,r)=>{let c=(0,e.resolveComponent)(`RouterView`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ee,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`top-navbar`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,De,[(0,e.renderSlot)(n.$slots,`logo`,{},()=>[(0,e.createElementVNode)(`div`,Oe,[r[0]||=(0,e.createElementVNode)(`div`,{class:`logo-glow`},null,-1),h.logoType===`video`&&h.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`video`,{key:0,src:h.logoSrc,width:h.logoSize||36,height:h.logoSize||36,autoplay:``,loop:``,muted:``,playsinline:``,class:`logo-video`},` 您的浏览器不支持 video 标签。 `,8,ke)):h.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`img`,{key:1,src:h.logoSrc,width:h.logoSize||36,height:h.logoSize||36,class:`logo-video`,alt:h.name||`Logo`},null,8,Ae)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,je,[(0,e.createElementVNode)(`span`,Me,(0,e.toDisplayString)(h.name),1),(0,e.createElementVNode)(`span`,Ne,(0,e.toDisplayString)(h.subtitle),1)]),r[1]||=(0,e.createElementVNode)(`div`,{class:`navbar-divider`},null,-1)])]),(0,e.createElementVNode)(`div`,Pe,[(0,e.renderSlot)(n.$slots,`top-menu`,{},()=>[(0,e.createVNode)(v,{data:s.value},null,8,[`data`])])]),(0,e.renderSlot)(n.$slots,`header-extra`)],2),l.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`tags-view-container`,style:(0,e.normalizeStyle)({height:`${d.value}px`})},[(0,e.renderSlot)(n.$slots,`tags-view`)],4)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,Fe,[(0,e.createVNode)((0,e.unref)(t.NLayout),{class:`content-layout`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NLayoutContent),{class:`main-content`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,Ie,[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(({Component:t,route:n})=>[(0,e.createVNode)(e.Transition,{name:m.value,mode:`out-in`},{default:(0,e.withCtx)(()=>[((0,e.openBlock)(),(0,e.createBlock)(e.KeepAlive,{include:(0,e.unref)(i),max:(0,e.unref)(a)},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t),{key:n.path}))],1032,[`include`,`max`]))]),_:2},1032,[`name`])]),_:1})])]),_:1}),p.value?(0,e.renderSlot)(n.$slots,`footer`,{},void 0,void 0,0):(0,e.createCommentVNode)(``,!0)]),_:3}),(0,e.unref)(g).currentSecondMenus.value.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`sidebar-toggle`,[(0,e.unref)(o)?`dark-theme`:`light-theme`,{active:!_.value}]]),onClick:y,role:`button`,tabindex:`0`,"aria-expanded":!_.value,onKeydown:[(0,e.withKeys)(y,[`enter`]),(0,e.withKeys)((0,e.withModifiers)(y,[`prevent`]),[`space`])]},[(0,e.createElementVNode)(`span`,{class:(0,e.normalizeClass)([`collapse-arrow`,`toggle-icon`,_.value?`collapsed`:`expanded`])},[...r[2]||=[(0,e.createElementVNode)(`span`,{class:`arrow-line`},null,-1),(0,e.createElementVNode)(`span`,{class:`arrow-line`},null,-1)]],2)],42,Le)):(0,e.createCommentVNode)(``,!0),(0,e.unref)(g).currentSecondMenus.value.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`right-sidebar-wrapper`,{collapsed:_.value}])},[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`right-sidebar`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`sidebar-header`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,Re,[(0,e.unref)(g).activeFirstMenuItem.value?.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(b)),{key:0,name:(0,e.unref)(g).activeFirstMenuItem.value.meta.icon,size:20},null,8,[`name`])):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`span`,ze,(0,e.toDisplayString)((0,e.unref)(g).activeFirstMenuItem.value?.meta?.title||`菜单`),1)],2),(0,e.createElementVNode)(`div`,Be,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(g).currentSecondMenus.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:t.path},[t.children&&t.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ve,[(0,e.createElementVNode)(`div`,He,[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(b)),{key:0,name:t.meta.icon,size:16},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.meta?.title),1)]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:(0,e.normalizeClass)([`menu-item sub-item`,{active:(0,e.unref)(g).isMenuItemActive(t.path)}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled||void 0,"aria-current":(0,e.unref)(g).isMenuItemActive(t.path)?`page`:void 0,onClick:n=>(0,e.unref)(g).handleSecondMenuClick(t),onKeydown:[(0,e.withKeys)(n=>(0,e.unref)(g).handleSecondMenuClick(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(n=>(0,e.unref)(g).handleSecondMenuClick(t),[`prevent`]),[`space`])]},[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(b)),{key:0,name:t.meta.icon,size:16},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,We,(0,e.toDisplayString)(t.meta?.title),1)],42,Ue))),128))])):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`menu-item`,{active:(0,e.unref)(g).isMenuItemActive(t.path)}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled||void 0,"aria-current":(0,e.unref)(g).isMenuItemActive(t.path)?`page`:void 0,onClick:n=>(0,e.unref)(g).handleSecondMenuClick(t),onKeydown:[(0,e.withKeys)(n=>(0,e.unref)(g).handleSecondMenuClick(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(n=>(0,e.unref)(g).handleSecondMenuClick(t),[`prevent`]),[`space`])]},[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(b)),{key:0,name:t.meta.icon,size:18},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,Ke,(0,e.toDisplayString)(t.meta?.title),1)],42,Ge))],64))),128))])],2)],2)):(0,e.createCommentVNode)(``,!0)])])}}}),qe={class:`card-layout-container`},Je={class:`navbar-left`},Ye={class:`logo-container`},Xe=[`src`,`width`,`height`],Ze=[`src`,`width`,`height`,`alt`],Qe={class:`brand-name`},$e={class:`brand-title`},et={class:`brand-subtitle`},tt={class:`drawer-content`},nt={class:`menu-grid`},rt=[`tabindex`,`aria-disabled`,`onClick`,`onKeydown`],it={key:0,class:`category-items`},at=[`tabindex`,`aria-disabled`,`onClick`,`onKeydown`],ot={class:`item-title`},st={key:0,class:`submenu-items`},ct={class:`submenu-title`},lt=[`tabindex`,`aria-disabled`,`onClick`,`onKeydown`],ut={class:`item-title`},dt={class:`main-content-area`},ft={class:`page-content`},B=_((0,e.defineComponent)({name:`CardLayout`,__name:`index`,setup(r){let i=c(),{cachedViews:a,maxCacheCount:o}=f(),s=(0,n.useRouter)(),l=i.isDark,d=(0,e.computed)(()=>i.menus.value),p=(0,e.computed)(()=>i.showTagsView.value),m=(0,e.computed)(()=>i.tagsViewHeight.value),h=(0,e.computed)(()=>i.showFooter.value),g=(0,e.computed)(()=>i.transitionName.value),_={...u,...i.brand},v=(0,e.ref)(!1),y=(0,e.ref)(null),b=()=>{y.value&&clearTimeout(y.value),y.value=setTimeout(()=>{v.value=!1},300)},x=()=>{y.value&&=(clearTimeout(y.value),null),v.value=!0},S=e=>{!e.disabled&&e.path&&(s.push(e.path),v.value=!1)},C=i.iconComponent??(0,e.defineComponent)({name:`LayoutIcon`,props:{name:String,size:{type:Number,default:18}},setup(t){return()=>(0,e.h)(`i`,{class:t.name,style:{fontSize:`${t.size}px`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`}})}});return(0,e.onUnmounted)(()=>{y.value&&clearTimeout(y.value)}),(n,r)=>{let i=(0,e.resolveComponent)(`RouterView`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,qe,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`top-navbar`,[(0,e.unref)(l)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,Je,[(0,e.createElementVNode)(`div`,{class:`hover-trigger-area`,onMouseenter:x,onMouseleave:b},[(0,e.renderSlot)(n.$slots,`menu-trigger`,{},()=>[r[0]||=(0,e.createElementVNode)(`div`,{class:`menu-indicator`},[(0,e.createElementVNode)(`span`,{class:`hamburger-icon`},[(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`)])],-1)],!0)],32),(0,e.renderSlot)(n.$slots,`logo`,{},()=>[(0,e.createElementVNode)(`div`,Ye,[r[1]||=(0,e.createElementVNode)(`div`,{class:`logo-glow`},null,-1),_.logoType===`video`&&_.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`video`,{key:0,src:_.logoSrc,width:_.logoSize||36,height:_.logoSize||36,autoplay:``,loop:``,muted:``,playsinline:``,class:`logo-video`},` 您的浏览器不支持 video 标签。 `,8,Xe)):_.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`img`,{key:1,src:_.logoSrc,width:_.logoSize||36,height:_.logoSize||36,class:`logo-video`,alt:_.name||`Logo`},null,8,Ze)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,Qe,[(0,e.createElementVNode)(`span`,$e,(0,e.toDisplayString)(_.name),1),(0,e.createElementVNode)(`span`,et,(0,e.toDisplayString)(_.subtitle),1)]),r[2]||=(0,e.createElementVNode)(`div`,{class:`navbar-divider`},null,-1)],!0)]),(0,e.renderSlot)(n.$slots,`header-extra`,{},void 0,!0)],2),p.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`tags-view-container`,style:(0,e.normalizeStyle)({height:`${m.value}px`})},[(0,e.renderSlot)(n.$slots,`tags-view`,{},void 0,!0)],4)):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`drawer-menu`,[(0,e.unref)(l)?`dark-theme`:`light-theme`,{visible:v.value}]]),onMouseenter:x,onMouseleave:b},[(0,e.renderSlot)(n.$slots,`drawer-menu`,{},()=>[r[3]||=(0,e.createElementVNode)(`div`,{class:`drawer-header`},[(0,e.createElementVNode)(`div`,{class:`drawer-title`},[(0,e.createElementVNode)(`span`,{class:`grid-icon`},[(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`)]),(0,e.createElementVNode)(`span`,null,`功能导航`)])],-1),(0,e.createElementVNode)(`div`,tt,[(0,e.createElementVNode)(`div`,nt,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(d.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:`menu-category`},[(0,e.createElementVNode)(`div`,{class:`category-header`,role:`link`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled||void 0,onClick:e=>S(t),onKeydown:[(0,e.withKeys)(e=>S(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>S(t),[`prevent`]),[`space`])]},[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(C)),{key:0,name:t.meta.icon,size:18},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.meta?.title),1)],40,rt),t.children&&t.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,it,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:`menu-item`,role:`link`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled||void 0,onClick:e=>S(t),onKeydown:[(0,e.withKeys)(e=>S(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>S(t),[`prevent`]),[`space`])]},[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(C)),{key:0,name:t.meta.icon,size:16},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,ot,(0,e.toDisplayString)(t.meta?.title),1)],40,at))),128)),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:`sub-`+t.path},[t.children&&t.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,st,[(0,e.createElementVNode)(`div`,ct,(0,e.toDisplayString)(t.meta?.title),1),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:`menu-item submenu-item`,role:`link`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled||void 0,onClick:e=>S(t),onKeydown:[(0,e.withKeys)(e=>S(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>S(t),[`prevent`]),[`space`])]},[t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(C)),{key:0,name:t.meta.icon,size:14},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,ut,(0,e.toDisplayString)(t.meta?.title),1)],40,lt))),128))])):(0,e.createCommentVNode)(``,!0)],64))),128))])):(0,e.createCommentVNode)(``,!0)]))),128))])])],!0)],34),(0,e.createElementVNode)(`div`,dt,[(0,e.createVNode)((0,e.unref)(t.NLayout),{class:`content-layout`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NLayoutContent),{class:`main-content p16px app-content`},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,ft,[(0,e.createVNode)(i,null,{default:(0,e.withCtx)(({Component:t,route:n})=>[(0,e.createVNode)(e.Transition,{name:g.value,mode:`out-in`},{default:(0,e.withCtx)(()=>[((0,e.openBlock)(),(0,e.createBlock)(e.KeepAlive,{include:(0,e.unref)(a),max:(0,e.unref)(o)},[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t),{key:n.path}))],1032,[`include`,`max`]))]),_:2},1032,[`name`])]),_:1})])]),_:1}),h.value?(0,e.renderSlot)(n.$slots,`footer`,{},void 0,!0,0):(0,e.createCommentVNode)(``,!0)]),_:3})])])}}}),[[`__scopeId`,`data-v-c5ad8728`]]),pt={key:6,class:`layout-coming-soon`},mt=(0,e.defineComponent)({name:`C_LayoutContainer`,__name:`index`,setup(t){let n=c(),r=n.layoutMode,i=n.isDark,a=(0,e.ref)(!1),s=(0,e.computed)({get:()=>n.collapsed?.value??a.value,set:e=>{n.collapsed?n.collapsed.value=e:a.value=e}}),l={isCollapsed:s,handleCollapsedChange:e=>{s.value=e}};return(0,e.provide)(o,l),(0,e.provide)(`menuCollapse`,l),(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:(0,e.normalizeClass)([`layout-container`,(0,e.unref)(i)?`dark-mode`:`light-mode`])},[(0,e.unref)(r)===`side`?((0,e.openBlock)(),(0,e.createBlock)(p,{key:0,collapsed:s.value,"onUpdate:collapsed":n[0]||=e=>s.value=e},(0,e.createSlots)({menu:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`menu`,{collapsed:s.value})]),header:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`header`)]),footer:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`footer`)]),_:2},[t.$slots.logo?{name:`logo`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`logo`)]),key:`0`}:void 0]),1032,[`collapsed`])):(0,e.unref)(r)===`top`?((0,e.openBlock)(),(0,e.createBlock)(k,{key:1},(0,e.createSlots)({_:2},[t.$slots.logo?{name:`logo`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`logo`)]),key:`0`}:void 0,t.$slots[`top-menu`]?{name:`menu`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`top-menu`)]),key:`1`}:void 0,t.$slots[`header-extra`]?{name:`header-extra`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`header-extra`)]),key:`2`}:void 0,t.$slots[`tags-view`]?{name:`tags-view`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`tags-view`)]),key:`3`}:void 0,t.$slots.footer?{name:`footer`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`footer`)]),key:`4`}:void 0]),1024)):(0,e.unref)(r)===`mix`?((0,e.openBlock)(),(0,e.createBlock)(M,{key:2},(0,e.createSlots)({header:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`header`)]),_:2},[t.$slots.logo?{name:`logo`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`logo`)]),key:`0`}:void 0,t.$slots.footer?{name:`footer`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`footer`)]),key:`1`}:void 0]),1024)):(0,e.unref)(r)===`mix-top`?((0,e.openBlock)(),(0,e.createBlock)(R,{key:3},(0,e.createSlots)({_:2},[t.$slots.logo?{name:`logo`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`logo`)]),key:`0`}:void 0,t.$slots.brand?{name:`brand`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`brand`)]),key:`1`}:void 0,t.$slots[`top-menu`]?{name:`top-menu`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`top-menu`)]),key:`2`}:void 0,t.$slots[`header-extra`]?{name:`header-extra`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`header-extra`)]),key:`3`}:void 0,t.$slots[`tags-view`]?{name:`tags-view`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`tags-view`)]),key:`4`}:void 0,t.$slots.footer?{name:`footer`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`footer`)]),key:`5`}:void 0]),1024)):(0,e.unref)(r)===`reverse-horizontal-mix`?((0,e.openBlock)(),(0,e.createBlock)(z,{key:4},(0,e.createSlots)({_:2},[t.$slots.logo?{name:`logo`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`logo`)]),key:`0`}:void 0,t.$slots[`top-menu`]?{name:`top-menu`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`top-menu`)]),key:`1`}:void 0,t.$slots[`header-extra`]?{name:`header-extra`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`header-extra`)]),key:`2`}:void 0,t.$slots[`tags-view`]?{name:`tags-view`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`tags-view`)]),key:`3`}:void 0,t.$slots.footer?{name:`footer`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`footer`)]),key:`4`}:void 0]),1024)):(0,e.unref)(r)===`card-layout`?((0,e.openBlock)(),(0,e.createBlock)(B,{key:5},(0,e.createSlots)({_:2},[t.$slots[`menu-trigger`]?{name:`menu-trigger`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`menu-trigger`)]),key:`0`}:void 0,t.$slots.logo?{name:`logo`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`logo`)]),key:`1`}:void 0,t.$slots[`header-extra`]?{name:`header-extra`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`header-extra`)]),key:`2`}:void 0,t.$slots[`tags-view`]?{name:`tags-view`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`tags-view`)]),key:`3`}:void 0,t.$slots[`drawer-menu`]?{name:`drawer-menu`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`drawer-menu`)]),key:`4`}:void 0,t.$slots.footer?{name:`footer`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`footer`)]),key:`5`}:void 0]),1024)):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,pt,[...n[1]||=[(0,e.createElementVNode)(`div`,{class:`coming-soon-content`},[(0,e.createElementVNode)(`div`,{class:`coming-soon-icon`},`🚧`),(0,e.createElementVNode)(`div`,{class:`coming-soon-title`},`布局开发中`)],-1)]]))],2))}}),V=[{name:`拂晓蓝`,value:`#409eff`},{name:`薄暮红`,value:`#f5222d`},{name:`火山橙`,value:`#fa541c`},{name:`日暮黄`,value:`#faad14`},{name:`极光绿`,value:`#52c41a`},{name:`明青`,value:`#13c2c2`},{name:`极客蓝`,value:`#2f54eb`},{name:`酱紫`,value:`#722ed1`}],H=[{name:`科技蓝`,icon:`💙`,primaryColor:`#409eff`},{name:`清新绿`,icon:`💚`,primaryColor:`#52c41a`},{name:`商务灰`,icon:`🖤`,primaryColor:`#595959`},{name:`活力橙`,icon:`🧡`,primaryColor:`#fa8c16`},{name:`优雅紫`,icon:`💜`,primaryColor:`#722ed1`},{name:`经典红`,icon:`❤️`,primaryColor:`#f5222d`}],ht=[{mode:`side`,label:`左侧菜单`,description:`经典的左侧导航布局`,icon:`i-mdi:page-layout-sidebar-left`},{mode:`top`,label:`顶部菜单`,description:`顶部水平导航布局`,icon:`i-mdi:page-layout-header`},{mode:`mix`,label:`混合菜单`,description:`顶部 + 侧边混合布局`,icon:`i-mdi:view-dashboard-outline`},{mode:`mix-top`,label:`顶部混合`,description:`侧边优先的混合布局`,icon:`i-mdi:view-dashboard-variant-outline`},{mode:`reverse-horizontal-mix`,label:`反转混合`,description:`反转的水平混合布局`,icon:`i-mdi:page-layout-header-footer`},{mode:`card-layout`,label:`卡片布局`,description:`卡片式布局风格`,icon:`i-mdi:card-outline`}],U={small:`4px`,medium:`6px`,large:`8px`},W={fade:`fade-transform`,slide:`fade-slide`,zoom:`fade-zoom`,none:``},G={themeMode:`light`,primaryColor:`#409eff`,borderRadius:`medium`,transitionType:`slide`,enableTransition:!0,layoutMode:`side`,menuExpandMode:`inline`,collapsed:!1,fixedHeader:!0,showBreadcrumb:!0,showBreadcrumbIcon:!0,showTagsView:!0,tagsViewHeight:44,tagsViewStyle:`default`,showFooter:!0,sidebarWidth:220,sidebarCollapsedWidth:64,headerHeight:56,enableHotkeys:!0,version:`3.1.0`},K=V.map(e=>e.value),gt={themeMode:new Set([`light`,`dark`,`system`]),borderRadius:new Set([`small`,`medium`,`large`]),transitionType:new Set([`fade`,`slide`,`zoom`,`none`]),layoutMode:new Set([`side`,`top`,`mix`,`mix-top`,`reverse-horizontal-mix`,`card-layout`]),menuExpandMode:new Set([`inline`,`panel`]),tagsViewStyle:new Set([`default`,`card`,`smart`])},_t=new Set([`enableTransition`,`collapsed`,`fixedHeader`,`showBreadcrumb`,`showBreadcrumbIcon`,`showTagsView`,`showFooter`,`enableHotkeys`]),vt={tagsViewHeight:[24,100],sidebarWidth:[120,480],sidebarCollapsedWidth:[32,160],headerHeight:[32,160]},yt=1;function q(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`settings 必须是对象`);let t=e,n={},r=(e,t)=>{n[e]=t};for(let[e,n]of Object.entries(gt)){let i=t[e];if(i!==void 0){if(typeof i!=`string`||!n.has(i))throw RangeError(`无效的设置项 ${e}: ${String(i)}`);r(e,i)}}for(let e of _t){let n=t[e];if(n!==void 0){if(typeof n!=`boolean`)throw TypeError(`设置项 ${e} 必须是布尔值`);r(e,n)}}for(let[e,n]of Object.entries(vt)){let i=t[e];if(i!==void 0){if(typeof i!=`number`||!Number.isFinite(i)||i<n[0]||i>n[1])throw RangeError(`设置项 ${e} 超出允许范围`);r(e,i)}}if(t.primaryColor!==void 0){if(typeof t.primaryColor!=`string`||!/^#[0-9a-fA-F]{6}$/.test(t.primaryColor))throw RangeError(`primaryColor 必须是 #rrggbb 格式`);n.primaryColor=t.primaryColor}if(t.version!==void 0){if(typeof t.version!=`string`||t.version.length>50)throw TypeError(`version 必须是长度不超过 50 的字符串`);n.version=t.version}return n}function J(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`配置文件根节点必须是对象`);let t=e,n={};if(t.schemaVersion!==void 0){if(typeof t.schemaVersion!=`number`||!Number.isInteger(t.schemaVersion)||t.schemaVersion<1||t.schemaVersion>1)throw RangeError(`不支持的配置格式版本`);n.schemaVersion=t.schemaVersion}t.settings!==void 0&&(n.settings=q(t.settings));for(let e of[`gray`,`colorWeak`]){let r=t[e];if(r!==void 0){if(typeof r!=`boolean`)throw TypeError(`${e} 必须是布尔值`);n[e]=r}}if(t.watermark!==void 0){if(!t.watermark||typeof t.watermark!=`object`||Array.isArray(t.watermark))throw TypeError(`watermark 必须是对象`);let e=t.watermark;if(typeof e.enabled!=`boolean`||typeof e.text!=`string`||e.text.length>200)throw TypeError(`watermark 配置无效`);n.watermark={enabled:e.enabled,text:e.text}}return n}function Y(e,t){if(typeof e!=`string`)return`#000000`;if(!Number.isFinite(t))return e;let n=Math.round(t),r=e.trim(),i=r.startsWith(`#`)?r.slice(1):r;if(i.length===3&&(i=i.split(``).map(e=>e+e).join(``)),!/^[0-9a-fA-F]{6}$/.test(i))return e;let a=parseInt(i,16),o=Math.min(255,Math.max(0,(a>>16)+n)),s=Math.min(255,Math.max(0,(a>>8&255)+n)),c=Math.min(255,Math.max(0,(a&255)+n));return`#${(o<<16|s<<8|c).toString(16).padStart(6,`0`)}`}function X(t={}){let{id:n=`settings`,defaults:i={},onThemeModeChange:a}=t;if(typeof n!=`string`||!n.trim())throw RangeError(`Settings store id 不能为空`);let o={...G,...q(i)};return(0,r.defineStore)(n,()=>{let t=(0,e.ref)(o.themeMode),n=(0,e.ref)(o.primaryColor),r=(0,e.ref)(o.borderRadius),i=(0,e.ref)(o.transitionType),s=(0,e.ref)(o.enableTransition),c=(0,e.ref)(o.layoutMode),l=(0,e.ref)(o.menuExpandMode),u=(0,e.ref)(o.collapsed),d=(0,e.ref)(o.fixedHeader),f=(0,e.ref)(o.showBreadcrumb),p=(0,e.ref)(o.showBreadcrumbIcon),m=(0,e.ref)(o.showTagsView),h=(0,e.ref)(o.tagsViewHeight),g=(0,e.ref)(o.tagsViewStyle),_=(0,e.ref)(o.showFooter),v=(0,e.ref)(o.sidebarWidth),y=(0,e.ref)(o.sidebarCollapsedWidth),b=(0,e.ref)(o.headerHeight),x=(0,e.ref)(o.enableHotkeys),S=(0,e.ref)(o.version),C=(0,e.computed)(()=>U[r.value]),w=(0,e.computed)(()=>s.value&&i.value!==`none`),T=(0,e.computed)(()=>w.value?W[i.value]:``),E=(0,e.computed)(()=>({themeMode:t.value,primaryColor:n.value,borderRadius:r.value,transitionType:i.value,enableTransition:s.value,layoutMode:c.value,menuExpandMode:l.value,collapsed:u.value,fixedHeader:d.value,showBreadcrumb:f.value,showBreadcrumbIcon:p.value,showTagsView:m.value,tagsViewHeight:h.value,tagsViewStyle:g.value,showFooter:_.value,sidebarWidth:v.value,sidebarCollapsedWidth:y.value,headerHeight:b.value,enableHotkeys:x.value,version:S.value})),D=()=>{if(typeof document>`u`)return;let e=document.documentElement;e.style.setProperty(`--primary-color`,n.value),e.style.setProperty(`--primary-color-hover`,Y(n.value,10)),e.style.setProperty(`--primary-color-pressed`,Y(n.value,-10)),e.style.setProperty(`--border-radius`,C.value),e.style.setProperty(`--sidebar-width`,`${v.value}px`),e.style.setProperty(`--sidebar-collapsed-width`,`${y.value}px`),e.style.setProperty(`--header-height`,`${b.value}px`),e.style.setProperty(`--tags-view-height`,`${h.value}px`)};return(0,e.watch)([n,C,v,y,b,h],()=>{D()},{immediate:!0}),{themeMode:t,primaryColor:n,borderRadius:r,transitionType:i,enableTransition:s,layoutMode:c,menuExpandMode:l,collapsed:u,fixedHeader:d,showBreadcrumb:f,showBreadcrumbIcon:p,showTagsView:m,tagsViewHeight:h,tagsViewStyle:g,showFooter:_,sidebarWidth:v,sidebarCollapsedWidth:y,headerHeight:b,enableHotkeys:x,version:S,borderRadiusValue:C,transitionName:T,shouldEnableTransition:w,settingsState:E,syncCSSVariables:D,applyPreset:async e=>{n.value=e.primaryColor,e.settings&&(e.settings.borderRadius&&(r.value=e.settings.borderRadius),e.settings.transitionType&&(i.value=e.settings.transitionType),e.settings.showBreadcrumb!==void 0&&(f.value=e.settings.showBreadcrumb),e.settings.showTagsView!==void 0&&(m.value=e.settings.showTagsView),e.settings.tagsViewStyle&&(g.value=e.settings.tagsViewStyle))},resetSettings:()=>{t.value=o.themeMode,n.value=o.primaryColor,r.value=o.borderRadius,i.value=o.transitionType,s.value=o.enableTransition,c.value=o.layoutMode,l.value=o.menuExpandMode,u.value=o.collapsed,d.value=o.fixedHeader,f.value=o.showBreadcrumb,p.value=o.showBreadcrumbIcon,m.value=o.showTagsView,h.value=o.tagsViewHeight,g.value=o.tagsViewStyle,_.value=o.showFooter,v.value=o.sidebarWidth,y.value=o.sidebarCollapsedWidth,b.value=o.headerHeight,x.value=o.enableHotkeys,S.value=o.version},updateThemeMode:async e=>{q({themeMode:e});let n=t.value;t.value=e;try{a&&await a(e)}catch(e){throw t.value=n,e}},toggleCollapse:()=>{u.value=!u.value}}})}var Z=X(),bt=[{label:`左侧菜单(默认)`,value:`side`,disabled:!1,svg:`
|
|
2
|
-
<rect x="0" y="0" width="16" height="48" rx="1" fill="currentColor" fill-opacity="0.9"/>
|
|
3
|
-
<rect x="18" y="0" width="38" height="10" rx="1" fill="currentColor" fill-opacity="0.7"/>
|
|
4
|
-
<rect x="18" y="12" width="38" height="34" rx="1" fill="currentColor" fill-opacity="0.4"/>
|
|
5
|
-
`},{label:`顶部菜单(清爽)`,value:`top`,disabled:!1,svg:`
|
|
6
|
-
<rect x="0" y="0" width="56" height="10" rx="1" fill="currentColor" fill-opacity="0.9"/>
|
|
7
|
-
<rect x="0" y="12" width="56" height="8" rx="1" fill="currentColor" fill-opacity="0.7"/>
|
|
8
|
-
<rect x="0" y="22" width="56" height="24" rx="1" fill="currentColor" fill-opacity="0.4"/>
|
|
9
|
-
`},{label:`左侧混合(灵巧)`,value:`mix`,disabled:!1,svg:`
|
|
10
|
-
<rect x="0" y="0" width="8" height="48" rx="1" fill="currentColor" fill-opacity="0.9"/>
|
|
11
|
-
<rect x="10" y="0" width="14" height="48" rx="1" fill="currentColor" fill-opacity="0.7"/>
|
|
12
|
-
<rect x="26" y="0" width="30" height="10" rx="1" fill="currentColor" fill-opacity="0.6"/>
|
|
13
|
-
<rect x="26" y="12" width="30" height="34" rx="1" fill="currentColor" fill-opacity="0.4"/>
|
|
14
|
-
`},{label:`顶部混合(侧优)`,value:`mix-top`,disabled:!1,svg:`
|
|
15
|
-
<rect x="0" y="0" width="8" height="48" rx="1" fill="currentColor" fill-opacity="0.9"/>
|
|
16
|
-
<rect x="10" y="0" width="46" height="10" rx="1" fill="currentColor" fill-opacity="0.7"/>
|
|
17
|
-
<rect x="10" y="12" width="46" height="34" rx="1" fill="currentColor" fill-opacity="0.4"/>
|
|
18
|
-
`},{label:`反转混合(另类)`,value:`reverse-horizontal-mix`,disabled:!1,svg:`
|
|
19
|
-
<rect x="0" y="0" width="56" height="10" rx="1" fill="currentColor" fill-opacity="0.9"/>
|
|
20
|
-
<rect x="44" y="12" width="12" height="34" rx="1" fill="currentColor" fill-opacity="0.7"/>
|
|
21
|
-
<rect x="0" y="12" width="42" height="34" rx="1" fill="currentColor" fill-opacity="0.4"/>
|
|
22
|
-
`},{label:`卡片网格(新颖)`,value:`card-layout`,disabled:!1,svg:`
|
|
23
|
-
<rect x="0" y="0" width="24" height="20" rx="2" fill="currentColor" fill-opacity="0.9"/>
|
|
24
|
-
<rect x="32" y="0" width="24" height="20" rx="2" fill="currentColor" fill-opacity="0.7"/>
|
|
25
|
-
<rect x="0" y="24" width="24" height="20" rx="2" fill="currentColor" fill-opacity="0.6"/>
|
|
26
|
-
<rect x="32" y="24" width="24" height="20" rx="2" fill="currentColor" fill-opacity="0.4"/>
|
|
27
|
-
`}],xt={class:`settings-section`},St={class:`preset-grid`},Ct=[`aria-pressed`,`onClick`,`onKeydown`],wt={class:`preset-icon`},Tt={class:`preset-name`},Et={class:`preset-color`},Dt={class:`settings-section`},Ot={class:`settings-section`},kt={class:`color-picker-wrapper`},At={class:`color-value`},jt={class:`settings-section`},Mt={class:`settings-section`},Nt={class:`flex items-center justify-between mb-2`},Pt={class:`settings-section`},Ft={class:`settings-section`},It={class:`layout-grid`},Lt=[`tabindex`,`aria-disabled`,`aria-pressed`,`onClick`,`onKeydown`],Rt={class:`layout-screenshot`},zt={class:`layout-svg`,viewBox:`0 0 56 48`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`},Bt=[`innerHTML`],Vt={class:`layout-label`},Ht={key:0,class:`badge-soon`},Ut={class:`settings-section menu-expand-section`,"data-menu-expand-mode":`built-in`},Wt={class:`settings-section`},Gt={class:`setting-item`},Kt={class:`setting-item`},qt={class:`setting-item`},Jt={class:`setting-item`},Yt={class:`settings-section`},Xt={class:`slider-item`},Zt={class:`slider-label`},Qt={class:`slider-value`},$t={class:`slider-item`},en={class:`slider-label`},tn={class:`slider-value`},nn={class:`settings-section`},rn={class:`settings-section`},an={class:`action-buttons-grid`},on={class:`settings-section`},sn={class:`action-buttons-grid`},cn={class:`settings-section`},ln={class:`setting-item`},un={class:`setting-item`},dn={class:`settings-section`},fn={class:`setting-item`},pn={key:0,class:`mt-2`},mn={class:`settings-section`},hn={class:`system-info`},gn={class:`info-item`},_n={class:`info-value`},vn={class:`info-item`},yn={class:`info-value`},bn={class:`info-item`},xn={class:`info-value`},Sn={class:`info-item`},Cn={class:`info-value`},wn={class:`info-item`},Tn={class:`info-value`},En={class:`info-item`},Dn={class:`info-value`},On=_((0,e.defineComponent)({__name:`index`,props:(0,e.mergeModels)({width:{default:380},store:{},actions:{},maxImportBytes:{default:1024*1024}},{show:{type:Boolean,default:!1},showModifiers:{}}),emits:[`update:show`],setup(n){let r=n,i=(0,t.useMessage)(),o=(0,t.useDialog)(),s=(0,e.inject)(a,null),c=r.store??s??Z(),l=(0,e.useModel)(n,`show`),u=(0,e.ref)(`appearance`),d=typeof document<`u`&&document.documentElement.classList.contains(`gray-mode`),f=typeof document<`u`&&document.documentElement.classList.contains(`color-weak-mode`),p=(0,e.ref)(d),m=(0,e.ref)(f),h=(0,e.ref)(!1),g=(0,e.ref)(`Robot Admin`),_=null,v=e=>{if(typeof document>`u`)return;_&&=(_.remove(),null);let t=document.createElement(`canvas`),n=t.getContext(`2d`);if(!n){i.error(`当前浏览器无法创建水印画布`);return}t.width=200,t.height=150,n.font=`14px Microsoft JhengHei`,n.fillStyle=`rgba(120, 120, 120, 0.15)`,n.rotate(-20*Math.PI/180),n.fillText(e,0,80),_=document.createElement(`div`),_.dataset.robotAdminLayoutWatermark=`true`,_.style.cssText=`
|
|
28
|
-
position: fixed;
|
|
29
|
-
top: 0;
|
|
30
|
-
left: 0;
|
|
31
|
-
width: 100%;
|
|
32
|
-
height: 100%;
|
|
33
|
-
pointer-events: none;
|
|
34
|
-
background-image: url(${t.toDataURL()});
|
|
35
|
-
background-repeat: repeat;
|
|
36
|
-
z-index: 9999;
|
|
37
|
-
user-select: none;
|
|
38
|
-
`,document.body.appendChild(_)},y=()=>{_&&=(_.remove(),null)};(0,e.watch)(p,e=>{typeof document<`u`&&document.documentElement.classList.toggle(`gray-mode`,e)}),(0,e.watch)(m,e=>{typeof document<`u`&&document.documentElement.classList.toggle(`color-weak-mode`,e)}),(0,e.watch)(h,e=>{e?v(g.value):y()}),(0,e.watch)(g,e=>{h.value&&v(e)});let b=(0,e.computed)(()=>{if(typeof navigator>`u`||typeof window>`u`)return{browser:`Unknown`,os:`Unknown`,resolution:`Unknown`,pixelRatio:`Unknown`,language:`Unknown`,timezone:`Unknown`};let e=navigator.userAgent,t=`Unknown`,n=`Unknown`;return e.includes(`Edg/`)?t=`Edge`:e.includes(`Firefox`)?t=`Firefox`:e.includes(`Chrome`)?t=`Chrome`:e.includes(`Safari`)&&(t=`Safari`),e.includes(`Windows`)?n=`Windows`:e.includes(`Mac`)?n=`macOS`:e.includes(`Android`)?n=`Android`:e.includes(`iOS`)?n=`iOS`:e.includes(`Linux`)&&(n=`Linux`),{browser:t,os:n,resolution:`${window.screen.width} × ${window.screen.height}`,pixelRatio:window.devicePixelRatio+`x`,language:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone}});(0,e.onUnmounted)(()=>{y(),typeof document<`u`&&(document.documentElement.classList.toggle(`gray-mode`,d),document.documentElement.classList.toggle(`color-weak-mode`,f))});let x=(e,t)=>{t||(c.layoutMode=e)},S=e=>c.primaryColor===e.primaryColor,C=e=>{c.applyPreset(e),i.success(`已应用「${e.name}」主题方案`)},w=async e=>{try{await c.updateThemeMode(e)}catch{i.error(`主题模式切换失败`)}},T=async()=>{try{await c.updateThemeMode(G.themeMode),c.primaryColor=G.primaryColor,c.borderRadius=G.borderRadius,c.transitionType=G.transitionType,c.enableTransition=G.enableTransition,i.success(`已恢复外观默认设置`)}catch{i.error(`恢复外观默认设置失败`)}},E=()=>{c.layoutMode=G.layoutMode,c.menuExpandMode=G.menuExpandMode,c.fixedHeader=G.fixedHeader,c.showBreadcrumb=G.showBreadcrumb,c.showBreadcrumbIcon=G.showBreadcrumbIcon,c.showTagsView=G.showTagsView,c.tagsViewHeight=G.tagsViewHeight,c.tagsViewStyle=G.tagsViewStyle,c.showFooter=G.showFooter,c.sidebarWidth=G.sidebarWidth,c.sidebarCollapsedWidth=G.sidebarCollapsedWidth,c.headerHeight=G.headerHeight,i.success(`已恢复布局默认设置`)},D=()=>{o.warning({title:`确认重置`,content:`确定要恢复默认配置吗?此操作不可撤销。`,positiveText:`确认`,negativeText:`取消`,onPositiveClick:async()=>{let e={...c.settingsState};try{c.resetSettings(),await c.updateThemeMode(c.themeMode),i.success(`已恢复默认配置`)}catch{c.$patch(e),i.error(`恢复默认配置失败`)}}})},O=()=>{o.warning({title:`确认清除`,content:`确定要清除浏览器缓存吗?`,positiveText:`确认`,negativeText:`取消`,onPositiveClick:async()=>{if(!r.actions?.clearCache){i.warning(`宿主应用未配置可安全清理的缓存`);return}try{await r.actions.clearCache(),i.success(`缓存已清除`)}catch{i.error(`缓存清除失败`)}}})},k=()=>{r.actions?.reloadPage?r.actions.reloadPage():typeof window<`u`&&window.location.reload()},A=()=>{let e={schemaVersion:1,settings:c.settingsState,gray:p.value,colorWeak:m.value,watermark:{enabled:h.value,text:g.value},exportTime:new Date().toISOString()},t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`robot-admin-config-${Date.now()}.json`,r.click(),URL.revokeObjectURL(n),i.success(`配置已导出`)},j=()=>{if(typeof document>`u`)return;let e=document.createElement(`input`);e.type=`file`,e.accept=`application/json`,e.onchange=async e=>{let t=e.target.files?.[0];if(t)try{if(t.size>r.maxImportBytes)throw RangeError(`配置文件过大`);let e=await t.text(),n=J(JSON.parse(e));if(n.settings!==void 0){let{themeMode:e,...t}=n.settings;e!==void 0&&await c.updateThemeMode(e),c.$patch(t)}n.gray!==void 0&&(p.value=n.gray),n.colorWeak!==void 0&&(m.value=n.colorWeak),n.watermark!==void 0&&(h.value=n.watermark.enabled,g.value=n.watermark.text),i.success(`配置已导入`)}catch{i.error(`配置文件格式错误`)}},e.click()};return(r,i)=>((0,e.openBlock)(),(0,e.createBlock)((0,e.unref)(t.NDrawer),{show:l.value,"onUpdate:show":i[16]||=e=>l.value=e,width:n.width,placement:`right`,"trap-focus":!0,"block-scroll":!0},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NDrawerContent),{title:`⚙️ 布局配置`,closable:``},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NTabs),{value:u.value,"onUpdate:value":i[15]||=e=>u.value=e,animated:``,class:`settings-tabs`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NTabPane),{name:`appearance`,tab:`🎨 外观`},{default:(0,e.withCtx)(()=>[(0,e.renderSlot)(r.$slots,`appearance-prepend`,{settings:(0,e.unref)(c)},void 0,!0),(0,e.createElementVNode)(`div`,xt,[(0,e.createElementVNode)(`div`,St,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(H),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.name,class:(0,e.normalizeClass)([`preset-card`,{active:S(t)}]),role:`button`,tabindex:`0`,"aria-pressed":S(t),onClick:e=>C(t),onKeydown:[(0,e.withKeys)(e=>C(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>C(t),[`prevent`]),[`space`])]},[(0,e.createElementVNode)(`div`,wt,(0,e.toDisplayString)(t.icon),1),(0,e.createElementVNode)(`div`,Tt,(0,e.toDisplayString)(t.name),1),(0,e.createElementVNode)(`div`,Et,[(0,e.createElementVNode)(`span`,{class:`color-dot`,style:(0,e.normalizeStyle)({backgroundColor:t.primaryColor})},null,4)])],42,Ct))),128))])]),(0,e.createElementVNode)(`div`,Dt,[i[20]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`主题模式`,-1),(0,e.createVNode)((0,e.unref)(t.NRadioGroup),{value:(0,e.unref)(c).themeMode,class:`mode-group`,"onUpdate:value":w},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`light`},{default:(0,e.withCtx)(()=>[...i[17]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:white-balance-sunny mr-1`},null,-1),(0,e.createTextVNode)(` 浅色 `,-1)]]),_:1}),(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`dark`},{default:(0,e.withCtx)(()=>[...i[18]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:moon-waning-crescent mr-1`},null,-1),(0,e.createTextVNode)(` 深色 `,-1)]]),_:1}),(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`system`},{default:(0,e.withCtx)(()=>[...i[19]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:theme-light-dark mr-1`},null,-1),(0,e.createTextVNode)(` 自动 `,-1)]]),_:1})]),_:1},8,[`value`])]),(0,e.createElementVNode)(`div`,Ot,[i[21]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`主题色`,-1),(0,e.createElementVNode)(`div`,kt,[(0,e.createVNode)((0,e.unref)(t.NColorPicker),{value:(0,e.unref)(c).primaryColor,"onUpdate:value":i[0]||=t=>(0,e.unref)(c).primaryColor=t,"show-alpha":!1,swatches:(0,e.unref)(K),actions:[`confirm`]},null,8,[`value`,`swatches`]),(0,e.createElementVNode)(`span`,At,(0,e.toDisplayString)((0,e.unref)(c).primaryColor),1)])]),(0,e.createElementVNode)(`div`,jt,[i[25]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`圆角大小`,-1),(0,e.createVNode)((0,e.unref)(t.NRadioGroup),{value:(0,e.unref)(c).borderRadius,"onUpdate:value":i[1]||=t=>(0,e.unref)(c).borderRadius=t,class:`radius-group`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`small`},{default:(0,e.withCtx)(()=>[...i[22]||=[(0,e.createTextVNode)(`小 (4px)`,-1)]]),_:1}),(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`medium`},{default:(0,e.withCtx)(()=>[...i[23]||=[(0,e.createTextVNode)(`中 (6px)`,-1)]]),_:1}),(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`large`},{default:(0,e.withCtx)(()=>[...i[24]||=[(0,e.createTextVNode)(`大 (8px)`,-1)]]),_:1})]),_:1},8,[`value`])]),(0,e.createElementVNode)(`div`,Mt,[i[31]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`页面动画`,-1),(0,e.createElementVNode)(`div`,Nt,[i[26]||=(0,e.createElementVNode)(`span`,{class:`text-sm`},`启用动画`,-1),(0,e.createVNode)((0,e.unref)(t.NSwitch),{value:(0,e.unref)(c).enableTransition,"onUpdate:value":i[2]||=t=>(0,e.unref)(c).enableTransition=t},null,8,[`value`])]),(0,e.createVNode)((0,e.unref)(t.NRadioGroup),{value:(0,e.unref)(c).transitionType,"onUpdate:value":i[3]||=t=>(0,e.unref)(c).transitionType=t,disabled:!(0,e.unref)(c).enableTransition,class:`transition-group`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`fade`},{default:(0,e.withCtx)(()=>[...i[27]||=[(0,e.createTextVNode)(`淡入`,-1)]]),_:1}),(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`slide`},{default:(0,e.withCtx)(()=>[...i[28]||=[(0,e.createTextVNode)(`滑动`,-1)]]),_:1}),(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`zoom`},{default:(0,e.withCtx)(()=>[...i[29]||=[(0,e.createTextVNode)(`缩放`,-1)]]),_:1}),(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`none`},{default:(0,e.withCtx)(()=>[...i[30]||=[(0,e.createTextVNode)(`无`,-1)]]),_:1})]),_:1},8,[`value`,`disabled`])]),(0,e.createElementVNode)(`div`,Pt,[(0,e.createVNode)((0,e.unref)(t.NButton),{block:``,secondary:``,onClick:T},{icon:(0,e.withCtx)(()=>[...i[32]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:restore`},null,-1)]]),default:(0,e.withCtx)(()=>[i[33]||=(0,e.createTextVNode)(` 恢复外观默认设置 `,-1)]),_:1})]),(0,e.renderSlot)(r.$slots,`appearance-append`,{settings:(0,e.unref)(c)},void 0,!0)]),_:3}),(0,e.createVNode)((0,e.unref)(t.NTabPane),{name:`layout`,tab:`📐 布局`},{default:(0,e.withCtx)(()=>[(0,e.renderSlot)(r.$slots,`layout-prepend`,{settings:(0,e.unref)(c)},void 0,!0),(0,e.createElementVNode)(`div`,Ft,[i[34]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`布局模式`,-1),(0,e.createElementVNode)(`div`,It,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(bt),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.value,class:(0,e.normalizeClass)([`layout-item`,{active:(0,e.unref)(c).layoutMode===t.value,disabled:t.disabled}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled,"aria-pressed":(0,e.unref)(c).layoutMode===t.value,onClick:(0,e.withModifiers)(e=>x(t.value,t.disabled),[`stop`]),onKeydown:[(0,e.withKeys)((0,e.withModifiers)(e=>x(t.value,t.disabled),[`stop`]),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>x(t.value,t.disabled),[`stop`,`prevent`]),[`space`])]},[(0,e.createElementVNode)(`div`,Rt,[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,zt,[(0,e.createElementVNode)(`g`,{innerHTML:t.svg},null,8,Bt)]))]),(0,e.createElementVNode)(`div`,Vt,[(0,e.createTextVNode)((0,e.toDisplayString)(t.label)+` `,1),t.disabled?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Ht,`敬请期待`)):(0,e.createCommentVNode)(``,!0)])],42,Lt))),128))])]),(0,e.renderSlot)(r.$slots,`layout-after-mode`,{settings:(0,e.unref)(c)},void 0,!0),(0,e.createElementVNode)(`div`,Ut,[i[37]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`菜单展开方式`,-1),(0,e.createVNode)((0,e.unref)(t.NRadioGroup),{value:(0,e.unref)(c).menuExpandMode,"onUpdate:value":i[4]||=t=>(0,e.unref)(c).menuExpandMode=t,class:`menu-expand-group`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`inline`},{default:(0,e.withCtx)(()=>[...i[35]||=[(0,e.createTextVNode)(`传统展开`,-1)]]),_:1}),(0,e.createVNode)((0,e.unref)(t.NRadioButton),{value:`panel`},{default:(0,e.withCtx)(()=>[...i[36]||=[(0,e.createTextVNode)(`右侧面板`,-1)]]),_:1})]),_:1},8,[`value`])]),(0,e.createElementVNode)(`div`,Wt,[i[42]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`界面元素`,-1),(0,e.createElementVNode)(`div`,Gt,[i[38]||=(0,e.createElementVNode)(`span`,null,`显示面包屑`,-1),(0,e.createVNode)((0,e.unref)(t.NSwitch),{value:(0,e.unref)(c).showBreadcrumb,"onUpdate:value":i[5]||=t=>(0,e.unref)(c).showBreadcrumb=t},null,8,[`value`])]),(0,e.createElementVNode)(`div`,Kt,[i[39]||=(0,e.createElementVNode)(`span`,null,`显示面包屑图标`,-1),(0,e.createVNode)((0,e.unref)(t.NSwitch),{value:(0,e.unref)(c).showBreadcrumbIcon,"onUpdate:value":i[6]||=t=>(0,e.unref)(c).showBreadcrumbIcon=t,disabled:!(0,e.unref)(c).showBreadcrumb},null,8,[`value`,`disabled`])]),(0,e.createElementVNode)(`div`,qt,[i[40]||=(0,e.createElementVNode)(`span`,null,`显示标签页`,-1),(0,e.createVNode)((0,e.unref)(t.NSwitch),{value:(0,e.unref)(c).showTagsView,"onUpdate:value":i[7]||=t=>(0,e.unref)(c).showTagsView=t},null,8,[`value`])]),(0,e.createElementVNode)(`div`,Jt,[i[41]||=(0,e.createElementVNode)(`span`,null,`显示页脚`,-1),(0,e.createVNode)((0,e.unref)(t.NSwitch),{value:(0,e.unref)(c).showFooter,"onUpdate:value":i[8]||=t=>(0,e.unref)(c).showFooter=t},null,8,[`value`])])]),(0,e.createElementVNode)(`div`,Yt,[i[45]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`尺寸调整`,-1),(0,e.createElementVNode)(`div`,Xt,[(0,e.createElementVNode)(`div`,Zt,[i[43]||=(0,e.createElementVNode)(`span`,null,`侧边栏宽度`,-1),(0,e.createElementVNode)(`span`,Qt,(0,e.toDisplayString)((0,e.unref)(c).sidebarWidth)+`px`,1)]),(0,e.createVNode)((0,e.unref)(t.NSlider),{value:(0,e.unref)(c).sidebarWidth,"onUpdate:value":i[9]||=t=>(0,e.unref)(c).sidebarWidth=t,min:180,max:280,step:10,marks:{180:`180`,220:`220`,280:`280`}},null,8,[`value`])]),(0,e.createElementVNode)(`div`,$t,[(0,e.createElementVNode)(`div`,en,[i[44]||=(0,e.createElementVNode)(`span`,null,`头部高度`,-1),(0,e.createElementVNode)(`span`,tn,(0,e.toDisplayString)((0,e.unref)(c).headerHeight)+`px`,1)]),(0,e.createVNode)((0,e.unref)(t.NSlider),{value:(0,e.unref)(c).headerHeight,"onUpdate:value":i[10]||=t=>(0,e.unref)(c).headerHeight=t,min:48,max:64,step:4,marks:{48:`48`,56:`56`,64:`64`}},null,8,[`value`])])]),(0,e.createElementVNode)(`div`,nn,[(0,e.createVNode)((0,e.unref)(t.NButton),{block:``,secondary:``,onClick:E},{icon:(0,e.withCtx)(()=>[...i[46]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:restore`},null,-1)]]),default:(0,e.withCtx)(()=>[i[47]||=(0,e.createTextVNode)(` 恢复布局默认设置 `,-1)]),_:1})]),(0,e.renderSlot)(r.$slots,`layout-append`,{settings:(0,e.unref)(c)},void 0,!0)]),_:3}),(0,e.createVNode)((0,e.unref)(t.NTabPane),{name:`features`,tab:`🔧 功能`},{default:(0,e.withCtx)(()=>[(0,e.renderSlot)(r.$slots,`features-prepend`,{settings:(0,e.unref)(c)},void 0,!0),(0,e.createElementVNode)(`div`,rn,[i[52]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`缓存管理`,-1),(0,e.createElementVNode)(`div`,an,[(0,e.createVNode)((0,e.unref)(t.NButton),{secondary:``,onClick:O},{icon:(0,e.withCtx)(()=>[...i[48]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:delete-sweep`},null,-1)]]),default:(0,e.withCtx)(()=>[i[49]||=(0,e.createTextVNode)(` 清除缓存 `,-1)]),_:1}),(0,e.createVNode)((0,e.unref)(t.NButton),{secondary:``,onClick:k},{icon:(0,e.withCtx)(()=>[...i[50]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:refresh`},null,-1)]]),default:(0,e.withCtx)(()=>[i[51]||=(0,e.createTextVNode)(` 重新加载 `,-1)]),_:1})])]),(0,e.createElementVNode)(`div`,on,[i[59]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`配置管理`,-1),(0,e.createElementVNode)(`div`,sn,[(0,e.createVNode)((0,e.unref)(t.NButton),{secondary:``,onClick:A},{icon:(0,e.withCtx)(()=>[...i[53]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:download`},null,-1)]]),default:(0,e.withCtx)(()=>[i[54]||=(0,e.createTextVNode)(` 导出配置 `,-1)]),_:1}),(0,e.createVNode)((0,e.unref)(t.NButton),{secondary:``,onClick:j},{icon:(0,e.withCtx)(()=>[...i[55]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:upload`},null,-1)]]),default:(0,e.withCtx)(()=>[i[56]||=(0,e.createTextVNode)(` 导入配置 `,-1)]),_:1})]),(0,e.createVNode)((0,e.unref)(t.NButton),{block:``,type:`error`,secondary:``,class:`mt-2`,onClick:D},{icon:(0,e.withCtx)(()=>[...i[57]||=[(0,e.createElementVNode)(`span`,{class:`i-mdi:restore`},null,-1)]]),default:(0,e.withCtx)(()=>[i[58]||=(0,e.createTextVNode)(` 重置所有配置 `,-1)]),_:1})]),(0,e.createElementVNode)(`div`,cn,[i[62]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`系统模式`,-1),(0,e.createElementVNode)(`div`,ln,[i[60]||=(0,e.createElementVNode)(`div`,{class:`setting-label`},[(0,e.createElementVNode)(`span`,null,`灰色模式`),(0,e.createElementVNode)(`span`,{class:`setting-desc`},`用于哀悼日场景`)],-1),(0,e.createVNode)((0,e.unref)(t.NSwitch),{value:p.value,"onUpdate:value":i[11]||=e=>p.value=e},null,8,[`value`])]),(0,e.createElementVNode)(`div`,un,[i[61]||=(0,e.createElementVNode)(`div`,{class:`setting-label`},[(0,e.createElementVNode)(`span`,null,`色弱模式`),(0,e.createElementVNode)(`span`,{class:`setting-desc`},`提供无障碍访问支持`)],-1),(0,e.createVNode)((0,e.unref)(t.NSwitch),{value:m.value,"onUpdate:value":i[12]||=e=>m.value=e},null,8,[`value`])])]),(0,e.createElementVNode)(`div`,dn,[i[64]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`水印设置`,-1),(0,e.createElementVNode)(`div`,fn,[i[63]||=(0,e.createElementVNode)(`span`,null,`启用水印`,-1),(0,e.createVNode)((0,e.unref)(t.NSwitch),{value:h.value,"onUpdate:value":i[13]||=e=>h.value=e},null,8,[`value`])]),h.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,pn,[(0,e.createVNode)((0,e.unref)(t.NInput),{value:g.value,"onUpdate:value":i[14]||=e=>g.value=e,placeholder:`请输入水印内容`,size:`small`},null,8,[`value`])])):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,mn,[i[71]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`系统信息`,-1),(0,e.createElementVNode)(`div`,hn,[(0,e.createElementVNode)(`div`,gn,[i[65]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`浏览器`,-1),(0,e.createElementVNode)(`span`,_n,(0,e.toDisplayString)(b.value.browser),1)]),(0,e.createElementVNode)(`div`,vn,[i[66]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`操作系统`,-1),(0,e.createElementVNode)(`span`,yn,(0,e.toDisplayString)(b.value.os),1)]),(0,e.createElementVNode)(`div`,bn,[i[67]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`屏幕分辨率`,-1),(0,e.createElementVNode)(`span`,xn,(0,e.toDisplayString)(b.value.resolution),1)]),(0,e.createElementVNode)(`div`,Sn,[i[68]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`设备像素比`,-1),(0,e.createElementVNode)(`span`,Cn,(0,e.toDisplayString)(b.value.pixelRatio),1)]),(0,e.createElementVNode)(`div`,wn,[i[69]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`语言`,-1),(0,e.createElementVNode)(`span`,Tn,(0,e.toDisplayString)(b.value.language),1)]),(0,e.createElementVNode)(`div`,En,[i[70]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`时区`,-1),(0,e.createElementVNode)(`span`,Dn,(0,e.toDisplayString)(b.value.timezone),1)])])]),(0,e.renderSlot)(r.$slots,`features-append`,{settings:(0,e.unref)(c)},void 0,!0)]),_:3})]),_:3},8,[`value`])]),_:3})]),_:3},8,[`show`,`width`]))}}),[[`__scopeId`,`data-v-d9843552`]]),kn={class:`brand-logo__icon`},An=[`src`,`width`,`height`],jn=[`src`,`width`,`height`],Mn={class:`brand-logo__name`},Nn={class:`brand-logo__title`},Pn={key:0,class:`brand-logo__subtitle`},Fn={key:0,class:`brand-logo__divider`},In=_((0,e.defineComponent)({name:`BrandLogo`,__name:`index`,props:{showName:{type:Boolean,default:!1},showDivider:{type:Boolean,default:!1},size:{default:36},collapsed:{type:Boolean,default:!1},variant:{default:`horizontal`}},setup(t){let n=c(),r={...u,...n.brand};return(n,i)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:(0,e.normalizeClass)([`brand-logo`,{"brand-logo--collapsed":t.collapsed,"brand-logo--horizontal":t.variant===`horizontal`}])},[(0,e.createElementVNode)(`div`,kn,[i[0]||=(0,e.createElementVNode)(`div`,{class:`brand-logo__glow`},null,-1),r.logoType===`video`&&r.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`video`,{key:0,src:r.logoSrc,width:t.size,height:t.size,autoplay:``,loop:``,muted:``,playsinline:``,class:`brand-logo__media`},null,8,An)):r.logoSrc?((0,e.openBlock)(),(0,e.createElementBlock)(`img`,{key:1,src:r.logoSrc,width:t.size,height:t.size,class:`brand-logo__media`,alt:`Logo`},null,8,jn)):(0,e.createCommentVNode)(``,!0)]),t.showName&&!t.collapsed?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`div`,Mn,[(0,e.createElementVNode)(`span`,Nn,(0,e.toDisplayString)(r.name),1),r.subtitle?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Pn,(0,e.toDisplayString)(r.subtitle),1)):(0,e.createCommentVNode)(``,!0)]),t.showDivider?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Fn)):(0,e.createCommentVNode)(``,!0)],64)):(0,e.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-fd1c2eec`]]),Ln={class:`icon-menu`},Rn=[`onClick`],zn={class:`icon-menu__icon`},Bn={key:1,class:`icon-menu__fallback`},Vn={class:`icon-menu__label`},Hn=_((0,e.defineComponent)({name:`IconMenu`,__name:`index`,props:{menus:{},active:{}},emits:[`click`],setup(t,{emit:n}){let r=n,i=c();return(n,a)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ln,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.menus,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n.path,class:(0,e.normalizeClass)([`icon-menu__item`,{"icon-menu__item--active":t.active===n.path}]),onClick:e=>r(`click`,n)},[(0,e.createElementVNode)(`div`,zn,[(0,e.unref)(i).iconComponent&&n.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(i).iconComponent),{key:0,name:n.meta.icon,size:20},null,8,[`name`])):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Bn,(0,e.toDisplayString)(n.meta?.title?.charAt(0)||`?`),1))]),(0,e.createElementVNode)(`div`,Vn,(0,e.toDisplayString)(n.meta?.title),1)],10,Rn))),128))]))}}),[[`__scopeId`,`data-v-f985d475`]]),Un={class:`floating-menu__header`},Wn={class:`floating-menu__brand`},Gn={class:`floating-menu__brand-title`},Kn={class:`floating-menu__brand-subtitle`},qn={class:`floating-menu__list`},Jn={key:0,class:`floating-menu__group`},Yn={class:`floating-menu__group-title`},Xn=[`onClick`,`onKeydown`],Zn={class:`floating-menu__item-text`},Qn=[`onClick`,`onKeydown`],$n={class:`floating-menu__item-text`},er=_((0,e.defineComponent)({name:`FloatingMenu`,__name:`index`,props:{show:{type:Boolean},menuItem:{},isActive:{type:Function}},emits:[`click`],setup(t,{emit:n}){let r=n,i=c(),a={...u,...i.brand};return(n,o)=>((0,e.openBlock)(),(0,e.createBlock)(e.Transition,{name:`slide-fade`},{default:(0,e.withCtx)(()=>[t.show&&t.menuItem?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`floating-menu`,[(0,e.unref)(i).isDark.value?`dark-theme`:`light-theme`]]),role:`navigation`,"aria-label":`二级功能导航`},[(0,e.createElementVNode)(`div`,Un,[(0,e.createElementVNode)(`div`,Wn,[(0,e.createElementVNode)(`span`,Gn,(0,e.toDisplayString)(a.name),1),(0,e.createElementVNode)(`span`,Kn,(0,e.toDisplayString)(a.subtitle),1)])]),(0,e.createElementVNode)(`div`,qn,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.menuItem.children,n=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:n.path},[n.children&&n.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Jn,[(0,e.createElementVNode)(`div`,Yn,[(0,e.unref)(i).iconComponent&&n.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(i).iconComponent),{key:0,name:n.meta.icon,size:16},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.meta?.title),1)]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(n.children,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n.path,class:(0,e.normalizeClass)([`floating-menu__item floating-menu__item--sub`,{active:t.isActive?.(n.path)}]),role:`link`,tabindex:`0`,onClick:e=>r(`click`,n),onKeydown:[(0,e.withKeys)(e=>r(`click`,n),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>r(`click`,n),[`prevent`]),[`space`])]},[(0,e.unref)(i).iconComponent&&n.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(i).iconComponent),{key:0,name:n.meta.icon,size:16},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,Zn,(0,e.toDisplayString)(n.meta?.title),1)],42,Xn))),128))])):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`floating-menu__item`,{active:t.isActive?.(n.path)}]),role:`link`,tabindex:`0`,onClick:e=>r(`click`,n),onKeydown:[(0,e.withKeys)(e=>r(`click`,n),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>r(`click`,n),[`prevent`]),[`space`])]},[(0,e.unref)(i).iconComponent&&n.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(i).iconComponent),{key:0,name:n.meta.icon,size:18},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,$n,(0,e.toDisplayString)(n.meta?.title),1)],42,Qn))],64))),128))])],2)):(0,e.createCommentVNode)(``,!0)]),_:1}))}}),[[`__scopeId`,`data-v-3dc6f434`]]),tr={class:`side-menu__header`},nr={class:`side-menu__header-icon`},rr={class:`side-menu__header-title`},ir={class:`side-menu__list`},ar={key:0,class:`side-menu__group`},or={class:`side-menu__group-label`},sr=[`onClick`],cr={class:`side-menu__item-text`},Q=[`onClick`],lr={class:`side-menu__item-text`},ur=_((0,e.defineComponent)({name:`SideMenu`,__name:`index`,props:{menus:{},activeItem:{},isActive:{type:Function}},emits:[`click`],setup(t,{emit:n}){let r=n,i=c(),a=(0,e.ref)(!1);return(n,o)=>t.menus.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`side-menu-toggle`,[(0,e.unref)(i).isDark.value?`dark-theme`:`light-theme`,{active:!a.value}]]),onClick:o[0]||=e=>a.value=!a.value},[(0,e.createElementVNode)(`i`,{class:(0,e.normalizeClass)([`toggle-icon`,a.value?`i-ri:side-bar-line`:`i-ri:arrow-right-s-line`])},null,2)],2),(0,e.createVNode)(e.Transition,{name:`glass-slide`},{default:(0,e.withCtx)(()=>[a.value?(0,e.createCommentVNode)(``,!0):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`side-menu`,[(0,e.unref)(i).isDark.value?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,tr,[(0,e.createElementVNode)(`div`,nr,[(0,e.unref)(i).iconComponent&&t.activeItem?.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(i).iconComponent),{key:0,name:t.activeItem.meta.icon,size:17},null,8,[`name`])):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`span`,rr,(0,e.toDisplayString)(t.activeItem?.meta?.title||`菜单`),1)]),(0,e.createElementVNode)(`div`,ir,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.menus,n=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:n.path},[n.children&&n.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ar,[(0,e.createElementVNode)(`div`,or,[(0,e.unref)(i).iconComponent&&n.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(i).iconComponent),{key:0,name:n.meta.icon,size:14},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(n.meta?.title),1)]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(n.children,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n.path,class:(0,e.normalizeClass)([`side-menu__item`,{active:t.isActive?.(n.path)}]),onClick:e=>r(`click`,n)},[(0,e.unref)(i).iconComponent&&n.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(i).iconComponent),{key:0,name:n.meta.icon,size:15},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,cr,(0,e.toDisplayString)(n.meta?.title),1)],10,sr))),128))])):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`side-menu__item`,{active:t.isActive?.(n.path)}]),onClick:e=>r(`click`,n)},[(0,e.unref)(i).iconComponent&&n.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(i).iconComponent),{key:0,name:n.meta.icon,size:16},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,lr,(0,e.toDisplayString)(n.meta?.title),1)],10,Q))],64))),128))])],2))]),_:1})],64)):(0,e.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-1909f229`]]),dr=[`aria-hidden`],fr={class:`drawer-menu__content`},pr={class:`drawer-menu__grid`},mr=[`onClick`,`onKeydown`],hr={key:0,class:`drawer-menu__items`},gr=[`onClick`,`onKeydown`],_r={class:`drawer-menu__item-text`},vr={key:0,class:`drawer-menu__sub-items`},yr={class:`drawer-menu__sub-title`},br=[`onClick`,`onKeydown`],xr={class:`drawer-menu__item-text`},Sr=_((0,e.defineComponent)({name:`DrawerMenu`,__name:`index`,props:{menus:{},show:{type:Boolean}},setup(t){let r=c(),i=(0,n.useRouter)(),a=(0,e.inject)(s,{show:()=>{},startHide:()=>{},hide:()=>{}}),o=e=>{e.path&&(i.push(e.path),a.hide())};return(n,i)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:(0,e.normalizeClass)([`drawer-menu`,[(0,e.unref)(r).isDark.value?`dark-theme`:`light-theme`,{visible:t.show}]]),role:`navigation`,"aria-label":`功能导航`,"aria-hidden":!t.show,onMouseenter:i[0]||=t=>(0,e.unref)(a).show(),onMouseleave:i[1]||=t=>(0,e.unref)(a).startHide()},[i[2]||=(0,e.createElementVNode)(`div`,{class:`drawer-menu__header`},[(0,e.createElementVNode)(`div`,{class:`drawer-menu__title`},[(0,e.createElementVNode)(`span`,{class:`grid-icon`},[(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`)]),(0,e.createElementVNode)(`span`,null,`功能导航`)])],-1),(0,e.createElementVNode)(`div`,fr,[(0,e.createElementVNode)(`div`,pr,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.menus,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:`drawer-menu__category`},[(0,e.createElementVNode)(`div`,{class:`drawer-menu__category-header`,role:`link`,tabindex:`0`,onClick:e=>o(t),onKeydown:[(0,e.withKeys)(e=>o(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>o(t),[`prevent`]),[`space`])]},[(0,e.unref)(r).iconComponent&&t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(r).iconComponent),{key:0,name:t.meta.icon,size:18},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.meta?.title),1)],40,mr),t.children&&t.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,hr,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:`drawer-menu__item`,role:`link`,tabindex:`0`,onClick:e=>o(t),onKeydown:[(0,e.withKeys)(e=>o(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>o(t),[`prevent`]),[`space`])]},[(0,e.unref)(r).iconComponent&&t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(r).iconComponent),{key:0,name:t.meta.icon,size:16},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,_r,(0,e.toDisplayString)(t.meta?.title),1)],40,gr))),128)),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:t.path},[t.children&&t.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,vr,[(0,e.createElementVNode)(`div`,yr,(0,e.toDisplayString)(t.meta?.title),1),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.children,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.path,class:`drawer-menu__item drawer-menu__item--sub`,role:`link`,tabindex:`0`,onClick:e=>o(t),onKeydown:[(0,e.withKeys)(e=>o(t),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(e=>o(t),[`prevent`]),[`space`])]},[(0,e.unref)(r).iconComponent&&t.meta?.icon?((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)((0,e.unref)(r).iconComponent),{key:0,name:t.meta.icon,size:14},null,8,[`name`])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,xr,(0,e.toDisplayString)(t.meta?.title),1)],40,br))),128))])):(0,e.createCommentVNode)(``,!0)],64))),128))])):(0,e.createCommentVNode)(``,!0)]))),128))])])],42,dr))}}),[[`__scopeId`,`data-v-91d54a20`]]),Cr=_((0,e.defineComponent)({name:`MenuTrigger`,__name:`index`,props:{show:{type:Boolean}},setup(t){let n=(0,e.inject)(s,{show:()=>{},startHide:()=>{},hide:()=>{}});return(t,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:`menu-trigger`,onMouseenter:r[0]||=t=>(0,e.unref)(n).show(),onMouseleave:r[1]||=t=>(0,e.unref)(n).startHide()},[...r[2]||=[(0,e.createElementVNode)(`div`,{class:`menu-trigger__indicator`},[(0,e.createElementVNode)(`span`,{class:`hamburger-icon`},[(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`)])],-1)]],32))}}),[[`__scopeId`,`data-v-2c20af78`]]);function wr(e,t={}){let n=X(t),r=n();return e.provide(a,r),n}function $(t){let{settings:n}=t;return{menus:(0,e.computed)(()=>(0,e.toValue)(t.menus)),isDark:(0,e.computed)(()=>(0,e.toValue)(t.isDark)),layoutMode:(0,e.computed)(()=>n.layoutMode),collapsed:(0,e.computed)({get:()=>n.collapsed,set:e=>{n.collapsed=e}}),menuExpandMode:(0,e.computed)(()=>n.menuExpandMode),sidebarWidth:(0,e.computed)(()=>n.sidebarWidth),sidebarCollapsedWidth:(0,e.computed)(()=>n.sidebarCollapsedWidth),showFooter:(0,e.computed)(()=>n.showFooter),showTagsView:(0,e.computed)(()=>n.showTagsView),tagsViewHeight:(0,e.computed)(()=>n.tagsViewHeight),headerHeight:(0,e.computed)(()=>n.headerHeight),transitionName:(0,e.computed)(()=>n.transitionName),showBreadcrumb:(0,e.computed)(()=>n.showBreadcrumb),showBreadcrumbIcon:(0,e.computed)(()=>n.showBreadcrumbIcon),fixedHeader:(0,e.computed)(()=>n.fixedHeader),brand:{...u,...t.brand},iconComponent:t.iconComponent}}function Tr(e){return l($(e))}var Er=p,Dr=k,Or=M,kr=R,Ar=z,jr=B;exports.BORDER_RADIUS_MAP=U,exports.BrandLogo=In,exports.COLOR_SWATCHES=K,exports.C_CardLayout=jr,exports.C_LayoutContainer=mt,exports.C_MixLayout=Or,exports.C_MixTopLayout=kr,exports.C_ReverseHorizontalMixLayout=Ar,exports.C_SideLayout=Er,exports.C_TopLayout=Dr,exports.CardLayout=B,exports.DEFAULT_BRAND_CONFIG=u,exports.DEFAULT_SETTINGS=G,exports.DRAWER_HANDLER_KEY=s,exports.DrawerMenu=Sr,exports.FloatingMenu=er,exports.IconMenu=Hn,exports.LAYOUT_CONTEXT_KEY=i,exports.LAYOUT_MODES=ht,exports.LAYOUT_SETTINGS_KEY=a,exports.MENU_COLLAPSE_KEY=o,exports.MenuTrigger=Cr,exports.MixLayout=M,exports.MixTopLayout=R,exports.PRESET_COLORS=V,exports.ResponsiveMenu=v,exports.ReverseHorizontalMixLayout=z,exports.SETTINGS_CONFIG_SCHEMA_VERSION=yt,exports.SettingsDrawer=On,exports.SideLayout=p,exports.SideMenu=ur,exports.THEME_PRESETS=H,exports.TRANSITION_MAP=W,exports.TopLayout=k,exports.adjustColor=Y,exports.createLayoutContext=$,exports.createSettingsStore=X,exports.provideLayout=Tr,exports.provideLayoutContext=l,exports.sanitizeLayoutSettingsConfig=J,exports.sanitizeSettingsPatch=q,exports.setupLayout=wr,exports.shouldCacheRoute=d,exports.useLayoutCache=f,exports.useLayoutContext=c,exports.useMenuSplit=j,exports.useSettingsStore=Z;
|
|
39
|
-
//# sourceMappingURL=index.cjs.map
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./vue-DhbxgFgz.cjs`),t=require(`./naive-BfZUS_c8.cjs`);exports.BORDER_RADIUS_MAP=e.d,exports.BrandLogo=t.v,exports.COLOR_SWATCHES=e.f,exports.C_CardLayout=t.t,exports.C_LayoutContainer=t.b,exports.C_MixLayout=t.n,exports.C_MixTopLayout=t.r,exports.C_ReverseHorizontalMixLayout=t.i,exports.C_SideLayout=t.a,exports.C_TopLayout=t.o,exports.CardLayout=t.s,exports.DEFAULT_BRAND_CONFIG=e.j,exports.DEFAULT_SETTINGS=e.p,exports.DRAWER_HANDLER_KEY=e.M,exports.DrawerMenu=t.m,exports.FloatingMenu=t.g,exports.IconMenu=t._,exports.LAYOUT_CONTEXT_KEY=e.N,exports.LAYOUT_MODES=e.m,exports.LAYOUT_SETTINGS_KEY=e.P,exports.LayoutActionUnavailableError=e.t,exports.MENU_COLLAPSE_KEY=e.F,exports.MenuTrigger=t.p,exports.MixLayout=t.c,exports.MixTopLayout=t.l,exports.PRESET_COLORS=e.h,exports.ResponsiveMenu=t.x,exports.ReverseHorizontalMixLayout=t.u,exports.SETTINGS_CONFIG_SCHEMA_VERSION=e.v,exports.SettingsDrawer=t.y,exports.SideLayout=t.d,exports.SideMenu=t.h,exports.THEME_PRESETS=e.g,exports.TRANSITION_MAP=e._,exports.TopLayout=t.f,exports.adjustColor=e.y,exports.assertLayoutSettingsRelationships=e.b,exports.bindLayoutCssVariables=e.l,exports.calculateVisibleMenuCount=e.E,exports.createLayoutContext=e.r,exports.createSettingsStore=e.s,exports.estimateMenuItemWidth=e.D,exports.isPathSegmentPrefix=e.w,exports.normalizeLayoutMenus=e.a,exports.provideLayout=e.i,exports.provideLayoutContext=e.I,exports.sanitizeLayoutSettingsConfig=e.x,exports.sanitizeSettingsPatch=e.S,exports.setupLayout=e.o,exports.shouldCacheRoute=e.k,exports.useLayoutCache=e.A,exports.useLayoutContext=e.L,exports.useLayoutCssVariables=e.u,exports.useLayoutIcon=e.C,exports.useMenuSplit=e.T,exports.useResponsiveMenu=e.O,exports.useSettingsController=e.n,exports.useSettingsStore=e.c;
|