@robot-admin/layout 3.2.2 → 3.2.3
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 +7 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +4 -2
- package/dist/core/index.d.ts +4 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +23 -14
- package/dist/index.d.ts +23 -14
- package/dist/index.js +2 -2
- package/dist/naive/index.cjs +1 -1
- package/dist/naive/index.d.cts +23 -14
- package/dist/naive/index.d.ts +23 -14
- package/dist/naive/index.js +2 -2
- package/dist/{naive-BiMxNESA.cjs → naive-DTDzKwYP.cjs} +2 -2
- package/dist/{naive-BiMxNESA.cjs.map → naive-DTDzKwYP.cjs.map} +1 -1
- package/dist/{naive-Dqpxs8Vr.js → naive-H0am_E7s.js} +2 -2
- package/dist/{naive-Dqpxs8Vr.js.map → naive-H0am_E7s.js.map} +1 -1
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.d.cts +15 -8
- package/dist/vue/index.d.ts +15 -8
- package/dist/vue/index.js +1 -1
- package/dist/{vue-h8jl2I5K.js → vue-CtBraK0m.js} +6 -2
- package/dist/{vue-h8jl2I5K.js.map → vue-CtBraK0m.js.map} +1 -1
- package/dist/{vue-DVWXVFUx.cjs → vue-CtN1HvrH.cjs} +2 -2
- package/dist/{vue-DVWXVFUx.cjs.map → vue-CtN1HvrH.cjs.map} +1 -1
- package/docs/guide.md +66 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Limit ThemePresetSettings to the five supported layout settings and ignore unrelated runtime keys without overriding the preset primary color.
|
|
8
|
+
- Normalize menu metadata without inventing required host extension fields or preserving unsupported narrow title/icon values. Keep ordinary calls free of explicit generics.
|
|
9
|
+
|
|
3
10
|
## 3.2.2
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
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 assertLayoutSettingsRelationships,\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/** 校验需要跨字段判断的布局尺寸约束。 */\nexport function assertLayoutSettingsRelationships(\n settings: Pick<SettingsState, \"sidebarCollapsedWidth\" | \"sidebarWidth\">,\n): void {\n if (settings.sidebarCollapsedWidth > settings.sidebarWidth) {\n throw new RangeError(\"sidebarCollapsedWidth 不能大于 sidebarWidth\");\n }\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.2.1\",\n};\n\n// ============ 其他常量 ============\n\n/** Color swatches for color picker */\nexport const COLOR_SWATCHES = PRESET_COLORS.map((c) => c.value);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,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":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/index.ts","../../src/core/settings.ts","../../src/constants/index.ts"],"sourcesContent":["export {\n adjustColor,\n assertLayoutSettingsRelationships,\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 ThemePresetSettings,\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/** 校验需要跨字段判断的布局尺寸约束。 */\nexport function assertLayoutSettingsRelationships(\n settings: Pick<SettingsState, \"sidebarCollapsedWidth\" | \"sidebarWidth\">,\n): void {\n if (settings.sidebarCollapsedWidth > settings.sidebarWidth) {\n throw new RangeError(\"sidebarCollapsedWidth 不能大于 sidebarWidth\");\n }\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.2.1\",\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":[]}
|
package/dist/core/index.d.cts
CHANGED
|
@@ -34,13 +34,15 @@ interface SettingsState {
|
|
|
34
34
|
/** @deprecated 包版本不应参与配置迁移,请使用 SETTINGS_CONFIG_SCHEMA_VERSION。 */
|
|
35
35
|
version: string;
|
|
36
36
|
}
|
|
37
|
+
/** 主题预设实际应用的外观细节;其他布局设置由宿主单独维护。 */
|
|
38
|
+
type ThemePresetSettings = Partial<Pick<SettingsState, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle">>;
|
|
37
39
|
/** 主题预设方案。 */
|
|
38
40
|
interface ThemePreset {
|
|
39
41
|
name: string;
|
|
40
42
|
description?: string;
|
|
41
43
|
icon: string;
|
|
42
44
|
primaryColor: string;
|
|
43
|
-
settings?:
|
|
45
|
+
settings?: ThemePresetSettings;
|
|
44
46
|
}
|
|
45
47
|
/** Settings Store 初始化选项。 */
|
|
46
48
|
interface SettingsStoreOptions {
|
|
@@ -123,4 +125,4 @@ declare const DEFAULT_SETTINGS: SettingsState;
|
|
|
123
125
|
/** Color swatches for color picker */
|
|
124
126
|
declare const COLOR_SWATCHES: string[];
|
|
125
127
|
|
|
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 };
|
|
128
|
+
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 ThemePresetSettings, type TransitionType, adjustColor, assertLayoutSettingsRelationships, sanitizeLayoutSettingsConfig, sanitizeSettingsPatch };
|
package/dist/core/index.d.ts
CHANGED
|
@@ -34,13 +34,15 @@ interface SettingsState {
|
|
|
34
34
|
/** @deprecated 包版本不应参与配置迁移,请使用 SETTINGS_CONFIG_SCHEMA_VERSION。 */
|
|
35
35
|
version: string;
|
|
36
36
|
}
|
|
37
|
+
/** 主题预设实际应用的外观细节;其他布局设置由宿主单独维护。 */
|
|
38
|
+
type ThemePresetSettings = Partial<Pick<SettingsState, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle">>;
|
|
37
39
|
/** 主题预设方案。 */
|
|
38
40
|
interface ThemePreset {
|
|
39
41
|
name: string;
|
|
40
42
|
description?: string;
|
|
41
43
|
icon: string;
|
|
42
44
|
primaryColor: string;
|
|
43
|
-
settings?:
|
|
45
|
+
settings?: ThemePresetSettings;
|
|
44
46
|
}
|
|
45
47
|
/** Settings Store 初始化选项。 */
|
|
46
48
|
interface SettingsStoreOptions {
|
|
@@ -123,4 +125,4 @@ declare const DEFAULT_SETTINGS: SettingsState;
|
|
|
123
125
|
/** Color swatches for color picker */
|
|
124
126
|
declare const COLOR_SWATCHES: string[];
|
|
125
127
|
|
|
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 };
|
|
128
|
+
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 ThemePresetSettings, type TransitionType, adjustColor, assertLayoutSettingsRelationships, sanitizeLayoutSettingsConfig, sanitizeSettingsPatch };
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./vue-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./vue-CtN1HvrH.cjs`),t=require(`./naive-DTDzKwYP.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;
|
package/dist/index.d.cts
CHANGED
|
@@ -196,7 +196,7 @@ declare function __VLS_template_2(): {
|
|
|
196
196
|
resetSettings: () => void;
|
|
197
197
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
198
198
|
toggleCollapse: () => void;
|
|
199
|
-
}, "
|
|
199
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
200
200
|
defaults: Readonly<{
|
|
201
201
|
themeMode: ThemeMode;
|
|
202
202
|
primaryColor: string;
|
|
@@ -355,7 +355,7 @@ declare function __VLS_template_2(): {
|
|
|
355
355
|
resetSettings: () => void;
|
|
356
356
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
357
357
|
toggleCollapse: () => void;
|
|
358
|
-
}, "
|
|
358
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
359
359
|
defaults: Readonly<{
|
|
360
360
|
themeMode: ThemeMode;
|
|
361
361
|
primaryColor: string;
|
|
@@ -514,7 +514,7 @@ declare function __VLS_template_2(): {
|
|
|
514
514
|
resetSettings: () => void;
|
|
515
515
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
516
516
|
toggleCollapse: () => void;
|
|
517
|
-
}, "
|
|
517
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
518
518
|
defaults: Readonly<{
|
|
519
519
|
themeMode: ThemeMode;
|
|
520
520
|
primaryColor: string;
|
|
@@ -673,7 +673,7 @@ declare function __VLS_template_2(): {
|
|
|
673
673
|
resetSettings: () => void;
|
|
674
674
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
675
675
|
toggleCollapse: () => void;
|
|
676
|
-
}, "
|
|
676
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
677
677
|
defaults: Readonly<{
|
|
678
678
|
themeMode: ThemeMode;
|
|
679
679
|
primaryColor: string;
|
|
@@ -832,7 +832,7 @@ declare function __VLS_template_2(): {
|
|
|
832
832
|
resetSettings: () => void;
|
|
833
833
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
834
834
|
toggleCollapse: () => void;
|
|
835
|
-
}, "
|
|
835
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
836
836
|
defaults: Readonly<{
|
|
837
837
|
themeMode: ThemeMode;
|
|
838
838
|
primaryColor: string;
|
|
@@ -991,7 +991,7 @@ declare function __VLS_template_2(): {
|
|
|
991
991
|
resetSettings: () => void;
|
|
992
992
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
993
993
|
toggleCollapse: () => void;
|
|
994
|
-
}, "
|
|
994
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
995
995
|
defaults: Readonly<{
|
|
996
996
|
themeMode: ThemeMode;
|
|
997
997
|
primaryColor: string;
|
|
@@ -1150,7 +1150,7 @@ declare function __VLS_template_2(): {
|
|
|
1150
1150
|
resetSettings: () => void;
|
|
1151
1151
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
1152
1152
|
toggleCollapse: () => void;
|
|
1153
|
-
}, "
|
|
1153
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
1154
1154
|
defaults: Readonly<{
|
|
1155
1155
|
themeMode: ThemeMode;
|
|
1156
1156
|
primaryColor: string;
|
|
@@ -1585,7 +1585,7 @@ applyPreset: (preset: ThemePreset) => Promise<void>;
|
|
|
1585
1585
|
resetSettings: () => void;
|
|
1586
1586
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
1587
1587
|
toggleCollapse: () => void;
|
|
1588
|
-
}, "
|
|
1588
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
1589
1589
|
/** 当前 Store 实例实际使用的默认值。 */
|
|
1590
1590
|
defaults: Readonly<{
|
|
1591
1591
|
themeMode: ThemeMode;
|
|
@@ -1872,12 +1872,17 @@ export declare interface LayoutInfo {
|
|
|
1872
1872
|
export declare type LayoutMenuItem<TMeta extends MenuMeta = MenuMeta> = Omit<MenuOptions<TMeta>, "children" | "key" | "meta" | "path"> & {
|
|
1873
1873
|
key: string;
|
|
1874
1874
|
path: string;
|
|
1875
|
-
meta: TMeta
|
|
1876
|
-
title: string;
|
|
1877
|
-
};
|
|
1875
|
+
meta: LayoutMenuMeta<TMeta>;
|
|
1878
1876
|
children?: LayoutMenuItem<TMeta>[];
|
|
1879
1877
|
};
|
|
1880
1878
|
|
|
1879
|
+
/** 标准化只保证通用元数据与标题;宿主扩展字段可能因缺少 meta 而不存在。 */
|
|
1880
|
+
export declare type LayoutMenuMeta<TMeta extends MenuMeta = MenuMeta> = MenuMeta & {
|
|
1881
|
+
[K in keyof TMeta as K extends "title" | "icon" ? never : K]?: TMeta[K];
|
|
1882
|
+
} & {
|
|
1883
|
+
title: string;
|
|
1884
|
+
};
|
|
1885
|
+
|
|
1881
1886
|
/** 内置布局模式。 */
|
|
1882
1887
|
export declare type LayoutMode = "side" | "top" | "mix" | "mix-top" | "reverse-horizontal-mix" | "card-layout";
|
|
1883
1888
|
|
|
@@ -2082,6 +2087,7 @@ export declare const MixTopLayout: {
|
|
|
2082
2087
|
/**
|
|
2083
2088
|
* 非破坏地统一 path/key、label/meta.title 与字符串图标来源。
|
|
2084
2089
|
* 缺少稳定路径或 key 的节点不会进入导航,避免意外跳转到根路由。
|
|
2090
|
+
* meta 可缺省,因此不会把宿主扩展字段提升为必填;title/icon 会按通用规则补齐。
|
|
2085
2091
|
*/
|
|
2086
2092
|
export declare function normalizeLayoutMenus<TMeta extends MenuMeta = MenuMeta>(menus: readonly MenuOptions<TMeta>[]): LayoutMenuItem<TMeta>[];
|
|
2087
2093
|
|
|
@@ -2287,7 +2293,7 @@ applyPreset: (preset: ThemePreset) => Promise<void>;
|
|
|
2287
2293
|
resetSettings: () => void;
|
|
2288
2294
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
2289
2295
|
toggleCollapse: () => void;
|
|
2290
|
-
}, "
|
|
2296
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
2291
2297
|
defaults: Readonly<{
|
|
2292
2298
|
themeMode: ThemeMode;
|
|
2293
2299
|
primaryColor: string;
|
|
@@ -2479,9 +2485,12 @@ export declare interface ThemePreset {
|
|
|
2479
2485
|
description?: string;
|
|
2480
2486
|
icon: string;
|
|
2481
2487
|
primaryColor: string;
|
|
2482
|
-
settings?:
|
|
2488
|
+
settings?: ThemePresetSettings;
|
|
2483
2489
|
}
|
|
2484
2490
|
|
|
2491
|
+
/** 主题预设实际应用的外观细节;其他布局设置由宿主单独维护。 */
|
|
2492
|
+
export declare type ThemePresetSettings = Partial<Pick<SettingsState, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle">>;
|
|
2493
|
+
|
|
2485
2494
|
/** @deprecated 请使用 C_TopLayout;计划在 4.0 移除。 */
|
|
2486
2495
|
export declare const TopLayout: {
|
|
2487
2496
|
new (...args: any[]): CreateComponentPublicInstanceWithMixins<Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, PublicProps, {}, true, {}, {}, GlobalComponents, GlobalDirectives, string, {}, HTMLDivElement, ComponentProvideOptions, {
|
|
@@ -2808,7 +2817,7 @@ applyPreset: (preset: ThemePreset) => Promise<void>;
|
|
|
2808
2817
|
resetSettings: () => void;
|
|
2809
2818
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
2810
2819
|
toggleCollapse: () => void;
|
|
2811
|
-
}, "
|
|
2820
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
2812
2821
|
/** 当前 Store 实例实际使用的默认值。 */
|
|
2813
2822
|
defaults: Readonly<{
|
|
2814
2823
|
themeMode: ThemeMode;
|
package/dist/index.d.ts
CHANGED
|
@@ -196,7 +196,7 @@ declare function __VLS_template_2(): {
|
|
|
196
196
|
resetSettings: () => void;
|
|
197
197
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
198
198
|
toggleCollapse: () => void;
|
|
199
|
-
}, "
|
|
199
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
200
200
|
defaults: Readonly<{
|
|
201
201
|
themeMode: ThemeMode;
|
|
202
202
|
primaryColor: string;
|
|
@@ -355,7 +355,7 @@ declare function __VLS_template_2(): {
|
|
|
355
355
|
resetSettings: () => void;
|
|
356
356
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
357
357
|
toggleCollapse: () => void;
|
|
358
|
-
}, "
|
|
358
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
359
359
|
defaults: Readonly<{
|
|
360
360
|
themeMode: ThemeMode;
|
|
361
361
|
primaryColor: string;
|
|
@@ -514,7 +514,7 @@ declare function __VLS_template_2(): {
|
|
|
514
514
|
resetSettings: () => void;
|
|
515
515
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
516
516
|
toggleCollapse: () => void;
|
|
517
|
-
}, "
|
|
517
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
518
518
|
defaults: Readonly<{
|
|
519
519
|
themeMode: ThemeMode;
|
|
520
520
|
primaryColor: string;
|
|
@@ -673,7 +673,7 @@ declare function __VLS_template_2(): {
|
|
|
673
673
|
resetSettings: () => void;
|
|
674
674
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
675
675
|
toggleCollapse: () => void;
|
|
676
|
-
}, "
|
|
676
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
677
677
|
defaults: Readonly<{
|
|
678
678
|
themeMode: ThemeMode;
|
|
679
679
|
primaryColor: string;
|
|
@@ -832,7 +832,7 @@ declare function __VLS_template_2(): {
|
|
|
832
832
|
resetSettings: () => void;
|
|
833
833
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
834
834
|
toggleCollapse: () => void;
|
|
835
|
-
}, "
|
|
835
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
836
836
|
defaults: Readonly<{
|
|
837
837
|
themeMode: ThemeMode;
|
|
838
838
|
primaryColor: string;
|
|
@@ -991,7 +991,7 @@ declare function __VLS_template_2(): {
|
|
|
991
991
|
resetSettings: () => void;
|
|
992
992
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
993
993
|
toggleCollapse: () => void;
|
|
994
|
-
}, "
|
|
994
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
995
995
|
defaults: Readonly<{
|
|
996
996
|
themeMode: ThemeMode;
|
|
997
997
|
primaryColor: string;
|
|
@@ -1150,7 +1150,7 @@ declare function __VLS_template_2(): {
|
|
|
1150
1150
|
resetSettings: () => void;
|
|
1151
1151
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
1152
1152
|
toggleCollapse: () => void;
|
|
1153
|
-
}, "
|
|
1153
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
1154
1154
|
defaults: Readonly<{
|
|
1155
1155
|
themeMode: ThemeMode;
|
|
1156
1156
|
primaryColor: string;
|
|
@@ -1585,7 +1585,7 @@ applyPreset: (preset: ThemePreset) => Promise<void>;
|
|
|
1585
1585
|
resetSettings: () => void;
|
|
1586
1586
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
1587
1587
|
toggleCollapse: () => void;
|
|
1588
|
-
}, "
|
|
1588
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
1589
1589
|
/** 当前 Store 实例实际使用的默认值。 */
|
|
1590
1590
|
defaults: Readonly<{
|
|
1591
1591
|
themeMode: ThemeMode;
|
|
@@ -1872,12 +1872,17 @@ export declare interface LayoutInfo {
|
|
|
1872
1872
|
export declare type LayoutMenuItem<TMeta extends MenuMeta = MenuMeta> = Omit<MenuOptions<TMeta>, "children" | "key" | "meta" | "path"> & {
|
|
1873
1873
|
key: string;
|
|
1874
1874
|
path: string;
|
|
1875
|
-
meta: TMeta
|
|
1876
|
-
title: string;
|
|
1877
|
-
};
|
|
1875
|
+
meta: LayoutMenuMeta<TMeta>;
|
|
1878
1876
|
children?: LayoutMenuItem<TMeta>[];
|
|
1879
1877
|
};
|
|
1880
1878
|
|
|
1879
|
+
/** 标准化只保证通用元数据与标题;宿主扩展字段可能因缺少 meta 而不存在。 */
|
|
1880
|
+
export declare type LayoutMenuMeta<TMeta extends MenuMeta = MenuMeta> = MenuMeta & {
|
|
1881
|
+
[K in keyof TMeta as K extends "title" | "icon" ? never : K]?: TMeta[K];
|
|
1882
|
+
} & {
|
|
1883
|
+
title: string;
|
|
1884
|
+
};
|
|
1885
|
+
|
|
1881
1886
|
/** 内置布局模式。 */
|
|
1882
1887
|
export declare type LayoutMode = "side" | "top" | "mix" | "mix-top" | "reverse-horizontal-mix" | "card-layout";
|
|
1883
1888
|
|
|
@@ -2082,6 +2087,7 @@ export declare const MixTopLayout: {
|
|
|
2082
2087
|
/**
|
|
2083
2088
|
* 非破坏地统一 path/key、label/meta.title 与字符串图标来源。
|
|
2084
2089
|
* 缺少稳定路径或 key 的节点不会进入导航,避免意外跳转到根路由。
|
|
2090
|
+
* meta 可缺省,因此不会把宿主扩展字段提升为必填;title/icon 会按通用规则补齐。
|
|
2085
2091
|
*/
|
|
2086
2092
|
export declare function normalizeLayoutMenus<TMeta extends MenuMeta = MenuMeta>(menus: readonly MenuOptions<TMeta>[]): LayoutMenuItem<TMeta>[];
|
|
2087
2093
|
|
|
@@ -2287,7 +2293,7 @@ applyPreset: (preset: ThemePreset) => Promise<void>;
|
|
|
2287
2293
|
resetSettings: () => void;
|
|
2288
2294
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
2289
2295
|
toggleCollapse: () => void;
|
|
2290
|
-
}, "
|
|
2296
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
2291
2297
|
defaults: Readonly<{
|
|
2292
2298
|
themeMode: ThemeMode;
|
|
2293
2299
|
primaryColor: string;
|
|
@@ -2479,9 +2485,12 @@ export declare interface ThemePreset {
|
|
|
2479
2485
|
description?: string;
|
|
2480
2486
|
icon: string;
|
|
2481
2487
|
primaryColor: string;
|
|
2482
|
-
settings?:
|
|
2488
|
+
settings?: ThemePresetSettings;
|
|
2483
2489
|
}
|
|
2484
2490
|
|
|
2491
|
+
/** 主题预设实际应用的外观细节;其他布局设置由宿主单独维护。 */
|
|
2492
|
+
export declare type ThemePresetSettings = Partial<Pick<SettingsState, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle">>;
|
|
2493
|
+
|
|
2485
2494
|
/** @deprecated 请使用 C_TopLayout;计划在 4.0 移除。 */
|
|
2486
2495
|
export declare const TopLayout: {
|
|
2487
2496
|
new (...args: any[]): CreateComponentPublicInstanceWithMixins<Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, PublicProps, {}, true, {}, {}, GlobalComponents, GlobalDirectives, string, {}, HTMLDivElement, ComponentProvideOptions, {
|
|
@@ -2808,7 +2817,7 @@ applyPreset: (preset: ThemePreset) => Promise<void>;
|
|
|
2808
2817
|
resetSettings: () => void;
|
|
2809
2818
|
updateThemeMode: (mode: ThemeMode) => Promise<void>;
|
|
2810
2819
|
toggleCollapse: () => void;
|
|
2811
|
-
}, "
|
|
2820
|
+
}, "borderRadius" | "transitionType" | "showBreadcrumb" | "showTagsView" | "tagsViewStyle" | "themeMode" | "primaryColor" | "enableTransition" | "layoutMode" | "menuExpandMode" | "collapsed" | "fixedHeader" | "showBreadcrumbIcon" | "tagsViewHeight" | "showFooter" | "sidebarWidth" | "sidebarCollapsedWidth" | "headerHeight" | "enableHotkeys" | "version" | "defaults">, Pick<{
|
|
2812
2821
|
/** 当前 Store 实例实际使用的默认值。 */
|
|
2813
2822
|
defaults: Readonly<{
|
|
2814
2823
|
themeMode: ThemeMode;
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { A as e, C as t, D as n, E as r, F as i, I as a, L as o, M as s, N as c, O as l, P as u, S as d, T as f, _ as p, a as m, b as h, c as g, d as _, f as v, g as y, h as b, i as x, j as S, k as C, l as w, m as T, n as E, o as D, p as O, r as k, s as A, t as j, u as M, v as N, w as P, x as F, y as I } from "./vue-
|
|
2
|
-
import { _ as L, a as R, b as z, c as B, d as V, f as H, g as U, h as W, i as G, l as K, m as q, n as J, o as Y, p as X, r as Z, s as Q, t as $, u as ee, v as te, x as ne, y as re } from "./naive-
|
|
1
|
+
import { A as e, C as t, D as n, E as r, F as i, I as a, L as o, M as s, N as c, O as l, P as u, S as d, T as f, _ as p, a as m, b as h, c as g, d as _, f as v, g as y, h as b, i as x, j as S, k as C, l as w, m as T, n as E, o as D, p as O, r as k, s as A, t as j, u as M, v as N, w as P, x as F, y as I } from "./vue-CtBraK0m.js";
|
|
2
|
+
import { _ as L, a as R, b as z, c as B, d as V, f as H, g as U, h as W, i as G, l as K, m as q, n as J, o as Y, p as X, r as Z, s as Q, t as $, u as ee, v as te, x as ne, y as re } from "./naive-H0am_E7s.js";
|
|
3
3
|
export { _ as BORDER_RADIUS_MAP, te as BrandLogo, v as COLOR_SWATCHES, $ as C_CardLayout, z as C_LayoutContainer, J as C_MixLayout, Z as C_MixTopLayout, G as C_ReverseHorizontalMixLayout, R as C_SideLayout, Y as C_TopLayout, Q as CardLayout, S as DEFAULT_BRAND_CONFIG, O as DEFAULT_SETTINGS, s as DRAWER_HANDLER_KEY, q as DrawerMenu, U as FloatingMenu, L as IconMenu, c as LAYOUT_CONTEXT_KEY, T as LAYOUT_MODES, u as LAYOUT_SETTINGS_KEY, j as LayoutActionUnavailableError, i as MENU_COLLAPSE_KEY, X as MenuTrigger, B as MixLayout, K as MixTopLayout, b as PRESET_COLORS, ne as ResponsiveMenu, ee as ReverseHorizontalMixLayout, N as SETTINGS_CONFIG_SCHEMA_VERSION, re as SettingsDrawer, V as SideLayout, W as SideMenu, y as THEME_PRESETS, p as TRANSITION_MAP, H as TopLayout, I as adjustColor, h as assertLayoutSettingsRelationships, w as bindLayoutCssVariables, r as calculateVisibleMenuCount, k as createLayoutContext, A as createSettingsStore, n as estimateMenuItemWidth, P as isPathSegmentPrefix, m as normalizeLayoutMenus, x as provideLayout, a as provideLayoutContext, F as sanitizeLayoutSettingsConfig, d as sanitizeSettingsPatch, D as setupLayout, C as shouldCacheRoute, e as useLayoutCache, o as useLayoutContext, M as useLayoutCssVariables, t as useLayoutIcon, f as useMenuSplit, l as useResponsiveMenu, E as useSettingsController, g as useSettingsStore };
|
package/dist/naive/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../vue-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../vue-CtN1HvrH.cjs`),t=require(`../naive-DTDzKwYP.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;
|