@lynn123411/dsh-maple-theme 0.0.0-stage → 0.1.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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/client/index.ts", "../src/client/settings.ts", "../src/client/binding.ts", "../src/client/card-css.ts", "../src/client/card.tsx", "../src/client/locales.ts", "inline-css:/Users/tny/Desktop/work/my-dsh/plugins/dsh-maple-theme/src/client/styles/tokens.css", "../src/client/tokens.ts", "inline-css:/Users/tny/Desktop/work/my-dsh/plugins/dsh-maple-theme/src/client/styles/markdown.css", "inline-css:/Users/tny/Desktop/work/my-dsh/plugins/dsh-maple-theme/src/client/styles/shell.css"],
4
+ "sourcesContent": ["/**\n * Maple \u4E3B\u9898\u7684\u6D4F\u89C8\u5668\u534A\u8FB9\uFF1A\u6CE8\u5165\u6837\u5F0F\u8868\u3001\u628A\u914D\u7F6E\u6295\u5F71\u5230 `<html>`\u3001\u5728\u5BBF\u4E3B\u300C\u63D2\u4EF6\u300D\u9875\u4E0A\u6302\u914D\u7F6E\u5361\u7247\u3002\n *\n * \u4E09\u4EF6\u4E8B\u5404\u6709\u5F52\u5C5E\uFF1A\n * 1. \u6837\u5F0F\u8868\u5728 `apply()` \u91CC\u6CE8\u5165\uFF0C\u6807\u7B7E\u5E26 `data-plugin` / `data-plugin-css`\uFF1Aclient-modules\n * \u6309\u524D\u8005\u5728\u5378\u8F7D\u4E0E\u70ED\u66F4\u65F6\u5220\u6389\u5B83\u4EEC\uFF08docs/rules/plugin-ui.md\u300C\u8986\u76D6\u5BBF\u4E3B\u63A7\u4EF6\u7684\u6837\u5F0F\u300D\uFF09\u3002\n * 2. \u6295\u5F71\u8BA2\u9605\u672C\u63D2\u4EF6\u90A3\u4E00\u884C\u7684\u914D\u7F6E\u8868\u5355\uFF0C\u503C\u53D8\u4E86\u53EA\u6539 `<html>` \u4E0A\u7684\u5C5E\u6027\u4E0E\u53D8\u91CF\uFF0C\u6837\u5F0F\u8868\u4E0D\u91CD\u5EFA\u3002\n * 3. \u5361\u7247\u8D70 `plugins.bundle.config`\uFF0Ckey \u662F bundle \u7684 npm \u5305\u540D\uFF1B\u5BBF\u4E3B\u300C\u63D2\u4EF6\u300D\u9875\u6CA1\u6302\u8F7D\u65F6\n * \u8FD9\u4E2A\u5EA7\u4F4D\u4E0D\u5B58\u5728\uFF0C\u6240\u4EE5\u6CE8\u518C\u5FC5\u987B\u5305\u5728 `slots.inject` \u91CC\uFF0C\u5E76\u4E0E `configForms.whileServed`\n * \u4E32\u8D77\u6765\u2014\u2014\u5BBF\u4E3B\u6CA1\u670D\u52A1\u8FD9\u4EFD\u914D\u7F6E\uFF0C\u5C31\u4E00\u4E2A\u5B57\u7684\u754C\u9762\u90FD\u4E0D\u51FA\u73B0\u3002\n */\nimport type { Context as ClientContext } from '@deepseek-ai/cordis';\n// \u7C7B\u578B\u53EA\u8BFB\uFF1A\u8FD9\u51E0\u4E2A\u5305\u7684\u6D4F\u89C8\u5668\u534A\u8FB9\u628A\u5EA7\u4F4D\u5951\u7EA6\u3001`ctx.configForms` \u4E0E `ctx.locale` \u5408\u5E76\u8FDB Context\u3002\nimport type {} from '@deepseek-ai/dsh-client-locale/client';\nimport type {} from '@deepseek-ai/dsh-client-ui-plugin-manager/client';\nimport type {} from '@deepseek-ai/dsh-client-ui-renderer/client';\nimport type {} from '@deepseek-ai/dsh-client-ui-settings/client';\nimport { bindProjection, BUNDLE_NAME, BUNDLE_CONFIG_SLOT, SETTINGS_NAMESPACE, type MapleForm } from './binding.ts';\nimport { CARD_CSS } from './card-css.ts';\nimport { MapleThemeCard } from './card.tsx';\nimport { NS, en, zh } from './locales.ts';\nimport tokens from './styles/tokens.css?inline';\nimport { MAPLE_TOKENS, THEME_SOURCE } from './tokens.ts';\nimport markdown from './styles/markdown.css?inline';\nimport shell from './styles/shell.css?inline';\n\nexport { NS } from './locales.ts';\nexport {\n BUNDLE_CONFIG_SLOT, BUNDLE_NAME, SETTINGS_NAMESPACE, bindProjection, readSettings,\n} from './binding.ts';\nexport { MapleThemeCard } from './card.tsx';\nexport {\n DEFAULT_SETTINGS, HEADING_ATTRIBUTE, INDICATOR_ATTRIBUTE, CODE_ATTRIBUTE, ROOT_ATTRIBUTE, ROOT_VARIABLES,\n applyProjection, clearProjection, clampNumber, normalizeSettings, projectSettings,\n} from './settings.ts';\n\n/** \u5305\u540D\uFF1A\u6837\u5F0F\u8868\u6807\u7B7E\u7684\u5F52\u5C5E\u952E\uFF0C\u4E5F\u662F\u6D4F\u89C8\u5668 bundle \u7684\u81EA\u6CE8\u518C id\u3002 */\nexport const name = '@lynn123411/dsh-maple-theme';\n\n/**\n * \u58F0\u660E\u7684\u670D\u52A1\uFF1A`configForms` \u8BFB\u672C\u63D2\u4EF6\u90A3\u4E00\u884C\u7684\u914D\u7F6E\uFF0C`slots` \u4E0E `locale` \u753B\u914D\u7F6E\u5361\u7247\uFF0C\n * `theme` \u628A\u4E24\u5957\u8C03\u8272\u677F\u4EA4\u7ED9\u5BBF\u4E3B\u7684\u4E3B\u9898\u901A\u9053\u3002\n * \u6F0F\u58F0\u660E\u4E0D\u4F1A\u62A5\u9519\uFF0C\u53EA\u4F1A\u8BA9\u6574\u4E2A\u6D4F\u89C8\u5668\u534A\u8FB9\u5728\u9875\u9762\u91CC\u6D88\u5931\uFF08docs/rules/client-wiring.md\uFF09\u3002\n */\nexport const inject = ['configForms', 'slots', 'locale', 'theme'];\n\n/** \u672C\u63D2\u4EF6\u7684\u6837\u5F0F\u8868\uFF1A\u5F52\u5C5E\u952E\u6309\u300C\u5305\u540D/\u6587\u4EF6\u540D\u300D\u62FC\uFF0C\u5378\u8F7D\u65F6\u6574\u6279\u5220\u3002 */\nconst SHEETS: readonly (readonly [string, string])[] = [\n ['tokens.css', tokens],\n ['markdown.css', markdown],\n ['shell.css', shell],\n ['card.css', CARD_CSS],\n];\n\n/**\n * \u6CE8\u5165\u672C\u63D2\u4EF6\u7684\u6837\u5F0F\u8868\uFF1B\u540C\u4E00\u4E2A\u952E\u5DF2\u5B58\u5728\u65F6\u66FF\u6362\u5185\u5BB9\u800C\u4E0D\u662F\u518D\u63D2\u4E00\u5F20\u3002\n * \u952E\u6309\u6587\u4EF6\u8D70\uFF1A\u70ED\u66F4\u540E\u91CD\u65B0\u6267\u884C\u8FD9\u4E2A\u6A21\u5757\u65F6\uFF0C\u65B0\u5185\u5BB9\u8986\u76D6\u65E7\u6807\u7B7E\uFF0C\u4E0D\u4F1A\u53E0\u51FA\u7B2C\u4E8C\u4EFD\u3002\n */\nfunction injectStyles(): void {\n if (typeof document === 'undefined') return;\n for (const [file, css] of SHEETS) {\n const key = `${name}/${file}`;\n const existing = document.head.querySelector<HTMLStyleElement>(`style[data-plugin-css=\"${key}\"]`);\n const tag = existing ?? document.createElement('style');\n tag.dataset.plugin = name;\n tag.dataset.pluginCss = key;\n tag.textContent = css;\n if (existing === null) document.head.appendChild(tag);\n }\n}\n\n/** \u64A4\u6389\u672C\u63D2\u4EF6\u7684\u6837\u5F0F\u6807\u7B7E\u3002 */\nfunction removeStyles(): void {\n if (typeof document === 'undefined') return;\n for (const tag of document.head.querySelectorAll(`style[data-plugin=\"${name}\"]`)) tag.remove();\n}\n\n/** \u6D4F\u89C8\u5668\u4E0A\u4E0B\u6587\u91CC\u672C\u63D2\u4EF6\u7528\u5230\u7684\u6210\u5458\u3002 */\ninterface ClientServices {\n configForms: {\n get(namespace: string): MapleForm;\n whileServed(namespaces: readonly string[], register: (served: ReadonlySet<string>) => () => void): () => void;\n };\n slots: {\n inject(slot: string, register: () => () => void): () => void;\n register(options: Record<string, unknown>, component: unknown): () => void;\n };\n locale: {\n register(namespace: string, dictionaries: { zh: unknown; en: unknown }): () => void;\n };\n theme: {\n overrideTokens(source: string, tokens: Record<string, { light: string; dark: string }>): () => void;\n };\n}\n\n/**\n * \u63D2\u4EF6\u672C\u4F53\u3002\n * @param ctx - \u5BA2\u6237\u7AEF\u6839\u4E0A\u4E0B\u6587\u3002\n */\nexport function apply(ctx: ClientContext): void {\n const services = ctx as unknown as ClientServices;\n\n ctx.effect(() => {\n injectStyles();\n return () => { removeStyles(); };\n }, 'dsh-maple-theme: stylesheets');\n\n // \u914D\u8272\uFF1A\u8D70\u5BBF\u4E3B\u7684\u4E3B\u9898\u901A\u9053\uFF0C\u7531\u5B83\u5199\u5230 body \u7684\u884C\u5185\u6837\u5F0F\u4E0A\uFF08docs/web-styling.md \u7684\u6240\u6709\u6743\u5F52\u4E3B\u9898\uFF0C\n // \u529F\u80FD\u5305\u6D88\u8D39\u4EE4\u724C\u800C\u4E0D\u662F\u53E6\u7ACB\u4E00\u4EFD\u5168\u5C40\u4E3B\u9898\uFF09\u3002disposer \u4F1A\u628A\u8FD9\u5C42\u8986\u76D6\u6574\u4EFD\u64A4\u6389\u3002\n ctx.effect(\n () => services.theme.overrideTokens(THEME_SOURCE, MAPLE_TOKENS),\n 'dsh-maple-theme: palette',\n );\n\n ctx.effect(\n () => services.locale.register(NS, { zh, en }),\n 'dsh-maple-theme: dictionaries',\n );\n\n // \u6295\u5F71\uFF1A\u914D\u7F6E\u4E00\u53D8\u5C31\u91CD\u5199 <html>\uFF0C\u5378\u8F7D\u65F6\u628A\u75D5\u8FF9\u64A4\u5E72\u51C0\u3002\n ctx.effect(() => {\n if (typeof document === 'undefined') return () => {};\n return bindProjection(document.documentElement, services.configForms.get(SETTINGS_NAMESPACE));\n }, 'dsh-maple-theme: projection');\n\n // \u914D\u7F6E\u5361\u7247\uFF1A\u5BBF\u4E3B\u300C\u63D2\u4EF6\u300D\u9875\u6302\u8F7D\u65F6\u624D\u6CE8\u518C\uFF0C\u5BBF\u4E3B\u6CA1\u670D\u52A1\u8FD9\u4EFD\u914D\u7F6E\u5C31\u4E0D\u51FA\u73B0\u3002\n ctx.effect(\n () => services.configForms.whileServed([SETTINGS_NAMESPACE], () => services.slots.inject(\n BUNDLE_CONFIG_SLOT,\n () => slotsRegister(services, () => ({\n name: BUNDLE_CONFIG_SLOT,\n key: BUNDLE_NAME,\n locale: NS,\n inject: () => ({ form: services.configForms.get(SETTINGS_NAMESPACE) }),\n })),\n )),\n 'dsh-maple-theme: plugins page config',\n );\n}\n\n/**\n * \u628A\u300C\u6CE8\u518C\u9879\u7684\u9009\u9879\u300D\u4E0E\u7EC4\u4EF6\u7ED1\u5728\u4E00\u8D77\uFF0C\u62BD\u51FA\u6765\u53EA\u4E3A\u8BA9\u4E0A\u9762\u90A3\u6BB5\u8BFB\u8D77\u6765\u662F\u4E09\u5C42\u800C\u4E0D\u662F\u4E94\u5C42\u3002\n * @param services - \u4E0A\u4E0B\u6587\u91CC\u7528\u5230\u7684\u670D\u52A1\u3002\n * @param options - \u6CE8\u518C\u9879\u7684\u9009\u9879\u5DE5\u5382\uFF08\u6BCF\u6B21\u6CE8\u518C\u90FD\u65B0\u5EFA\u4E00\u4EFD\uFF09\u3002\n * @returns \u6CE8\u518C\u7684 disposer\u3002\n */\nfunction slotsRegister(services: ClientServices, options: () => Record<string, unknown>): () => void {\n return services.slots.register(options(), MapleThemeCard);\n}\n", "/**\n * \u914D\u7F6E\u5230 DOM \u7684\u6295\u5F71\uFF1A\u628A\u4E00\u4EFD\u5DF2\u89E3\u6790\u7684\u914D\u7F6E\u7B97\u6210 `<html>` \u4E0A\u8981\u5199\u7684\u5C5E\u6027\u4E0E\u81EA\u5B9A\u4E49\u53D8\u91CF\u3002\n *\n * \u8FD9\u91CC\u662F\u7EAF\u51FD\u6570\uFF0C\u4E0D\u78B0 document\u3001\u4E0D\u8BFB\u914D\u7F6E\u6E90\u2014\u2014\u6D4F\u89C8\u5668\u534A\u8FB9\u8D1F\u8D23\u628A\u5B83\u7684\u7ED3\u679C\u5199\u5230\u9875\u9762\u4E0A\uFF0C\n * \u81EA\u68C0\u76F4\u63A5 import \u8FD9\u4E2A\u6587\u4EF6\u65AD\u8A00\u6620\u5C04\uFF0C\u4E0D\u7528\u8D77 DOM\u3002\n *\n * \u4E3A\u4EC0\u4E48\u5199\u5728 `<html>` \u800C\u4E0D\u662F `body`\uFF1A\u5BBF\u4E3B\u628A\u4EE4\u724C\u58F0\u660E\u5728 `body` \u4E0A\uFF0C\u6211\u4EEC\u7684\u6837\u5F0F\u8868\u4E5F\u8981\u8986\u76D6\n * \u540C\u540D\u53D8\u91CF\uFF0C\u5199\u5728\u540C\u4E00\u5C42\u53EA\u80FD\u9760\u6CE8\u5165\u987A\u5E8F\u53D6\u80DC\uFF1B\u5199\u5230 `<html>` \u4E0A\uFF0C`body` \u91CC\u90A3\u4E9B `var(--maple-*)`\n * \u4E00\u5F8B\u8BFB\u5F97\u5230\uFF0C\u800C\u4E24\u5957\u914D\u8272\u5404\u81EA\u7684\u9009\u62E9\u5668 (`body` / `body[data-ds-dark-theme]`) \u4E0E\u5BBF\u4E3B\u540C\u5F62\uFF0C\n * \u53EA\u9760\u540E\u6CE8\u5165\u8FD9\u4E00\u6761\u4F18\u52BF\u3002**\u4F46\u5F00\u5173\u5FC5\u987B\u5199\u5728\u7956\u5148\u4E0A**\uFF1A\u5C5E\u6027\u9009\u62E9\u5668\u8981\u591A\u4E00\u4E2A key \u624D\u80FD\u7A33\u5B9A\u538B\u8FC7\u5BBF\u4E3B\u3002\n */\n\n/** \u672C\u63D2\u4EF6\u5728 `<html>` \u4E0A\u7528\u7684\u6839\u5C5E\u6027\uFF1A\u5F00\u7740\u65F6\u624D\u52A0\uFF0C\u5173\u6389\u6574\u5C42\u6837\u5F0F\u4E00\u5E76\u5931\u6548\u3002 */\nexport const ROOT_ATTRIBUTE = 'data-maple-theme';\n\n/** \u6807\u9898\u914D\u8272\u65B9\u5F0F\u843D\u5230 `<html>` \u4E0A\u7684\u5C5E\u6027\u540D\u3002 */\nexport const HEADING_ATTRIBUTE = 'data-maple-heading';\n\n/** \u6807\u9898\u7B49\u7EA7\u6807\u8BB0\u7684\u5F00\u5173\u5C5E\u6027\u540D\u3002 */\nexport const INDICATOR_ATTRIBUTE = 'data-maple-indicator';\n\n/** \u4EE3\u7801\u914D\u8272\u7684\u5F00\u5173\u5C5E\u6027\u540D\u3002 */\nexport const CODE_ATTRIBUTE = 'data-maple-code';\n\n/** \u5916\u58F3\u88C5\u9970\uFF08\u4FA7\u680F\u3001\u6807\u7B7E\u6761\u3001\u8F93\u5165\u533A\uFF09\u7684\u5F00\u5173\u5C5E\u6027\u540D\u3002 */\nexport const SHELL_ATTRIBUTE = 'data-maple-shell';\n\n/** \u4E00\u4EFD\u914D\u7F6E\u6295\u5F71\u51FA\u6765\u7684\u7ED3\u679C\uFF1A\u8981\u5199\u7684\u5C5E\u6027\u4E0E\u53D8\u91CF\u3002 */\nexport interface MapleProjection {\n /** `<html>` \u4E0A\u8981\u8BBE\u7684\u5C5E\u6027\uFF08\u503C\u4E3A `null` \u8868\u793A\u5220\u6389\uFF09\u3002 */\n attributes: Record<string, string | null>;\n /** `<html>` \u884C\u5185\u6837\u5F0F\u4E0A\u8981\u5199\u7684\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF08\u503C\u4E3A `null` \u8868\u793A\u5220\u6389\uFF09\u3002 */\n variables: Record<string, string | null>;\n}\n\n/** \u672C\u63D2\u4EF6\u5199\u5728 `<html>` \u4E0A\u7684\u5168\u90E8\u53D8\u91CF\u540D\uFF1A\u64A4\u75D5\u8FF9\u65F6\u6309\u8FD9\u5F20\u8868\u9010\u4E2A\u5220\uFF0C\u4E0D\u9760\u731C\u3002 */\nexport const ROOT_VARIABLES = [\n '--maple-hue-light',\n '--maple-hue-dark',\n '--maple-line-height',\n '--maple-p-gap',\n] as const;\n\n/** \u914D\u7F6E\u91CC\u53D6\u8272\u76F8\u5173\u5B57\u6BB5\u7684\u515C\u5E95\uFF1A\u5BBF\u4E3B\u6CA1\u7ED9\u503C\u65F6\u6309 Maple \u51FA\u5382\u503C\u8D70\u3002 */\nexport interface MapleSettings {\n hueLight: number;\n hueDark: number;\n lineHeight: number;\n paragraphGap: number;\n headingColor: 'colorful' | 'accent' | 'text';\n headingIndicator: boolean;\n codePalette: boolean;\n shellSkin: boolean;\n}\n\n/** \u51FA\u5382\u503C\uFF0C\u4E0E\u5BBF\u4E3B\u534A\u8FB9 Config \u7684\u9ED8\u8BA4\u503C\u540C\u4E00\u7EC4\u6570\u5B57\u3002 */\nexport const DEFAULT_SETTINGS: Readonly<MapleSettings> = Object.freeze({\n hueLight: 35,\n hueDark: 207,\n lineHeight: 1.75,\n paragraphGap: 10,\n headingColor: 'colorful',\n headingIndicator: true,\n codePalette: true,\n shellSkin: true,\n});\n\n/**\n * \u628A\u4E00\u4E2A\u6570\u5939\u8FDB\u95ED\u533A\u95F4\uFF1B\u4E0D\u662F\u6709\u9650\u6570\u5C31\u7528\u515C\u5E95\u503C\u3002\n * \u624B\u6539\u8FC7\u7684\u8BBE\u7F6E\u6587\u6863\u53EF\u80FD\u5B58\u8FDB\u8D8A\u754C\u503C\u6216\u5B57\u7B26\u4E32\uFF0C\u6295\u5F71\u8FD9\u4E00\u6B65\u4E0D\u4FE1\u4EFB\u5B83\u3002\n * @param value - \u5019\u9009\u503C\u3002\n * @param min - \u4E0B\u754C\u3002\n * @param max - \u4E0A\u754C\u3002\n * @param fallback - \u4E0D\u662F\u6709\u9650\u6570\u65F6\u7528\u5B83\u3002\n * @returns \u5939\u597D\u7684\u6570\u3002\n */\nexport function clampNumber(value: unknown, min: number, max: number, fallback: number): number {\n if (typeof value !== 'number' && typeof value !== 'string') return fallback;\n // \u7A7A\u4E32\u3001\u5168\u7A7A\u767D\uFF0C\u4EE5\u53CA null \u88AB Number \u8BFB\u6210 0 \u7684\u90A3\u4E00\u7C7B\uFF0C\u90FD\u4E0D\u7B97\u300C\u7ED9\u4E86\u4E00\u4E2A\u6570\u300D\u3002\n if (typeof value === 'string' && value.trim() === '') return fallback;\n const parsed = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(parsed)) return fallback;\n return Math.min(max, Math.max(min, parsed));\n}\n\n/**\n * \u628A\u5BBF\u4E3B\u53EF\u80FD\u7ED9\u51FA\u7684\u4EFB\u610F\u503C\u6536\u6210\u4E00\u4EFD\u53EF\u4FE1\u7684\u914D\u7F6E\u3002\n * @param raw - \u914D\u7F6E\u6E90\u91CC\u7684\u539F\u59CB\u503C\uFF08\u53EF\u80FD\u7F3A\u5B57\u6BB5\u3001\u53EF\u80FD\u8D8A\u754C\uFF09\u3002\n * @returns \u6BCF\u4E2A\u5B57\u6BB5\u90FD\u5728\u5408\u6CD5\u8303\u56F4\u5185\u7684\u4E00\u4EFD\u914D\u7F6E\u3002\n */\nexport function normalizeSettings(raw: Partial<MapleSettings> | undefined | null): MapleSettings {\n const source = raw ?? {};\n const heading = source.headingColor;\n return {\n hueLight: clampNumber(source.hueLight, 0, 360, DEFAULT_SETTINGS.hueLight),\n hueDark: clampNumber(source.hueDark, 0, 360, DEFAULT_SETTINGS.hueDark),\n lineHeight: clampNumber(source.lineHeight, 1.4, 2, DEFAULT_SETTINGS.lineHeight),\n paragraphGap: clampNumber(source.paragraphGap, 4, 24, DEFAULT_SETTINGS.paragraphGap),\n headingColor: heading === 'colorful' || heading === 'accent' || heading === 'text'\n ? heading\n : DEFAULT_SETTINGS.headingColor,\n headingIndicator: source.headingIndicator ?? DEFAULT_SETTINGS.headingIndicator,\n codePalette: source.codePalette ?? DEFAULT_SETTINGS.codePalette,\n shellSkin: source.shellSkin ?? DEFAULT_SETTINGS.shellSkin,\n };\n}\n\n/**\n * \u7B97\u51FA\u4E00\u4EFD\u914D\u7F6E\u8BE5\u5728 `<html>` \u4E0A\u7559\u4E0B\u4EC0\u4E48\u3002\n *\n * \u5173\u6389\u7684\u5F00\u5173\u5199\u6210 `null`\uFF08\u8C03\u7528\u65B9\u5220\u5C5E\u6027\uFF09\uFF0C\u800C\u4E0D\u662F\u5199 `off`\uFF1A\u5C5E\u6027\u4E0D\u5B58\u5728\u65F6\u90A3\u6279\u89C4\u5219\u6574\u6BB5\u4E0D\u5339\u914D\uFF0C\n * \u5C11\u4E00\u4E2A\u5339\u914D\u5206\u652F\u4E5F\u5C11\u4E00\u5904\u80FD\u8DDF\u5BBF\u4E3B\u649E\u8F66\u7684\u5730\u65B9\u3002\n * @param settings - \u5DF2\u6536\u62E2\u5230\u5408\u6CD5\u8303\u56F4\u7684\u914D\u7F6E\u3002\n * @param enabled - \u6574\u4E2A\u4E3B\u9898\u662F\u5426\u542F\u7528\uFF1B\u5173\u6389\u65F6\u53EA\u7559\u4E00\u4E2A\u300C\u5173\u300D\u6807\u8BB0\uFF0C\u5176\u4F59\u5168\u90E8\u64A4\u6389\u3002\n * @returns \u8981\u5199\u7684\u5C5E\u6027\u4E0E\u53D8\u91CF\u3002\n */\nexport function projectSettings(settings: MapleSettings, enabled = true): MapleProjection {\n if (!enabled) {\n const variables: Record<string, null> = {};\n for (const name of ROOT_VARIABLES) variables[name] = null;\n return {\n attributes: {\n [ROOT_ATTRIBUTE]: null,\n [HEADING_ATTRIBUTE]: null,\n [INDICATOR_ATTRIBUTE]: null,\n [CODE_ATTRIBUTE]: null,\n [SHELL_ATTRIBUTE]: null,\n },\n variables,\n };\n }\n return {\n attributes: {\n [ROOT_ATTRIBUTE]: 'on',\n [HEADING_ATTRIBUTE]: settings.headingColor,\n [INDICATOR_ATTRIBUTE]: settings.headingIndicator ? 'on' : null,\n [CODE_ATTRIBUTE]: settings.codePalette ? 'on' : null,\n [SHELL_ATTRIBUTE]: settings.shellSkin ? 'on' : null,\n },\n variables: {\n '--maple-hue-light': String(settings.hueLight),\n '--maple-hue-dark': String(settings.hueDark),\n '--maple-line-height': String(settings.lineHeight),\n '--maple-p-gap': `${settings.paragraphGap}px`,\n },\n };\n}\n\n/**\n * \u628A\u6295\u5F71\u5199\u5230\u9875\u9762\u4E0A\uFF1B\u540C\u4E00\u4E2A\u5143\u7D20\u91CD\u590D\u8C03\u7528\u662F\u5E42\u7B49\u7684\u3002\n * @param root - \u6587\u6863\u6839\u5143\u7D20\uFF08\u771F\u5B9E\u6D4F\u89C8\u5668\u91CC\u662F `document.documentElement`\uFF09\u3002\n * @param projection - {@link projectSettings} \u7684\u7ED3\u679C\u3002\n */\nexport function applyProjection(root: HTMLElement, projection: MapleProjection): void {\n for (const [attribute, value] of Object.entries(projection.attributes)) {\n if (value === null) root.removeAttribute(attribute);\n else root.setAttribute(attribute, value);\n }\n for (const [property, value] of Object.entries(projection.variables)) {\n if (value === null) root.style.removeProperty(property);\n else root.style.setProperty(property, value);\n }\n}\n\n/**\n * \u64A4\u6389\u672C\u63D2\u4EF6\u5728\u9875\u9762\u4E0A\u7559\u4E0B\u7684\u4E00\u5207\u75D5\u8FF9\uFF08\u5378\u8F7D\u4E0E\u5173\u6389\u4E3B\u9898\u90FD\u8D70\u8FD9\u4E00\u6761\uFF09\u3002\n * @param root - \u6587\u6863\u6839\u5143\u7D20\u3002\n */\nexport function clearProjection(root: HTMLElement): void {\n applyProjection(root, projectSettings(normalizeSettings(undefined), false));\n}\n", "/**\n * \u914D\u7F6E\u5361\u7247\u4E0E\u4E3B\u9898\u6295\u5F71\u7684\u552F\u4E00\u63A5\u7EBF\u5904\uFF1A\u8BFB\u54EA\u4E00\u4EFD\u8868\u5355\u3001\u5199\u54EA\u51E0\u4E2A\u5B57\u6BB5\u3002\n *\n * \u8FD9\u4E00\u5C42\u53EA\u505A\u300C\u8BFB\u5FEB\u7167 \u2192 \u6536\u62E2 \u2192 \u6295\u5F71 \u2192 \u5199\u5230 <html>\u300D\u4E09\u4EF6\u4E8B\uFF0C\u4E0D\u753B\u754C\u9762\u3002\n * \u5361\u7247\uFF08`card.tsx`\uFF09\u4E0E\u81EA\u68C0\uFF08`scripts/test-projection.mjs`\uFF09\u90FD\u4ECE\u8FD9\u91CC\u7684\u540C\u4E00\u4E2A\u51FD\u6570\u8D70\uFF0C\n * \u6240\u4EE5\u300C\u5361\u7247\u6539\u4E86\u5B57\u6BB5\u300D\u4E0E\u300C\u9875\u9762\u771F\u7684\u6362\u4E86\u6837\u5B50\u300D\u4E0D\u53EF\u80FD\u5404\u8D70\u4E00\u8FB9\u3002\n */\nimport {\n applyProjection,\n clearProjection,\n normalizeSettings,\n projectSettings,\n type MapleSettings,\n} from './settings.ts';\n\n/** \u672C\u63D2\u4EF6\u5728 profile \u91CC\u7684 loader \u884C id\uFF0C\u4E5F\u662F\u914D\u7F6E\u8868\u5355\u7684\u547D\u540D\u7A7A\u95F4\u3002 */\nexport const SETTINGS_NAMESPACE = 'dsh-maple-theme';\n\n/** \u4E3B\u9898\u5728\u5BBF\u4E3B\u300C\u63D2\u4EF6\u300D\u9875\u4E0A\u7684\u5EA7\u4F4D\u3002 */\nexport const BUNDLE_CONFIG_SLOT = 'plugins.bundle.config';\n\n/** \u672C\u63D2\u4EF6 bundle \u7684\u5305\u540D\uFF1A`plugins.bundle.config` \u7684 key \u5C31\u662F\u5B83\u3002 */\nexport const BUNDLE_NAME = '@lynn123411/dsh-maple-theme';\n\n/**\n * \u4E00\u5F20\u5361\u7247\u8981\u7528\u5230\u7684\u914D\u7F6E\u8868\u5355\uFF1A\u53EA\u53D6\u771F\u6B63\u7528\u5230\u7684\u90A3\u51E0\u4E2A\u6210\u5458\u7684\u7ED3\u6784\u5B50\u96C6\u3002\n * \u8FD9\u6837\u81EA\u68C0\u7528\u5047\u4EF6\u5192\u5145\u5B83\u65F6\u4E0D\u5FC5\u62D6\u8FDB\u6574\u4E2A ui-settings \u8FD0\u884C\u65F6\u3002\n */\nexport interface MapleForm {\n getSnapshot(): {\n status: 'loading' | 'ready' | 'unavailable';\n value?: Partial<MapleSettings> | undefined;\n writable?: boolean;\n revision?: number | undefined;\n };\n subscribe(listener: () => void): () => void;\n set(field: string, value: unknown): Promise<boolean>;\n}\n\n/**\n * \u8BFB\u8868\u5355\u5F53\u524D\u503C\uFF0C\u6536\u62E2\u6210\u4E00\u4EFD\u53EF\u4FE1\u914D\u7F6E\u3002\n * @param form - \u672C\u547D\u540D\u7A7A\u95F4\u7684\u914D\u7F6E\u8868\u5355\u3002\n * @returns \u5BBF\u4E3B\u8FD8\u6CA1\u670D\u52A1\u8FD9\u4E2A\u547D\u540D\u7A7A\u95F4\u65F6\u8FD4\u56DE undefined\u3002\n */\nexport function readSettings(form: MapleForm): MapleSettings | undefined {\n const snapshot = form.getSnapshot();\n if (snapshot.status === 'unavailable') return undefined;\n return normalizeSettings(snapshot.value);\n}\n\n/**\n * \u8BA2\u9605\u8868\u5355\u5E76\u6301\u7EED\u6295\u5F71\uFF0C\u76F4\u5230\u8FD4\u56DE\u7684 disposer \u88AB\u8C03\u7528\u3002\n * \u8FD9\u4E5F\u5305\u62EC\u5378\u8F7D\u65F6\u628A `<html>` \u4E0A\u7684\u75D5\u8FF9\u64A4\u5E72\u51C0\u2014\u2014\u63D2\u4EF6\u505C\u7528\u540E\u9875\u9762\u5FC5\u987B\u56DE\u5230\u5BBF\u4E3B\u539F\u672C\u7684\u6837\u5B50\u3002\n * @param root - \u6587\u6863\u6839\u5143\u7D20\u3002\n * @param form - \u672C\u547D\u540D\u7A7A\u95F4\u7684\u914D\u7F6E\u8868\u5355\u3002\n * @returns \u505C\u6B62\u8BA2\u9605\u5E76\u64A4\u6389\u6295\u5F71\u7684 disposer\u3002\n */\nexport function bindProjection(root: HTMLElement, form: MapleForm): () => void {\n const sync = (): void => {\n const settings = readSettings(form);\n applyProjection(root, projectSettings(settings ?? normalizeSettings(undefined)));\n };\n sync();\n const off = form.subscribe(sync);\n return () => {\n off();\n clearProjection(root);\n };\n}\n", "/** \u5361\u7247\u81EA\u5DF1\u7684\u6837\u5F0F\u3002\u5BBF\u4E3B\u300C\u63D2\u4EF6\u300D\u9875\u53EA\u63D0\u4F9B\u9875\u9762\u9AA8\u67B6\uFF0C\u884C\u5E03\u5C40\u7531\u5361\u7247\u81EA\u5DF1\u7ED9\u3002\n *\n * \u5F62\u72B6\u7167\u5BBF\u4E3B\u7684\u8BBE\u7F6E\u884C\uFF1A\u5DE6\u8FB9\u6807\u9898\u4E0E\u8BF4\u660E\uFF0C\u53F3\u8FB9\u63A7\u4EF6\uFF1B\u6574\u5757\u662F\u4E00\u5F20\u5361\u7247\uFF08\u586B\u5145 + \u53D1\u4E1D\u63CF\u8FB9\uFF09\uFF0C\n * \u4E0D\u52A0\u9634\u5F71\u2014\u2014\u6D6E\u8D77\u6765\u7684\u624D\u662F\u83DC\u5355\u4E0E\u5F39\u7A97\u3002\u989C\u8272\u4E00\u5F8B\u53D6 --dsw-alias-*\uFF0C\u6DF1\u6D45\u4E24\u5957\u81EA\u52A8\u8DDF\u968F\u3002\n */\nexport const CARD_CSS = `\n.dsh-maple-card{display:flex;flex-direction:column;gap:20px;padding:16px 0}\n.dsh-maple-group{display:flex;flex-direction:column;gap:4px}\n.dsh-maple-group-title{font-size:12px;line-height:18px;font-weight:600;color:var(--dsw-alias-label-tertiary);letter-spacing:.02em}\n.dsh-maple-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 0;border-bottom:0.5px solid var(--dsw-alias-border-l1)}\n.dsh-maple-row:last-child{border-bottom:0}\n.dsh-maple-row-info{display:flex;flex-direction:column;gap:2px;min-width:0}\n.dsh-maple-row-title{font-size:14px;line-height:22px;color:var(--dsw-alias-label-primary)}\n.dsh-maple-row-hint{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}\n.dsh-maple-row-field{flex:none;display:flex;align-items:center;gap:8px}\n.dsh-maple-number{width:88px}\n.dsh-maple-unit{font-size:12px;color:var(--dsw-alias-label-tertiary);min-width:18px}\n.dsh-maple-note{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary);padding-top:12px}\n.dsh-maple-empty{font-size:13px;line-height:20px;color:var(--dsw-alias-label-tertiary)}\n`;\n", "/**\n * \u5BBF\u4E3B\u300C\u63D2\u4EF6\u300D\u9875\u4E0A\u7684\u914D\u7F6E\u5361\u7247\uFF1AMaple \u4E3B\u9898\u7684\u5168\u90E8\u65CB\u94AE\u3002\n *\n * \u6539\u52A8\u5373\u65F6\u751F\u6548\uFF1A\u63A7\u4EF6\u7684\u6BCF\u4E00\u6B21\u53D8\u5316\u90FD\u76F4\u63A5\u5199\u8FDB\u914D\u7F6E\u8868\u5355\uFF0C\u8868\u5355\u56DE\u5199\u5FEB\u7167\uFF0C\u6295\u5F71\u8BA2\u9605\u628A\u503C\n * \u5199\u5230 <html> \u4E0A\uFF0C\u6837\u5F0F\u8868\u4E0D\u91CD\u5EFA\u3002\u6CA1\u6709\u300C\u4FDD\u5B58\u300D\u6309\u94AE\u2014\u2014\u8FD9\u51E0\u4E2A\u65CB\u94AE\u90FD\u662F\u6240\u89C1\u5373\u6240\u5F97\u7684\uFF0C\n * \u52A0\u4E00\u6B65\u4FDD\u5B58\u53EA\u4F1A\u8BA9\u4EBA\u4EE5\u4E3A\u6CA1\u751F\u6548\u3002\n */\nimport { useEffect, useState } from 'react';\nimport * as React from 'react';\nimport { Input, SegmentedControl, Switch } from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';\nimport { readSettings, type MapleForm } from './binding.ts';\nimport { DEFAULT_SETTINGS, type MapleSettings } from './settings.ts';\nimport { NS } from './locales.ts';\n\n/** \u6807\u9898\u914D\u8272\u7684\u4E09\u4E2A\u9009\u9879\uFF1A\u503C\u3001\u6587\u6848\u952E\u3001\u9762\u677F id \u540E\u7F00\u3002 */\nconst HEADING_OPTIONS = [\n { value: 'colorful', key: 'card.headingColorColorful' },\n { value: 'accent', key: 'card.headingColorAccent' },\n { value: 'text', key: 'card.headingColorText' },\n] as const;\n\n/** \u4E00\u884C\u300C\u6807\u9898 + \u8BF4\u660E + \u63A7\u4EF6\u300D\u3002 */\nfunction Row({ title, hint, children }: {\n title: string;\n hint?: string | undefined;\n children: React.ReactNode;\n}): React.ReactElement {\n return (\n <div className=\"dsh-maple-row\">\n <div className=\"dsh-maple-row-info\">\n <div className=\"dsh-maple-row-title\">{title}</div>\n {hint !== undefined && <div className=\"dsh-maple-row-hint\">{hint}</div>}\n </div>\n <div className=\"dsh-maple-row-field\">{children}</div>\n </div>\n );\n}\n\n/**\n * \u4E00\u4E2A\u6570\u5B57\u65CB\u94AE\uFF1A\u672C\u5730\u4FDD\u5B58\u8F93\u5165\u4E2D\u7684\u5B57\u7B26\u4E32\uFF0C\u5931\u7126\u6216\u56DE\u8F66\u65F6\u624D\u63D0\u4EA4\u3002\n *\n * \u4E0D\u9010\u952E\u63D0\u4EA4\uFF1A\u8F93\u5165 `1.75` \u7684\u4E2D\u9014\u4F1A\u7ECF\u8FC7 `1`\u3001`1.` \u8FD9\u4E9B\u503C\uFF0C\u9010\u952E\u5199\u4F1A\u8BA9\u9875\u9762\u5728\u4E2D\u95F4\u6001\u95EA\u4E00\u4E0B\u3002\n * @param props.value - \u5F53\u524D\u751F\u6548\u7684\u503C\u3002\n * @param props.onCommit - \u63D0\u4EA4\u4E00\u4E2A\u5408\u6CD5\u503C\u3002\n */\nfunction NumberField({ value, min, max, step, unit, label, onCommit }: {\n value: number;\n min: number;\n max: number;\n step: number;\n unit: string;\n label: string;\n onCommit: (next: number) => void;\n}): React.ReactElement {\n const [text, setText] = useState(String(value));\n // \u5916\u90E8\u6539\u4E86\u503C\uFF08\u522B\u5904\u5199\u5165\u3001\u6062\u590D\u9ED8\u8BA4\uFF09\u5C31\u8DDF\u7740\u6362\uFF0C\u4F46\u6B63\u5728\u7F16\u8F91\u65F6\u4E0D\u6253\u65AD\u3002\n useEffect(() => { setText(String(value)) }, [value]);\n const commit = (): void => {\n const parsed = Number(text);\n if (!Number.isFinite(parsed)) { setText(String(value)); return; }\n const clamped = Math.min(max, Math.max(min, Math.round(parsed / step) * step));\n setText(String(clamped));\n if (clamped !== value) onCommit(clamped);\n };\n return (\n <>\n <Input\n className=\"dsh-maple-number\"\n type=\"number\"\n inputMode=\"decimal\"\n min={min}\n max={max}\n step={step}\n value={text}\n aria-label={label}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => { setText(event.target.value) }}\n onBlur={commit}\n onKeyDown={(event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') { event.currentTarget.blur(); }\n }}\n />\n <span className=\"dsh-maple-unit\">{unit}</span>\n </>\n );\n}\n\n/**\n * \u6E32\u67D3\u914D\u7F6E\u5361\u7247\u3002\n * @param props - \u5EA7\u4F4D\u7ED9\u7684 `t`\uFF0C\u52A0\u4E0A\u672C\u63D2\u4EF6\u5728 `inject` \u91CC\u6295\u51FA\u53BB\u7684\u90A3\u5F20\u8868\u5355\u3002\n * @returns \u5361\u7247\u7684\u5143\u7D20\u6811\u3002\n */\nexport function MapleThemeCard(\n props: PropsRuntime<'plugins.bundle.config'> & PropsLocale<typeof NS> & { form: MapleForm },\n): React.ReactElement {\n // \u5EA7\u4F4D\u5728 `locale: NS` \u65F6\u628A\u7ED1\u5B9A\u597D\u7684 t \u6302\u5728 `t` \u4E0A\uFF1B\u7C7B\u578B\u58F0\u660E\u91CC\u5B83\u662F\u8FD0\u884C\u671F\u6CE8\u5165\u7684\uFF0C\u8FD9\u91CC\u53D6\u51FA\u6765\u3002\n const { form } = props;\n const t = (key: keyof typeof import('./locales.ts').en): string =>\n (props as unknown as { t: (k: string) => string }).t(key);\n const [settings, setSettings] = useState<MapleSettings | undefined>(() => readSettings(form));\n const [available, setAvailable] = useState(() => form.getSnapshot().status !== 'unavailable');\n\n useEffect(() => {\n const sync = (): void => {\n setSettings(readSettings(form));\n setAvailable(form.getSnapshot().status !== 'unavailable');\n };\n sync();\n return form.subscribe(sync);\n }, [form]);\n\n if (!available) return <div className=\"dsh-maple-card\"><div className=\"dsh-maple-empty\">{t('card.unavailable')}</div></div>;\n\n const current = settings ?? DEFAULT_SETTINGS;\n const write = (field: keyof MapleSettings, value: unknown): void => { void form.set(field, value); };\n\n return (\n <div className=\"dsh-maple-card\">\n <section className=\"dsh-maple-group\">\n <div className=\"dsh-maple-group-title\">{t('card.colors')}</div>\n <Row title={t('card.hueLight')} hint={t('card.hueLightHint')}>\n <NumberField value={current.hueLight} min={0} max={360} step={1} unit=\"\u00B0\"\n label={t('card.hueLight')} onCommit={(next) => { write('hueLight', next) }} />\n </Row>\n <Row title={t('card.hueDark')} hint={t('card.hueDarkHint')}>\n <NumberField value={current.hueDark} min={0} max={360} step={1} unit=\"\u00B0\"\n label={t('card.hueDark')} onCommit={(next) => { write('hueDark', next) }} />\n </Row>\n </section>\n\n <section className=\"dsh-maple-group\">\n <div className=\"dsh-maple-group-title\">{t('card.typography')}</div>\n <Row title={t('card.lineHeight')} hint={t('card.lineHeightHint')}>\n <NumberField value={current.lineHeight} min={1.4} max={2} step={0.05} unit=\"\u00D7\"\n label={t('card.lineHeight')} onCommit={(next) => { write('lineHeight', next) }} />\n </Row>\n <Row title={t('card.paragraphGap')} hint={t('card.paragraphGapHint')}>\n <NumberField value={current.paragraphGap} min={4} max={24} step={1} unit=\"px\"\n label={t('card.paragraphGap')} onCommit={(next) => { write('paragraphGap', next) }} />\n </Row>\n </section>\n\n <section className=\"dsh-maple-group\">\n <div className=\"dsh-maple-group-title\">{t('card.headings')}</div>\n <Row title={t('card.headingColor')}>\n <SegmentedControl\n id=\"dsh-maple-heading\"\n value={current.headingColor}\n label={t('card.headingColor')}\n options={HEADING_OPTIONS.map(option => ({ value: option.value, label: t(option.key) }))}\n onChange={(next) => { write('headingColor', next) }}\n />\n </Row>\n <Row title={t('card.headingIndicator')} hint={t('card.headingIndicatorHint')}>\n <Switch checked={current.headingIndicator} label={t('card.headingIndicator')}\n onChange={(next) => { write('headingIndicator', next) }} />\n </Row>\n </section>\n\n <section className=\"dsh-maple-group\">\n <div className=\"dsh-maple-group-title\">{t('card.code')}</div>\n <Row title={t('card.codePalette')} hint={t('card.codePaletteHint')}>\n <Switch checked={current.codePalette} label={t('card.codePalette')}\n onChange={(next) => { write('codePalette', next) }} />\n </Row>\n </section>\n\n <section className=\"dsh-maple-group\">\n <div className=\"dsh-maple-group-title\">{t('card.shell')}</div>\n <Row title={t('card.shellSkin')} hint={t('card.shellSkinHint')}>\n <Switch checked={current.shellSkin} label={t('card.shellSkin')}\n onChange={(next) => { write('shellSkin', next) }} />\n </Row>\n </section>\n\n <div className=\"dsh-maple-note\">{t('card.scope')}</div>\n </div>\n );\n}\n", "/** Maple \u4E3B\u9898\u7684\u754C\u9762\u6587\u6848\u3002\u952E\u96C6\u4E0E\u82F1\u6587\u9010\u4E00\u5BF9\u9F50\uFF0C\u81EA\u68C0\u4F1A\u67E5\u8FD9\u4E00\u6761\u3002 */\nexport const NS = 'mapletheme';\n\n/** \u82F1\u6587\u6587\u6848\u3002 */\nexport const en = {\n 'card.colors': 'Colors',\n 'card.hueLight': 'Light hue',\n 'card.hueLightHint': 'Base hue the whole light palette is derived from. Maple ships 35 (warm white).',\n 'card.hueDark': 'Dark hue',\n 'card.hueDarkHint': 'Base hue the whole dark palette is derived from. Maple ships 207 (cool grey).',\n 'card.typography': 'Typing',\n 'card.lineHeight': 'Line height',\n 'card.lineHeightHint': 'Line height for conversation body text. Tighter than Maple\u2019s 1.8 because chat lines run narrower.',\n 'card.paragraphGap': 'Paragraph gap',\n 'card.paragraphGapHint': 'Space between two paragraphs in an answer, in pixels. Looser than Maple\u2019s 8.',\n 'card.headings': 'Headings',\n 'card.headingColor': 'Heading color',\n 'card.headingColorColorful': 'Six colors',\n 'card.headingColorAccent': 'Accent',\n 'card.headingColorText': 'Body text',\n 'card.headingIndicator': 'Level marker',\n 'card.headingIndicatorHint': 'Show H1\u2013H6 to the left of a heading while the pointer rests on it.',\n 'card.code': 'Code',\n 'card.codePalette': 'Maple syntax colors',\n 'card.codePaletteHint': 'Recolor fenced code blocks with the Maple syntax palette.',\n 'card.shell': 'Surroundings',\n 'card.shellSkin': 'Sidebar and tabs',\n 'card.shellSkinHint': 'Round the sidebar rows and the active tab, drop the seam under the session header, and give the input card Maple paper.',\n 'card.scope': 'The palette is global; headings, quotes, tables, lists and rules only change inside conversation answers.',\n 'card.unavailable': 'The Host does not serve this configuration right now.',\n} as const;\n\n/** \u4E2D\u6587\u6587\u6848\u3002 */\nexport const zh: Record<keyof typeof en, string> = {\n 'card.colors': '\u914D\u8272',\n 'card.hueLight': '\u6D45\u8272\u57FA\u7840\u8272\u76F8',\n 'card.hueLightHint': '\u6D45\u8272\u6574\u5957\u989C\u8272\u7531\u8FD9\u4E2A\u8272\u76F8\u63A8\u5BFC\u3002Maple \u51FA\u5382\u503C\u662F 35\uFF08\u6696\u767D\uFF09\u3002',\n 'card.hueDark': '\u6DF1\u8272\u57FA\u7840\u8272\u76F8',\n 'card.hueDarkHint': '\u6DF1\u8272\u6574\u5957\u989C\u8272\u7531\u8FD9\u4E2A\u8272\u76F8\u63A8\u5BFC\u3002Maple \u51FA\u5382\u503C\u662F 207\uFF08\u51B7\u7070\uFF09\u3002',\n 'card.typography': '\u6253\u5B57\u4F53\u9A8C',\n 'card.lineHeight': '\u884C\u9AD8',\n 'card.lineHeightHint': '\u5BF9\u8BDD\u6B63\u6587\u7684\u884C\u9AD8\u500D\u6570\u3002\u6BD4 Maple \u7684 1.8 \u7D27\u4E00\u6863\uFF0C\u5BF9\u8BDD\u7684\u884C\u5BBD\u6BD4\u7B14\u8BB0\u7A84\u3002',\n 'card.paragraphGap': '\u6BB5\u843D\u95F4\u8DDD',\n 'card.paragraphGapHint': '\u4E00\u4E2A\u56DE\u7B54\u91CC\u4E24\u6BB5\u4E4B\u95F4\u7A7A\u591A\u5C11\u50CF\u7D20\u3002\u6BD4 Maple \u7684 8 \u677E\u4E00\u6863\u3002',\n 'card.headings': '\u6807\u9898',\n 'card.headingColor': '\u6807\u9898\u989C\u8272',\n 'card.headingColorColorful': '\u516D\u7EA7\u6362\u8272',\n 'card.headingColorAccent': '\u5F3A\u8C03\u8272',\n 'card.headingColorText': '\u6B63\u6587\u8272',\n 'card.headingIndicator': '\u7B49\u7EA7\u6807\u8BB0',\n 'card.headingIndicatorHint': '\u6307\u9488\u505C\u5728\u6807\u9898\u4E0A\u65F6\uFF0C\u5728\u5DE6\u8FB9\u663E\u793A H1\u2013H6\u3002',\n 'card.code': '\u4EE3\u7801',\n 'card.codePalette': 'Maple \u8BED\u6CD5\u914D\u8272',\n 'card.codePaletteHint': '\u7528 Maple \u7684\u8C03\u8272\u677F\u7ED9\u56F4\u680F\u4EE3\u7801\u5757\u6362\u8BED\u6CD5\u8272\u3002',\n 'card.shell': '\u5468\u8FB9',\n 'card.shellSkin': '\u4FA7\u680F\u4E0E\u6807\u7B7E\u6761',\n 'card.shellSkinHint': '\u4FA7\u680F\u884C\u4E0E\u6D3B\u52A8\u6807\u7B7E\u6539\u6210\u5706\u89D2\uFF0C\u53BB\u6389\u4F1A\u8BDD\u5934\u90E8\u4E0B\u9762\u90A3\u6761\u63A5\u7F1D\uFF0C\u8F93\u5165\u5361\u6362\u6210 Maple \u7684\u7EB8\u8272\u3002',\n 'card.scope': '\u914D\u8272\u662F\u5168\u5C40\u7684\uFF1B\u6807\u9898\u3001\u5F15\u7528\u3001\u8868\u683C\u3001\u5217\u8868\u4E0E\u5206\u9694\u7EBF\u53EA\u5728\u5BF9\u8BDD\u6B63\u6587\u91CC\u6362\u6837\u5B50\u3002',\n 'card.unavailable': '\u5BBF\u4E3B\u5F53\u524D\u6CA1\u6709\u63D0\u4F9B\u8FD9\u4EFD\u914D\u7F6E\u3002',\n};\n", "/* Maple \u88C5\u9970\u5C42\uFF1A\u6807\u9898\u914D\u8272\u3001\u4EE3\u7801\u8BED\u6CD5\u8272\u3001\u6B63\u6587\u6392\u7248\u3002\n *\n * \u914D\u8272\u4EE4\u724C\u672C\u8EAB\u4E0D\u5728\u8FD9\u91CC\u2014\u2014\u5B83\u4EEC\u8D70\u5BBF\u4E3B\u7684\u4E3B\u9898\u901A\u9053\uFF08src/client/tokens.ts +\n * ctx.theme.overrideTokens\uFF09\uFF0C\u7531\u5BBF\u4E3B\u5199\u5230 body \u7684\u884C\u5185\u6837\u5F0F\u4E0A\u3002\u8FD9\u91CC\u53EA\u5269\u4E09\u7C7B\uFF1A\n * \u6309\u5F00\u5173\u5207\u6362\u7684\u6807\u9898\u914D\u8272\u3001shiki \u8BED\u6CD5\u8272\u3001\u4EE5\u53CA\u6B63\u6587\u6392\u7248\u7684\u590D\u5408\u4EE4\u724C\u3002\n *\n * \u6BCF\u4E00\u6761\u90FD\u6302\u5728 `html[data-maple-theme='on']` \u4E0E\u5B83\u81EA\u5DF1\u7684\u5F00\u5173\u5C5E\u6027\u4E0B\u9762\uFF1A\n * \u5173\u6389\u65F6\u6574\u6BB5\u4E0D\u5339\u914D\uFF0C\u4E0D\u5FC5\u8DDF\u5BBF\u4E3B\u4E89\u4F18\u5148\u7EA7\u3002\n */\n\n/* \u6807\u9898\u516D\u8272\uFF1AMaple \u9ED8\u8BA4\u7684 colorful\uFF0C\u9010\u7EA7\u6362\u8272\u3002\u6D45\u8272\u90A3\u4E00\u5217\u6309 4.5:1 \u8C03\u8FC7\u660E\u5EA6\uFF0C\n * \u6DF1\u8272\u7528\u5B83\u81EA\u5DF1\u90A3\u5957\u63D0\u4EAE\u8272\u3002 */\nhtml[data-maple-theme='on'][data-maple-heading='colorful'] {\n --maple-h1: hsl(0 45% 52.5%);\n --maple-h2: hsl(32 70% 37%);\n --maple-h3: hsl(95 75% 29%);\n --maple-h4: hsl(193 94% 31.5%);\n --maple-h5: hsl(260 20% 48%);\n --maple-h6: hsl(156 75% 28%);\n}\n\nhtml[data-maple-theme='on'][data-maple-heading='colorful'] body[data-ds-dark-theme] {\n --maple-h1: hsl(0 44% 68%);\n --maple-h2: hsl(20 40% 68%);\n --maple-h3: hsl(130 32% 68%);\n --maple-h4: hsl(210 80% 72%);\n --maple-h5: hsl(247 65% 82%);\n --maple-h6: hsl(178 40% 64%);\n}\n\n/* \u5F3A\u8C03\u8272\u4E00\u6863\uFF1A\u516D\u7EA7\u6807\u9898\u7EDF\u4E00\u7528\u4E3B\u9898\u7684\u5F3A\u8C03\u8272\uFF0C\u4E0D\u5206\u7EA7\u6362\u8272\u3002\n * \u8FD9\u662F Maple \u7684\u300C\u6807\u9898\u989C\u8272 = \u5F3A\u8C03\u8272\u300D\u5206\u652F\uFF0C\u4E0E\u672C\u4E3B\u9898\u65E2\u6709\u7684\u5F3A\u8C03\u8272\u53D6\u540C\u4E00\u4E2A\u503C\u3002 */\nhtml[data-maple-theme='on'][data-maple-heading='accent'] {\n --maple-heading-color: hsl(35 26% 38%);\n}\n\n/* \u6B63\u6587\u8272\u4E00\u6863\uFF1A\u6807\u9898\u53EA\u9760\u5B57\u53F7\u4E0E\u5B57\u91CD\u533A\u5206\uFF0C\u989C\u8272\u8DDF\u6B63\u6587\u4E00\u81F4\u3002 */\nhtml[data-maple-theme='on'][data-maple-heading='text'] {\n --maple-heading-color: hsl(var(--maple-hue-light, 35) 10% 18%);\n}\n\nhtml[data-maple-theme='on'][data-maple-heading='accent'] body[data-ds-dark-theme] {\n --maple-heading-color: hsl(207 26% 72%);\n}\n\nhtml[data-maple-theme='on'][data-maple-heading='text'] body[data-ds-dark-theme] {\n --maple-heading-color: hsl(var(--maple-hue-dark, 207) 24% 88%);\n}\n\n/* \u4EE3\u7801\u8BED\u6CD5\u8272\uFF1AMaple \u7684 prism \u8C03\u8272\u677F\u843D\u5230\u5BBF\u4E3B\u7684 shiki \u53D8\u91CF\u4E0A\u3002\n * \u5BBF\u4E3B CodeBlock \u53EA\u8BA4 --shiki-token-*\uFF0C\u6362\u8FD9\u4E00\u7EC4\u5C31\u6574\u4F53\u6362\u914D\u8272\u3002 */\nhtml[data-maple-theme='on'][data-maple-code='on'] {\n --shiki-token-keyword: hsl(260 20% 48%);\n --shiki-token-string: hsl(95 75% 29%);\n --shiki-token-string-expression: hsl(95 75% 29%);\n --shiki-token-function: hsl(193 94% 31.5%);\n --shiki-token-constant: hsl(156 75% 28%);\n --shiki-token-parameter: hsl(32 70% 37%);\n --shiki-token-comment: hsl(35 6% 58%);\n --shiki-token-punctuation: hsl(35 7% 46%);\n --shiki-token-link: hsl(162 76% 29%);\n}\n\nhtml[data-maple-theme='on'][data-maple-code='on'] body[data-ds-dark-theme] {\n --shiki-token-keyword: hsl(247 65% 82%);\n --shiki-token-string: hsl(130 32% 68%);\n --shiki-token-string-expression: hsl(130 32% 68%);\n --shiki-token-function: hsl(210 80% 72%);\n --shiki-token-constant: hsl(178 40% 64%);\n --shiki-token-parameter: hsl(20 40% 68%);\n --shiki-token-comment: hsl(207 10% 46%);\n --shiki-token-punctuation: hsl(207 12% 58%);\n --shiki-token-link: hsl(178 30% 62%);\n}\n\n/* \u6B63\u6587\u6392\u7248\uFF1AMarkdownText \u7528 `font: var(--dsw-font-markdown-*)` \u4E00\u6B21\u53D6\u5B57\u53F7\u3001\u884C\u9AD8\u4E0E\u5B57\u65CF\uFF0C\n * \u6240\u4EE5\u6539\u8FD9\u51E0\u6761\u5C31\u591F\uFF0C\u4E0D\u5FC5\u78B0 CSS Modules \u7684\u54C8\u5E0C\u7C7B\u540D\u3002\n *\n * \u884C\u9AD8\u4ECE\u5BBF\u4E3B\u7684\u5B57\u53F7\u8F74\u63A8\uFF0C\u4E0D\u5199\u6B7B\u50CF\u7D20\uFF1A\u5BBF\u4E3B\u628A\u6B63\u6587\u884C\u9AD8\u5199\u6210\u300C24px + \u5B57\u53F7\u589E\u91CF\u300D\uFF0C\n * \u8FD9\u91CC\u6539\u6210\u300C\u5B57\u53F7 \u00D7 \u914D\u7F6E\u7684\u884C\u9AD8\u500D\u6570\u300D\u2014\u2014\u4E24\u4E2A\u8F74\u540C\u65F6\u751F\u6548\uFF0C\u7528\u6237\u8C03\u5927\u5B57\u53F7\u65F6\u884C\u9AD8\u8DDF\u7740\u957F\u3002\n *\n * h5 / h6 \u5BBF\u4E3B\u5F52\u5E76\u8FDB base-strong\uFF0C\u6CA1\u6709\u72EC\u7ACB\u4EE4\u724C\uFF0C\u7531 markdown.css \u7528\u5143\u7D20\u9009\u62E9\u5668\u8865\u3002 */\nhtml[data-maple-theme='on'] body {\n --dsw-font-markdown-base:\n var(--dsh-content-font-size, 14px) / calc(var(--dsh-content-font-size, 14px) * var(--maple-line-height, 1.75))\n var(--dsw-font-family);\n --dsw-font-markdown-base-font-size: var(--dsh-content-font-size, 14px);\n --dsw-font-markdown-base-line-height: calc(var(--dsh-content-font-size, 14px) * var(--maple-line-height, 1.75));\n\n --dsw-font-markdown-base-strong:\n 600 var(--dsh-content-font-size, 14px) / calc(var(--dsh-content-font-size, 14px) * var(--maple-line-height, 1.75))\n var(--dsw-font-family);\n --dsw-font-markdown-base-strong-font-size: var(--dsh-content-font-size, 14px);\n --dsw-font-markdown-base-strong-line-height: calc(var(--dsh-content-font-size, 14px) * var(--maple-line-height, 1.75));\n\n --dsw-font-markdown-h1:\n 700 calc(var(--dsh-content-font-size, 14px) * 1.6) / 1.3 var(--dsw-font-family);\n --dsw-font-markdown-h1-font-size: calc(var(--dsh-content-font-size, 14px) * 1.6);\n --dsw-font-markdown-h1-font-weight: 700;\n --dsw-font-markdown-h1-line-height: 1.3;\n\n --dsw-font-markdown-h2:\n 700 calc(var(--dsh-content-font-size, 14px) * 1.5) / 1.3 var(--dsw-font-family);\n --dsw-font-markdown-h2-font-size: calc(var(--dsh-content-font-size, 14px) * 1.5);\n --dsw-font-markdown-h2-font-weight: 700;\n --dsw-font-markdown-h2-line-height: 1.3;\n\n --dsw-font-markdown-h3:\n 600 calc(var(--dsh-content-font-size, 14px) * 1.35) / 1.35 var(--dsw-font-family);\n --dsw-font-markdown-h3-font-size: calc(var(--dsh-content-font-size, 14px) * 1.35);\n --dsw-font-markdown-h3-font-weight: 600;\n --dsw-font-markdown-h3-line-height: 1.35;\n\n --dsw-font-markdown-h4:\n 600 calc(var(--dsh-content-font-size, 14px) * 1.15) / 1.4 var(--dsw-font-family);\n --dsw-font-markdown-h4-font-size: calc(var(--dsh-content-font-size, 14px) * 1.15);\n --dsw-font-markdown-h4-font-weight: 600;\n --dsw-font-markdown-h4-line-height: 1.4;\n}\n", "/**\n * Maple \u4E24\u5957\u8C03\u8272\u677F\u7684\u4EE4\u724C\u8868\uFF1A`--dsw-*` \u540D\u5B57 \u2192 \u6D45\u8272 / \u6DF1\u8272\u5404\u4E00\u4E2A\u503C\u3002\n *\n * \u503C\u91CC\u5141\u8BB8\u51FA\u73B0 `var(--maple-hue-light, 35)` \u8FD9\u7C7B\u5F15\u7528\uFF1A\u5BBF\u4E3B\u628A\u8FD9\u4EFD\u8868\u5199\u5230 `body` \u7684\n * \u884C\u5185\u6837\u5F0F\u4E0A\uFF0C\u8272\u76F8\u53D8\u91CF\u5199\u5728 `<html>` \u4E0A\uFF0C\u884C\u5185\u6837\u5F0F\u6309\u7EE7\u627F\u94FE\u89E3\u6790\u5F97\u5230\uFF0C\u6240\u4EE5\u6574\u5957\u8272\u677F\n * \u4ECD\u7136\u7531\u4E00\u4E2A\u6570\u5B57\u8F6C\u52A8\uFF0C\u800C\u4EE4\u724C\u672C\u8EAB\u8D70\u5BBF\u4E3B\u7684\u4E3B\u9898\u901A\u9053\uFF08\u4E0D\u662F\u53E6\u7ACB\u4E00\u4EFD\u5168\u5C40\u4E3B\u9898\uFF09\u3002\n *\n * \u4E0E Maple \u539F\u7248\u7684\u504F\u5DEE\u90FD\u5728 `DETAILS.md`\u300C\u4E0E Maple \u539F\u7248\u7684\u504F\u5DEE\u300D\u91CC\u5199\u660E\uFF1B\n * \u5BF9\u6BD4\u5EA6\u7531 scripts/test-tokens.mjs \u8BFB\u8FD9\u4EFD\u8868\u81EA\u5DF1\u7B97\u3002\n */\n/** \u4E00\u6761\u4EE4\u724C\u5728\u6D45\u8272\u4E0E\u6DF1\u8272\u4E0B\u5404\u4E00\u4E2A\u503C\uFF1B\u4E0E\u5BBF\u4E3B `ThemeTokenOverrides` \u7684\u7ED3\u6784\u4E00\u81F4\u3002 */\nexport type ThemeTokenOverrides = Record<string, { light: string; dark: string }>;\n\n/** \u672C\u63D2\u4EF6\u5728\u4E3B\u9898\u901A\u9053\u91CC\u7684\u6765\u6E90\u540D\uFF0C\u4E0E\u5305\u540D\u4E00\u81F4\uFF0C\u4FBF\u4E8E\u5728\u5BBF\u4E3B\u91CC\u8BA4\u51FA\u662F\u8C01\u6539\u7684\u3002 */\nexport const THEME_SOURCE = '@lynn123411/dsh-maple-theme';\n\n/**\n * \u4E24\u5957\u8272\u677F\u3002\u6D45\u8272\u53D6 Maple \u7684\u6696\u767D\uFF08\u57FA\u7840\u8272\u76F8 35\u00B0\uFF09\u3001\u6DF1\u8272\u53D6\u51B7\u7070\uFF08207\u00B0\uFF09\u3002\n * \u4EE4\u724C\u540D\u4E0E\u5BBF\u4E3B `design-platform.css` \u4E00\u81F4\uFF0C\u6362\u7684\u662F\u503C\uFF0C\u4E0D\u662F\u540D\u5B57\u3002\n */\nexport const MAPLE_TOKENS = {\n '--dsw-alias-bg-base': { light: 'hsl(var(--maple-hue-light, 35) 12% 97%)', dark: 'hsl(var(--maple-hue-dark, 207) 6% 11%)' },\n '--dsw-alias-bg-layer-1': { light: 'hsl(var(--maple-hue-light, 35) 10% 95%)', dark: 'hsl(var(--maple-hue-dark, 207) 10% 13%)' },\n '--dsw-alias-bg-layer-2': { light: 'hsl(calc(var(--maple-hue-light, 35) - 18) 8% 93%)', dark: 'hsl(calc(var(--maple-hue-dark, 207) - 8) 6% 12%)' },\n '--dsw-alias-bg-overlay': { light: 'hsl(var(--maple-hue-light, 35) 10% 94%)', dark: 'hsl(var(--maple-hue-dark, 207) 8% 14%)' },\n '--dsw-alias-bg-module-platform': { light: 'hsl(var(--maple-hue-light, 35) 13.2% 90.6%)', dark: 'hsl(var(--maple-hue-dark, 207) 12% 12.4%)' },\n '--dsw-alias-label-primary': { light: 'hsl(var(--maple-hue-light, 35) 10% 18%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88%)' },\n '--dsw-alias-label-secondary': { light: 'hsl(var(--maple-hue-light, 35) 8% 35%)', dark: 'hsl(var(--maple-hue-dark, 207) 16% 72%)' },\n '--dsw-alias-label-tertiary': { light: 'hsl(var(--maple-hue-light, 35) 7% 42%)', dark: 'hsl(var(--maple-hue-dark, 207) 12% 58%)' },\n '--dsw-alias-label-caption': { light: 'hsl(var(--maple-hue-light, 35) 6% 50%)', dark: 'hsl(var(--maple-hue-dark, 207) 10% 46%)' },\n '--dsw-alias-label-dimmed': { light: 'hsl(var(--maple-hue-light, 35) 8% 82%)', dark: 'hsl(var(--maple-hue-dark, 207) 8% 26%)' },\n '--dsw-alias-label-primary-dimmed': { light: 'hsl(var(--maple-hue-light, 35) 9% 27%)', dark: 'hsl(var(--maple-hue-dark, 207) 18% 80%)' },\n '--dsw-alias-label-primary-bluish': { light: 'hsl(var(--maple-hue-light, 35) 26% 38%)', dark: 'hsl(var(--maple-hue-dark, 207) 26% 72%)' },\n '--dsw-alias-label-primary-foreground': { light: 'hsl(var(--maple-hue-light, 35) 40% 96%)', dark: 'hsl(var(--maple-hue-dark, 207) 10% 9%)' },\n '--dsw-alias-label-primary-inverted': { light: 'hsl(var(--maple-hue-light, 35) 40% 96%)', dark: 'hsl(var(--maple-hue-dark, 207) 10% 13%)' },\n '--dsw-alias-label-shimmer': { light: 'hsl(var(--maple-hue-light, 35) 10% 18% / 30%)', dark: 'hsl(0 0% 100% / 45%)' },\n '--dsw-alias-link': { light: 'hsl(162 76% 29%)', dark: 'hsl(178 30% 62%)' },\n '--dsw-alias-brand-primary': { light: 'hsl(var(--maple-hue-light, 35) 26% 38%)', dark: 'hsl(var(--maple-hue-dark, 207) 26% 72%)' },\n '--dsw-alias-brand-text': { light: 'hsl(var(--maple-hue-light, 35) 10% 18%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88%)' },\n '--dsw-alias-state-business-primary': { light: 'hsl(var(--maple-hue-light, 35) 26% 38%)', dark: 'hsl(var(--maple-hue-dark, 207) 26% 72%)' },\n '--dsw-alias-state-business-tertiary': { light: 'hsl(var(--maple-hue-light, 35) 40% 88%)', dark: 'hsl(var(--maple-hue-dark, 207) 18% 22%)' },\n '--dsw-alias-state-error-primary': { light: 'hsl(0 45% 48%)', dark: 'hsl(0 44% 68%)' },\n '--dsw-alias-state-warn-primary': { light: 'hsl(32 70% 37%)', dark: 'hsl(20 40% 68%)' },\n '--dsw-alias-state-success-primary': { light: 'hsl(95 75% 29%)', dark: 'hsl(130 32% 68%)' },\n '--dsw-alias-border-l1': { light: 'hsl(var(--maple-hue-light, 35) 26% 38% / 10%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88% / 7%)' },\n '--dsw-alias-border-l2': { light: 'hsl(var(--maple-hue-light, 35) 26% 38% / 16%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88% / 13%)' },\n '--dsw-alias-border-l3': { light: 'hsl(var(--maple-hue-light, 35) 26% 38% / 20%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88% / 17%)' },\n '--dsw-alias-border-l4': { light: 'hsl(var(--maple-hue-light, 35) 26% 38% / 26%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88% / 22%)' },\n '--dsw-alias-separator-primary': { light: 'hsl(var(--maple-hue-light, 35) 26% 38% / 16%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88% / 13%)' },\n '--dsw-alias-interactive-bg-hover': { light: 'hsl(var(--maple-hue-light, 35) 26% 38% / 7%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88% / 8%)' },\n '--dsw-alias-interactive-bg-active': { light: 'hsl(var(--maple-hue-light, 35) 26% 38% / 12%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88% / 14%)' },\n '--dsw-alias-interactive-bg-hover-solid': { light: 'hsl(var(--maple-hue-light, 35) 12% 93%)', dark: 'hsl(var(--maple-hue-dark, 207) 14% 16%)' },\n '--dsw-alias-button-info-fill': { light: 'hsl(162 62% 30%)', dark: 'hsl(178 34% 34%)' },\n '--dsw-alias-button-info-hover': { light: 'hsl(162 62% 24%)', dark: 'hsl(178 34% 42%)' },\n '--dsw-alias-brand-primary-new-colorprimary-new-color': { light: 'hsl(var(--maple-hue-light, 35) 30% 42%)', dark: 'hsl(var(--maple-hue-dark, 207) 30% 66%)' },\n '--dsw-alias-button-primary-fill': { light: 'hsl(var(--maple-hue-light, 35) 30% 42%)', dark: 'hsl(var(--maple-hue-dark, 207) 30% 66%)' },\n '--dsw-alias-button-primary-hover': { light: 'hsl(var(--maple-hue-light, 35) 32% 34%)', dark: 'hsl(var(--maple-hue-dark, 207) 32% 76%)' },\n '--dsw-alias-button-floating-fill': { light: 'hsl(var(--maple-hue-light, 35) 14% 98.5%)', dark: 'hsl(var(--maple-hue-dark, 207) 8% 15%)' },\n '--dsw-alias-button-floating-hover': { light: 'hsl(var(--maple-hue-light, 35) 10% 95%)', dark: 'hsl(var(--maple-hue-dark, 207) 14% 19%)' },\n '--dsw-alias-markdown-code-block': { light: 'hsl(var(--maple-hue-light, 35) 10% 95%)', dark: 'hsl(var(--maple-hue-dark, 207) 10% 13%)' },\n '--dsw-alias-markdown-code-block-banner': { light: 'hsl(var(--maple-hue-light, 35) 13.2% 90.6%)', dark: 'hsl(var(--maple-hue-dark, 207) 8% 15%)' },\n '--dsw-alias-markdown-inline-code': { light: 'hsl(var(--maple-hue-light, 35) 14% 94%)', dark: 'hsl(var(--maple-hue-dark, 207) 8% 15%)' },\n '--dsw-alias-markdown-tag': { light: 'hsl(var(--maple-hue-light, 35) 40% 88%)', dark: 'hsl(var(--maple-hue-dark, 207) 14% 20%)' },\n '--dsw-alias-markdown-citation': { light: 'hsl(var(--maple-hue-light, 35) 10% 94%)', dark: 'hsl(var(--maple-hue-dark, 207) 8% 14%)' },\n '--dsw-alias-scrollbar-bg-l1': { light: 'hsl(var(--maple-hue-light, 35) 14% 84%)', dark: 'hsl(var(--maple-hue-dark, 207) 10% 25%)' },\n '--dsw-alias-scrollbar-bg-l2': { light: 'hsl(var(--maple-hue-light, 35) 20% 78%)', dark: 'hsl(var(--maple-hue-dark, 207) 12% 32%)' },\n '--dsw-alias-scrollbar-hover-l2': { light: 'hsl(var(--maple-hue-light, 35) 18% 71%)', dark: 'hsl(var(--maple-hue-dark, 207) 10% 39%)' },\n '--dsw-alias-menu-icon': { light: 'hsl(var(--maple-hue-light, 35) 8% 35%)', dark: 'hsl(var(--maple-hue-dark, 207) 18% 80%)' },\n '--dsw-specific-sidebar-fill': { light: 'hsl(calc(var(--maple-hue-light, 35) - 18) 8% 93%)', dark: 'hsl(calc(var(--maple-hue-dark, 207) - 8) 6% 12%)' },\n '--dsw-specific-sidebar-nav-item-active': { light: 'hsl(var(--maple-hue-light, 35) 26% 88%)', dark: 'hsl(var(--maple-hue-dark, 207) 14% 19%)' },\n '--dsw-specific-sidebar-nav-item-hover': { light: 'hsl(var(--maple-hue-light, 35) 26% 38% / 8%)', dark: 'hsl(var(--maple-hue-dark, 207) 24% 88% / 8%)' },\n '--dsw-specific-sidebar-nav-item-active-accent': { light: 'hsl(var(--maple-hue-light, 35) 40% 84%)', dark: 'hsl(var(--maple-hue-dark, 207) 18% 24%)' },\n '--dsw-specific-tip': { light: 'hsl(var(--maple-hue-light, 35) 18% 90%)', dark: 'hsl(var(--maple-hue-dark, 207) 12% 18%)' },\n '--dsw-specific-bubble': { light: 'hsl(var(--maple-hue-light, 35) 24% 93%)', dark: 'hsl(var(--maple-hue-dark, 207) 14% 19%)' },\n '--dsw-specific-bubble-highlight': { light: 'hsl(var(--maple-hue-light, 35) 30% 87%)', dark: 'hsl(var(--maple-hue-dark, 207) 16% 24%)' },\n '--dsw-specific-input-major': { light: 'hsl(var(--maple-hue-light, 35) 14% 98.5%)', dark: 'hsl(var(--maple-hue-dark, 207) 8% 15%)' },\n '--dsw-specific-selector': { light: 'hsl(var(--maple-hue-light, 35) 14% 94%)', dark: 'hsl(var(--maple-hue-dark, 207) 14% 19%)' },\n} satisfies ThemeTokenOverrides;\n", "/* Maple \u6B63\u6587\u5C42\uFF1A\u5BF9\u8BDD\u6D41\u91CC\u7684 markdown \u6392\u7248\u4E0E\u88C5\u9970\u3002\n *\n * \u4F5C\u7528\u8303\u56F4\u53EA\u6709\u4E00\u5904\uFF1A\u52A9\u624B\u56DE\u7B54\u7684\u6B63\u6587\uFF08`[data-chat-flow-kind='assistant-step']`\uFF09\u3002\n * \u63A8\u7406\u5757\u7528\u7684\u662F\u540C\u4E00\u4E2A kind\uFF0C\u4F46\u5B83\u81EA\u5DF1\u5E26 `data-chat-group-part='reasoning'`\uFF0C\u88AB\u6392\u9664\u5728\u5916\u2014\u2014\n * \u63A8\u7406\u884C\u8981\u4FDD\u6301\u5BBF\u4E3B\u7684\u5C0F\u5B57\u53F7\u4E0E\u7D27\u51D1\u884C\u8DDD\uFF0C\u8DDF\u7740\u6B63\u6587\u4E00\u8D77\u653E\u5927\u5C31\u7CCA\u6210\u4E00\u7247\u3002\n * \u5DE5\u5177\u884C\u4E5F\u6392\u9664\uFF1A\u5B83\u7684 flow kind \u662F `tool-call`\uFF0C\u5BBF\u4E3B\u672C\u6765\u5C31\u4E0D\u5728\u91CC\u9762\u653E markdown \u5143\u7D20\u3002\n *\n * \u9009\u62E9\u5668\u4E00\u5F8B\u300C\u5BBF\u4E3B\u7684\u6570\u636E\u5C5E\u6027 + \u5143\u7D20\u540D\u300D\u4E24\u5C42\uFF1A\u5BBF\u4E3B\u6B63\u6587\u7684\u7C7B\u540D\u662F CSS Modules \u7684\u54C8\u5E0C\u4E32\uFF0C\n * \u6362\u4E00\u6B21\u6784\u5EFA\u5C31\u53D8\uFF0C\u4E0D\u80FD\u5F53\u951A\u70B9\u3002\u5178\u578B\u4E00\u6761\u662F\n * `html[data-maple-theme][data-maple-heading][data-chat-flow-kind]:not([data-chat-group-part]) body :where(h2)`\uFF0C\n * \u5C5E\u6027\u4E09\u4E2A\uFF08`html` \u4E0E `body` \u4E24\u4E2A\u5143\u7D20\u4E0D\u8BA1\u5728\u5185\uFF09\u538B\u8FC7\u5BBF\u4E3B module \u6837\u5F0F\u8868\u91CC\u7684\n * `.markdown h2` \u90A3\u4E00\u4E2A\u7C7B\uFF0C\u6240\u4EE5\u4E0D\u9700\u8981 !important\u3002\n */\n\nhtml[data-maple-theme='on'] {\n --maple-p-gap: 10px;\n --maple-underline-offset: 2px;\n --maple-inline-code: hsl(0 45% 48%);\n --maple-quote-bar: hsl(var(--maple-hue-light, 35) 26% 38% / 45%);\n --maple-quote-fill: hsl(var(--maple-hue-light, 35) 20% 95%);\n --maple-table-head: hsl(var(--maple-hue-light, 35) 30% 91%);\n}\n\nhtml[data-maple-theme='on'] body[data-ds-dark-theme] {\n --maple-inline-code: hsl(0 44% 68%);\n --maple-quote-bar: hsl(var(--maple-hue-dark, 207) 30% 72% / 40%);\n --maple-quote-fill: hsl(var(--maple-hue-dark, 207) 10% 14%);\n --maple-table-head: hsl(var(--maple-hue-dark, 207) 12% 17%);\n}\n\n/* \u6BB5\u8DDD\uFF1A\u5BBF\u4E3B\u7684\u6B63\u6587\u5BB9\u5668\u662F\u7EB5\u5411 flex\uFF0C\u5757\u4E0E\u5757\u4E4B\u95F4\u7684\u7A7A\u9699\u7531\u5BB9\u5668\u7684 `gap: 16px` \u7ED9\uFF0C\n * \u6BB5\u843D\u81EA\u5DF1\u7684 margin \u88AB\u5F52\u96F6\u3002\u6240\u4EE5\u8981\u6539\u7684\u662F\u5BB9\u5668\u90A3\u4E00\u4E2A gap\uFF0C\u4E0D\u662F p \u7684 margin\u3002\n * \u5BB9\u5668\u662F\u5305\u4F4F markdown \u6839\u8282\u70B9\u7684\u90A3\u4E2A div\uFF0C\u7528 :has() \u4ECE\u6839\u8282\u70B9\u5F80\u4E0A\u8BA4\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) {\n --maple-gap: var(--maple-p-gap, 10px);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :has(> [class*='markdown']) {\n gap: var(--maple-p-gap, 10px);\n}\n\n/* \u5217\u8868\u9879\u91CC\u7684\u6BB5\u843D\u4ECD\u6309\u5757\u7EA7 margin \u8D70\uFF1A\u5BBF\u4E3B\u7684\u5217\u8868\u6CA1\u6709 gap\uFF0C\u6BB5\u843D\u95F4\u8DDD\u5F52\u96F6\u4F1A\u6324\u6210\u4E00\u5768\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(li > p) {\n margin: 4px 0;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(strong) {\n font-weight: 600;\n}\n\n/* \u884C\u5185\u4EE3\u7801\uFF1AMaple \u7528\u6696\u7EA2\u4E00\u8272\u533A\u5206\uFF0C\u4E0D\u518D\u662F\u300C\u52A0\u4E86\u5E95\u7684\u6B63\u6587\u300D\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :not(pre) > code {\n color: var(--maple-inline-code);\n background-color: color-mix(in srgb, var(--maple-inline-code) 8%, transparent);\n border-color: color-mix(in srgb, var(--maple-inline-code) 18%, transparent);\n}\n\n/* \u94FE\u63A5\u4E0B\u5212\u7EBF\u7684\u62AC\u5347\u91CF\uFF1AMaple \u7684 --setting-underline-offset \u9ED8\u8BA4 2px\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(a) {\n text-underline-offset: var(--maple-underline-offset);\n}\n\n/* \u6807\u9898\uFF1A\u5B57\u53F7\u4E0E\u5B57\u91CD\u6765\u81EA tokens.css \u7684\u590D\u5408\u4EE4\u724C\uFF0C\u8FD9\u91CC\u53EA\u8865\u989C\u8272\u3001\u95F4\u8DDD\u4E0E h5/h6\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h1, h2, h3, h4, h5, h6) {\n position: relative;\n margin: 28px 0 12px;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h5) {\n font-size: calc(var(--dsh-content-font-size, 14px) * 1.05);\n font-weight: 600;\n line-height: 1.5;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h6) {\n font-size: var(--dsh-content-font-size, 14px);\n font-weight: 600;\n line-height: 1.6;\n}\n\nhtml[data-maple-theme='on'][data-maple-heading='colorful'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h1) { color: var(--maple-h1); }\nhtml[data-maple-theme='on'][data-maple-heading='colorful'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h2) { color: var(--maple-h2); }\nhtml[data-maple-theme='on'][data-maple-heading='colorful'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h3) { color: var(--maple-h3); }\nhtml[data-maple-theme='on'][data-maple-heading='colorful'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h4) { color: var(--maple-h4); }\nhtml[data-maple-theme='on'][data-maple-heading='colorful'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h5) { color: var(--maple-h5); }\nhtml[data-maple-theme='on'][data-maple-heading='colorful'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h6) { color: var(--maple-h6); }\n\n/* \u53E6\u4E24\u79CD\u6807\u9898\u914D\u8272\uFF1A\u516D\u7EA7\u7EDF\u4E00\u53D6\u4E00\u4E2A\u8272\uFF0C\u4E0D\u518D\u9010\u7EA7\u6362\u3002\n * \u4EE4\u724C\u5C42\u7ED9\u4E86 --maple-heading-color\uFF0C\u8FD9\u91CC\u6309\u5143\u7D20\u9010\u7EA7\u6302\u4E0A\u2014\u2014\u5BBF\u4E3B\u7528\u7684\u662F\u5143\u7D20\u9009\u62E9\u5668\uFF0C\n * \u4E00\u6B21 :where(h1, h2, \u2026) \u7684\u4F18\u5148\u7EA7\u4E0E\u5B83\u76F8\u540C\uFF0C\u5206\u4E0D\u5F00\u3002 */\nhtml[data-maple-theme='on'][data-maple-heading='accent'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h1),\nhtml[data-maple-theme='on'][data-maple-heading='accent'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h2),\nhtml[data-maple-theme='on'][data-maple-heading='accent'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h3),\nhtml[data-maple-theme='on'][data-maple-heading='accent'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h4),\nhtml[data-maple-theme='on'][data-maple-heading='accent'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h5),\nhtml[data-maple-theme='on'][data-maple-heading='accent'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h6) { color: var(--maple-heading-color); }\n\nhtml[data-maple-theme='on'][data-maple-heading='text'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h1),\nhtml[data-maple-theme='on'][data-maple-heading='text'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h2),\nhtml[data-maple-theme='on'][data-maple-heading='text'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h3),\nhtml[data-maple-theme='on'][data-maple-heading='text'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h4),\nhtml[data-maple-theme='on'][data-maple-heading='text'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h5),\nhtml[data-maple-theme='on'][data-maple-heading='text'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h6) { color: var(--maple-heading-color); }\n\n/* \u6807\u9898\u7B49\u7EA7\u6807\u8BB0\uFF1AMaple \u7684 heading-indicator-auto\u2014\u2014\u5E73\u65F6\u770B\u4E0D\u89C1\uFF0C\u60AC\u505C\u65F6\u5728\u5DE6\u4FA7\u6DE1\u5165 H1\u2026H6\u3002 */\nhtml[data-maple-theme='on'][data-maple-indicator='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h1, h2, h3, h4, h5, h6)::before {\n position: absolute;\n inset-inline-start: -1.9rem;\n top: 0.15em;\n font-size: calc(var(--dsh-content-font-size, 14px) * 0.7);\n font-weight: 500;\n line-height: 1;\n color: var(--dsw-alias-label-caption);\n opacity: 0;\n transition: opacity var(--ds-transition-duration-fast) var(--ds-ease-in-out);\n pointer-events: none;\n}\n\nhtml[data-maple-theme='on'][data-maple-indicator='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h1, h2, h3, h4, h5, h6):hover::before {\n opacity: 1;\n}\n\nhtml[data-maple-theme='on'][data-maple-indicator='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h1)::before { content: 'H1'; }\nhtml[data-maple-theme='on'][data-maple-indicator='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h2)::before { content: 'H2'; }\nhtml[data-maple-theme='on'][data-maple-indicator='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h3)::before { content: 'H3'; }\nhtml[data-maple-theme='on'][data-maple-indicator='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h4)::before { content: 'H4'; }\nhtml[data-maple-theme='on'][data-maple-indicator='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h5)::before { content: 'H5'; }\nhtml[data-maple-theme='on'][data-maple-indicator='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h6)::before { content: 'H6'; }\n\n/* \u5F15\u7528\uFF1AMaple \u662F\u6D45\u5E95 + \u5DE6\u4FA7\u4E00\u6761\u8272\u5E26\uFF0C\u4E0D\u662F\u5BBF\u4E3B\u7684\u5355\u8FB9\u7AD6\u7EBF\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(blockquote) {\n position: relative;\n margin: 14px 0;\n padding: 8px 14px 8px 18px;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: var(--maple-quote-fill);\n color: var(--dsw-alias-label-secondary);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(blockquote)::before {\n content: '';\n position: absolute;\n inset-block: 8px;\n inset-inline-start: 7px;\n width: 3px;\n border-radius: var(--dsw-radius-xs);\n background: var(--maple-quote-bar);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(blockquote blockquote) {\n margin-inline-end: 0;\n background: color-mix(in srgb, var(--maple-quote-fill) 70%, var(--dsw-alias-bg-base));\n}\n\n/* \u5217\u8868\uFF1AMaple \u7684\u6807\u8BB0\u7528\u7B49\u5BBD\u5B57\u4F53\uFF0C\u5E76\u6309\u5C42\u7EA7\u6362\u5F62\u72B6\uFF08\u5B9E\u5FC3\u5706 \u2192 \u7A7A\u5FC3\u5706 \u2192 \u65B9\u5757\uFF09\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(ul, ol) {\n margin: var(--maple-p-gap) 0;\n padding-inline-start: 1.35em;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(li)::marker {\n font-family: var(--ds-font-family-code);\n color: var(--dsw-alias-state-business-primary);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(ul) > :where(li)::marker {\n font-size: 0.85em;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(ul ul, ul ul ul ul, ul ul ul ul ul ul) {\n list-style-type: circle;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(ul ul ul, ul ul ul ul ul) {\n list-style-type: square;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(li) {\n margin: 3px 0;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(input[type='checkbox']) {\n accent-color: var(--dsw-alias-state-business-primary);\n margin-inline-end: 8px;\n}\n\n/* \u8868\u683C\uFF1AMaple \u7684\u8868\u5934\u586B\u4E00\u5C42\u6D45\u5E95\u3001\u5916\u8FB9\u5706\u89D2\u3001\u6A2A\u7EBF\u53EA\u5728\u884C\u4E4B\u95F4\u3002\n * \u5BBF\u4E3B\u7528 border-collapse: collapse\uFF0C\u5706\u89D2\u4F1A\u88AB\u88C1\u6389\uFF0C\u6240\u4EE5\u6539\u6210 separate + \u96F6\u95F4\u8DDD\uFF0C\n * \u53EA\u7ED9\u56DB\u89D2\u7684\u5355\u5143\u683C\u4E0A\u5706\u89D2\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(table) {\n border-collapse: separate;\n border-spacing: 0;\n font-size: calc(var(--dsh-content-font-size, 14px) - 1px);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(th) {\n background: var(--maple-table-head);\n font-weight: 600;\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(thead > tr > th:first-child) {\n border-start-start-radius: var(--dsw-radius-sm);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(thead > tr > th:last-child) {\n border-start-end-radius: var(--dsw-radius-sm);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(tbody > tr:last-child > td:first-child) {\n border-end-start-radius: var(--dsw-radius-sm);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(tbody > tr:last-child > td:last-child) {\n border-end-end-radius: var(--dsw-radius-sm);\n}\n\n/* \u5206\u9694\u7EBF\uFF1AMaple \u662F\u4E00\u6761\u4E24\u7AEF\u6DE1\u51FA\u7684\u6E10\u53D8\uFF0C\u4E0D\u662F\u4E00\u6839\u7B49\u5BBD\u5B9E\u7EBF\uFF0C\u4E0A\u4E0B\u7559\u767D\u4E5F\u66F4\u5927\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(hr) {\n height: 1px;\n margin: 28px 0;\n border: 0;\n background: linear-gradient(\n to right,\n transparent 0%,\n var(--dsw-alias-border-l3) 22%,\n var(--dsw-alias-border-l4) 50%,\n var(--dsw-alias-border-l3) 78%,\n transparent 100%\n );\n}\n\n/* \u4EE3\u7801\u5757\uFF1AMaple \u7ED9\u5B83\u4E00\u5708\u53D1\u4E1D\u8FB9\u6846\u3001\u6BD4\u5BBF\u4E3B\u5C0F\u4E00\u6863\u7684\u5706\u89D2\uFF0C\u6807\u9898\u6761\u7528\u6BD4\u6B63\u6587\u6DF1\u4E00\u6863\u7684\u5E95\u3002\n * \u5BBF\u4E3B\u628A\u5706\u89D2\u6536\u5728\u4E00\u4E2A\u5C40\u90E8\u53D8\u91CF\u91CC\uFF08--dsl-code-block-border-radius\uFF0C\u9ED8\u8BA4 radius-lg\uFF09\uFF0C\n * \u6240\u4EE5\u6362\u5706\u89D2\u53EA\u8981\u6362\u90A3\u4E2A\u53D8\u91CF\uFF0C\u4E0D\u5FC5\u53BB\u5199\u5404\u89D2\u7684 border-radius\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(.md-code-block) {\n border: 0.5px solid var(--dsw-alias-border-l2);\n --dsl-code-block-border-radius: var(--dsw-radius-md);\n}\n\n/* \u6807\u9898\u6761\uFF1AMaple \u7684 code-language \u7528\u7B49\u5BBD\u5B57\u4F53\u3001\u884C\u5185\u4EE3\u7801\u90A3\u4E2A\u6696\u8272\uFF0C\u5B57\u53F7\u5C0F\u4E00\u53F7\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where([data-code-block-banner]) {\n border-bottom: 0.5px solid var(--dsw-alias-border-l1);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where([data-code-block-banner]) :where(div:first-child) {\n font-family: var(--ds-font-family-code);\n letter-spacing: 0.02em;\n color: var(--maple-inline-code);\n}\n\n/* \u884C\u53F7\u680F\uFF1AMaple \u7684\u884C\u53F7\u6BD4\u5BBF\u4E3B\u7684\u518D\u6DE1\u4E00\u6863\uFF0C\u8BA9\u4EE3\u7801\u672C\u8EAB\u66F4\u7A81\u51FA\u3002\n * \u5BBF\u4E3B\u628A\u884C\u53F7\u753B\u5728 `.line::before` \u4E0A\u5E76\u76F4\u63A5\u53D6 --dsw-alias-label-tertiary\uFF0C\u6240\u4EE5\u5728\u884C\u53F7\u5BB9\u5668\u91CC\n * \u628A\u90A3\u4E2A\u53D8\u91CF\u6362\u6210 caption \u4E00\u6863\uFF1B`--dsl-*` \u662F\u7EC4\u4EF6\u81EA\u5DF1\u7684\u5C40\u90E8\u53D8\u91CF\uFF0C\u4E0D\u5728\u8FD9\u91CC\u6539\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where([data-line-numbers]) {\n --dsw-alias-label-tertiary: var(--dsw-alias-label-caption);\n}\n\n/* \u9009\u4E2D\u6587\u5B57\uFF1AMaple \u7528\u5F3A\u8C03\u8272\u7684\u4F4E\u900F\u660E\u5EA6\uFF0C\u4E0D\u662F\u6D4F\u89C8\u5668\u7684\u9ED8\u8BA4\u84DD\u3002 */\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step'] ::selection {\n background: hsl(35 60% 62% / 28%);\n}\n\nhtml[data-maple-theme='on'] [data-chat-flow-kind='assistant-step']:not([data-chat-group-part='reasoning']) :where(h1, h2, h3, h4, h5, h6):first-child {\n margin-top: 0;\n}\n", "/* Maple \u5916\u58F3\u5C42\uFF1A\u4FA7\u680F\u3001\u4F1A\u8BDD\u5934\u90E8\u3001\u8F93\u5165\u533A\u4E0E\u6807\u7B7E\u6761\u7684\u89C2\u611F\u3002\n *\n * \u951A\u70B9\u53EA\u6709\u4E00\u6837\u662F\u7A33\u7684\uFF1A`data-slot`\u3002\u5BBF\u4E3B\u7684\u5916\u58F3\u7C7B\u540D\u5168\u662F CSS Modules \u7684\u54C8\u5E0C\u4E32\n * \uFF08`pI_x6G_sidebarCol`\u3001`wSkVaW_tabActive`\uFF09\uFF0C\u6362\u4E00\u6B21\u6784\u5EFA\u5C31\u53D8\uFF1B\u800C `data-slot` \u662F\u5EA7\u4F4D\u6CE8\u518C\u65F6\n * \u5199\u6B7B\u7684\u540D\u5B57\uFF0C\u5C5E\u4E8E\u8DE8\u5305\u5951\u7EA6\u2014\u2014\u63D2\u4EF6\u7684\u5EA7\u4F4D\u5C31\u662F\u9760\u5B83\u8BA4\u7684\u3002\u9700\u8981\u9009\u4E2D\u300C\u88C5\u5EA7\u4F4D\u7684\u90A3\u4E2A\u58F3\u300D\u65F6\u7528\n * `:has(> [data-slot='\u2026'])`\uFF1A\u58F3\u6CA1\u6709\u540D\u5B57\uFF0C\u4F46\u5B83\u7684\u5B69\u5B50\u6709\u3002\u884C\u4E0E\u6807\u7B7E\u53E6\u6709\u5177\u4F53\u5C5E\u6027\uFF1A\n * `[data-row-key^='session:']`\u3001`[data-conversation-tabs] [aria-selected]`\u3002\n *\n * \u8FD9\u4E00\u5C42\u53EA\u6539**\u89C2\u611F**\uFF1A\u5E95\u8272\u3001\u5206\u9694\u7EBF\u3001\u5706\u89D2\u3001\u7559\u767D\u3002\u552F\u72EC\u4E2D\u592E\u5217\u90A3\u4E00\u5708\u5185\u8FB9\u8DDD\u7B97\u662F\u5C3A\u5BF8\u2014\u2014\n * \u5B83\u662F Maple \u5361\u7247\u5F0F\u5E03\u5C40\u7684\u5916\u6CBF\uFF0C\u503C\u56FA\u5B9A\u5728 6px\uFF0C\u4E0D\u53C2\u4E0E\u5BBF\u4E3B\u7684\u4EFB\u4F55\u8BA1\u7B97\u3002\n * \u4E0D\u52A8 grid \u8F68\u9053\u3001\u4E0D\u52A8\u6EDA\u52A8\u5F52\u5C5E\uFF0C\u6240\u4EE5\u6298\u53E0\u3001\u62D6\u5BBD\u3001\u54CD\u5E94\u5F0F\u90FD\u7167\u65E7\u3002\n *\n * \u6574\u5C42\u53D7 `data-maple-shell` \u5F00\u5173\u63A7\u5236\uFF0C\u914D\u7F6E\u9875\u4E0A\u53EF\u4EE5\u6574\u4E2A\u5173\u6389\u56DE\u5230\u5BBF\u4E3B\u539F\u6837\u3002\n */\n\n/* \u4E2D\u592E\u5217\uFF1AMaple \u7684 app-layout-card \u628A\u7F16\u8F91\u533A\u5F53\u6210\u4E00\u5F20\u6D6E\u5728\u4FA7\u680F\u5E95\u8272\u4E0A\u7684\u5361\u7247\uFF0C\n * \u56DB\u5468\u7559\u4E00\u6761\u7A84\u7F1D\uFF08\u5B83\u7684 --app-layout-spacing \u9ED8\u8BA4\u5728 6~8px\uFF09\u3002\u8FD9\u91CC\u7167\u540C\u6837\u601D\u8DEF\uFF0C\n * \u4F46\u53EA\u7ED9\u5185\u8FB9\u8DDD\uFF0C\u4E0D\u52A8 grid \u8F68\u9053\u2014\u2014\u8F68\u9053\u7531\u5BBF\u4E3B\u6309\u62D6\u5BBD\u5B9E\u65F6\u5199\u884C\u5185\u6837\u5F0F\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body :has(> [data-slot='main']) {\n padding: 6px 6px 0;\n box-sizing: border-box;\n}\n\n/* \u4FA7\u680F\u4E0E\u4E2D\u592E\u5361\u7247\u4E4B\u95F4\uFF1A\u5BBF\u4E3B\u7684 0.5px \u51B7\u7070\u5206\u9694\u7EBF\uFF0CMaple \u7528\u7559\u767D\u5206\u5C42\uFF0C\u4E0D\u8981\u8FD9\u6761\u7EBF\u3002\n * \u4E24\u4FA7\u90FD\u8981\u64A4\u2014\u2014\u975E darwin \u753B\u5728\u4FA7\u680F\u7684\u53F3\u8FB9\u6846\u4E0A\uFF0Cdarwin \u753B\u5728\u4E2D\u592E\u5217\u7684\u5DE6\u8FB9\u6846\u4E0A\u3002\n * \u4FA7\u680F\u5E95\u8272\u5DF2\u7531 tokens.css \u7684 --dsw-specific-sidebar-fill \u7ED9\u51FA\uFF08Maple \u7684\u6696\u7070\uFF09\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body :has(> [data-slot='sidebar']) {\n border-right: 0;\n}\n\nhtml[data-maple-theme='on'][data-maple-shell='on'] body :has(> [data-slot='main']) {\n border-left: 0;\n}\n\n/* \u4F1A\u8BDD\u5934\u90E8\uFF1AMaple \u7684\u6807\u9898\u533A\u6CA1\u6709\u90A3\u6761\u8D2F\u7A7F\u7684\u5206\u9694\u7EBF\u3002\n * \u5EA7\u4F4D\u951A\u70B9\u81EA\u5DF1\u662F display: contents\uFF0C\u8FB9\u6846\u753B\u5728\u5B83\u5305\u7740\u7684\u771F <header> \u4E0A\uFF0C\n * \u6240\u4EE5\u8FD9\u91CC\u5F80\u4E0B\u4E00\u5C42\u627E\uFF1B\u6539\u6210 transparent \u800C\u4E0D\u662F none\uFF0C\u907F\u514D\u9AD8\u5EA6\u8DF3 0.5px\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body [data-slot='conversation.header'] header {\n border-bottom-color: transparent;\n}\n\n/* \u6807\u7B7E\u6761\uFF1AMaple \u7684 tab-float \u628A\u6D3B\u52A8\u6807\u7B7E\u505A\u6210\u4E00\u679A\u6D6E\u8D77\u7684\u5706\u89D2\u5757\uFF0C\u5E95\u4E0B\u4E0D\u5E26\u6307\u793A\u6761\u3002\n * \u5BBF\u4E3B\u7684\u6D3B\u52A8\u6307\u793A\u662F `::after` \u7684\u4E00\u6761 2px \u7EBF\uFF0C\u8FD9\u91CC\u64A4\u6389\u5B83\u3001\u6539\u7528\u540C\u5BBD\u7684\u5706\u89D2\u5E95\u3002\n * \u5706\u89D2\u4E0E corner-shape \u5FC5\u987B\u5199\u5728\u540C\u4E00\u7EC4\u58F0\u660E\u91CC\uFF0C\u5426\u5219\u5BBF\u4E3B\u7684 superellipse \u4F1A\u628A\n * \u8FD9\u4E2A\u76F4\u89D2\u5706\u89D2\u63C9\u6210\u65B9\u5706\u5F62\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body [data-conversation-tabs] [aria-selected='true'] {\n border-radius: var(--dsw-radius-sm);\n corner-shape: round;\n background: var(--dsw-alias-interactive-bg-hover-solid);\n}\n\nhtml[data-maple-theme='on'][data-maple-shell='on'] body [data-conversation-tabs] [aria-selected='true']::after {\n opacity: 0;\n}\n\n/* \u8F93\u5165\u533A\uFF1AMaple \u7684\u8F93\u5165\u5361\u662F\u300C\u6BD4\u6B63\u6587\u6D45\u4E00\u6863\u7684\u7EB8\u300D\uFF0C\u5706\u89D2\u53D6\u9762\u677F\u7EA7\u3002\n * \u5BBF\u4E3B\u7684 composer \u5DF2\u7ECF\u662F border: 0 + elevation-soft\uFF08\u6295\u5F71\u5C42\u53EA\u6362\u586B\u5145\u4E0E\u5706\u89D2\uFF0C\u4E0D\u78B0\u9634\u5F71\uFF09\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body [data-composer-card] {\n background: var(--dsw-specific-input-major);\n border-radius: var(--dsw-radius-panel);\n}\n\n/* \u4FA7\u680F\u7684\u5BFC\u822A\u884C\u4E0E\u5DE5\u4F5C\u533A\u884C\uFF1AMaple \u7684\u5217\u8868\u9879\u5E26\u5706\u89D2\uFF0C\u60AC\u505C\u4E0E\u9009\u4E2D\u90FD\u662F\u5706\u89D2\u5757\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body [data-row-key^='session:'],\nhtml[data-maple-theme='on'][data-maple-shell='on'] body [data-row-key^='workspace:'] {\n border-radius: var(--dsw-radius-sm);\n}\n\n/* \u4FA7\u680F\u5E95\u90E8\u5DE5\u5177\u680F\uFF1A\u5BBF\u4E3B\u7684\u51B7\u7070\u6D6E\u5C42\uFF0C\u6362\u6210 Maple \u7684\u7EB8\u8272\u3002\n * \u5EA7\u4F4D\u951A\u70B9\u662F display: contents\uFF0C\u6D82\u5728\u5B83\u4E0D\u4F1A\u89C1\u6548\uFF0C\u5F97\u6D82\u88C5\u5B83\u7684\u90A3\u4E2A\u58F3\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body :has(> [data-slot='shell.bottom']) {\n background: var(--dsw-specific-tip);\n}\n\n/* \u4F1A\u8BDD\u5934\u90E8\u7684\u56FE\u6807\u6309\u94AE\uFF1AMaple \u7684\u56FE\u6807\u6309\u94AE\u662F\u7D27\u51D1\u63A7\u4EF6\u7EA7\u5706\u89D2\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body [data-slot='conversation.session.header.actions'] button {\n border-radius: var(--dsw-radius-sm);\n}\n\n/* \u6EDA\u52A8\u6761\uFF1AMaple \u7684\u6ED1\u5757\u5BBD 12px\u3001\u5706\u5934\uFF0C\u989C\u8272\u53D6\u5B83\u7684\u6696\u7070\uFF08tokens.css \u5DF2\u6362\uFF09\u3002 */\nhtml[data-maple-theme='on'][data-maple-shell='on'] body {\n --dsh-scrollbar-width: 12px;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACaO,IAAM,iBAAiB;AAGvB,IAAM,oBAAoB;AAG1B,IAAM,sBAAsB;AAG5B,IAAM,iBAAiB;AAGvB,IAAM,kBAAkB;AAWxB,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAeO,IAAM,mBAA4C,OAAO,OAAO;AAAA,EACrE,UAAU;AAAA,EACV,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,WAAW;AACb,CAAC;AAWM,SAAS,YAAY,OAAgB,KAAa,KAAa,UAA0B;AAC9F,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,SAAU,QAAO;AAEnE,MAAI,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,GAAI,QAAO;AAC7D,QAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAC/D,MAAI,CAAC,OAAO,SAAS,MAAM,EAAG,QAAO;AACrC,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,CAAC;AAC5C;AAOO,SAAS,kBAAkB,KAA+D;AAC/F,QAAM,SAAS,OAAO,CAAC;AACvB,QAAM,UAAU,OAAO;AACvB,SAAO;AAAA,IACL,UAAU,YAAY,OAAO,UAAU,GAAG,KAAK,iBAAiB,QAAQ;AAAA,IACxE,SAAS,YAAY,OAAO,SAAS,GAAG,KAAK,iBAAiB,OAAO;AAAA,IACrE,YAAY,YAAY,OAAO,YAAY,KAAK,GAAG,iBAAiB,UAAU;AAAA,IAC9E,cAAc,YAAY,OAAO,cAAc,GAAG,IAAI,iBAAiB,YAAY;AAAA,IACnF,cAAc,YAAY,cAAc,YAAY,YAAY,YAAY,SACxE,UACA,iBAAiB;AAAA,IACrB,kBAAkB,OAAO,oBAAoB,iBAAiB;AAAA,IAC9D,aAAa,OAAO,eAAe,iBAAiB;AAAA,IACpD,WAAW,OAAO,aAAa,iBAAiB;AAAA,EAClD;AACF;AAWO,SAAS,gBAAgB,UAAyB,UAAU,MAAuB;AACxF,MAAI,CAAC,SAAS;AACZ,UAAM,YAAkC,CAAC;AACzC,eAAWA,SAAQ,eAAgB,WAAUA,KAAI,IAAI;AACrD,WAAO;AAAA,MACL,YAAY;AAAA,QACV,CAAC,cAAc,GAAG;AAAA,QAClB,CAAC,iBAAiB,GAAG;AAAA,QACrB,CAAC,mBAAmB,GAAG;AAAA,QACvB,CAAC,cAAc,GAAG;AAAA,QAClB,CAAC,eAAe,GAAG;AAAA,MACrB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,YAAY;AAAA,MACV,CAAC,cAAc,GAAG;AAAA,MAClB,CAAC,iBAAiB,GAAG,SAAS;AAAA,MAC9B,CAAC,mBAAmB,GAAG,SAAS,mBAAmB,OAAO;AAAA,MAC1D,CAAC,cAAc,GAAG,SAAS,cAAc,OAAO;AAAA,MAChD,CAAC,eAAe,GAAG,SAAS,YAAY,OAAO;AAAA,IACjD;AAAA,IACA,WAAW;AAAA,MACT,qBAAqB,OAAO,SAAS,QAAQ;AAAA,MAC7C,oBAAoB,OAAO,SAAS,OAAO;AAAA,MAC3C,uBAAuB,OAAO,SAAS,UAAU;AAAA,MACjD,iBAAiB,GAAG,SAAS,YAAY;AAAA,IAC3C;AAAA,EACF;AACF;AAOO,SAAS,gBAAgB,MAAmB,YAAmC;AACpF,aAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,WAAW,UAAU,GAAG;AACtE,QAAI,UAAU,KAAM,MAAK,gBAAgB,SAAS;AAAA,QAC7C,MAAK,aAAa,WAAW,KAAK;AAAA,EACzC;AACA,aAAW,CAAC,UAAU,KAAK,KAAK,OAAO,QAAQ,WAAW,SAAS,GAAG;AACpE,QAAI,UAAU,KAAM,MAAK,MAAM,eAAe,QAAQ;AAAA,QACjD,MAAK,MAAM,YAAY,UAAU,KAAK;AAAA,EAC7C;AACF;AAMO,SAAS,gBAAgB,MAAyB;AACvD,kBAAgB,MAAM,gBAAgB,kBAAkB,MAAS,GAAG,KAAK,CAAC;AAC5E;;;AC1JO,IAAM,qBAAqB;AAG3B,IAAM,qBAAqB;AAG3B,IAAM,cAAc;AAsBpB,SAAS,aAAa,MAA4C;AACvE,QAAM,WAAW,KAAK,YAAY;AAClC,MAAI,SAAS,WAAW,cAAe,QAAO;AAC9C,SAAO,kBAAkB,SAAS,KAAK;AACzC;AASO,SAAS,eAAe,MAAmB,MAA6B;AAC7E,QAAM,OAAO,MAAY;AACvB,UAAM,WAAW,aAAa,IAAI;AAClC,oBAAgB,MAAM,gBAAgB,YAAY,kBAAkB,MAAS,CAAC,CAAC;AAAA,EACjF;AACA,OAAK;AACL,QAAM,MAAM,KAAK,UAAU,IAAI;AAC/B,SAAO,MAAM;AACX,QAAI;AACJ,oBAAgB,IAAI;AAAA,EACtB;AACF;;;AC/DO,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACExB,mBAAoC;AAEpC,sCAAgD;AAqB1C;AAdN,IAAM,kBAAkB;AAAA,EACtB,EAAE,OAAO,YAAY,KAAK,4BAA4B;AAAA,EACtD,EAAE,OAAO,UAAU,KAAK,0BAA0B;AAAA,EAClD,EAAE,OAAO,QAAQ,KAAK,wBAAwB;AAChD;AAGA,SAAS,IAAI,EAAE,OAAO,MAAM,SAAS,GAId;AACrB,SACE,6CAAC,SAAI,WAAU,iBACb;AAAA,iDAAC,SAAI,WAAU,sBACb;AAAA,kDAAC,SAAI,WAAU,uBAAuB,iBAAM;AAAA,MAC3C,SAAS,UAAa,4CAAC,SAAI,WAAU,sBAAsB,gBAAK;AAAA,OACnE;AAAA,IACA,4CAAC,SAAI,WAAU,uBAAuB,UAAS;AAAA,KACjD;AAEJ;AASA,SAAS,YAAY,EAAE,OAAO,KAAK,KAAK,MAAM,MAAM,OAAO,SAAS,GAQ7C;AACrB,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,OAAO,KAAK,CAAC;AAE9C,8BAAU,MAAM;AAAE,YAAQ,OAAO,KAAK,CAAC;AAAA,EAAE,GAAG,CAAC,KAAK,CAAC;AACnD,QAAM,SAAS,MAAY;AACzB,UAAM,SAAS,OAAO,IAAI;AAC1B,QAAI,CAAC,OAAO,SAAS,MAAM,GAAG;AAAE,cAAQ,OAAO,KAAK,CAAC;AAAG;AAAA,IAAQ;AAChE,UAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,SAAS,IAAI,IAAI,IAAI,CAAC;AAC7E,YAAQ,OAAO,OAAO,CAAC;AACvB,QAAI,YAAY,MAAO,UAAS,OAAO;AAAA,EACzC;AACA,SACE,4EACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,WAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,cAAY;AAAA,QACZ,UAAU,CAAC,UAA+C;AAAE,kBAAQ,MAAM,OAAO,KAAK;AAAA,QAAE;AAAA,QACxF,QAAQ;AAAA,QACR,WAAW,CAAC,UAAiD;AAC3D,cAAI,MAAM,QAAQ,SAAS;AAAE,kBAAM,cAAc,KAAK;AAAA,UAAG;AAAA,QAC3D;AAAA;AAAA,IACF;AAAA,IACA,4CAAC,UAAK,WAAU,kBAAkB,gBAAK;AAAA,KACzC;AAEJ;AAOO,SAAS,eACd,OACoB;AAEpB,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,IAAI,CAAC,QACR,MAAkD,EAAE,GAAG;AAC1D,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAoC,MAAM,aAAa,IAAI,CAAC;AAC5F,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,MAAM,KAAK,YAAY,EAAE,WAAW,aAAa;AAE5F,8BAAU,MAAM;AACd,UAAM,OAAO,MAAY;AACvB,kBAAY,aAAa,IAAI,CAAC;AAC9B,mBAAa,KAAK,YAAY,EAAE,WAAW,aAAa;AAAA,IAC1D;AACA,SAAK;AACL,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,CAAC,UAAW,QAAO,4CAAC,SAAI,WAAU,kBAAiB,sDAAC,SAAI,WAAU,mBAAmB,YAAE,kBAAkB,GAAE,GAAM;AAErH,QAAM,UAAU,YAAY;AAC5B,QAAM,QAAQ,CAAC,OAA4B,UAAyB;AAAE,SAAK,KAAK,IAAI,OAAO,KAAK;AAAA,EAAG;AAEnG,SACE,6CAAC,SAAI,WAAU,kBACb;AAAA,iDAAC,aAAQ,WAAU,mBACjB;AAAA,kDAAC,SAAI,WAAU,yBAAyB,YAAE,aAAa,GAAE;AAAA,MACzD,4CAAC,OAAI,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,mBAAmB,GACzD;AAAA,QAAC;AAAA;AAAA,UAAY,OAAO,QAAQ;AAAA,UAAU,KAAK;AAAA,UAAG,KAAK;AAAA,UAAK,MAAM;AAAA,UAAG,MAAK;AAAA,UACpE,OAAO,EAAE,eAAe;AAAA,UAAG,UAAU,CAAC,SAAS;AAAE,kBAAM,YAAY,IAAI;AAAA,UAAE;AAAA;AAAA,MAAG,GAChF;AAAA,MACA,4CAAC,OAAI,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE,kBAAkB,GACvD;AAAA,QAAC;AAAA;AAAA,UAAY,OAAO,QAAQ;AAAA,UAAS,KAAK;AAAA,UAAG,KAAK;AAAA,UAAK,MAAM;AAAA,UAAG,MAAK;AAAA,UACnE,OAAO,EAAE,cAAc;AAAA,UAAG,UAAU,CAAC,SAAS;AAAE,kBAAM,WAAW,IAAI;AAAA,UAAE;AAAA;AAAA,MAAG,GAC9E;AAAA,OACF;AAAA,IAEA,6CAAC,aAAQ,WAAU,mBACjB;AAAA,kDAAC,SAAI,WAAU,yBAAyB,YAAE,iBAAiB,GAAE;AAAA,MAC7D,4CAAC,OAAI,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,qBAAqB,GAC7D;AAAA,QAAC;AAAA;AAAA,UAAY,OAAO,QAAQ;AAAA,UAAY,KAAK;AAAA,UAAK,KAAK;AAAA,UAAG,MAAM;AAAA,UAAM,MAAK;AAAA,UACzE,OAAO,EAAE,iBAAiB;AAAA,UAAG,UAAU,CAAC,SAAS;AAAE,kBAAM,cAAc,IAAI;AAAA,UAAE;AAAA;AAAA,MAAG,GACpF;AAAA,MACA,4CAAC,OAAI,OAAO,EAAE,mBAAmB,GAAG,MAAM,EAAE,uBAAuB,GACjE;AAAA,QAAC;AAAA;AAAA,UAAY,OAAO,QAAQ;AAAA,UAAc,KAAK;AAAA,UAAG,KAAK;AAAA,UAAI,MAAM;AAAA,UAAG,MAAK;AAAA,UACvE,OAAO,EAAE,mBAAmB;AAAA,UAAG,UAAU,CAAC,SAAS;AAAE,kBAAM,gBAAgB,IAAI;AAAA,UAAE;AAAA;AAAA,MAAG,GACxF;AAAA,OACF;AAAA,IAEA,6CAAC,aAAQ,WAAU,mBACjB;AAAA,kDAAC,SAAI,WAAU,yBAAyB,YAAE,eAAe,GAAE;AAAA,MAC3D,4CAAC,OAAI,OAAO,EAAE,mBAAmB,GAC/B;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,OAAO,QAAQ;AAAA,UACf,OAAO,EAAE,mBAAmB;AAAA,UAC5B,SAAS,gBAAgB,IAAI,aAAW,EAAE,OAAO,OAAO,OAAO,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AAAA,UACtF,UAAU,CAAC,SAAS;AAAE,kBAAM,gBAAgB,IAAI;AAAA,UAAE;AAAA;AAAA,MACpD,GACF;AAAA,MACA,4CAAC,OAAI,OAAO,EAAE,uBAAuB,GAAG,MAAM,EAAE,2BAA2B,GACzE;AAAA,QAAC;AAAA;AAAA,UAAO,SAAS,QAAQ;AAAA,UAAkB,OAAO,EAAE,uBAAuB;AAAA,UACzE,UAAU,CAAC,SAAS;AAAE,kBAAM,oBAAoB,IAAI;AAAA,UAAE;AAAA;AAAA,MAAG,GAC7D;AAAA,OACF;AAAA,IAEA,6CAAC,aAAQ,WAAU,mBACjB;AAAA,kDAAC,SAAI,WAAU,yBAAyB,YAAE,WAAW,GAAE;AAAA,MACvD,4CAAC,OAAI,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,sBAAsB,GAC/D;AAAA,QAAC;AAAA;AAAA,UAAO,SAAS,QAAQ;AAAA,UAAa,OAAO,EAAE,kBAAkB;AAAA,UAC/D,UAAU,CAAC,SAAS;AAAE,kBAAM,eAAe,IAAI;AAAA,UAAE;AAAA;AAAA,MAAG,GACxD;AAAA,OACF;AAAA,IAEA,6CAAC,aAAQ,WAAU,mBACjB;AAAA,kDAAC,SAAI,WAAU,yBAAyB,YAAE,YAAY,GAAE;AAAA,MACxD,4CAAC,OAAI,OAAO,EAAE,gBAAgB,GAAG,MAAM,EAAE,oBAAoB,GAC3D;AAAA,QAAC;AAAA;AAAA,UAAO,SAAS,QAAQ;AAAA,UAAW,OAAO,EAAE,gBAAgB;AAAA,UAC3D,UAAU,CAAC,SAAS;AAAE,kBAAM,aAAa,IAAI;AAAA,UAAE;AAAA;AAAA,MAAG,GACtD;AAAA,OACF;AAAA,IAEA,4CAAC,SAAI,WAAU,kBAAkB,YAAE,YAAY,GAAE;AAAA,KACnD;AAEJ;;;ACjLO,IAAM,KAAK;AAGX,IAAM,KAAK;AAAA,EAChB,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,6BAA6B;AAAA,EAC7B,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,6BAA6B;AAAA,EAC7B,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,cAAc;AAAA,EACd,oBAAoB;AACtB;AAGO,IAAM,KAAsC;AAAA,EACjD,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,6BAA6B;AAAA,EAC7B,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,6BAA6B;AAAA,EAC7B,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,cAAc;AAAA,EACd,oBAAoB;AACtB;;;AC3DA;;;ACcO,IAAM,eAAe;AAMrB,IAAM,eAAe;AAAA,EAC1B,uBAAuB,EAAE,OAAO,2CAA2C,MAAM,yCAAyC;AAAA,EAC1H,0BAA0B,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC9H,0BAA0B,EAAE,OAAO,qDAAqD,MAAM,mDAAmD;AAAA,EACjJ,0BAA0B,EAAE,OAAO,2CAA2C,MAAM,yCAAyC;AAAA,EAC7H,kCAAkC,EAAE,OAAO,+CAA+C,MAAM,4CAA4C;AAAA,EAC5I,6BAA6B,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACjI,+BAA+B,EAAE,OAAO,0CAA0C,MAAM,0CAA0C;AAAA,EAClI,8BAA8B,EAAE,OAAO,0CAA0C,MAAM,0CAA0C;AAAA,EACjI,6BAA6B,EAAE,OAAO,0CAA0C,MAAM,0CAA0C;AAAA,EAChI,4BAA4B,EAAE,OAAO,0CAA0C,MAAM,yCAAyC;AAAA,EAC9H,oCAAoC,EAAE,OAAO,0CAA0C,MAAM,0CAA0C;AAAA,EACvI,oCAAoC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACxI,wCAAwC,EAAE,OAAO,2CAA2C,MAAM,yCAAyC;AAAA,EAC3I,sCAAsC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC1I,6BAA6B,EAAE,OAAO,iDAAiD,MAAM,uBAAuB;AAAA,EACpH,oBAAoB,EAAE,OAAO,oBAAoB,MAAM,mBAAmB;AAAA,EAC1E,6BAA6B,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACjI,0BAA0B,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC9H,sCAAsC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC1I,uCAAuC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC3I,mCAAmC,EAAE,OAAO,kBAAkB,MAAM,iBAAiB;AAAA,EACrF,kCAAkC,EAAE,OAAO,mBAAmB,MAAM,kBAAkB;AAAA,EACtF,qCAAqC,EAAE,OAAO,mBAAmB,MAAM,mBAAmB;AAAA,EAC1F,yBAAyB,EAAE,OAAO,iDAAiD,MAAM,+CAA+C;AAAA,EACxI,yBAAyB,EAAE,OAAO,iDAAiD,MAAM,gDAAgD;AAAA,EACzI,yBAAyB,EAAE,OAAO,iDAAiD,MAAM,gDAAgD;AAAA,EACzI,yBAAyB,EAAE,OAAO,iDAAiD,MAAM,gDAAgD;AAAA,EACzI,iCAAiC,EAAE,OAAO,iDAAiD,MAAM,gDAAgD;AAAA,EACjJ,oCAAoC,EAAE,OAAO,gDAAgD,MAAM,+CAA+C;AAAA,EAClJ,qCAAqC,EAAE,OAAO,iDAAiD,MAAM,gDAAgD;AAAA,EACrJ,0CAA0C,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC9I,gCAAgC,EAAE,OAAO,oBAAoB,MAAM,mBAAmB;AAAA,EACtF,iCAAiC,EAAE,OAAO,oBAAoB,MAAM,mBAAmB;AAAA,EACvF,wDAAwD,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC5J,mCAAmC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACvI,oCAAoC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACxI,oCAAoC,EAAE,OAAO,6CAA6C,MAAM,yCAAyC;AAAA,EACzI,qCAAqC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACzI,mCAAmC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACvI,0CAA0C,EAAE,OAAO,+CAA+C,MAAM,yCAAyC;AAAA,EACjJ,oCAAoC,EAAE,OAAO,2CAA2C,MAAM,yCAAyC;AAAA,EACvI,4BAA4B,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAChI,iCAAiC,EAAE,OAAO,2CAA2C,MAAM,yCAAyC;AAAA,EACpI,+BAA+B,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACnI,+BAA+B,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACnI,kCAAkC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACtI,yBAAyB,EAAE,OAAO,0CAA0C,MAAM,0CAA0C;AAAA,EAC5H,+BAA+B,EAAE,OAAO,qDAAqD,MAAM,mDAAmD;AAAA,EACtJ,0CAA0C,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC9I,yCAAyC,EAAE,OAAO,gDAAgD,MAAM,+CAA+C;AAAA,EACvJ,iDAAiD,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACrJ,sBAAsB,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC1H,yBAAyB,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EAC7H,mCAAmC,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AAAA,EACvI,8BAA8B,EAAE,OAAO,6CAA6C,MAAM,yCAAyC;AAAA,EACnI,2BAA2B,EAAE,OAAO,2CAA2C,MAAM,0CAA0C;AACjI;;;AC7EA;;;ACAA;;;ATqCO,IAAM,OAAO;AAOb,IAAM,SAAS,CAAC,eAAe,SAAS,UAAU,OAAO;AAGhE,IAAM,SAAiD;AAAA,EACrD,CAAC,cAAc,cAAM;AAAA,EACrB,CAAC,gBAAgB,gBAAQ;AAAA,EACzB,CAAC,aAAa,aAAK;AAAA,EACnB,CAAC,YAAY,QAAQ;AACvB;AAMA,SAAS,eAAqB;AAC5B,MAAI,OAAO,aAAa,YAAa;AACrC,aAAW,CAAC,MAAM,GAAG,KAAK,QAAQ;AAChC,UAAM,MAAM,GAAG,IAAI,IAAI,IAAI;AAC3B,UAAM,WAAW,SAAS,KAAK,cAAgC,0BAA0B,GAAG,IAAI;AAChG,UAAM,MAAM,YAAY,SAAS,cAAc,OAAO;AACtD,QAAI,QAAQ,SAAS;AACrB,QAAI,QAAQ,YAAY;AACxB,QAAI,cAAc;AAClB,QAAI,aAAa,KAAM,UAAS,KAAK,YAAY,GAAG;AAAA,EACtD;AACF;AAGA,SAAS,eAAqB;AAC5B,MAAI,OAAO,aAAa,YAAa;AACrC,aAAW,OAAO,SAAS,KAAK,iBAAiB,sBAAsB,IAAI,IAAI,EAAG,KAAI,OAAO;AAC/F;AAwBO,SAAS,MAAM,KAA0B;AAC9C,QAAM,WAAW;AAEjB,MAAI,OAAO,MAAM;AACf,iBAAa;AACb,WAAO,MAAM;AAAE,mBAAa;AAAA,IAAG;AAAA,EACjC,GAAG,8BAA8B;AAIjC,MAAI;AAAA,IACF,MAAM,SAAS,MAAM,eAAe,cAAc,YAAY;AAAA,IAC9D;AAAA,EACF;AAEA,MAAI;AAAA,IACF,MAAM,SAAS,OAAO,SAAS,IAAI,EAAE,IAAI,GAAG,CAAC;AAAA,IAC7C;AAAA,EACF;AAGA,MAAI,OAAO,MAAM;AACf,QAAI,OAAO,aAAa,YAAa,QAAO,MAAM;AAAA,IAAC;AACnD,WAAO,eAAe,SAAS,iBAAiB,SAAS,YAAY,IAAI,kBAAkB,CAAC;AAAA,EAC9F,GAAG,6BAA6B;AAGhC,MAAI;AAAA,IACF,MAAM,SAAS,YAAY,YAAY,CAAC,kBAAkB,GAAG,MAAM,SAAS,MAAM;AAAA,MAChF;AAAA,MACA,MAAM,cAAc,UAAU,OAAO;AAAA,QACnC,MAAM;AAAA,QACN,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ,OAAO,EAAE,MAAM,SAAS,YAAY,IAAI,kBAAkB,EAAE;AAAA,MACtE,EAAE;AAAA,IACJ,CAAC;AAAA,IACD;AAAA,EACF;AACF;AAQA,SAAS,cAAc,UAA0B,SAAoD;AACnG,SAAO,SAAS,MAAM,SAAS,QAAQ,GAAG,cAAc;AAC1D;",
6
+ "names": ["name"]
7
+ }
package/lib/index.js ADDED
@@ -0,0 +1,36 @@
1
+ // src/index.ts
2
+ import z from "@deepseek-ai/schemastery";
3
+ var name = "dsh-maple-theme";
4
+ var inject = ["settings"];
5
+ var HEADING_MODES = ["colorful", "accent", "text"];
6
+ var SETTINGS_NAMESPACE = name;
7
+ var Config = z.object({
8
+ /** 浅色基础色相(度):整套浅色从它推导。 */
9
+ hueLight: z.number().step(1).min(0).max(360).default(35).volatile(),
10
+ /** 深色基础色相(度)。 */
11
+ hueDark: z.number().step(1).min(0).max(360).default(207).volatile(),
12
+ /** 正文行高倍数(Maple 的出厂值是 1.8,对话正文取 1.75)。 */
13
+ lineHeight: z.number().step(0.05).min(1.4).max(2).default(1.75).volatile(),
14
+ /** 段落间距(px;Maple 的出厂值是 8,对话正文取 10)。 */
15
+ paragraphGap: z.number().step(1).min(4).max(24).default(10).volatile(),
16
+ /** 标题配色方式。 */
17
+ headingColor: z.union([...HEADING_MODES]).default("colorful").volatile(),
18
+ /** 悬停时在标题左侧显示 H1…H6 等级标记。 */
19
+ headingIndicator: z.boolean().default(true).volatile(),
20
+ /** 代码块使用 Maple 的语法配色。 */
21
+ codePalette: z.boolean().default(true).volatile(),
22
+ /** 外壳装饰:侧栏与标签条的圆角、输入卡填充、去掉会话头部那条分隔线。 */
23
+ shellSkin: z.boolean().default(true).volatile()
24
+ });
25
+ function apply(ctx) {
26
+ ctx.settings.configure({ auto: false }, ctx.fiber);
27
+ }
28
+ export {
29
+ Config,
30
+ HEADING_MODES,
31
+ SETTINGS_NAMESPACE,
32
+ apply,
33
+ inject,
34
+ name
35
+ };
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts"],
4
+ "sourcesContent": ["import z from '@deepseek-ai/schemastery';\n\n/**\n * `@lynn123411/dsh-maple-theme` \u2014\u2014 \u628A Maple \u7684\u914D\u8272\u4E0E\u804A\u5929\u6B63\u6587\u6392\u7248\u5E26\u8FDB DSH\u3002\n *\n * \u5BBF\u4E3B\u534A\u8FB9\u53EA\u58F0\u660E\u8FD9\u4EFD\u914D\u7F6E\u7684\u5F62\u72B6\uFF1A\u754C\u9762\u5168\u90E8\u7531\u6D4F\u89C8\u5668\u534A\u8FB9\u753B\uFF08\u6CE8\u5165\u6837\u5F0F\u8868 + \u63D2\u4EF6\u9875\u4E0A\u7684\u914D\u7F6E\u5361\u7247\uFF09\uFF0C\n * \u8FD9\u91CC\u4E0D\u78B0\u4EFB\u4F55\u754C\u9762\uFF0C\u4E5F\u4E0D\u6CE8\u518C\u5DE5\u5177\u3002\u914D\u7F6E\u9879\u843D\u8FDB\u672C\u63D2\u4EF6\u90A3\u4E00\u884C\u7684 config\uFF0C\u6D4F\u89C8\u5668\u534A\u8FB9\u7ECF\n * `ctx.configForms.get('dsh-maple-theme')` \u8BFB\u5199\u540C\u4E00\u4EFD\u503C\u3002\n *\n * \u6BCF\u4E2A\u5B57\u6BB5\u90FD\u6807 `volatile()`\uFF1A\u6539\u4E00\u4E2A\u5F00\u5173\u4E0D\u8BE5\u91CD\u6302\u6574\u6761 loader entry\uFF0C\u6D4F\u89C8\u5668\u534A\u8FB9\u6536\u5230\u901A\u77E5\u540E\n * \u81EA\u5DF1\u6539 <html> \u4E0A\u7684\u5C5E\u6027\u4E0E\u53D8\u91CF\uFF0C\u6837\u5F0F\u8868\u4E0D\u91CD\u5EFA\u3002\n */\nexport const name = 'dsh-maple-theme';\n\n/** \u53EA\u9700\u8981 settings \u670D\u52A1\uFF1A\u5B83\u627F\u8F7D\u8FD9\u4E00\u884C\u7684\u914D\u7F6E\uFF0C\u4E5F\u662F\u300C\u4E0D\u81EA\u52A8\u751F\u6210\u8BBE\u7F6E\u9875\u300D\u90A3\u6761\u7B56\u7565\u7684\u5165\u53E3\u3002 */\nexport const inject = ['settings'];\n\n/** \u6807\u9898\u914D\u8272\u7684\u4E09\u79CD\u53D6\u6750\u65B9\u5F0F\u3002 */\nexport const HEADING_MODES = ['colorful', 'accent', 'text'] as const;\n\n/** \u6807\u9898\u914D\u8272\uFF1A\u516D\u8272\u4F9D\u6B21\u6362 / \u5168\u7528\u5F3A\u8C03\u8272 / \u5168\u7528\u6B63\u6587\u8272\u3002 */\nexport type HeadingMode = typeof HEADING_MODES[number];\n\n/** \u672C\u63D2\u4EF6\u5728 profile \u91CC\u7684 loader \u884C id\uFF0C\u540C\u65F6\u662F\u8BBE\u7F6E\u7684\u547D\u540D\u7A7A\u95F4\u3002 */\nexport const SETTINGS_NAMESPACE = name;\n\n/**\n * \u914D\u7F6E\u7684\u5F62\u72B6\u4E0E\u9ED8\u8BA4\u503C\u3002\u8272\u76F8\u53D6 Maple \u81EA\u5DF1\u7684\u51FA\u5382\u503C\uFF08\u6D45\u8272 35\u3001\u6DF1\u8272 207\uFF09\u3002\n * \u884C\u9AD8\u4E0E\u6BB5\u843D\u95F4\u8DDD\u6BD4 Maple \u7684 1.8 / 8px \u677E\u4E00\u6863\uFF1A\u5BF9\u8BDD\u6B63\u6587\u7684\u884C\u5BBD\u6BD4\u7B14\u8BB0\u7A84\uFF0C\n * \u6309\u7B14\u8BB0\u7684\u884C\u8DDD\u6392\u4F1A\u663E\u5F97\u7A00\uFF0C\u6240\u4EE5\u8FD9\u91CC\u6536\u7D27\u884C\u8DDD\u3001\u653E\u5927\u6BB5\u8DDD\u3002\n */\nexport const Config = z.object({\n /** \u6D45\u8272\u57FA\u7840\u8272\u76F8\uFF08\u5EA6\uFF09\uFF1A\u6574\u5957\u6D45\u8272\u4ECE\u5B83\u63A8\u5BFC\u3002 */\n hueLight: z.number().step(1).min(0).max(360).default(35).volatile(),\n /** \u6DF1\u8272\u57FA\u7840\u8272\u76F8\uFF08\u5EA6\uFF09\u3002 */\n hueDark: z.number().step(1).min(0).max(360).default(207).volatile(),\n /** \u6B63\u6587\u884C\u9AD8\u500D\u6570\uFF08Maple \u7684\u51FA\u5382\u503C\u662F 1.8\uFF0C\u5BF9\u8BDD\u6B63\u6587\u53D6 1.75\uFF09\u3002 */\n lineHeight: z.number().step(0.05).min(1.4).max(2).default(1.75).volatile(),\n /** \u6BB5\u843D\u95F4\u8DDD\uFF08px\uFF1BMaple \u7684\u51FA\u5382\u503C\u662F 8\uFF0C\u5BF9\u8BDD\u6B63\u6587\u53D6 10\uFF09\u3002 */\n paragraphGap: z.number().step(1).min(4).max(24).default(10).volatile(),\n /** \u6807\u9898\u914D\u8272\u65B9\u5F0F\u3002 */\n headingColor: z.union([...HEADING_MODES]).default('colorful').volatile(),\n /** \u60AC\u505C\u65F6\u5728\u6807\u9898\u5DE6\u4FA7\u663E\u793A H1\u2026H6 \u7B49\u7EA7\u6807\u8BB0\u3002 */\n headingIndicator: z.boolean().default(true).volatile(),\n /** \u4EE3\u7801\u5757\u4F7F\u7528 Maple \u7684\u8BED\u6CD5\u914D\u8272\u3002 */\n codePalette: z.boolean().default(true).volatile(),\n /** \u5916\u58F3\u88C5\u9970\uFF1A\u4FA7\u680F\u4E0E\u6807\u7B7E\u6761\u7684\u5706\u89D2\u3001\u8F93\u5165\u5361\u586B\u5145\u3001\u53BB\u6389\u4F1A\u8BDD\u5934\u90E8\u90A3\u6761\u5206\u9694\u7EBF\u3002 */\n shellSkin: z.boolean().default(true).volatile(),\n});\n\n/** \u5BBF\u4E3B\u4E0A\u4E0B\u6587\u91CC\u672C\u63D2\u4EF6\u7528\u5230\u7684\u90A3\u4E24\u4E2A\u6210\u5458\u3002 */\ninterface HostContext {\n fiber: unknown;\n settings: {\n /** \u767B\u8BB0\u8FD9\u4E00\u884C\u5728\u8BBE\u7F6E\u9875\u4E0A\u7684\u81EA\u52A8\u751F\u6210\u7B56\u7565\uFF1B`auto: false` \u8868\u793A\u4E0D\u751F\u6210\u3002 */\n configure(presentation: { auto?: boolean }, owner?: unknown): () => void;\n };\n}\n\n/**\n * \u63D2\u4EF6\u672C\u4F53\uFF1A\u58F0\u660E\u672C\u884C\u7684\u8BBE\u7F6E\u9875\u7B56\u7565\u3002\n *\n * \u914D\u7F6E\u754C\u9762\u5728\u5BBF\u4E3B\u300C\u63D2\u4EF6\u300D\u9875\u4E0A\uFF08\u6D4F\u89C8\u5668\u534A\u8FB9\u6CE8\u518C `plugins.bundle.config`\uFF09\uFF0C\n * \u6240\u4EE5\u8FD9\u91CC\u8981\u663E\u5F0F\u5173\u6389\u5185\u6838\u6309 Config schema \u81EA\u52A8\u751F\u6210\u7684\u8BBE\u7F6E\u9875\uFF0C\u5426\u5219\u540C\u4E00\u6279\u5B57\u6BB5\u4F1A\u51FA\u73B0\u4E24\u6B21\u3002\n * @param ctx - \u5BBF\u4E3B\u63D2\u4EF6\u4E0A\u4E0B\u6587\u3002\n */\nexport function apply(ctx: HostContext): void {\n ctx.settings.configure({ auto: false }, ctx.fiber);\n}\n"],
5
+ "mappings": ";AAAA,OAAO,OAAO;AAYP,IAAM,OAAO;AAGb,IAAM,SAAS,CAAC,UAAU;AAG1B,IAAM,gBAAgB,CAAC,YAAY,UAAU,MAAM;AAMnD,IAAM,qBAAqB;AAO3B,IAAM,SAAS,EAAE,OAAO;AAAA;AAAA,EAE7B,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,SAAS;AAAA;AAAA,EAElE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,GAAG,EAAE,SAAS;AAAA;AAAA,EAElE,YAAY,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA;AAAA,EAEzE,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,SAAS;AAAA;AAAA,EAErE,cAAc,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,QAAQ,UAAU,EAAE,SAAS;AAAA;AAAA,EAEvE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA;AAAA,EAErD,aAAa,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA;AAAA,EAEhD,WAAW,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAChD,CAAC;AAkBM,SAAS,MAAM,KAAwB;AAC5C,MAAI,SAAS,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,KAAK;AACnD;",
6
+ "names": []
7
+ }
package/locale/en.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Maple theme",
4
+ "description": "Brings the Maple Obsidian theme into DSH: a warm-white and a cool-grey palette, plus conversation typography, code blocks and shell surfaces."
5
+ }
6
+ }
package/locale/zh.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Maple 主题",
4
+ "description": "把 Obsidian 的 Maple 主题搬进 DSH:暖白 / 冷灰两套配色,加上对话正文的排版、代码块与侧栏观感。"
5
+ }
6
+ }
package/package.json CHANGED
@@ -1,6 +1,96 @@
1
1
  {
2
2
  "name": "@lynn123411/dsh-maple-theme",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "把 Obsidian 的 Maple 主题搬进 DSH:暖白 / 冷灰两套配色,加上对话正文的排版、代码块与侧栏观感。",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "exports": {
8
+ ".": "./lib/index.js",
9
+ "./client": "./lib/client.js",
10
+ "./cordis.patch.yml": "./cordis.patch.yml",
11
+ "./locale/en.json": "./locale/en.json",
12
+ "./locale/zh.json": "./locale/zh.json",
13
+ "./package.json": "./package.json",
14
+ "./src/*": "./src/*"
15
+ },
16
+ "files": [
17
+ "lib",
18
+ "src",
19
+ "cordis.patch.yml",
20
+ "README.md",
21
+ "DETAILS.md",
22
+ "locale",
23
+ "assets"
24
+ ],
25
+ "license": "MIT",
26
+ "keywords": [
27
+ "deepseek-harness",
28
+ "dsh",
29
+ "dsh-plugin",
30
+ "cordis"
31
+ ],
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/tttnny/my-dsh.git",
35
+ "directory": "plugins/dsh-maple-theme"
36
+ },
37
+ "scripts": {
38
+ "build": "node build.mjs",
39
+ "prepack": "pnpm run build",
40
+ "typecheck": "tsc -p tsconfig.json --noEmit",
41
+ "test": "node build.mjs && node scripts/smoke-host.mjs && node scripts/test-projection.mjs && node scripts/smoke-client.mjs && node scripts/test-tokens.mjs && node scripts/test-anchors.mjs",
42
+ "assert:lib-untracked": "node scripts/assert-lib-untracked.mjs",
43
+ "check": "pnpm typecheck && pnpm test && pnpm assert:lib-untracked"
44
+ },
45
+ "dsh": {
46
+ "bundle": {
47
+ "patch": "./cordis.patch.yml"
48
+ },
49
+ "client": {
50
+ "platform": "web",
51
+ "inject": [
52
+ "@deepseek-ai/dsh-client-locale",
53
+ "@deepseek-ai/dsh-client-ui-plugin-manager",
54
+ "@deepseek-ai/dsh-client-ui-settings",
55
+ "@deepseek-ai/dsh-client-ui-renderer",
56
+ "@deepseek-ai/dsh-client-ui-primitives"
57
+ ],
58
+ "immediately": true
59
+ }
60
+ },
61
+ "peerDependencies": {
62
+ "@deepseek-ai/cordis": "^4.0.5",
63
+ "@deepseek-ai/dsh-client-ui-primitives": ">=0.2.1-rc.2",
64
+ "@deepseek-ai/dsh-client-ui-slots": ">=0.2.1-rc.2",
65
+ "react": "^18.2.0"
66
+ },
67
+ "devDependencies": {
68
+ "@deepseek-ai/cordis": "^4.0.5",
69
+ "@deepseek-ai/dsh-client-locale": ">=0.2.1-rc.2",
70
+ "@deepseek-ai/dsh-client-ui-plugin-manager": ">=0.2.1-rc.2",
71
+ "@deepseek-ai/dsh-client-ui-primitives": ">=0.2.1-rc.2",
72
+ "@deepseek-ai/dsh-client-ui-renderer": ">=0.2.1-rc.2",
73
+ "@deepseek-ai/dsh-client-ui-settings": ">=0.2.1-rc.2",
74
+ "@deepseek-ai/dsh-client-ui-slots": ">=0.2.1-rc.2",
75
+ "@deepseek-ai/dsh-system-prompt": ">=0.2.1-rc.2",
76
+ "@deepseek-ai/dsh-tools": ">=0.2.1-rc.2",
77
+ "@deepseek-ai/schemastery": "^3.18.5",
78
+ "@types/node": "^22.20.0",
79
+ "@types/react": "^19.2.18",
80
+ "@types/react-dom": "^19.3.0",
81
+ "esbuild": "^0.25.0",
82
+ "jsdom": "^26.1.0",
83
+ "react": "^18.3.1",
84
+ "react-dom": "^18.3.1",
85
+ "typescript": "^6.0.0"
86
+ },
87
+ "engines": {
88
+ "dsh": ">=0.2.1-rc.2",
89
+ "node": "^22.19 || >=24"
90
+ },
91
+ "packageManager": "pnpm@11.7.0",
92
+ "publishConfig": {
93
+ "access": "public"
94
+ },
95
+ "icon": "./assets/icon.svg"
96
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * 配置卡片与主题投影的唯一接线处:读哪一份表单、写哪几个字段。
3
+ *
4
+ * 这一层只做「读快照 → 收拢 → 投影 → 写到 <html>」三件事,不画界面。
5
+ * 卡片(`card.tsx`)与自检(`scripts/test-projection.mjs`)都从这里的同一个函数走,
6
+ * 所以「卡片改了字段」与「页面真的换了样子」不可能各走一边。
7
+ */
8
+ import {
9
+ applyProjection,
10
+ clearProjection,
11
+ normalizeSettings,
12
+ projectSettings,
13
+ type MapleSettings,
14
+ } from './settings.ts';
15
+
16
+ /** 本插件在 profile 里的 loader 行 id,也是配置表单的命名空间。 */
17
+ export const SETTINGS_NAMESPACE = 'dsh-maple-theme';
18
+
19
+ /** 主题在宿主「插件」页上的座位。 */
20
+ export const BUNDLE_CONFIG_SLOT = 'plugins.bundle.config';
21
+
22
+ /** 本插件 bundle 的包名:`plugins.bundle.config` 的 key 就是它。 */
23
+ export const BUNDLE_NAME = '@lynn123411/dsh-maple-theme';
24
+
25
+ /**
26
+ * 一张卡片要用到的配置表单:只取真正用到的那几个成员的结构子集。
27
+ * 这样自检用假件冒充它时不必拖进整个 ui-settings 运行时。
28
+ */
29
+ export interface MapleForm {
30
+ getSnapshot(): {
31
+ status: 'loading' | 'ready' | 'unavailable';
32
+ value?: Partial<MapleSettings> | undefined;
33
+ writable?: boolean;
34
+ revision?: number | undefined;
35
+ };
36
+ subscribe(listener: () => void): () => void;
37
+ set(field: string, value: unknown): Promise<boolean>;
38
+ }
39
+
40
+ /**
41
+ * 读表单当前值,收拢成一份可信配置。
42
+ * @param form - 本命名空间的配置表单。
43
+ * @returns 宿主还没服务这个命名空间时返回 undefined。
44
+ */
45
+ export function readSettings(form: MapleForm): MapleSettings | undefined {
46
+ const snapshot = form.getSnapshot();
47
+ if (snapshot.status === 'unavailable') return undefined;
48
+ return normalizeSettings(snapshot.value);
49
+ }
50
+
51
+ /**
52
+ * 订阅表单并持续投影,直到返回的 disposer 被调用。
53
+ * 这也包括卸载时把 `<html>` 上的痕迹撤干净——插件停用后页面必须回到宿主原本的样子。
54
+ * @param root - 文档根元素。
55
+ * @param form - 本命名空间的配置表单。
56
+ * @returns 停止订阅并撤掉投影的 disposer。
57
+ */
58
+ export function bindProjection(root: HTMLElement, form: MapleForm): () => void {
59
+ const sync = (): void => {
60
+ const settings = readSettings(form);
61
+ applyProjection(root, projectSettings(settings ?? normalizeSettings(undefined)));
62
+ };
63
+ sync();
64
+ const off = form.subscribe(sync);
65
+ return () => {
66
+ off();
67
+ clearProjection(root);
68
+ };
69
+ }
@@ -0,0 +1,20 @@
1
+ /** 卡片自己的样式。宿主「插件」页只提供页面骨架,行布局由卡片自己给。
2
+ *
3
+ * 形状照宿主的设置行:左边标题与说明,右边控件;整块是一张卡片(填充 + 发丝描边),
4
+ * 不加阴影——浮起来的才是菜单与弹窗。颜色一律取 --dsw-alias-*,深浅两套自动跟随。
5
+ */
6
+ export const CARD_CSS = `
7
+ .dsh-maple-card{display:flex;flex-direction:column;gap:20px;padding:16px 0}
8
+ .dsh-maple-group{display:flex;flex-direction:column;gap:4px}
9
+ .dsh-maple-group-title{font-size:12px;line-height:18px;font-weight:600;color:var(--dsw-alias-label-tertiary);letter-spacing:.02em}
10
+ .dsh-maple-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 0;border-bottom:0.5px solid var(--dsw-alias-border-l1)}
11
+ .dsh-maple-row:last-child{border-bottom:0}
12
+ .dsh-maple-row-info{display:flex;flex-direction:column;gap:2px;min-width:0}
13
+ .dsh-maple-row-title{font-size:14px;line-height:22px;color:var(--dsw-alias-label-primary)}
14
+ .dsh-maple-row-hint{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}
15
+ .dsh-maple-row-field{flex:none;display:flex;align-items:center;gap:8px}
16
+ .dsh-maple-number{width:88px}
17
+ .dsh-maple-unit{font-size:12px;color:var(--dsw-alias-label-tertiary);min-width:18px}
18
+ .dsh-maple-note{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary);padding-top:12px}
19
+ .dsh-maple-empty{font-size:13px;line-height:20px;color:var(--dsw-alias-label-tertiary)}
20
+ `;