@robot-admin/layout 3.0.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 -144
- package/README.md +519 -410
- 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 +1537 -360
- package/dist/index.d.ts +1537 -360
- package/dist/index.js +3 -2296
- 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 -100
- 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.0.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.0.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;return a&&typeof window<`u`&&(window.__clearCache__=p,window.__removeCache__=f,window.__getCachedViews__=m,(0,e.onUnmounted)(()=>{window.__clearCache__===p&&delete window.__clearCache__,window.__removeCache__===f&&delete window.__removeCache__,window.__getCachedViews__===m&&delete window.__getCachedViews__})),(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`},N={class:`logo-container`},P=[`src`,`width`,`height`],F=[`src`,`width`,`height`,`alt`],I={class:`first-menu-list`},L=[`tabindex`,`aria-disabled`,`aria-current`,`onClick`,`onKeydown`],R={class:`menu-item-content`},ge={key:1,class:`menu-item-text`},_e={class:`menu-item-label`},ve={class:`main-area`},ye={class:`navbar-left`},be={class:`brand-name`},xe={class:`brand-title`},Se={class:`brand-subtitle`},Ce={class:`navbar-center`},we={class:`page-content`},z=(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`,N,[(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,P)):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,F)):(0,e.createCommentVNode)(``,!0)])]),(0,e.createElementVNode)(`div`,I,[((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`,R,[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`,ge,(0,e.toDisplayString)((t.meta?.title||``)[0]),1))]),(0,e.createElementVNode)(`span`,_e,(0,e.toDisplayString)(t.meta?.title),1)],42,L))),128))])],2),(0,e.createElementVNode)(`div`,ve,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`top-navbar`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,ye,[(0,e.renderSlot)(n.$slots,`brand`,{},()=>[(0,e.createElementVNode)(`div`,be,[(0,e.createElementVNode)(`span`,xe,(0,e.toDisplayString)(h.name),1),(0,e.createElementVNode)(`span`,Se,(0,e.toDisplayString)(h.subtitle),1)]),r[1]||=(0,e.createElementVNode)(`div`,{class:`navbar-divider`},null,-1)])]),(0,e.createElementVNode)(`div`,Ce,[(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`,we,[(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})])])}}}),Te={class:`reverse-horizontal-mix-layout-container`},Ee={class:`navbar-left`},De={class:`logo-container`},Oe=[`src`,`width`,`height`],ke=[`src`,`width`,`height`,`alt`],Ae={class:`brand-name`},je={class:`brand-title`},Me={class:`brand-subtitle`},Ne={class:`navbar-center`},Pe={class:`main-area`},Fe={class:`page-content`},Ie=[`aria-expanded`,`onKeydown`],Le={class:`header-icon`},Re={class:`header-title`},ze={class:`sidebar-menu-list`},Be={key:0,class:`menu-group`},Ve={class:`group-title`},He=[`tabindex`,`aria-disabled`,`aria-current`,`onClick`,`onKeydown`],Ue={class:`item-title`},We=[`tabindex`,`aria-disabled`,`aria-current`,`onClick`,`onKeydown`],Ge={class:`item-title`},B=(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`,Te,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`top-navbar`,[(0,e.unref)(o)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,Ee,[(0,e.renderSlot)(n.$slots,`logo`,{},()=>[(0,e.createElementVNode)(`div`,De,[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,Oe)):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,ke)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,Ae,[(0,e.createElementVNode)(`span`,je,(0,e.toDisplayString)(h.name),1),(0,e.createElementVNode)(`span`,Me,(0,e.toDisplayString)(h.subtitle),1)]),r[1]||=(0,e.createElementVNode)(`div`,{class:`navbar-divider`},null,-1)])]),(0,e.createElementVNode)(`div`,Ne,[(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`,Pe,[(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`,Fe,[(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,Ie)):(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`,Le,[(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`,Re,(0,e.toDisplayString)((0,e.unref)(g).activeFirstMenuItem.value?.meta?.title||`菜单`),1)],2),(0,e.createElementVNode)(`div`,ze,[((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`,Be,[(0,e.createElementVNode)(`div`,Ve,[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`,Ue,(0,e.toDisplayString)(t.meta?.title),1)],42,He))),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`,Ge,(0,e.toDisplayString)(t.meta?.title),1)],42,We))],64))),128))])],2)],2)):(0,e.createCommentVNode)(``,!0)])])}}}),Ke={class:`card-layout-container`},qe={class:`navbar-left`},Je={class:`logo-container`},Ye=[`src`,`width`,`height`],Xe=[`src`,`width`,`height`,`alt`],Ze={class:`brand-name`},Qe={class:`brand-title`},$e={class:`brand-subtitle`},et={class:`drawer-content`},tt={class:`menu-grid`},nt=[`tabindex`,`aria-disabled`,`onClick`,`onKeydown`],rt={key:0,class:`category-items`},it=[`tabindex`,`aria-disabled`,`onClick`,`onKeydown`],at={class:`item-title`},ot={key:0,class:`submenu-items`},st={class:`submenu-title`},ct=[`tabindex`,`aria-disabled`,`onClick`,`onKeydown`],lt={class:`item-title`},ut={class:`main-content-area`},dt={class:`page-content`},V=_((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`,Ke,[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`top-navbar`,[(0,e.unref)(l)?`dark-theme`:`light-theme`]])},[(0,e.createElementVNode)(`div`,qe,[(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`,Je,[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,Ye)):_.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,Xe)):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,Ze,[(0,e.createElementVNode)(`span`,Qe,(0,e.toDisplayString)(_.name),1),(0,e.createElementVNode)(`span`,$e,(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`,et,[(0,e.createElementVNode)(`div`,tt,[((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,nt),t.children&&t.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,rt,[((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`,at,(0,e.toDisplayString)(t.meta?.title),1)],40,it))),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`,ot,[(0,e.createElementVNode)(`div`,st,(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`,lt,(0,e.toDisplayString)(t.meta?.title),1)],40,ct))),128))])):(0,e.createCommentVNode)(``,!0)],64))),128))])):(0,e.createCommentVNode)(``,!0)]))),128))])])],!0)],34),(0,e.createElementVNode)(`div`,ut,[(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`,dt,[(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`]]),ft={key:6,class:`layout-coming-soon`},pt=(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)(z,{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)(B,{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)(V,{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`,ft,[...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))}}),H=[{name:`拂晓蓝`,value:`#409eff`},{name:`薄暮红`,value:`#f5222d`},{name:`火山橙`,value:`#fa541c`},{name:`日暮黄`,value:`#faad14`},{name:`极光绿`,value:`#52c41a`},{name:`明青`,value:`#13c2c2`},{name:`极客蓝`,value:`#2f54eb`},{name:`酱紫`,value:`#722ed1`}],U=[{name:`科技蓝`,icon:`💙`,primaryColor:`#409eff`},{name:`清新绿`,icon:`💚`,primaryColor:`#52c41a`},{name:`商务灰`,icon:`🖤`,primaryColor:`#595959`},{name:`活力橙`,icon:`🧡`,primaryColor:`#fa8c16`},{name:`优雅紫`,icon:`💜`,primaryColor:`#722ed1`},{name:`经典红`,icon:`❤️`,primaryColor:`#f5222d`}],mt=[{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`}],W={small:`4px`,medium:`6px`,large:`8px`},G={fade:`fade-transform`,slide:`fade-slide`,zoom:`fade-zoom`,none:``},K={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.0.0`},q=H.map(e=>e.value),ht={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`])},gt=new Set([`enableTransition`,`collapsed`,`fixedHeader`,`showBreadcrumb`,`showBreadcrumbIcon`,`showTagsView`,`showFooter`,`enableHotkeys`]),_t={tagsViewHeight:[24,100],sidebarWidth:[120,480],sidebarCollapsedWidth:[32,160],headerHeight:[32,160]},vt=1;function J(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(ht)){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 gt){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(_t)){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 Y(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=J(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 X(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 Z(t={}){let{id:n=`settings`,defaults:i={},onThemeModeChange:a}=t;if(typeof n!=`string`||!n.trim())throw RangeError(`Settings store id 不能为空`);let o={...K,...J(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)(()=>W[r.value]),w=(0,e.computed)(()=>s.value&&i.value!==`none`),T=(0,e.computed)(()=>w.value?G[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`,X(n.value,10)),e.style.setProperty(`--primary-color-pressed`,X(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=>{J({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 Q=Z(),yt=[{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
|
-
`}],bt={class:`settings-section`},xt={class:`preset-grid`},St=[`aria-pressed`,`onClick`,`onKeydown`],Ct={class:`preset-icon`},wt={class:`preset-name`},Tt={class:`preset-color`},Et={class:`settings-section`},Dt={class:`settings-section`},Ot={class:`color-picker-wrapper`},kt={class:`color-value`},At={class:`settings-section`},jt={class:`settings-section`},Mt={class:`flex items-center justify-between mb-2`},Nt={class:`settings-section`},Pt={class:`settings-section`},Ft={class:`layout-grid`},It=[`tabindex`,`aria-disabled`,`aria-pressed`,`onClick`,`onKeydown`],Lt={class:`layout-screenshot`},Rt={class:`layout-svg`,viewBox:`0 0 56 48`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`},zt=[`innerHTML`],Bt={class:`layout-label`},Vt={key:0,class:`badge-soon`},Ht={class:`settings-section menu-expand-section`,"data-menu-expand-mode":`built-in`},Ut={class:`settings-section`},Wt={class:`setting-item`},Gt={class:`setting-item`},Kt={class:`setting-item`},qt={class:`setting-item`},Jt={class:`settings-section`},Yt={class:`slider-item`},Xt={class:`slider-label`},Zt={class:`slider-value`},Qt={class:`slider-item`},$t={class:`slider-label`},en={class:`slider-value`},tn={class:`settings-section`},nn={class:`settings-section`},rn={class:`action-buttons-grid`},an={class:`settings-section`},on={class:`action-buttons-grid`},sn={class:`settings-section`},cn={class:`setting-item`},ln={class:`setting-item`},un={class:`settings-section`},dn={class:`setting-item`},fn={key:0,class:`mt-2`},pn={class:`settings-section`},mn={class:`system-info`},hn={class:`info-item`},gn={class:`info-value`},_n={class:`info-item`},vn={class:`info-value`},yn={class:`info-item`},bn={class:`info-value`},xn={class:`info-item`},Sn={class:`info-value`},Cn={class:`info-item`},wn={class:`info-value`},Tn={class:`info-item`},En={class:`info-value`},Dn=_((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??Q(),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(K.themeMode),c.primaryColor=K.primaryColor,c.borderRadius=K.borderRadius,c.transitionType=K.transitionType,c.enableTransition=K.enableTransition,i.success(`已恢复外观默认设置`)}catch{i.error(`恢复外观默认设置失败`)}},E=()=>{c.layoutMode=K.layoutMode,c.menuExpandMode=K.menuExpandMode,c.fixedHeader=K.fixedHeader,c.showBreadcrumb=K.showBreadcrumb,c.showBreadcrumbIcon=K.showBreadcrumbIcon,c.showTagsView=K.showTagsView,c.tagsViewHeight=K.tagsViewHeight,c.tagsViewStyle=K.tagsViewStyle,c.showFooter=K.showFooter,c.sidebarWidth=K.sidebarWidth,c.sidebarCollapsedWidth=K.sidebarCollapsedWidth,c.headerHeight=K.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=Y(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`,bt,[(0,e.createElementVNode)(`div`,xt,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(U),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`,Ct,(0,e.toDisplayString)(t.icon),1),(0,e.createElementVNode)(`div`,wt,(0,e.toDisplayString)(t.name),1),(0,e.createElementVNode)(`div`,Tt,[(0,e.createElementVNode)(`span`,{class:`color-dot`,style:(0,e.normalizeStyle)({backgroundColor:t.primaryColor})},null,4)])],42,St))),128))])]),(0,e.createElementVNode)(`div`,Et,[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`,Dt,[i[21]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`主题色`,-1),(0,e.createElementVNode)(`div`,Ot,[(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)(q),actions:[`confirm`]},null,8,[`value`,`swatches`]),(0,e.createElementVNode)(`span`,kt,(0,e.toDisplayString)((0,e.unref)(c).primaryColor),1)])]),(0,e.createElementVNode)(`div`,At,[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`,jt,[i[31]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`页面动画`,-1),(0,e.createElementVNode)(`div`,Mt,[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`,Nt,[(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`,Pt,[i[34]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`布局模式`,-1),(0,e.createElementVNode)(`div`,Ft,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(yt),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`,Lt,[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,Rt,[(0,e.createElementVNode)(`g`,{innerHTML:t.svg},null,8,zt)]))]),(0,e.createElementVNode)(`div`,Bt,[(0,e.createTextVNode)((0,e.toDisplayString)(t.label)+` `,1),t.disabled?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Vt,`敬请期待`)):(0,e.createCommentVNode)(``,!0)])],42,It))),128))])]),(0,e.renderSlot)(r.$slots,`layout-after-mode`,{settings:(0,e.unref)(c)},void 0,!0),(0,e.createElementVNode)(`div`,Ht,[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`,Ut,[i[42]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`界面元素`,-1),(0,e.createElementVNode)(`div`,Wt,[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`,Gt,[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`,Kt,[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`,qt,[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`,Jt,[i[45]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`尺寸调整`,-1),(0,e.createElementVNode)(`div`,Yt,[(0,e.createElementVNode)(`div`,Xt,[i[43]||=(0,e.createElementVNode)(`span`,null,`侧边栏宽度`,-1),(0,e.createElementVNode)(`span`,Zt,(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`,Qt,[(0,e.createElementVNode)(`div`,$t,[i[44]||=(0,e.createElementVNode)(`span`,null,`头部高度`,-1),(0,e.createElementVNode)(`span`,en,(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`,tn,[(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`,nn,[i[52]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`缓存管理`,-1),(0,e.createElementVNode)(`div`,rn,[(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`,an,[i[59]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`配置管理`,-1),(0,e.createElementVNode)(`div`,on,[(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`,sn,[i[62]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`系统模式`,-1),(0,e.createElementVNode)(`div`,cn,[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`,ln,[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`,un,[i[64]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`水印设置`,-1),(0,e.createElementVNode)(`div`,dn,[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`,fn,[(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`,pn,[i[71]||=(0,e.createElementVNode)(`div`,{class:`section-title`},`系统信息`,-1),(0,e.createElementVNode)(`div`,mn,[(0,e.createElementVNode)(`div`,hn,[i[65]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`浏览器`,-1),(0,e.createElementVNode)(`span`,gn,(0,e.toDisplayString)(b.value.browser),1)]),(0,e.createElementVNode)(`div`,_n,[i[66]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`操作系统`,-1),(0,e.createElementVNode)(`span`,vn,(0,e.toDisplayString)(b.value.os),1)]),(0,e.createElementVNode)(`div`,yn,[i[67]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`屏幕分辨率`,-1),(0,e.createElementVNode)(`span`,bn,(0,e.toDisplayString)(b.value.resolution),1)]),(0,e.createElementVNode)(`div`,xn,[i[68]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`设备像素比`,-1),(0,e.createElementVNode)(`span`,Sn,(0,e.toDisplayString)(b.value.pixelRatio),1)]),(0,e.createElementVNode)(`div`,Cn,[i[69]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`语言`,-1),(0,e.createElementVNode)(`span`,wn,(0,e.toDisplayString)(b.value.language),1)]),(0,e.createElementVNode)(`div`,Tn,[i[70]||=(0,e.createElementVNode)(`span`,{class:`info-label`},`时区`,-1),(0,e.createElementVNode)(`span`,En,(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-c78e9ba9`]]),On={class:`brand-logo__icon`},kn=[`src`,`width`,`height`],An=[`src`,`width`,`height`],jn={class:`brand-logo__name`},Mn={class:`brand-logo__title`},Nn={key:0,class:`brand-logo__subtitle`},Pn={key:0,class:`brand-logo__divider`},Fn=_((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`,On,[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,kn)):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,An)):(0,e.createCommentVNode)(``,!0)]),t.showName&&!t.collapsed?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`div`,jn,[(0,e.createElementVNode)(`span`,Mn,(0,e.toDisplayString)(r.name),1),r.subtitle?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,Nn,(0,e.toDisplayString)(r.subtitle),1)):(0,e.createCommentVNode)(``,!0)]),t.showDivider?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Pn)):(0,e.createCommentVNode)(``,!0)],64)):(0,e.createCommentVNode)(``,!0)],2))}}),[[`__scopeId`,`data-v-fd1c2eec`]]),In={class:`icon-menu`},Ln=[`onClick`],Rn={class:`icon-menu__icon`},zn={key:1,class:`icon-menu__fallback`},Bn={class:`icon-menu__label`},Vn=_((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`,In,[((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`,Rn,[(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`,zn,(0,e.toDisplayString)(n.meta?.title?.charAt(0)||`?`),1))]),(0,e.createElementVNode)(`div`,Bn,(0,e.toDisplayString)(n.meta?.title),1)],10,Ln))),128))]))}}),[[`__scopeId`,`data-v-f985d475`]]),Hn={class:`floating-menu__header`},Un={class:`floating-menu__brand`},Wn={class:`floating-menu__brand-title`},Gn={class:`floating-menu__brand-subtitle`},Kn={class:`floating-menu__list`},qn={key:0,class:`floating-menu__group`},Jn={class:`floating-menu__group-title`},Yn=[`onClick`,`onKeydown`],Xn={class:`floating-menu__item-text`},Zn=[`onClick`,`onKeydown`],Qn={class:`floating-menu__item-text`},$n=_((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`,Hn,[(0,e.createElementVNode)(`div`,Un,[(0,e.createElementVNode)(`span`,Wn,(0,e.toDisplayString)(a.name),1),(0,e.createElementVNode)(`span`,Gn,(0,e.toDisplayString)(a.subtitle),1)])]),(0,e.createElementVNode)(`div`,Kn,[((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`,qn,[(0,e.createElementVNode)(`div`,Jn,[(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`,Xn,(0,e.toDisplayString)(n.meta?.title),1)],42,Yn))),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`,Qn,(0,e.toDisplayString)(n.meta?.title),1)],42,Zn))],64))),128))])],2)):(0,e.createCommentVNode)(``,!0)]),_:1}))}}),[[`__scopeId`,`data-v-3dc6f434`]]),er={class:`side-menu__header`},$={class:`side-menu__header-icon`},tr={class:`side-menu__header-title`},nr={class:`side-menu__list`},rr={key:0,class:`side-menu__group`},ir={class:`side-menu__group-label`},ar=[`onClick`],or={class:`side-menu__item-text`},sr=[`onClick`],cr={class:`side-menu__item-text`},lr=_((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`,er,[(0,e.createElementVNode)(`div`,$,[(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`,tr,(0,e.toDisplayString)(t.activeItem?.meta?.title||`菜单`),1)]),(0,e.createElementVNode)(`div`,nr,[((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`,rr,[(0,e.createElementVNode)(`div`,ir,[(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`,or,(0,e.toDisplayString)(n.meta?.title),1)],10,ar))),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`,cr,(0,e.toDisplayString)(n.meta?.title),1)],10,sr))],64))),128))])],2))]),_:1})],64)):(0,e.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-1909f229`]]),ur=[`aria-hidden`],dr={class:`drawer-menu__content`},fr={class:`drawer-menu__grid`},pr=[`onClick`,`onKeydown`],mr={key:0,class:`drawer-menu__items`},hr=[`onClick`,`onKeydown`],gr={class:`drawer-menu__item-text`},_r={key:0,class:`drawer-menu__sub-items`},vr={class:`drawer-menu__sub-title`},yr=[`onClick`,`onKeydown`],br={class:`drawer-menu__item-text`},xr=_((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`,dr,[(0,e.createElementVNode)(`div`,fr,[((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,pr),t.children&&t.children.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,mr,[((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`,gr,(0,e.toDisplayString)(t.meta?.title),1)],40,hr))),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`,_r,[(0,e.createElementVNode)(`div`,vr,(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`,br,(0,e.toDisplayString)(t.meta?.title),1)],40,yr))),128))])):(0,e.createCommentVNode)(``,!0)],64))),128))])):(0,e.createCommentVNode)(``,!0)]))),128))])])],42,ur))}}),[[`__scopeId`,`data-v-91d54a20`]]),Sr=_((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 Cr(e,t={}){let n=Z(t),r=n();return e.provide(a,r),n}exports.BORDER_RADIUS_MAP=W,exports.BrandLogo=Fn,exports.COLOR_SWATCHES=q,exports.C_CardLayout=V,exports.CardLayout=V,exports.C_LayoutContainer=pt,exports.C_MixLayout=M,exports.MixLayout=M,exports.C_MixTopLayout=z,exports.MixTopLayout=z,exports.C_ReverseHorizontalMixLayout=B,exports.ReverseHorizontalMixLayout=B,exports.C_SideLayout=p,exports.SideLayout=p,exports.C_TopLayout=k,exports.TopLayout=k,exports.DEFAULT_BRAND_CONFIG=u,exports.DEFAULT_SETTINGS=K,exports.DRAWER_HANDLER_KEY=s,exports.DrawerMenu=xr,exports.FloatingMenu=$n,exports.IconMenu=Vn,exports.LAYOUT_CONTEXT_KEY=i,exports.LAYOUT_MODES=mt,exports.LAYOUT_SETTINGS_KEY=a,exports.MENU_COLLAPSE_KEY=o,exports.MenuTrigger=Sr,exports.PRESET_COLORS=H,exports.ResponsiveMenu=v,exports.SETTINGS_CONFIG_SCHEMA_VERSION=vt,exports.SettingsDrawer=Dn,exports.SideMenu=lr,exports.THEME_PRESETS=U,exports.TRANSITION_MAP=G,exports.adjustColor=X,exports.createSettingsStore=Z,exports.provideLayoutContext=l,exports.sanitizeLayoutSettingsConfig=Y,exports.sanitizeSettingsPatch=J,exports.setupLayout=Cr,exports.shouldCacheRoute=d,exports.useLayoutCache=f,exports.useLayoutContext=c,exports.useMenuSplit=j,exports.useSettingsStore=Q;
|
|
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;
|