@lijinmei-810/dev-inspector 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DevInspector.tsx","../src/DevInspectorProvider.tsx","../src/config.ts","../src/mount.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\nimport type { CSSProperties, KeyboardEvent as ReactKeyboardEvent, MouseEvent as ReactMouseEvent } from 'react';\nimport { ArrowDown, ArrowUp, CircleHelp, Component as ComponentIcon, Minus, Plus, RotateCcw, Trash2, X } from 'lucide-react';\nimport './dev-inspector.css';\nimport { useDevInspectorConfig } from './DevInspectorProvider';\nimport type { DevInspectorTokenConfig } from './config';\nimport type { ContainerStyleOption, PaletteColor, PaletteGroup, TypographyStyleOption } from './config';\n\nfunction calcDropPos(rect: DOMRect, dropHeight = 280, dropWidth = 280): { top: number; left: number } {\n const spaceBelow = window.innerHeight - rect.bottom;\n const top = spaceBelow >= dropHeight + 8 ? rect.bottom + 4 : rect.top - dropHeight - 4;\n const maxLeft = Math.max(8, window.innerWidth - dropWidth - 8);\n return { top: Math.max(8, top), left: Math.min(Math.max(8, rect.left), maxLeft) };\n}\n\nfunction handleArrowKeyStep<T extends HTMLElement>(\n event: ReactKeyboardEvent<T>,\n onStep: (delta: number) => void,\n onEnter?: () => void,\n) {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault();\n onStep(event.key === 'ArrowUp' ? 1 : -1);\n return;\n }\n if (event.key === 'Enter') onEnter?.();\n}\n\n// ─── 常量(Inspector 专属)───────────────────────────────────────\nconst COLOR_PROPS = [\n { label: '背景色', prop: 'background-color' },\n];\n\n// hex/rgba → 短标签(通过色板反查)\nfunction getColorLabel(val: string, colorPalette: DevInspectorTokenConfig['colorPalette']): string | null {\n for (const g of colorPalette) {\n const found = g.colors.find((c: PaletteColor) => c.val === val);\n if (found) return `${g.group}·${found.label}`;\n }\n return null;\n}\n\nfunction getTypographyToken(\n fontSize: string,\n fontWeight: string,\n color: string,\n typographyTokens: DevInspectorTokenConfig['typographyTokens'],\n) {\n const normalizedColor = normalizeColor(color);\n return typographyTokens.find(token =>\n token.fontSize === fontSize.trim()\n && token.fontWeight === fontWeight.trim()\n && normalizeColor(token.color) === normalizedColor,\n ) ?? null;\n}\n\nfunction getTypographyStyles(tokens: DevInspectorTokenConfig): TypographyStyleOption[] {\n return tokens.typographyStyles ?? [];\n}\n\nfunction getContainerStyles(tokens: DevInspectorTokenConfig): ContainerStyleOption[] {\n return tokens.containerStyles ?? tokens.borderStyles ?? [];\n}\n\nfunction getTypographyStyle(\n fontSize: string,\n fontWeight: string,\n color: string,\n typographyStyles: TypographyStyleOption[],\n typographyTokens: DevInspectorTokenConfig['typographyTokens'],\n): TypographyStyleOption | null {\n const matchedToken = getTypographyToken(fontSize, fontWeight, color, typographyTokens);\n const normalizedColor = normalizeColor(color);\n\n return (matchedToken\n ? typographyStyles.find(style => style.key === matchedToken.key)\n : null)\n ?? typographyStyles.find(style =>\n style.value === fontSize.trim()\n && style.fontWeight === fontWeight.trim()\n && normalizeColor(style.color) === normalizedColor,\n )\n ?? null;\n}\n\nfunction getContainerStyle(\n backgroundColor: string,\n borderWidth: string,\n borderStyle: string,\n borderColor: string,\n borderRadius: string,\n containerStyles: ContainerStyleOption[],\n): ContainerStyleOption | null {\n const normalizedBackground = normalizeColor(backgroundColor || 'transparent');\n const normalizedColor = normalizeColor(borderColor || 'transparent');\n const normalizedWidth = borderWidth.trim();\n const normalizedStyle = borderStyle.trim();\n const normalizedRadius = borderRadius.trim();\n\n return containerStyles.find(style =>\n normalizeColor(style.backgroundColor) === normalizedBackground\n && style.borderWidth === normalizedWidth\n && style.borderStyle === normalizedStyle\n && normalizeColor(style.borderColor) === normalizedColor\n && style.borderRadius === normalizedRadius,\n ) ?? null;\n}\n\nconst BORDER_STYLE_OPTIONS = [\n { label: '─', value: 'solid', title: '实线' },\n { label: '┄', value: 'dashed', title: '虚线' },\n { label: '⋯', value: 'dotted', title: '点线' },\n { label: '✕', value: 'none', title: '无' },\n];\n\ntype SizeAxis = 'width' | 'height';\ntype SizeMode = 'fill' | 'hug' | 'fixed';\ntype AlignProp = 'justify-content' | 'align-items';\ntype ScopeMode = 'current' | 'component';\ntype StyleIntentChange = { prop: string; val: string; from?: string };\ntype StyleIntentEntryGroup = { selector: string; changes: StyleIntentChange[] };\ntype StyleIntentQueueEntry = {\n id: string;\n createdAt: string;\n targetLabel?: string;\n selector?: string;\n note?: string;\n entries: StyleIntentEntryGroup[];\n};\ntype StyleIntentSummary = {\n pendingCount: number;\n latestPending: StyleIntentQueueEntry | null;\n pendingEntries: StyleIntentQueueEntry[];\n};\ntype LocalDraftChange = { prop: string; from: string; val: string };\ntype LocalDraftEntry = {\n key: string;\n selector: string;\n targetLabel: string;\n scopeLabel: string;\n changes: LocalDraftChange[];\n updatedAt: number;\n};\n\nconst SIZE_OPTIONS: { label: string; mode: SizeMode; value?: string }[] = [\n { label: 'Fill', mode: 'fill', value: '100%' },\n { label: 'Hug', mode: 'hug', value: 'fit-content' },\n { label: 'Fixed', mode: 'fixed' },\n];\n\nconst JUSTIFY_OPTIONS = [\n { label: '默认', value: 'normal' },\n { label: '左', value: 'flex-start' },\n { label: '中', value: 'center' },\n { label: '右', value: 'flex-end' },\n { label: '分散', value: 'space-between' },\n];\n\nconst ALIGN_ITEMS_OPTIONS = [\n { label: '默认', value: 'normal' },\n { label: '上', value: 'flex-start' },\n { label: '中', value: 'center' },\n { label: '下', value: 'flex-end' },\n { label: '拉伸', value: 'stretch' },\n];\n\nconst EDIT_SHORTCUT_LABEL = 'Mac Option+I / Windows Alt+I';\nconst EXIT_SHORTCUT_LABEL = 'Esc / Mac Option+I / Windows Alt+I';\n\ntype InspectorSectionKey = 'text' | 'layout' | 'shadow' | 'space';\n\nconst SECTION_RESET_PROPS: Record<InspectorSectionKey, string[]> = {\n text: ['font-size', 'font-weight', 'color'],\n layout: ['translate', 'width', 'height', 'min-height', 'max-height', 'justify-content', 'align-items'],\n shadow: ['box-shadow'],\n space: ['padding', 'margin', 'gap'],\n};\n\n// ─── 工具函数 ────────────────────────────────────────────────────\nfunction rgbToHex(rgb: string): string {\n const m = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (!m) return rgb;\n return '#' + [m[1], m[2], m[3]].map(n => parseInt(n).toString(16).padStart(2, '0')).join('');\n}\n\nfunction isTextEntryTarget(target: EventTarget | null): boolean {\n const el = target instanceof HTMLElement ? target : null;\n if (!el) return false;\n const tag = el.tagName.toLowerCase();\n return el.isContentEditable\n || tag === 'input'\n || tag === 'textarea'\n || tag === 'select'\n || !!el.closest('[contenteditable=\"true\"]');\n}\n\nfunction normalizeColor(val: string): string {\n const raw = val.trim();\n if (raw === 'transparent' || /^rgba\\(\\s*0,\\s*0,\\s*0,\\s*0\\s*\\)$/i.test(raw)) return 'transparent';\n const m = val.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (m) return '#' + [m[1],m[2],m[3]].map(n=>parseInt(n).toString(16).padStart(2,'0')).join('');\n return raw;\n}\n\nfunction isTransparentColor(val: string): boolean {\n return normalizeColor(val || 'transparent') === 'transparent';\n}\n\nfunction formatColorDisplay(val: string): string {\n if (isTransparentColor(val)) return '透明';\n // rgba(r,g,b,a) → #hex / a%\n const m = val.match(/^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([\\d.]+)\\)$/);\n if (m) {\n const hex = '#' + [m[1],m[2],m[3]].map(n=>parseInt(n).toString(16).padStart(2,'0')).join('');\n const alpha = Math.round(parseFloat(m[4]) * 100);\n return alpha < 100 ? `${hex} / ${alpha}%` : hex;\n }\n return val;\n}\n\nfunction isColorDark(val: string): boolean {\n if (isTransparentColor(val)) return false;\n const m = val.match(/^#([0-9a-f]{6})$/i);\n if (!m) return true;\n const r = parseInt(m[1].slice(0,2),16);\n const g = parseInt(m[1].slice(2,4),16);\n const b = parseInt(m[1].slice(4,6),16);\n return (r*299 + g*587 + b*114) / 1000 < 128;\n}\n\nconst shadowValueCache = new Map<string, string>();\n\n// 跨面板共享的复制样式缓存\nlet _copiedStyles: { prop: string; val: string }[] = [];\n\nfunction canonicalizeShadowValue(val: string): string {\n const raw = (val || 'none').trim() || 'none';\n if (shadowValueCache.has(raw)) return shadowValueCache.get(raw)!;\n if (typeof document === 'undefined' || !document.body) return raw;\n const probe = document.createElement('div');\n probe.style.boxShadow = raw;\n probe.style.position = 'fixed';\n probe.style.opacity = '0';\n probe.style.pointerEvents = 'none';\n document.body.appendChild(probe);\n const normalized = getComputedStyle(probe).boxShadow.trim() || raw;\n probe.remove();\n shadowValueCache.set(raw, normalized);\n return normalized;\n}\n\nfunction formatShadowDisplay(val: string): string {\n if (!val || val === 'none') return 'none';\n return val.replace(/(-?\\d+(?:\\.\\d+)?)px\\b/gi, '$1').replace(/\\s+/g, ' ');\n}\n\ntype ShadowParts = {\n x: string;\n y: string;\n blur: string;\n spread: string;\n color: string;\n};\n\nconst DEFAULT_SHADOW_PARTS: ShadowParts = {\n x: '0px',\n y: '14px',\n blur: '42px',\n spread: '0px',\n color: 'rgba(15,23,42,0.08)',\n};\n\nconst EMPTY_CUSTOM_SHADOW_PARTS: ShadowParts = {\n x: '0px',\n y: '0px',\n blur: '0px',\n spread: '0px',\n color: 'rgba(15,23,42,0)',\n};\n\nfunction normalizeShadowLengthInput(input: string): string {\n const raw = input.trim();\n if (!raw) return '0px';\n if (/^-?\\d+(?:\\.\\d+)?$/.test(raw)) return `${raw}px`;\n return raw;\n}\n\nfunction parseShadowParts(value: string): ShadowParts {\n const raw = (value || 'none').trim();\n if (!raw || raw === 'none') return { ...DEFAULT_SHADOW_PARTS };\n const colorPattern = /(rgba?\\([^)]+\\)|hsla?\\([^)]+\\)|#[0-9a-f]{3,8}\\b|var\\([^)]+\\)|\\b(?:black|white|transparent)\\b)/i;\n const colorMatch = raw.match(colorPattern);\n const color = colorMatch?.[0] ?? DEFAULT_SHADOW_PARTS.color;\n const remainder = raw\n .replace(colorPattern, '')\n .replace(/\\binset\\b/i, '')\n .split(/\\s*,\\s*/)[0]\n .trim();\n const parts = remainder.match(/-?\\d*\\.?\\d+(?:px|rem|em|%)?/g) ?? [];\n return {\n x: normalizeShadowLengthInput(parts[0] ?? DEFAULT_SHADOW_PARTS.x),\n y: normalizeShadowLengthInput(parts[1] ?? DEFAULT_SHADOW_PARTS.y),\n blur: normalizeShadowLengthInput(parts[2] ?? DEFAULT_SHADOW_PARTS.blur),\n spread: normalizeShadowLengthInput(parts[3] ?? DEFAULT_SHADOW_PARTS.spread),\n color,\n };\n}\n\nfunction buildShadowValue(parts: ShadowParts): string {\n return `${normalizeShadowLengthInput(parts.x)} ${normalizeShadowLengthInput(parts.y)} ${normalizeShadowLengthInput(parts.blur)} ${normalizeShadowLengthInput(parts.spread)} ${parts.color}`;\n}\n\nfunction getShadowDisplay(\n val: string,\n authoredVal: string,\n shadowTokens: DevInspectorTokenConfig['shadowTokens'],\n): { label: string; sub: string; isHardcoded: boolean } {\n const authoredVar = authoredVal.match(/var\\((--[^),\\s]+)/)?.[1];\n const normalized = canonicalizeShadowValue(val);\n const matched = shadowTokens.find(token => token.cssVar === authoredVar)\n ?? shadowTokens.find(token => canonicalizeShadowValue(token.value) === normalized);\n\n if (matched) {\n return {\n label: matched.label,\n sub: matched.cssVar,\n isHardcoded: false,\n };\n }\n\n return {\n label: val === 'none' ? '无' : '自定义',\n sub: formatShadowDisplay(val),\n isHardcoded: val !== 'none',\n };\n}\n\nfunction getShadowChangeDisplay(\n val: string,\n authoredVal: string,\n shadowTokens: DevInspectorTokenConfig['shadowTokens'],\n): string {\n const display = getShadowDisplay(val, authoredVal, shadowTokens);\n if (display.label === '无') return display.label;\n if (display.isHardcoded) return `${display.label}(${display.sub})`;\n return display.label;\n}\n\nfunction getClasses(el: Element): string[] {\n return Array.from(el.classList).filter(c => !c.startsWith('di-'));\n}\n\nconst STATE_CLASS_NAMES = new Set([\n 'active', 'selected', 'current', 'open', 'expanded', 'collapsed',\n 'disabled', 'enabled', 'checked', 'focus', 'focused', 'hover', 'pressed',\n 'loading', 'error', 'success', 'warning',\n]);\n\nfunction isStateClass(className: string): boolean {\n return STATE_CLASS_NAMES.has(className)\n || className.startsWith('is-')\n || className.startsWith('has-')\n || className.startsWith('state-')\n || className.endsWith('--active')\n || className.endsWith('--selected')\n || className.endsWith('--current')\n || className.endsWith('--open')\n || className.endsWith('--disabled');\n}\n\nfunction getPrimitiveClasses(el: Element): string[] {\n const classes = getClasses(el);\n if (el.tagName.toLowerCase() === 'svg' && classes.includes('lucide')) {\n return ['lucide'];\n }\n return [];\n}\n\nfunction getComponentClasses(el: Element): string[] {\n const primitiveClasses = getPrimitiveClasses(el);\n if (primitiveClasses.length) return primitiveClasses;\n\n const classes = getClasses(el);\n const cardBaseClass = classes.find(className =>\n /(^|[-_])card([-_]|$)/i.test(className)\n && !className.includes('--'),\n );\n if (cardBaseClass) return [cardBaseClass];\n\n const badgeBaseClass = classes.find(className =>\n /(^|[-_])(badge|tag|chip)([-_]|$)/i.test(className)\n && !className.includes('--')\n && !/(default|progress|processing|info|done|success|complete|completed|warning|warn|danger|error|destructive)/i.test(className),\n );\n if (badgeBaseClass) return [badgeBaseClass];\n\n const componentClasses = classes.filter(c =>\n !isStateClass(c)\n && !/^lucide(-|$)/.test(c)\n );\n return componentClasses.length ? componentClasses : classes;\n}\n\nfunction getStateClasses(el: Element): string[] {\n return getClasses(el).filter(c => !/^lucide(-|$)/.test(c));\n}\n\nconst UNSAFE_GLOBAL_TAGS = new Set([\n 'a', 'aside', 'button', 'div', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'img', 'input', 'label', 'li', 'main', 'ol', 'p', 'path', 'section',\n 'span', 'strong', 'svg', 'textarea', 'ul',\n]);\n\nconst TEXT_ONLY_TAGS = new Set([\n 'a',\n 'em',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'label',\n 'p',\n 'span',\n 'strong',\n]);\n\nconst TEXT_SEMANTIC_CLASS_RE = /(^|[-_])(caption|copy|desc|description|eyebrow|heading|label|subtitle|text|title)([-_]|$)/i;\nconst TEXT_GROUP_EXCLUDED_SELECTOR = [\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'img',\n 'svg',\n 'video',\n 'canvas',\n '[role=\"button\"]',\n '[contenteditable=\"true\"]',\n].join(',');\nconst TEXT_GROUP_MAX_CHILDREN = 4;\n\nfunction hasTextSemanticClass(el: Element): boolean {\n return getClasses(el).some(className =>\n !isStateClass(className)\n && !/^lucide(-|$)/.test(className)\n && TEXT_SEMANTIC_CLASS_RE.test(className),\n );\n}\n\nfunction isTextOnlyTargetElement(el: Element): boolean {\n if (getInspectorComponentMeta(el)) return false;\n\n const tag = el.tagName.toLowerCase();\n if (TEXT_ONLY_TAGS.has(tag)) return true;\n if (el.matches(TEXT_GROUP_EXCLUDED_SELECTOR)) return false;\n if (hasTextSemanticClass(el)) return true;\n\n const children = Array.from(el.children);\n if (!children.length || children.length > TEXT_GROUP_MAX_CHILDREN) return false;\n if (children.some(child => child.matches(TEXT_GROUP_EXCLUDED_SELECTOR))) return false;\n\n return children.every(child => {\n const childTag = child.tagName.toLowerCase();\n return TEXT_ONLY_TAGS.has(childTag) || hasTextSemanticClass(child);\n });\n}\n\nfunction classSelector(classes: string[]): string {\n const escapeClass = (value: string) => {\n try { return CSS.escape(value); } catch { return value.replace(/[^a-zA-Z0-9_-]/g, '\\\\$&'); }\n };\n return classes.length ? '.' + classes.map(escapeClass).join('.') : '';\n}\n\nfunction queryByClasses(el: Element, classes: string[]): Element[] {\n if (!classes.length) return [el];\n const includePanels = !!el.closest('.di-panel');\n try {\n return Array.from(document.querySelectorAll(classSelector(classes)))\n .filter(e => includePanels || !e.closest('.di-panel'));\n } catch { return [el]; }\n}\n\nfunction getSameComponentEls(el: Element): Element[] {\n return queryByClasses(el, getComponentClasses(el));\n}\n\nfunction getSameStateEls(el: Element): Element[] {\n return queryByClasses(el, getStateClasses(el));\n}\n\ntype InspectorComponentMeta = {\n name: string;\n type: string;\n layer: 'Component' | 'Primitive';\n variant: string;\n state: string;\n};\n\nfunction classIncludes(classes: string[], pattern: RegExp): boolean {\n return classes.some(className => pattern.test(className));\n}\n\nfunction inferVariantFromClasses(classes: string[]): string {\n const variantClass = classes.find(className =>\n /(^|[-_])(primary|secondary|ghost|text|link|outline|solid|soft|danger|success|warning)([-_]|$)/i.test(className),\n );\n if (!variantClass) return 'default';\n const match = variantClass.match(/primary|secondary|ghost|text|link|outline|solid|soft|danger|success|warning/i);\n return match?.[0].toLowerCase() ?? 'default';\n}\n\nfunction inferStateFromElement(el: Element, classes: string[]): string {\n if ((el as HTMLButtonElement).disabled || el.getAttribute('aria-disabled') === 'true') return 'disabled';\n const stateClass = classes.find(isStateClass);\n if (!stateClass) return 'default';\n return stateClass.replace(/^(is-|has-|state-)/, '').replace(/^.+--/, '');\n}\n\nfunction getComponentStateLabel(state: string): string {\n const map: Record<string, string> = {\n default: '默认',\n selected: '选中',\n active: '激活',\n disabled: '禁用',\n open: '展开',\n current: '当前',\n };\n return map[state] ?? state;\n}\n\nfunction getInspectorComponentMeta(el: Element): InspectorComponentMeta | null {\n const tag = el.tagName.toLowerCase();\n const classes = getClasses(el);\n const componentClasses = getComponentClasses(el);\n\n if (tag === 'svg' && classes.includes('lucide')) {\n const iconClass = classes.find(className => /^lucide-/.test(className));\n return {\n name: iconClass ?? 'lucide',\n type: 'Icon',\n layer: 'Primitive',\n variant: iconClass ? iconClass.replace(/^lucide-/, '') : 'default',\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (tag === 'button' || classIncludes(classes, /(^|[-_])(btn|button)([-_]|$)/i)) {\n const name = componentClasses.find(className => /(button|btn)/i.test(className)) ?? componentClasses[0] ?? 'button';\n return {\n name,\n type: 'Button',\n layer: 'Component',\n variant: inferVariantFromClasses(classes),\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (classIncludes(classes, /(^|[-_])card([-_]|$)/i)) {\n return {\n name: componentClasses.find(className => /card/i.test(className)) ?? componentClasses[0] ?? 'card',\n type: 'Card',\n layer: 'Component',\n variant: inferCardVariant(classes),\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (tag === 'form' || classIncludes(classes, /(^|[-_])(form|form-section|field-group)([-_]|$)/i)) {\n return {\n name: componentClasses.find(className => /form/i.test(className)) ?? componentClasses[0] ?? 'form',\n type: 'Form',\n layer: 'Component',\n variant: 'default',\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (tag === 'input' || tag === 'textarea' || tag === 'select') {\n return {\n name: componentClasses[0] ?? tag,\n type: 'Control',\n layer: 'Primitive',\n variant: tag,\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (classIncludes(classes, /(^|[-_])(badge|tag|chip)([-_]|$)/i)) {\n return {\n name: componentClasses[0] ?? 'badge',\n type: 'Badge',\n layer: 'Component',\n variant: inferBadgeStatus(classes),\n state: inferStateFromElement(el, classes),\n };\n }\n\n return null;\n}\n\nconst COMPONENT_ATTRIBUTE_ONLY_NAMES_BY_TYPE: Record<string, Set<string>> = {\n button: new Set([\n 'primary',\n 'secondary',\n 'ghost',\n 'text',\n 'link',\n 'outline',\n 'solid',\n 'soft',\n 'danger',\n 'success',\n 'warning',\n ]),\n badge: new Set([\n 'default',\n 'progress',\n 'processing',\n 'info',\n 'done',\n 'success',\n 'complete',\n 'completed',\n 'warning',\n 'warn',\n 'danger',\n 'error',\n 'destructive',\n ]),\n};\n\nfunction getControlDisplayName(meta: InspectorComponentMeta): string {\n const controlType = meta.variant && meta.variant !== 'default' ? meta.variant : meta.type.toLowerCase();\n for (const suffix of ['input', 'textarea', 'select']) {\n const tail = `-${suffix}`;\n if (meta.name.endsWith(tail)) {\n const base = meta.name.slice(0, -tail.length);\n return base ? `${suffix}-${base}` : suffix;\n }\n }\n return meta.name === controlType ? controlType : `${controlType}-${meta.name}`;\n}\n\nfunction getComponentDisplayName(meta: InspectorComponentMeta): string {\n if (meta.type === 'Control') return getControlDisplayName(meta);\n if (meta.layer === 'Primitive') return meta.name;\n const type = meta.type.toLowerCase();\n const suffixes = type === 'button'\n ? ['button', 'btn']\n : type === 'badge'\n ? ['badge', 'tag', 'chip']\n : [type];\n\n for (const suffix of suffixes) {\n const tail = `-${suffix}`;\n if (meta.name.endsWith(tail)) {\n const base = meta.name.slice(0, -tail.length);\n if (COMPONENT_ATTRIBUTE_ONLY_NAMES_BY_TYPE[type]?.has(base.toLowerCase())) return type;\n return base ? `${type}-${base}` : meta.name;\n }\n }\n\n return meta.name.startsWith(`${type}-`) ? meta.name : `${type}-${meta.name}`;\n}\n\nconst SEMANTIC_TAG_DISPLAY_NAMES: Record<string, string> = {\n h1: '页面标题',\n h2: '章节标题',\n h3: '小节标题',\n h4: '标题文本',\n h5: '标题文本',\n h6: '标题文本',\n p: '正文文本',\n span: '文本',\n strong: '强调文本',\n em: '强调文本',\n a: '链接文本',\n label: '表单标签',\n img: '图片',\n section: '页面区块',\n main: '页面主体',\n aside: '侧边内容',\n div: '容器',\n};\n\nfunction getElementDisplayName(el: Element, meta: InspectorComponentMeta | null = getInspectorComponentMeta(el)): string {\n if (meta) return getComponentDisplayName(meta);\n\n const explicitName = el.getAttribute('data-di-name')\n || el.getAttribute('data-component')\n || el.getAttribute('data-role')\n || el.getAttribute('aria-label');\n if (explicitName?.trim()) return explicitName.trim();\n\n const semanticClass = getClasses(el).find(className =>\n !isStateClass(className)\n && !/^lucide(-|$)/.test(className)\n );\n if (semanticClass) return semanticClass;\n\n const tag = el.tagName.toLowerCase();\n return SEMANTIC_TAG_DISPLAY_NAMES[tag] ?? tag;\n}\n\nfunction getTargetDisplayLabel(el: Element, meta: InspectorComponentMeta | null = getInspectorComponentMeta(el)): string {\n return meta\n ? `${meta.type} / ${getComponentDisplayName(meta)}`\n : getElementDisplayName(el, meta);\n}\n\ntype ButtonVariantKey = 'primary' | 'secondary' | 'ghost' | 'text';\ntype ButtonSizeKey = 's' | 'm' | 'l';\ntype IconColorKey = 'default' | 'muted' | 'brand' | 'success' | 'warning' | 'danger';\ntype BadgeStatusKey = 'default' | 'progress' | 'success' | 'warning' | 'danger';\ntype CardVariantKey = 'default' | 'compact' | 'floating' | 'emphasis';\ntype ComponentSizeKind = 'button' | 'icon' | 'badge';\n\ntype ComponentTextSlotDefinition = {\n key: string;\n label: string;\n selector: string;\n};\n\ntype ComponentCapability = {\n type: string;\n editableText?: boolean;\n textSlots?: ComponentTextSlotDefinition[];\n childSlots?: ComponentTextSlotDefinition[];\n variantKind?: 'button' | 'card';\n statusKind?: 'badge';\n colorKind?: 'icon';\n sizeKind?: ComponentSizeKind;\n};\n\nconst CARD_EDITABLE_TEXT_SLOTS: ComponentTextSlotDefinition[] = [\n {\n key: 'title',\n label: '标题',\n selector: '[data-di-slot=\"title\"], .task-title, .card-title, h1, h2, h3',\n },\n {\n key: 'description',\n label: '说明文',\n selector: '[data-di-slot=\"description\"], .card-desc, .card-description, p',\n },\n];\n\nconst CARD_CHILD_SLOTS: ComponentTextSlotDefinition[] = [\n {\n key: 'status',\n label: '标签',\n selector: '[data-di-slot=\"status\"], .status-badge, .badge, .tag, .chip',\n },\n];\n\nconst FORM_CHILD_SLOTS: ComponentTextSlotDefinition[] = [\n {\n key: 'primary-input',\n label: '输入框',\n selector: '[data-di-slot=\"primary-input\"], .demo-input, input',\n },\n {\n key: 'description-input',\n label: '说明输入',\n selector: '[data-di-slot=\"description-input\"], .demo-textarea, textarea',\n },\n {\n key: 'cancel-action',\n label: '取消按钮',\n selector: '[data-di-slot=\"cancel-action\"], .ghost-button',\n },\n {\n key: 'submit-action',\n label: '提交按钮',\n selector: '[data-di-slot=\"submit-action\"], .primary-btn',\n },\n];\n\nconst COMPONENT_CAPABILITIES: Record<string, ComponentCapability> = {\n Button: {\n type: 'Button',\n editableText: true,\n variantKind: 'button',\n sizeKind: 'button',\n },\n Icon: {\n type: 'Icon',\n colorKind: 'icon',\n sizeKind: 'icon',\n },\n Badge: {\n type: 'Badge',\n editableText: true,\n statusKind: 'badge',\n sizeKind: 'badge',\n },\n Card: {\n type: 'Card',\n variantKind: 'card',\n textSlots: CARD_EDITABLE_TEXT_SLOTS,\n childSlots: CARD_CHILD_SLOTS,\n },\n Form: {\n type: 'Form',\n childSlots: FORM_CHILD_SLOTS,\n },\n};\n\nfunction getComponentCapability(meta: InspectorComponentMeta | null): ComponentCapability | null {\n return meta ? COMPONENT_CAPABILITIES[meta.type] ?? null : null;\n}\n\nfunction getComponentSlotElement(root: Element, slot: ComponentTextSlotDefinition): Element | null {\n try {\n return root.querySelector(slot.selector);\n } catch {\n return null;\n }\n}\n\nfunction getComponentSlotValues(root: Element, slots: ComponentTextSlotDefinition[] = []): Record<string, string> {\n return Object.fromEntries(slots.map(slot => [\n slot.key,\n (getComponentSlotElement(root, slot)?.textContent ?? '').trim(),\n ]));\n}\n\nconst BUTTON_VARIANT_OPTIONS: { key: ButtonVariantKey; label: string }[] = [\n { key: 'primary', label: '主按钮' },\n { key: 'secondary', label: '次按钮' },\n { key: 'ghost', label: '幽灵' },\n { key: 'text', label: '文字' },\n];\n\nconst BUTTON_VARIANT_CLASS_BY_KEY: Record<ButtonVariantKey, string> = {\n primary: 'primary-btn',\n secondary: 'secondary-button',\n ghost: 'ghost-button',\n text: 'text-button',\n};\n\nconst BUTTON_VARIANT_CLASS_NAMES = new Set([\n ...Object.values(BUTTON_VARIANT_CLASS_BY_KEY),\n 'secondary-btn',\n 'outline-button',\n 'outline-btn',\n 'btn-primary',\n 'btn-secondary',\n 'btn-ghost',\n 'btn-text',\n]);\n\nconst BUTTON_SIZE_OPTIONS: { key: ButtonSizeKey; label: string; minHeight: string; padding: string; fontSize: string }[] = [\n { key: 's', label: 'S', minHeight: '34px', padding: '0 16px', fontSize: '13px' },\n { key: 'm', label: 'M', minHeight: '42px', padding: '0 24px', fontSize: '14px' },\n { key: 'l', label: 'L', minHeight: '48px', padding: '0 28px', fontSize: '15px' },\n];\n\nfunction normalizeButtonVariant(variant: string): ButtonVariantKey {\n return BUTTON_VARIANT_OPTIONS.some(option => option.key === variant)\n ? variant as ButtonVariantKey\n : 'secondary';\n}\n\nfunction getButtonText(el: Element): string {\n return (el.textContent ?? '').trim();\n}\n\nfunction getButtonVariantClass(el: Element): string {\n const classes = getClasses(el);\n return classes.find(className => BUTTON_VARIANT_CLASS_NAMES.has(className))\n ?? classes.find(className => /(button|btn)/i.test(className) && /primary|secondary|ghost|text|outline/i.test(className))\n ?? '';\n}\n\nfunction setButtonVariantOnTargets(targets: Element[], variant: ButtonVariantKey, restoreClass?: string) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n Array.from(el.classList).forEach(className => {\n const isKnownVariant = BUTTON_VARIANT_CLASS_NAMES.has(className);\n const isButtonVariant = /(button|btn)/i.test(className) && /primary|secondary|ghost|text|outline/i.test(className);\n if (isKnownVariant || isButtonVariant) el.classList.remove(className);\n });\n const nextClass = restoreClass === undefined ? BUTTON_VARIANT_CLASS_BY_KEY[variant] : restoreClass;\n if (nextClass) el.classList.add(nextClass);\n });\n}\n\nfunction inferButtonSize(el: Element): ButtonSizeKey {\n const height = Number.parseFloat(getComputedStyle(el).height);\n if (height <= 36) return 's';\n if (height <= 44) return 'm';\n return 'l';\n}\n\nfunction getButtonSizeOption(size: ButtonSizeKey) {\n return BUTTON_SIZE_OPTIONS.find(option => option.key === size) ?? BUTTON_SIZE_OPTIONS[1];\n}\n\nfunction setButtonSizeOnTargets(targets: Element[], size: ButtonSizeKey) {\n const option = getButtonSizeOption(size);\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.setProperty('min-height', option.minHeight);\n el.style.setProperty('padding', option.padding);\n el.style.setProperty('font-size', option.fontSize);\n });\n}\n\nfunction clearButtonSizeOnTargets(targets: Element[]) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.removeProperty('min-height');\n el.style.removeProperty('padding');\n el.style.removeProperty('font-size');\n });\n}\n\nconst ICON_SIZE_OPTIONS: { key: ButtonSizeKey; label: string; size: string }[] = [\n { key: 's', label: 'S', size: '16px' },\n { key: 'm', label: 'M', size: '20px' },\n { key: 'l', label: 'L', size: '24px' },\n];\n\nconst ICON_COLOR_OPTIONS: { key: IconColorKey; label: string; value: string }[] = [\n { key: 'default', label: '默认', value: 'var(--color-text-default, #334155)' },\n { key: 'muted', label: '弱化', value: 'var(--color-text-muted, #64748b)' },\n { key: 'brand', label: '品牌', value: 'var(--color-brand-primary, #6d5dfc)' },\n { key: 'success', label: '成功', value: 'var(--color-success, #10a56f)' },\n { key: 'warning', label: '警告', value: 'var(--color-warning, #f59e0b)' },\n { key: 'danger', label: '危险', value: 'var(--color-danger, #ef4444)' },\n];\n\nfunction inferIconSize(el: Element): ButtonSizeKey {\n const cs = getComputedStyle(el);\n const size = Number.parseFloat(cs.width || cs.height);\n if (size <= 17) return 's';\n if (size <= 21) return 'm';\n return 'l';\n}\n\nfunction inferIconColor(el: Element): IconColorKey {\n const color = normalizeColor(getComputedStyle(el).color);\n if (color === '#64748b') return 'muted';\n if (color === '#6d5dfc' || color === '#7c3aed') return 'brand';\n if (color === '#10a56f' || color === '#16a34a') return 'success';\n if (color === '#f59e0b' || color === '#d97706') return 'warning';\n if (color === '#ef4444' || color === '#dc2626') return 'danger';\n return 'default';\n}\n\nfunction setIconSizeOnTargets(targets: Element[], size: ButtonSizeKey) {\n const option = ICON_SIZE_OPTIONS.find(item => item.key === size) ?? ICON_SIZE_OPTIONS[1];\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.setProperty('width', option.size);\n el.style.setProperty('height', option.size);\n });\n}\n\nfunction clearIconSizeOnTargets(targets: Element[]) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.removeProperty('width');\n el.style.removeProperty('height');\n });\n}\n\nfunction setIconColorOnTargets(targets: Element[], color: IconColorKey) {\n const option = ICON_COLOR_OPTIONS.find(item => item.key === color) ?? ICON_COLOR_OPTIONS[0];\n targets.forEach(target => (target as HTMLElement).style.setProperty('color', option.value));\n}\n\nfunction clearIconColorOnTargets(targets: Element[]) {\n targets.forEach(target => (target as HTMLElement).style.removeProperty('color'));\n}\n\nconst BADGE_STATUS_OPTIONS: { key: BadgeStatusKey; label: string }[] = [\n { key: 'default', label: '默认' },\n { key: 'progress', label: '进行中' },\n { key: 'success', label: '成功' },\n { key: 'warning', label: '警告' },\n { key: 'danger', label: '危险' },\n];\n\nconst BADGE_STATUS_CLASS_BY_KEY: Record<BadgeStatusKey, string> = {\n default: '',\n progress: 'status-badge--progress',\n success: 'status-badge--done',\n warning: 'status-badge--warning',\n danger: 'status-badge--danger',\n};\n\nconst BADGE_STATUS_CLASS_NAMES = new Set([\n ...Object.values(BADGE_STATUS_CLASS_BY_KEY).filter(Boolean),\n 'badge--default',\n 'badge--progress',\n 'badge--success',\n 'badge--warning',\n 'badge--danger',\n 'tag--default',\n 'tag--progress',\n 'tag--success',\n 'tag--warning',\n 'tag--danger',\n 'chip--default',\n 'chip--progress',\n 'chip--success',\n 'chip--warning',\n 'chip--danger',\n]);\n\nconst BADGE_SIZE_OPTIONS: { key: ButtonSizeKey; label: string; minHeight: string; padding: string; fontSize: string }[] = [\n { key: 's', label: 'S', minHeight: '20px', padding: '0 8px', fontSize: '11px' },\n { key: 'm', label: 'M', minHeight: '24px', padding: '0 12px', fontSize: '12px' },\n { key: 'l', label: 'L', minHeight: '28px', padding: '0 14px', fontSize: '13px' },\n];\n\nfunction inferBadgeStatus(classes: string[]): BadgeStatusKey {\n if (classIncludes(classes, /(^|[-_])(progress|processing|info)([-_]|$)/i)) return 'progress';\n if (classIncludes(classes, /(^|[-_])(done|success|complete|completed)([-_]|$)/i)) return 'success';\n if (classIncludes(classes, /(^|[-_])(warning|warn)([-_]|$)/i)) return 'warning';\n if (classIncludes(classes, /(^|[-_])(danger|error|destructive)([-_]|$)/i)) return 'danger';\n return 'default';\n}\n\nfunction getBadgeStatusClass(el: Element): string {\n const classes = getClasses(el);\n return classes.find(className => BADGE_STATUS_CLASS_NAMES.has(className)) ?? '';\n}\n\nfunction setBadgeStatusOnTargets(targets: Element[], status: BadgeStatusKey, restoreClass?: string) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n Array.from(el.classList).forEach(className => {\n const isKnownStatus = BADGE_STATUS_CLASS_NAMES.has(className);\n const isBadgeStatus = /(badge|tag|chip)/i.test(className) && /(default|progress|processing|info|done|success|complete|completed|warning|warn|danger|error|destructive)/i.test(className);\n if (isKnownStatus || isBadgeStatus) el.classList.remove(className);\n });\n const nextClass = restoreClass === undefined ? BADGE_STATUS_CLASS_BY_KEY[status] : restoreClass;\n if (nextClass) el.classList.add(nextClass);\n });\n}\n\nfunction inferBadgeSize(el: Element): ButtonSizeKey {\n const height = Number.parseFloat(getComputedStyle(el).height);\n if (height <= 22) return 's';\n if (height <= 26) return 'm';\n return 'l';\n}\n\nfunction setBadgeSizeOnTargets(targets: Element[], size: ButtonSizeKey) {\n const option = BADGE_SIZE_OPTIONS.find(item => item.key === size) ?? BADGE_SIZE_OPTIONS[1];\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.setProperty('min-height', option.minHeight);\n el.style.setProperty('padding', option.padding);\n el.style.setProperty('font-size', option.fontSize);\n });\n}\n\nfunction clearBadgeSizeOnTargets(targets: Element[]) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.removeProperty('min-height');\n el.style.removeProperty('padding');\n el.style.removeProperty('font-size');\n });\n}\n\nconst CARD_VARIANT_OPTIONS: { key: CardVariantKey; label: string; modifier?: string }[] = [\n { key: 'default', label: '默认' },\n { key: 'compact', label: '紧凑', modifier: 'compact' },\n { key: 'floating', label: '浮起', modifier: 'floating' },\n { key: 'emphasis', label: '强调', modifier: 'emphasis' },\n];\n\nfunction getCardDisplayLabel(variant: string): string {\n return CARD_VARIANT_OPTIONS.find(option => option.key === variant)?.label ?? variant;\n}\n\nfunction inferCardVariant(classes: string[]): CardVariantKey {\n if (classIncludes(classes, /--compact$/i)) return 'compact';\n if (classIncludes(classes, /--floating$/i)) return 'floating';\n if (classIncludes(classes, /--emphasis$/i)) return 'emphasis';\n return 'default';\n}\n\nfunction getCardVariantClass(el: Element): string {\n return getClasses(el).find(className => (\n /card/i.test(className)\n && /--(compact|floating|emphasis)$/i.test(className)\n )) ?? '';\n}\n\nfunction getCardBaseClass(el: Element): string {\n return getComponentClasses(el).find(className => /card/i.test(className) && !className.includes('--'))\n ?? 'card';\n}\n\nfunction setCardVariantOnTargets(targets: Element[], variant: CardVariantKey, restoreClass?: string) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n Array.from(el.classList).forEach(className => {\n if (/card/i.test(className) && /--(compact|floating|emphasis)$/i.test(className)) {\n el.classList.remove(className);\n }\n });\n\n const nextClass = restoreClass === undefined\n ? CARD_VARIANT_OPTIONS.find(option => option.key === variant)?.modifier\n : restoreClass;\n if (nextClass && restoreClass === undefined) {\n el.classList.add(`${getCardBaseClass(el)}--${nextClass}`);\n } else if (nextClass) {\n el.classList.add(nextClass);\n }\n });\n}\n\nfunction getComponentSizeControlOptions(capability: ComponentCapability | null): { key: ButtonSizeKey; label: string; title: string }[] {\n if (capability?.sizeKind === 'icon') {\n return ICON_SIZE_OPTIONS.map(option => ({ key: option.key, label: option.label, title: `${option.label} · ${option.size}` }));\n }\n if (capability?.sizeKind === 'badge') {\n return BADGE_SIZE_OPTIONS.map(option => ({ key: option.key, label: option.label, title: `${option.label} · ${option.minHeight}` }));\n }\n return BUTTON_SIZE_OPTIONS.map(option => ({ key: option.key, label: option.label, title: `${option.label} · ${option.minHeight}` }));\n}\n\nfunction getScopeTargets(el: Element, scope: ScopeMode): Element[] {\n if (scope === 'component') return getSameComponentEls(el);\n return [el];\n}\n\nfunction getClassSelectorForScope(el: Element, scope: ScopeMode): string {\n const classes = scope === 'component' ? getComponentClasses(el) : getStateClasses(el);\n return classSelector(classes) || el.tagName.toLowerCase();\n}\n\nfunction getStructuralStep(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const parent = el.parentElement;\n if (!parent) return tag;\n const sameTagSiblings = Array.from(parent.children).filter(child => child.tagName === el.tagName);\n if (sameTagSiblings.length <= 1) return tag;\n return `${tag}:nth-of-type(${sameTagSiblings.indexOf(el) + 1})`;\n}\n\nfunction getContextualSelectorForScope(el: Element, scope: ScopeMode): string {\n let anchor = el.parentElement;\n while (anchor && !getClasses(anchor).length) anchor = anchor.parentElement;\n if (!anchor) return '';\n\n const anchorSelector = getClassSelectorForScope(anchor, scope);\n const path: string[] = [];\n let cursor: Element | null = el;\n\n while (cursor && cursor !== anchor) {\n path.unshift(getStructuralStep(cursor));\n cursor = cursor.parentElement;\n }\n\n return path.length ? `${anchorSelector} > ${path.join(' > ')}` : anchorSelector;\n}\n\nfunction getSelectorForScope(el: Element, scope: ScopeMode): string {\n const classes = scope === 'component' ? getComponentClasses(el) : getStateClasses(el);\n if (classes.length) return classSelector(classes);\n const tag = el.tagName.toLowerCase();\n if (!UNSAFE_GLOBAL_TAGS.has(tag)) return tag;\n const contextualSelector = getContextualSelectorForScope(el, scope);\n return contextualSelector || tag;\n}\n\nfunction canPersistSelector(el: Element, scope: ScopeMode): boolean {\n const classes = scope === 'component' ? getComponentClasses(el) : getStateClasses(el);\n if (classes.length) return true;\n if (el.classList.contains('lucide') || Array.from(el.classList).some(c => /^lucide-/.test(c))) {\n return getContextualSelectorForScope(el, scope).length > 0;\n }\n const tag = el.tagName.toLowerCase();\n if (!UNSAFE_GLOBAL_TAGS.has(tag)) return true;\n return getContextualSelectorForScope(el, scope).length > 0;\n}\n\nfunction isInsidePanel(el: Element): boolean {\n return el.closest('.di-panel') !== null || el.closest('.di-trigger') !== null || el.closest('.di-label') !== null;\n}\n\nfunction pickPanelElement(x: number, y: number, panel: HTMLElement, excluded?: Element): Element | null {\n const stack = document.elementsFromPoint(x, y);\n return stack.find(el =>\n el !== excluded &&\n el !== panel &&\n panel.contains(el)\n ) ?? null;\n}\n\n// 扫描 :root CSS 变量,建立 值→token 映射\nfunction scanTokenMap(): Record<string, string> {\n const map: Record<string, string> = {};\n try {\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n for (const rule of Array.from(sheet.cssRules)) {\n if (rule instanceof CSSStyleRule && rule.selectorText === ':root') {\n for (let i = 0; i < rule.style.length; i++) {\n const prop = rule.style[i];\n if (!prop.startsWith('--')) continue;\n const raw = rule.style.getPropertyValue(prop).trim();\n const hex = raw.startsWith('rgb') ? rgbToHex(raw) : raw;\n map[raw] = prop;\n if (hex !== raw) map[hex] = prop;\n }\n }\n }\n } catch { /* cross-origin */ }\n }\n } catch {}\n return map;\n}\n\nfunction getComputedColor(el: Element, prop: string): string {\n return normalizeColor(getComputedStyle(el).getPropertyValue(prop).trim());\n}\n\nfunction getComputedRadius(el: Element): string {\n return getComputedStyle(el).getPropertyValue('border-radius').trim();\n}\n\nfunction getComputedPadding(el: Element): string {\n const cs = getComputedStyle(el);\n const t = cs.paddingTop, r = cs.paddingRight, b = cs.paddingBottom, l = cs.paddingLeft;\n if (t === r && r === b && b === l) return t;\n return `${t} ${r} ${b} ${l}`;\n}\n\nfunction parseTranslate(val: string): { x: number; y: number } {\n const raw = (val || 'none').trim();\n if (!raw || raw === 'none') return { x: 0, y: 0 };\n const parts = raw.split(/\\s+/);\n const toNum = (v?: string) => v ? Number.parseFloat(v) || 0 : 0;\n return { x: toNum(parts[0]), y: toNum(parts[1]) };\n}\n\nfunction getElementDocumentPosition(el: Element): { x: number; y: number } {\n const rect = el.getBoundingClientRect();\n return {\n x: rect.left + window.scrollX,\n y: rect.top + window.scrollY,\n };\n}\n\nfunction getPositionBase(el: Element, translate: { x: number; y: number }): { x: number; y: number } {\n const pos = getElementDocumentPosition(el);\n return {\n x: pos.x - translate.x,\n y: pos.y - translate.y,\n };\n}\n\nfunction formatTranslate(pos: { x: number; y: number }): string {\n return `${Math.round(pos.x)}px ${Math.round(pos.y)}px`;\n}\n\nfunction formatPositionRecord(pos: { x: number; y: number }): string {\n return `X ${Math.round(pos.x)}px / Y ${Math.round(pos.y)}px`;\n}\n\nfunction normalizeCssSize(v: string): string {\n const raw = v.trim();\n if (!raw) return 'auto';\n if (/^-?\\d+(\\.\\d+)?$/.test(raw)) return `${raw}px`;\n const appendedPxNumber = raw.match(/px(-?\\d+(?:\\.\\d+)?)$/i);\n if (appendedPxNumber) return `${appendedPxNumber[1]}px`;\n return raw;\n}\n\nfunction getNumericCssValue(value: string, fallback = 0): number {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction isFlexGridDisplay(display: string): boolean {\n return display.includes('flex') || display.includes('grid');\n}\n\nfunction getAuthoredStyleValue(el: Element, prop: string): string {\n const inline = (el as HTMLElement).style.getPropertyValue(prop).trim();\n if (inline) return inline;\n let found = '';\n try {\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n for (const rule of Array.from(sheet.cssRules)) {\n if (!(rule instanceof CSSStyleRule)) continue;\n if (!rule.style.getPropertyValue(prop)) continue;\n if (el.matches(rule.selectorText)) found = rule.style.getPropertyValue(prop).trim();\n }\n } catch { /* ignore */ }\n }\n } catch {}\n return found;\n}\n\nfunction inferSizeMode(el: Element, axis: SizeAxis, computedSize: string): SizeMode {\n const cs = getComputedStyle(el);\n const authored = getAuthoredStyleValue(el, axis).toLowerCase();\n const display = cs.display.trim();\n const flexGrow = Number.parseFloat(cs.flexGrow) || 0;\n\n if (authored) {\n if (authored === 'auto') return axis === 'height' ? 'hug' : 'fill';\n if (authored.includes('fit-content') || authored.includes('max-content') || authored.includes('min-content')) return 'hug';\n if (authored.includes('%') || authored.includes('vw') || authored.includes('vh') || flexGrow > 0) return 'fill';\n return 'fixed';\n }\n\n if (axis === 'width') {\n if (flexGrow > 0) return 'fill';\n if (display === 'block' && el.parentElement) {\n const parentWidth = el.parentElement.getBoundingClientRect().width;\n const selfWidth = el.getBoundingClientRect().width;\n if (parentWidth > 0 && selfWidth / parentWidth > 0.88) return 'fill';\n }\n if (display.startsWith('inline')) return 'hug';\n }\n\n if (axis === 'height' && !getAuthoredStyleValue(el, 'min-height') && computedSize !== '0px') {\n return 'hug';\n }\n\n return 'fixed';\n}\n\nfunction sizeValueForMode(mode: SizeMode, current: string): string {\n if (mode === 'fill') return '100%';\n if (mode === 'hug') return 'fit-content';\n return current || '0px';\n}\n\nfunction formatSizeDisplay(value: string): string {\n const raw = value.trim();\n const pxMatch = raw.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n if (!pxMatch) return raw;\n const rounded = Math.round(Number.parseFloat(pxMatch[1]) * 10) / 10;\n return `${Number.isInteger(rounded) ? rounded.toFixed(0) : rounded.toFixed(1)}px`;\n}\n\nfunction formatLengthControlValue(value: string): string {\n const raw = formatSizeDisplay(value || '').trim();\n const pxMatch = raw.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n return pxMatch ? pxMatch[1] : raw;\n}\n\nfunction formatFontSizeControlValue(value: string): string {\n const raw = formatSizeDisplay(value || '').trim();\n if (!raw || raw === '—') return raw || '—';\n const pxMatch = raw.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n return pxMatch ? `${pxMatch[1]}px` : raw;\n}\n\nfunction displaySizeValue(cssValue: string, current: string): string {\n if (!cssValue || cssValue === '100%' || cssValue === 'fit-content') return formatLengthControlValue(current || '0px');\n return formatLengthControlValue(cssValue);\n}\n\nfunction getOneLineHugHeight(el: Element | null): number {\n if (!(el instanceof HTMLElement)) return 0;\n const hasText = (el.textContent ?? '').trim().length > 0;\n const isTextControl = el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement || el instanceof HTMLButtonElement;\n if (!hasText && !isTextControl) return 0;\n\n const cs = getComputedStyle(el);\n const fontSize = Number.parseFloat(cs.fontSize) || 0;\n const lineHeight = cs.lineHeight === 'normal'\n ? fontSize * 1.2\n : Number.parseFloat(cs.lineHeight) || fontSize * 1.2;\n const paddingY = (Number.parseFloat(cs.paddingTop) || 0) + (Number.parseFloat(cs.paddingBottom) || 0);\n const borderY = (Number.parseFloat(cs.borderTopWidth) || 0) + (Number.parseFloat(cs.borderBottomWidth) || 0);\n return Math.ceil(lineHeight + paddingY + borderY);\n}\n\nfunction clampHeightToOneLine(cssValue: string, el: Element | null): string {\n const px = cssValue.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n if (!px) return cssValue;\n const minH = getOneLineHugHeight(el);\n if (!minH) return cssValue;\n return `${Math.max(Number.parseFloat(px[1]), minH)}px`;\n}\n\nfunction normalizeSpacingInput(\n input: string,\n spaceSteps: DevInspectorTokenConfig['spaceSteps'],\n): string {\n const raw = input.trim();\n if (!raw) return '0px';\n\n const step = spaceSteps.find(s => s.label.toLowerCase() === raw.toLowerCase());\n if (step) return step.val;\n\n if (/^-?\\d+(?:\\.\\d+)?$/.test(raw)) return `${raw}px`;\n return raw;\n}\n\nfunction normalizeCssLengthInput(input: string): string {\n const raw = input.trim();\n if (!raw) return '';\n if (/^-?\\d+(?:\\.\\d+)?$/.test(raw)) return `${raw}px`;\n return raw;\n}\n\nfunction supportsCssValue(prop: string, value: string): boolean {\n return typeof CSS === 'undefined' || CSS.supports(prop, value);\n}\n\nfunction isNegativeSpacingValue(value: string): boolean {\n return /^-\\d/.test(value.trim());\n}\n\nfunction calcPanelPos(rect: DOMRect): { top: number; left: number } {\n const W = 380;\n const maxH = window.innerHeight * 0.9; // 和 CSS max-height: 90vh 保持一致\n let left = rect.right + 16;\n let top = rect.top;\n if (left + W > window.innerWidth - 8) left = Math.max(8, rect.left - W - 16);\n // 确保面板不超出底部:top + 90vh <= 100vh\n top = Math.min(top, window.innerHeight - maxH - 8);\n top = Math.max(8, top);\n return { top, left };\n}\n\ntype SelectionLabelPlacement = 'top' | 'bottom' | 'inside';\n\nfunction calcSelectionLabelPos(rect: DOMRect, text: string): { top: number; left: number; placement: SelectionLabelPlacement } {\n const labelH = 30;\n const gap = 8;\n const margin = 8;\n const labelW = Math.min(260, Math.max(96, text.length * 13 + 28));\n const panelRect = document.querySelector('.di-panel')?.getBoundingClientRect() ?? null;\n const clampLeft = (left: number) => Math.min(\n Math.max(left, margin + labelW / 2),\n window.innerWidth - margin - labelW / 2,\n );\n const intersectsPanel = (top: number, left: number) => {\n if (!panelRect) return false;\n const box = {\n left: left - labelW / 2,\n right: left + labelW / 2,\n top,\n bottom: top + labelH,\n };\n return box.left < panelRect.right\n && box.right > panelRect.left\n && box.top < panelRect.bottom\n && box.bottom > panelRect.top;\n };\n const centerLeft = clampLeft(rect.left + rect.width / 2);\n const candidates: Array<{ placement: SelectionLabelPlacement; top: number; left: number }> = [\n { placement: 'top', top: rect.top - labelH - gap, left: centerLeft },\n { placement: 'bottom', top: rect.bottom + gap, left: centerLeft },\n ];\n const visibleCandidate = candidates.find(candidate =>\n candidate.top >= margin\n && candidate.top + labelH <= window.innerHeight - margin\n && !intersectsPanel(candidate.top, candidate.left)\n );\n if (visibleCandidate) return visibleCandidate;\n\n const insideLeft = clampLeft(\n rect.width >= labelW + 16 ? rect.left + labelW / 2 + 8 : rect.left + rect.width / 2,\n );\n const insideTop = Math.min(\n Math.max(rect.top + 8, margin),\n window.innerHeight - labelH - margin,\n );\n return { placement: 'inside', top: insideTop, left: insideLeft };\n}\n\nfunction matchPreset<T extends { value: string }>(presets: T[], val: string): T | null {\n const px = val.replace(/\\s/g, '');\n return presets.find(p => p.value === px || p.value === val) ?? null;\n}\n\nfunction resizeTextareaToContent(el: HTMLTextAreaElement) {\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n}\n\n// ── SideInput:单格输入,支持 token 下拉 ──────────────────────\nfunction SideInput({\n value,\n onChange,\n spaceSteps,\n wide,\n compact,\n}: {\n value: string;\n onChange: (v: string) => void;\n spaceSteps: DevInspectorTokenConfig['spaceSteps'];\n wide?: boolean;\n compact?: boolean;\n}) {\n const [focused, setFocused] = useState(false);\n const [draft, setDraft] = useState('');\n const [popupPos, setPopupPos] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLDivElement>(null);\n const step = spaceSteps.find(s => s.val === value);\n const displayLabel = step && step.label !== '无' ? step.label : value === '0px' ? '0' : formatLengthControlValue(value);\n const displaySub = step && step.label !== '无' ? formatLengthControlValue(value) : null;\n\n return (\n <div className={`di-side-combo${wide ? ' di-side-combo--wide' : ''}${compact ? ' di-side-combo--compact' : ''}`}>\n <div className=\"di-side-display\" ref={triggerRef} onClick={() => {\n if (triggerRef.current) {\n const r = triggerRef.current.getBoundingClientRect();\n // wide 时左对齐,普通时居中\n setPopupPos({ top: r.bottom + 4, left: wide ? r.left : r.left + r.width / 2 });\n }\n setFocused(true); setDraft(value);\n }}>\n <span className=\"di-side-display-label\">{displayLabel}</span>\n {displaySub && <span className=\"di-side-display-sub\">{displaySub}</span>}\n </div>\n {focused && (\n <>\n <div className=\"di-side-overlay\" onClick={() => setFocused(false)} />\n <div className=\"di-side-popup\" style={{ top: popupPos.top, left: popupPos.left, transform: wide ? 'none' : 'translateX(-50%)' }}>\n <input\n className=\"di-side-input-edit\"\n value={draft}\n autoFocus\n onChange={e => setDraft(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n onChange(normalizeSpacingInput(draft, spaceSteps));\n setFocused(false);\n }\n if (e.key === 'Escape') setFocused(false);\n }}\n placeholder=\"输入数值…\"\n />\n <div className=\"di-side-steps\">\n {spaceSteps.map(s => (\n <button key={s.val}\n className={`di-side-step-item${value === s.val ? ' di-side-step-item--on' : ''}`}\n onMouseDown={e => { e.preventDefault(); onChange(s.val); setFocused(false); }}>\n <span>{s.label}</span>\n {s.val !== '0px' && <span className=\"di-side-step-sub\">{formatLengthControlValue(s.val)}</span>}\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n\ntype FourSides = { top: string; right: string; bottom: string; left: string };\nfunction parseFourSides(val: string): FourSides {\n const p = (val || '0px').trim().split(/\\s+/);\n if (p.length === 1) return { top: p[0], right: p[0], bottom: p[0], left: p[0] };\n if (p.length === 2) return { top: p[0], right: p[1], bottom: p[0], left: p[1] };\n if (p.length === 3) return { top: p[0], right: p[1], bottom: p[2], left: p[1] };\n return { top: p[0], right: p[1], bottom: p[2], left: p[3] };\n}\nfunction joinFourSides(s: FourSides): string {\n if (s.top === s.right && s.right === s.bottom && s.bottom === s.left) return s.top;\n if (s.top === s.bottom && s.left === s.right) return `${s.top} ${s.right}`;\n return `${s.top} ${s.right} ${s.bottom} ${s.left}`;\n}\n\ntype SpaceVariant = 'padding' | 'margin' | 'gap';\n\nfunction formatSpaceShort(value: string): string {\n const normalized = normalizeSpacingInput(value || '0px', []);\n return normalized.replace(/px$/i, '');\n}\n\nfunction formatSpaceRecordShort(value: string): string {\n return normalizeSpacingInput(value || '0px', []);\n}\n\nfunction isZeroLengthValue(value: string): boolean {\n const normalized = normalizeSpacingInput(value || '0px', []).trim();\n return /^-?0(?:\\.0+)?(?:px|rem|em|%)?$/i.test(normalized);\n}\n\nfunction getSpaceStepMatch(\n variant: SpaceVariant,\n value: string,\n spaceSteps: DevInspectorTokenConfig['spaceSteps'],\n) {\n if (variant === 'gap') {\n const normalized = normalizeSpacingInput(value, spaceSteps);\n return spaceSteps.find(step => step.val === normalized) ?? null;\n }\n const sides = parseFourSides(value);\n const isUniform = sides.top === sides.right && sides.right === sides.bottom && sides.bottom === sides.left;\n return isUniform ? spaceSteps.find(step => step.val === sides.top) ?? null : null;\n}\n\nfunction isEmptySpaceValue(variant: SpaceVariant, value: string): boolean {\n if (variant === 'gap') return isZeroLengthValue(value);\n const sides = parseFourSides(value);\n return Object.values(sides).every(isZeroLengthValue);\n}\n\nfunction getSpaceSummary(variant: SpaceVariant, value: string): string {\n if (variant === 'gap') return isEmptySpaceValue(variant, value) ? '' : `gap ${formatSpaceShort(value)}`;\n const sides = parseFourSides(value);\n const entries = [\n ['上', sides.top],\n ['右', sides.right],\n ['下', sides.bottom],\n ['左', sides.left],\n ].filter(([, sideValue]) => !isZeroLengthValue(sideValue));\n return entries.map(([label, sideValue]) => `${label}${formatSpaceShort(sideValue)}`).join(' / ');\n}\n\nfunction getSpaceRecordSummary(variant: SpaceVariant, value: string): string {\n if (variant === 'gap') return isEmptySpaceValue(variant, value) ? '' : `gap ${formatSpaceRecordShort(value)}`;\n const sides = parseFourSides(value);\n const entries = [\n ['上', sides.top],\n ['右', sides.right],\n ['下', sides.bottom],\n ['左', sides.left],\n ].filter(([, sideValue]) => !isZeroLengthValue(sideValue));\n return entries.map(([label, sideValue]) => `${label}${formatSpaceRecordShort(sideValue)}`).join(' / ');\n}\n\nfunction formatStoredSpaceRecordValue(value: string): string {\n if (!value || value === '无') return value;\n return value.replace(\n /(上|右|下|左|gap\\s*)(-?\\d+(?:\\.\\d+)?)(?!\\s*(?:px|rem|em|%))/gi,\n '$1$2px',\n );\n}\n\nfunction getCompactAxisInputWidth(label: string, value: string): number {\n const text = String(value || '0');\n const leftPadding = label.length > 1 ? 42 : 25;\n const rightPadding = 9;\n const valueWidth = Math.max(8, text.length * 7.5);\n const minWidth = label.length > 1 ? 66 : 52;\n return Math.ceil(Math.min(96, Math.max(minWidth, leftPadding + valueWidth + rightPadding)));\n}\n\n// SpaceCard 子组件\nfunction SpaceCard({ title, variant, value, onChange, spaceSteps, custom, onCustomChange }: {\n title: string;\n variant: SpaceVariant;\n value: string;\n onChange: (v: string) => void;\n spaceSteps: DevInspectorTokenConfig['spaceSteps'];\n custom: boolean;\n onCustomChange: (v: boolean) => void;\n}) {\n const [showDrop, setShowDrop] = useState(false);\n const [popupPos, setPopupPos] = useState({ top: 0, left: 0 });\n const matchedStep = getSpaceStepMatch(variant, value, spaceSteps);\n const isCustom = custom || !matchedStep;\n const isEmptySpace = !isCustom && matchedStep?.val === '0px';\n const spaceTokenMeta = isCustom || matchedStep?.val === '0px' ? '' : formatLengthControlValue(matchedStep?.val ?? '');\n const spaceSummary = getSpaceSummary(variant, value);\n const sides = parseFourSides(value);\n const emptySpaceStep = spaceSteps.find(step => step.val === '0px') ?? { label: '无', size: '', val: '0px' };\n const spaceTokenSteps = spaceSteps.filter(step => step.val !== '0px');\n const spaceTokenUsage = variant === 'gap' ? '元素间距 token' : `${title} token`;\n\n function updateSide(side: keyof FourSides, v: string) {\n const nextValue = normalizeSpacingInput(v, spaceSteps);\n const next = { ...sides, [side]: nextValue };\n onCustomChange(true);\n onChange(joinFourSides(next));\n }\n\n function stepSide(side: keyof FourSides, delta: number) {\n const rawNext = Math.round(getNumericCssValue(sides[side]) + delta);\n const next = variant === 'margin' ? rawNext : Math.max(0, rawNext);\n updateSide(side, `${next}px`);\n }\n\n function updateGap(v: string) {\n onCustomChange(true);\n onChange(normalizeSpacingInput(v, spaceSteps));\n }\n\n function stepGap(delta: number) {\n const rawNext = Math.round(getNumericCssValue(value) + delta);\n updateGap(`${Math.max(0, rawNext)}px`);\n }\n\n return (\n <div className={`di-space-card di-space-card--${variant}`}>\n <div className=\"di-space-row-head\">\n <span className=\"di-space-title\">{title}</span>\n <div className={`di-space-control-line${isCustom ? ' di-space-control-line--custom' : ''}${isCustom && variant !== 'gap' ? ' di-space-control-line--sides' : ''}${isCustom && variant === 'gap' ? ' di-space-control-line--gap' : ''}`}>\n {!isCustom && (\n <button\n type=\"button\"\n className={`di-space-token-trigger${isEmptySpace ? ' di-space-token-trigger--empty' : ''}`}\n onClick={event => {\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n setPopupPos(calcDropPos(rect, 260));\n setShowDrop(v => !v);\n }}\n >\n <span className=\"di-space-token-label\">{matchedStep?.label}</span>\n {spaceTokenMeta && <span className=\"di-space-token-meta\">{spaceTokenMeta}</span>}\n <svg width=\"8\" height=\"5\" viewBox=\"0 0 8 5\" fill=\"none\" style={{marginLeft:'auto',flexShrink:0}}><path d=\"M1 1l3 3 3-3\" stroke=\"#9ca3af\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/></svg>\n </button>\n )}\n {spaceSummary && <span className=\"di-space-summary\">{spaceSummary}</span>}\n {showDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={() => setShowDrop(false)} />\n <div className=\"di-border-style-drop di-space-token-menu\" style={{position:'fixed',top:popupPos.top,left:popupPos.left,zIndex:99998}}>\n {[emptySpaceStep, ...spaceTokenSteps].map(step => {\n const isOn = !isCustom && matchedStep?.val === step.val;\n return (\n <button\n key={step.val}\n type=\"button\"\n className={`di-border-style-drop-item${isOn ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n onCustomChange(false);\n onChange(step.val);\n setShowDrop(false);\n }}\n >\n <span className={step.val === '0px' ? 'di-border-style-label di-token-name--empty' : 'di-border-style-label'}>{step.label}</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">{formatLengthControlValue(step.val)}</span>\n <span className=\"di-shadow-drop-value\">{step.val === '0px' ? '空值状态' : spaceTokenUsage}</span>\n </span>\n </button>\n );\n })}\n {spaceTokenSteps.length === 0 && (\n <div className=\"di-token-empty-state\">\n No variables available\n </div>\n )}\n <button\n type=\"button\"\n className={`di-border-style-drop-item${isCustom ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n onCustomChange(true);\n setShowDrop(false);\n }}\n >\n <span className=\"di-custom-option-label\">自定义</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">手动调整参数</span>\n <span className=\"di-shadow-drop-value\">{variant === 'gap' ? '间距' : '上 / 右 / 下 / 左'}</span>\n </span>\n </button>\n </div>\n </>\n )}\n\n {isCustom && variant !== 'gap' && (\n <div className=\"di-space-custom-grid di-space-custom-grid--sides\">\n {([\n { key: 'top', label: '上', value: sides.top },\n { key: 'right', label: '右', value: sides.right },\n { key: 'bottom', label: '下', value: sides.bottom },\n { key: 'left', label: '左', value: sides.left },\n ] as const).map(item => (\n <div\n className=\"di-space-custom-row\"\n key={item.key}\n style={{ '--di-space-input-width': `${getCompactAxisInputWidth(item.label, formatLengthControlValue(item.value))}px` } as CSSProperties}\n >\n <AxisNumberInput\n label={item.label}\n value={formatLengthControlValue(item.value)}\n ariaLabel={`${title}${item.label}`}\n inputClassName=\"di-space-custom-input\"\n onChangeValue={next => updateSide(item.key, next)}\n onStep={delta => stepSide(item.key, delta)}\n />\n </div>\n ))}\n </div>\n )}\n\n {isCustom && variant === 'gap' && (\n <div className=\"di-space-custom-grid di-space-custom-grid--gap\">\n <div\n className=\"di-space-custom-row\"\n style={{ '--di-space-input-width': `${getCompactAxisInputWidth('间距', formatLengthControlValue(value))}px` } as CSSProperties}\n >\n <AxisNumberInput\n label=\"间距\"\n value={formatLengthControlValue(value)}\n ariaLabel=\"元素间距\"\n inputClassName=\"di-space-custom-input\"\n wideLabel\n onChangeValue={updateGap}\n onStep={stepGap}\n />\n </div>\n </div>\n )}\n {isCustom && (\n <SourcePickerButton\n className=\"di-source-action--field\"\n title={`选择${title} token`}\n onClick={event => {\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n setPopupPos(calcDropPos(rect, 260));\n setShowDrop(v => !v);\n }}\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// 判断是否为文字元素(直接包含文本内容)\nfunction getTextContent(el: Element): string | null {\n const text = Array.from(el.childNodes)\n .filter(n => n.nodeType === Node.TEXT_NODE)\n .map(n => n.textContent ?? '')\n .join('')\n .trim();\n // 只有纯文本(或极少子元素)才视为文字层\n return text.length > 0 ? el.textContent?.trim() ?? null : null;\n}\n\nconst TOKEN_TYPES = [\n { key: 'bg', label: '背景色', code: 'bg' },\n { key: 'text', label: '文字色', code: 'text' },\n { key: 'accent', label: '强调色', code: 'accent' },\n { key: 'border', label: '边框色', code: 'border' },\n];\nconst TOKEN_COMPONENTS = [\n { key: 'global', label: '全局', code: 'global' },\n { key: 'sidebar', label: '侧边栏', code: 'sidebar' },\n { key: 'button', label: '按钮', code: 'button' },\n { key: 'card', label: '卡片', code: 'card' },\n { key: 'tag', label: '标签', code: 'tag' },\n { key: 'input', label: '输入框', code: 'input' },\n];\nconst TOKEN_STATES = [\n { key: 'default', label: '默认态', code: 'default' },\n { key: 'hover', label: '悬浮态', code: 'hover' },\n { key: 'active', label: '激活态', code: 'active' },\n { key: 'disabled', label: '禁用态', code: 'disabled' },\n { key: 'success', label: '成功态', code: 'success' },\n { key: 'warning', label: '警告态', code: 'warning' },\n];\n\n// ─── ColorDropdown:色板分组下拉 ──────────────────────────────────\nfunction ColorDropdown({ value, onChange, onClose, onAddToken, pos, colorPalette }: {\n value: string;\n onChange: (v: string, token: string) => void;\n onClose: () => void;\n onAddToken?: (val: string) => void; // 只传颜色值,Modal 里选 token 名\n pos?: { top: number; left: number };\n colorPalette: DevInspectorTokenConfig['colorPalette'];\n}) {\n const initHex = value.startsWith('#') ? value : '#6b7280';\n const [hexInput, setHexInput] = useState(initHex);\n const [alpha, setAlpha] = useState(100);\n\n function buildColor(hex: string, a: number): string {\n const m = hex.match(/^#([0-9a-f]{6})$/i);\n if (!m || a >= 100) return hex;\n const r=parseInt(m[1].slice(0,2),16), g=parseInt(m[1].slice(2,4),16), b=parseInt(m[1].slice(4,6),16);\n return `rgba(${r},${g},${b},${(a/100).toFixed(2)})`;\n }\n\n function applyColor(hex: string, a: number) {\n onChange(buildColor(hex, a), '');\n }\n\n const style = pos ? { position: 'fixed' as const, top: pos.top, left: pos.left, zIndex: 99998 } : {};\n return (\n <>\n <div style={{ position: 'fixed', inset: 0, zIndex: 99997 }} onClick={onClose} />\n <div className=\"di-palette-dropdown\" style={style}>\n {/* 无背景色 */}\n <div className=\"di-palette-group\">\n <div className=\"di-palette-group-label\">无</div>\n <div className=\"di-palette-swatches\">\n <button className=\"di-palette-none\" title=\"无背景色 / transparent\"\n onClick={() => { onChange('transparent', ''); onClose(); }} />\n </div>\n </div>\n\n {/* 色板 + 每组末尾「+」格子 */}\n {colorPalette.map(g => (\n <div key={g.group} className=\"di-palette-group\">\n <div className=\"di-palette-group-label\">{g.group}</div>\n <div className=\"di-palette-swatches\">\n {g.colors.map(c => (\n <button key={c.token}\n className={`di-palette-swatch${value === c.val ? ' di-palette-swatch--on' : ''}`}\n style={{ background: c.val }}\n title={`${g.group}·${c.label} ${c.val}`}\n onClick={() => { onChange(c.val, c.token); onClose(); }}\n />\n ))}\n {onAddToken && (\n <button className=\"di-palette-add-btn\" title={`添加为${g.group}色 token`}\n onClick={() => { onAddToken(buildColor(hexInput, alpha)); onClose(); }}>\n +\n </button>\n )}\n </div>\n </div>\n ))}\n\n {/* 自定义底部:色块 + [#][hex] + [alpha][%] */}\n <div className=\"di-custom-bottom\">\n <button className=\"di-custom-color-trigger\" style={{ background: buildColor(hexInput, alpha), flexShrink: 0 }}\n onClick={() => {}} />\n {/* hex 输入,# 是灰色前缀 */}\n <div className=\"di-field-wrap\">\n <span className=\"di-field-prefix\">#</span>\n <input className=\"di-field-input\" value={hexInput.replace(/^#/, '')} placeholder=\"ffffff\"\n onChange={e => { const h='#'+e.target.value; setHexInput(h); applyColor(h, alpha); }}\n onBlur={e => { if (!/^[0-9a-f]{6}$/i.test(e.target.value)) setHexInput(initHex); }}\n />\n </div>\n {/* 透明度,% 是灰色后缀 */}\n <div className=\"di-field-wrap di-field-wrap--fixed\">\n <input className=\"di-field-input di-field-input--num\" type=\"number\" min=\"0\" max=\"100\" value={alpha}\n onChange={e => { const a=Math.min(100,Math.max(0,+e.target.value||0)); setAlpha(a); applyColor(hexInput, a); }}\n />\n <span className=\"di-field-suffix\">%</span>\n </div>\n </div>\n </div>\n </>\n );\n}\n\n// 从 CSS 属性名推断颜色类型\nfunction inferType(cssProp?: string): string {\n if (!cssProp) return 'bg';\n if (cssProp === 'color') return 'text';\n if (cssProp.includes('border')) return 'border';\n if (cssProp.includes('background')) return 'bg';\n return 'accent';\n}\n\n// 从 class 列表推断组件\nfunction inferComponent(classes: string[]): string {\n const joined = classes.join(' ').toLowerCase();\n if (/sidebar|nav-item|nav/.test(joined)) return 'sidebar';\n if (/button|btn|start/.test(joined)) return 'button';\n if (/card/.test(joined)) return 'card';\n if (/tag|badge|chip/.test(joined)) return 'tag';\n if (/input|field|form/.test(joined)) return 'input';\n return 'global';\n}\n\n// 从 class 列表推断状态\nfunction inferState(classes: string[]): string {\n const joined = classes.join(' ').toLowerCase();\n if (/is-active|active|is-current|current/.test(joined)) return 'active';\n if (/disabled/.test(joined)) return 'disabled';\n if (/hover/.test(joined)) return 'hover';\n if (/success/.test(joined)) return 'success';\n if (/warning/.test(joined)) return 'warning';\n return 'default';\n}\n\n// ─── AddTokenModal:添加 token 弹出框 ─────────────────────────────\nfunction AddTokenModal({ value, cssProp, elementClasses, onClose, onConfirm, colorPalette }: {\n value: string;\n cssProp?: string;\n elementClasses?: string[];\n onClose: () => void;\n onConfirm: (cssVar: string, val: string, usage: string) => void;\n colorPalette: DevInspectorTokenConfig['colorPalette'];\n}) {\n const [mode, setMode] = useState<'new' | 'replace'>('new');\n const [type, setType] = useState(() => inferType(cssProp));\n const [component, setComponent] = useState(() => inferComponent(elementClasses ?? []));\n const [state, setState] = useState(() => inferState(elementClasses ?? []));\n const [replaceTarget, setReplaceTarget] = useState('');\n\n const allTokens = colorPalette.flatMap(g => g.colors);\n const typeObj = TOKEN_TYPES.find(t => t.key === type)!;\n const componentObj = TOKEN_COMPONENTS.find(c => c.key === component)!;\n const stateObj = TOKEN_STATES.find(s => s.key === state)!;\n\n const generatedVar = mode === 'new'\n ? `--color-${typeObj.code}-${componentObj.code}-${stateObj.code}`\n : replaceTarget;\n\n const BtnGroup = ({ items, active, onSelect }: { items: {key:string;label:string}[]; active: string; onSelect:(k:string)=>void }) => (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>\n {items.map(i => (\n <button key={i.key}\n className={`di-modal-opt-btn${active === i.key ? ' --on' : ''}`}\n onClick={() => onSelect(i.key)}>\n {i.label}\n </button>\n ))}\n </div>\n );\n\n return (\n <div className=\"di-modal-overlay\" onClick={onClose}>\n <div className=\"di-modal\" onClick={e => e.stopPropagation()}>\n {/* 顶部颜色信息 */}\n <div className=\"di-modal-header\">\n <span className=\"di-modal-swatch\" style={{ background: value }} />\n <span className=\"di-modal-hex\">{value}</span>\n <div style={{ flex: 1 }} />\n <span style={{ fontSize: 12, color: '#6b7280' }}>添加为 token</span>\n </div>\n\n <div className=\"di-modal-body\">\n {/* 模式切换 */}\n <div className=\"di-modal-tabs\">\n {[{k:'new',l:'新建 token'},{k:'replace',l:'替换已有 token'}].map(m => (\n <button key={m.k} className={`di-modal-tab${mode===m.k?' --on':''}`}\n onClick={() => setMode(m.k as 'new'|'replace')}>{m.l}</button>\n ))}\n </div>\n\n {mode === 'new' ? (\n <>\n <div className=\"di-modal-field\">\n <div className=\"di-modal-field-label\">颜色类型 <span className=\"di-modal-auto-tag\">自动识别</span></div>\n <BtnGroup items={TOKEN_TYPES} active={type} onSelect={setType} />\n </div>\n <div className=\"di-modal-field\">\n <div className=\"di-modal-field-label\">组件 <span className=\"di-modal-auto-tag\">自动识别</span></div>\n <BtnGroup items={TOKEN_COMPONENTS} active={component} onSelect={setComponent} />\n </div>\n <div className=\"di-modal-field\">\n <div className=\"di-modal-field-label\">用途 / 状态 <span className=\"di-modal-auto-tag\">自动推断,可改</span></div>\n <BtnGroup items={TOKEN_STATES} active={state} onSelect={setState} />\n </div>\n </>\n ) : (\n <div className=\"di-modal-field\">\n <div className=\"di-modal-field-label\">选择要替换的 token</div>\n <select className=\"di-modal-select\"\n value={replaceTarget} onChange={e => setReplaceTarget(e.target.value)}>\n <option value=\"\">请选择…</option>\n {allTokens.map(c => (\n <option key={c.token} value={c.token}>{c.token}({c.val})</option>\n ))}\n </select>\n </div>\n )}\n\n {/* 生成结果预览 */}\n {generatedVar && (\n <div className=\"di-modal-result\">\n <div className=\"di-modal-result-label\">系统生成 token 名称</div>\n <div className=\"di-modal-result-var\">{generatedVar}</div>\n {mode === 'new' && (\n <div className=\"di-modal-result-trail\">\n {typeObj.label} → <code>{typeObj.code}</code>\n &ensp;{componentObj.label} → <code>{componentObj.code}</code>\n &ensp;{stateObj.label} → <code>{stateObj.code}</code>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* 底部按钮 */}\n <div className=\"di-modal-foot\">\n <button className=\"di-modal-cancel\" onClick={onClose}>取消</button>\n <button className=\"di-modal-ok\" disabled={!generatedVar}\n onClick={() => { if (generatedVar) { onConfirm(generatedVar, value, type); onClose(); } }}>\n 确认创建\n </button>\n </div>\n </div>\n </div>\n );\n}\n\n// 获取颜色的显示标签(优先用色板短标签,其次 tokenMap,最后 hex)\nfunction getDisplayLabel(\n val: string,\n tokenMap: Record<string, string>,\n colorPalette: DevInspectorTokenConfig['colorPalette'],\n tokenLabels: DevInspectorTokenConfig['tokenLabels'],\n): { label: string; sub: string; isHardcoded: boolean } {\n if (isTransparentColor(val)) return { label: '无', sub: '', isHardcoded: true };\n const displayVal = formatColorDisplay(val);\n const paletteLabel = getColorLabel(val, colorPalette);\n if (paletteLabel) return { label: paletteLabel, sub: displayVal, isHardcoded: false };\n const token = tokenMap[val];\n if (token) return { label: tokenLabels[token] ?? token.replace('--', ''), sub: displayVal, isHardcoded: false };\n return { label: displayVal, sub: '', isHardcoded: true };\n}\n\nfunction ColorSelectButton({\n value,\n label,\n sub,\n isHardcoded,\n title,\n className = '',\n swatchClassName = '',\n swatchStyle,\n onClick,\n}: {\n value: string;\n label: string;\n sub?: string;\n isHardcoded?: boolean;\n title: string;\n className?: string;\n swatchClassName?: string;\n swatchStyle?: CSSProperties;\n onClick: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n}) {\n const isEmpty = isTransparentColor(value);\n const displayLabel = isEmpty ? '透明' : isHardcoded ? '自定义色' : label;\n const detail = isEmpty ? '' : sub || (displayLabel !== label ? label : '');\n const buttonTitle = detail ? `${title}: ${displayLabel} ${detail}` : `${title}: ${displayLabel}`;\n return (\n <button\n className={`di-color-select ${className}`.trim()}\n type=\"button\"\n title={buttonTitle}\n onClick={onClick}\n >\n <span\n className={`di-color-select-swatch${swatchClassName ? ` ${swatchClassName}` : ''}${isColorDark(value) ? ' di-color-select-swatch--dark' : ''}${isEmpty ? ' di-color-swatch--empty' : ''}`}\n style={{ background: isEmpty ? undefined : value, ...swatchStyle }}\n />\n <span className=\"di-color-select-copy\">\n <span className={isHardcoded || isEmpty ? 'di-token-name--plain' : 'di-token-name'}>{displayLabel}</span>\n </span>\n </button>\n );\n}\n\nfunction CustomSelectButton({\n title = '自定义',\n className = '',\n onClick,\n}: {\n title?: string;\n className?: string;\n onClick: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n}) {\n return (\n <button\n className={`di-custom-select ${className}`.trim()}\n type=\"button\"\n title={title}\n onClick={onClick}\n >\n <span className=\"di-custom-select-label\">自定义</span>\n </button>\n );\n}\n\nfunction SourcePickerButton({\n title,\n className = '',\n onClick,\n}: {\n title: string;\n className?: string;\n onClick: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n}) {\n return (\n <button\n className={`di-source-action ${className}`.trim()}\n type=\"button\"\n title={title}\n aria-label={title}\n onClick={onClick}\n >\n <ComponentIcon size={15} strokeWidth={2.1} aria-hidden=\"true\" />\n </button>\n );\n}\n\nfunction AxisNumberInput({\n label,\n value,\n ariaLabel,\n inputClassName,\n wideLabel = false,\n onChangeValue,\n onStep,\n onFocusValue,\n onBlur,\n onEnter,\n}: {\n label: string;\n value: string;\n ariaLabel: string;\n inputClassName: string;\n wideLabel?: boolean;\n onChangeValue: (value: string) => void;\n onStep: (delta: number) => void;\n onFocusValue?: () => void;\n onBlur?: () => void;\n onEnter?: (event: ReactKeyboardEvent<HTMLInputElement>) => void;\n}) {\n return (\n <div className={`di-number-stepper di-number-stepper--with-axis${wideLabel ? ' di-number-stepper--wide-axis' : ''}`}>\n <span className={`di-field-axis${wideLabel ? ' di-field-axis--wide' : ''}`} aria-hidden=\"true\">{label}</span>\n <input\n className={`${inputClassName} di-number-stepper-input`}\n value={value}\n aria-label={ariaLabel}\n onChange={event => onChangeValue(event.currentTarget.value)}\n onFocus={event => {\n onFocusValue?.();\n event.currentTarget.select();\n }}\n onClick={event => event.currentTarget.select()}\n onMouseUp={event => event.preventDefault()}\n onBlur={onBlur}\n onKeyDown={event => handleArrowKeyStep(event, onStep, () => onEnter?.(event))}\n />\n <div className=\"di-number-stepper-buttons\">\n <button type=\"button\" onClick={() => onStep(1)} aria-label={`${ariaLabel}增加 1px`}>⌃</button>\n <button type=\"button\" onClick={() => onStep(-1)} aria-label={`${ariaLabel}减少 1px`}>⌄</button>\n </div>\n </div>\n );\n}\n\n// ─── InspectorPanel:可复用的面板组件 ────────────────────────────\nexport function InspectorPanel({\n targetEl,\n tokenMap,\n onTokenMapUpdate,\n onClose,\n}: {\n targetEl: Element;\n tokenMap: Record<string, string>;\n onTokenMapUpdate: (updates: Record<string, string>) => void;\n onClose: () => void;\n}) {\n const isSecondary = false;\n const { endpoints, tokens } = useDevInspectorConfig();\n const {\n colorPalette,\n tokenLabels,\n radiusPresets,\n spaceSteps,\n borderWidthSteps,\n fontSizeOptions,\n fontWeightOptions,\n shadowTokens,\n typographyTokens,\n } = tokens;\n const typographyStyles = getTypographyStyles(tokens);\n const containerStyles = getContainerStyles(tokens);\n const shadowOptions = [\n { cssVar: '', value: 'none', label: '无', usage: '不使用阴影' },\n ...shadowTokens,\n ];\n const [isEditing, setIsEditing] = useState(false);\n const panelElRef = useRef<HTMLDivElement>(null);\n const [selected, setSelected] = useState<Element>(targetEl);\n const [panelPos, setPanelPos] = useState(() => calcPanelPos(targetEl.getBoundingClientRect()));\n const dragRef = useRef<{ sx: number; sy: number; sl: number; st: number } | null>(null);\n const modalOpenRef = useRef(false);\n const [colors, setColors] = useState<Record<string, string>>({});\n const [radiusVal, setRadiusVal] = useState('');\n const [paddingVal, setPaddingVal] = useState('0px');\n const [marginVal, setMarginVal] = useState('0px');\n const [gapVal, setGapVal] = useState('0px');\n const [translateVal, setTranslateVal] = useState({ x: 0, y: 0 });\n const [positionBaseVal, setPositionBaseVal] = useState({ x: 0, y: 0 });\n const [widthVal, setWidthVal] = useState('');\n const [heightVal, setHeightVal] = useState('');\n const [widthMode, setWidthMode] = useState<SizeMode>('fixed');\n const [heightMode, setHeightMode] = useState<SizeMode>('hug');\n const [justifyVal, setJustifyVal] = useState('normal');\n const [alignItemsVal, setAlignItemsVal] = useState('normal');\n const [customRadius, setCustomRadius] = useState('');\n const [scope, setScope] = useState<ScopeMode>('current');\n const [note, setNote] = useState('');\n const [textContent, setTextContent] = useState<string | null>(null);\n const [pendingColors, setPendingColors] = useState<Record<string, string>>({});\n const [pendingRadius, setPendingRadius] = useState('');\n const [shadowVal, setShadowVal] = useState('none');\n const [shadowAuthoredVal, setShadowAuthoredVal] = useState('');\n const [pendingShadow, setPendingShadow] = useState('');\n const [borderColorVal, setBorderColorVal] = useState('');\n const [borderWidthVal, setBorderWidthVal] = useState('0px');\n const [borderStyleVal, setBorderStyleVal] = useState('none');\n const [pendingBorderColor, setPendingBorderColor] = useState('');\n const [pendingBorderWidth, setPendingBorderWidth] = useState('');\n const [pendingBorderStyle, setPendingBorderStyle] = useState('');\n const [expandedBorderColor, setExpandedBorderColor] = useState(false);\n const [showContainerStyleDrop, setShowContainerStyleDrop] = useState(false);\n const [showBorderWidthDrop, setShowBorderWidthDrop] = useState(false);\n const [showRadiusDrop, setShowRadiusDrop] = useState(false);\n const [containerCustomMode, setContainerCustomMode] = useState(false);\n const [showShadowDrop, setShowShadowDrop] = useState(false);\n const [showShadowColorDrop, setShowShadowColorDrop] = useState(false);\n const [shadowCustomMode, setShadowCustomMode] = useState(false);\n const [showStyleDrop, setShowStyleDrop] = useState(false);\n const [showWeightDrop, setShowWeightDrop] = useState(false);\n const [showFontSizeDrop, setShowFontSizeDrop] = useState(false);\n const [showTypographyStyleDrop, setShowTypographyStyleDrop] = useState(false);\n const [typographyCustomMode, setTypographyCustomMode] = useState(false);\n const [showScopeHelp, setShowScopeHelp] = useState(false);\n const [dropPos, setDropPos] = useState({ top: 0, left: 0 });\n const [fontSizeVal, setFontSizeVal] = useState('');\n const [fontWeightVal, setFontWeightVal] = useState('');\n const [textColorVal, setTextColorVal] = useState('');\n const [fontSizeCustomDraft, setFontSizeCustomDraft] = useState('');\n const [expandedTextColor, setExpandedTextColor] = useState(false);\n const [pendingFontSize, setPendingFontSize] = useState('');\n const [pendingFontWeight, setPendingFontWeight] = useState('');\n const [pendingTextColor, setPendingTextColor] = useState('');\n const [pendingPadding, setPendingPadding] = useState('');\n const [pendingMargin, setPendingMargin] = useState('');\n const [pendingGap, setPendingGap] = useState('');\n const [spaceCustomModes, setSpaceCustomModes] = useState<Record<SpaceVariant, boolean>>({\n padding: false,\n margin: false,\n gap: false,\n });\n const [pendingTranslate, setPendingTranslate] = useState<{ x: number; y: number } | null>(null);\n const [pendingWidth, setPendingWidth] = useState('');\n const [pendingHeight, setPendingHeight] = useState('');\n const [pendingWidthMode, setPendingWidthMode] = useState<SizeMode | null>(null);\n const [pendingHeightMode, setPendingHeightMode] = useState<SizeMode | null>(null);\n const [pendingJustifyContent, setPendingJustifyContent] = useState('');\n const [pendingAlignItems, setPendingAlignItems] = useState('');\n const [sizeDraft, setSizeDraft] = useState<Partial<Record<SizeAxis, string>>>({});\n const [newTokenProp, setNewTokenProp] = useState<string | null>(null);\n const [newTokenName, setNewTokenName] = useState('');\n const [saveMsg, setSaveMsg] = useState('');\n const [copyMsg, setCopyMsg] = useState('');\n const [submitMsg, setSubmitMsg] = useState('');\n const [componentTextVal, setComponentTextVal] = useState('');\n const [componentTextDraft, setComponentTextDraft] = useState('');\n const [componentTextSlotVals, setComponentTextSlotVals] = useState<Record<string, string>>({});\n const [componentTextSlotDrafts, setComponentTextSlotDrafts] = useState<Record<string, string>>({});\n const [componentChildSlotVals, setComponentChildSlotVals] = useState<Record<string, string>>({});\n const [pendingComponentTextSlots, setPendingComponentTextSlots] = useState<Record<string, string>>({});\n const [pendingComponentText, setPendingComponentText] = useState<string | null>(null);\n const [componentSelectorVal, setComponentSelectorVal] = useState('');\n const [componentVariantVal, setComponentVariantVal] = useState<ButtonVariantKey>('secondary');\n const [componentVariantClassVal, setComponentVariantClassVal] = useState('');\n const [pendingComponentVariant, setPendingComponentVariant] = useState<ButtonVariantKey | ''>('');\n const [componentSizeVal, setComponentSizeVal] = useState<ButtonSizeKey>('m');\n const [pendingComponentSize, setPendingComponentSize] = useState<ButtonSizeKey | ''>('');\n const [iconColorVal, setIconColorVal] = useState<IconColorKey>('default');\n const [pendingIconColor, setPendingIconColor] = useState<IconColorKey | ''>('');\n const [badgeStatusVal, setBadgeStatusVal] = useState<BadgeStatusKey>('default');\n const [badgeStatusClassVal, setBadgeStatusClassVal] = useState('');\n const [pendingBadgeStatus, setPendingBadgeStatus] = useState<BadgeStatusKey | ''>('');\n const [cardVariantVal, setCardVariantVal] = useState<CardVariantKey>('default');\n const [cardVariantClassVal, setCardVariantClassVal] = useState('');\n const [pendingCardVariant, setPendingCardVariant] = useState<CardVariantKey | ''>('');\n const [localDrafts, setLocalDrafts] = useState<Record<string, LocalDraftEntry>>({});\n const [styleIntentSummary, setStyleIntentSummary] = useState<StyleIntentSummary>({ pendingCount: 0, latestPending: null, pendingEntries: [] });\n const [hasCopied, setHasCopied] = useState(() => _copiedStyles.length > 0);\n const [expandedColor, setExpandedColor] = useState<string | null>(null);\n const [pendingNewToken, setPendingNewToken] = useState<{ cssVar: string; value: string; usage: string } | null>(null);\n const [addTokenModal, setAddTokenModal] = useState<{ value: string; cssProp?: string } | null>(null);\n const [customColorVals, setCustomColorVals] = useState<Record<string, string>>({});\n const selectedRef = useRef<Element>(targetEl);\n const localDraftsRef = useRef<Record<string, LocalDraftEntry>>({});\n const gapTargetRef = useRef<HTMLElement | null>(null); // gap 实际作用的元素(可能是父容器)\n\n useEffect(() => { modalOpenRef.current = addTokenModal !== null; }, [addTokenModal]);\n useEffect(() => { localDraftsRef.current = localDrafts; }, [localDrafts]);\n\n const formatStyleIntentSummary = useCallback((r: any): StyleIntentSummary => ({\n pendingCount: r.pendingCount ?? 0,\n latestPending: r.latestPending\n ? {\n id: r.latestPending.id,\n targetLabel: r.latestPending.targetLabel,\n selector: r.latestPending.selector,\n createdAt: r.latestPending.createdAt,\n note: r.latestPending.note,\n entries: r.latestPending.entries ?? [],\n }\n : null,\n pendingEntries: Array.isArray(r.pendingEntries)\n ? r.pendingEntries.map((entry: any) => ({\n id: entry.id,\n targetLabel: entry.targetLabel,\n selector: entry.selector,\n createdAt: entry.createdAt,\n note: entry.note,\n entries: entry.entries ?? [],\n }))\n : [],\n }), []);\n\n const refreshStyleIntentSummary = useCallback(() => {\n fetch(endpoints.styleIntents)\n .then(r => r.json())\n .then(r => {\n if (r.ok) {\n setStyleIntentSummary(formatStyleIntentSummary(r));\n }\n })\n .catch(() => {});\n }, [endpoints.styleIntents, formatStyleIntentSummary]);\n\n useEffect(() => {\n refreshStyleIntentSummary();\n }, [refreshStyleIntentSummary]);\n\n function getDraftTargetInfo(el: Element): Pick<LocalDraftEntry, 'key' | 'selector' | 'targetLabel' | 'scopeLabel'> {\n const componentMeta = getInspectorComponentMeta(el);\n const selector = getSelectorForScope(el, scope);\n const targetLabel = getTargetDisplayLabel(el, componentMeta);\n return {\n key: `${scope}:${selector}`,\n selector,\n targetLabel,\n scopeLabel: scope === 'current' ? '当前元素' : '相同元素',\n };\n }\n\n function removeLocalDraftEntry(key: string) {\n setLocalDrafts(prev => {\n if (!prev[key]) return prev;\n const next = { ...prev };\n delete next[key];\n return next;\n });\n }\n\n // 选中逻辑\n const selectEl = useCallback((el: Element) => {\n selectedRef.current = el;\n const rect = el.getBoundingClientRect();\n setPanelPos(calcPanelPos(rect));\n\n // 读颜色\n const elCs = getComputedStyle(el);\n const selectedComponentMeta = getInspectorComponentMeta(el);\n const selectedCapability = getComponentCapability(selectedComponentMeta);\n const isButtonComponent = selectedCapability?.type === 'Button';\n const isIconComponent = selectedCapability?.type === 'Icon';\n const isBadgeComponent = selectedCapability?.type === 'Badge';\n const isCardComponent = selectedCapability?.type === 'Card';\n const hasEditableText = !!selectedCapability?.editableText;\n const c: Record<string, string> = {};\n for (const { prop } of COLOR_PROPS) {\n const val = getComputedColor(el, prop);\n if (!val || val === 'rgba(0, 0, 0, 0)' || val === 'transparent') continue;\n // 边框色:只在有真实边框时才显示\n if (prop === 'border-color' && elCs.borderWidth.trim() === '0px') continue;\n c[prop] = val;\n }\n setColors(c);\n setPendingColors({});\n\n // 字体\n setFontSizeVal(elCs.fontSize.trim());\n setFontWeightVal(elCs.fontWeight.trim());\n setTextColorVal(normalizeColor(elCs.color.trim()));\n setFontSizeCustomDraft(elCs.fontSize.trim());\n setPendingFontSize(''); setPendingFontWeight(''); setPendingTextColor('');\n setTypographyCustomMode(false);\n setExpandedTextColor(false);\n\n // 边框\n const bw = elCs.borderTopWidth.trim();\n const bs = elCs.borderTopStyle.trim();\n const bc = normalizeColor(elCs.borderTopColor.trim());\n setBorderWidthVal(bw);\n setBorderStyleVal(bs);\n setBorderColorVal(bw !== '0px' ? bc : '');\n setPendingBorderColor(''); setPendingBorderWidth(''); setPendingBorderStyle('');\n setExpandedBorderColor(false);\n setShowContainerStyleDrop(false);\n setShowBorderWidthDrop(false);\n setShowRadiusDrop(false);\n setContainerCustomMode(false);\n\n // 圆角\n const r = getComputedRadius(el);\n setRadiusVal(r);\n setPendingRadius('');\n\n // 阴影\n const shadowComputed = elCs.boxShadow.trim() || 'none';\n setShadowVal(shadowComputed === 'rgba(0, 0, 0, 0) 0px 0px 0px 0px' ? 'none' : shadowComputed);\n setShadowAuthoredVal(getAuthoredStyleValue(el, 'box-shadow'));\n setPendingShadow('');\n setShadowCustomMode(false);\n setShowShadowDrop(false);\n setShowShadowColorDrop(false);\n\n // 间距\n const cs = getComputedStyle(el);\n const normPad = (v: string) => {\n const parts = v.trim().split(' ');\n return parts.every(p => p === parts[0]) ? parts[0] : v.trim();\n };\n setPaddingVal(normPad(`${cs.paddingTop} ${cs.paddingRight} ${cs.paddingBottom} ${cs.paddingLeft}`));\n setMarginVal(normPad(`${cs.marginTop} ${cs.marginRight} ${cs.marginBottom} ${cs.marginLeft}`));\n if (isFlexGridDisplay(cs.display)) {\n const g = cs.gap.trim();\n setGapVal(g === 'normal' ? '0px' : g);\n gapTargetRef.current = el as HTMLElement;\n } else if (el.parentElement) {\n const pcs = getComputedStyle(el.parentElement);\n if (isFlexGridDisplay(pcs.display)) {\n const g = pcs.gap.trim();\n setGapVal(g === 'normal' ? '0px' : g);\n gapTargetRef.current = el.parentElement as HTMLElement;\n } else {\n setGapVal('0px');\n gapTargetRef.current = el as HTMLElement;\n }\n }\n setPendingPadding(''); setPendingMargin(''); setPendingGap('');\n setSpaceCustomModes({ padding: false, margin: false, gap: false });\n\n const nextTranslate = parseTranslate(cs.translate);\n setTranslateVal(nextTranslate);\n setPositionBaseVal(getPositionBase(el, nextTranslate));\n setWidthVal(cs.width.trim());\n setHeightVal(cs.height.trim());\n setWidthMode(inferSizeMode(el, 'width', cs.width.trim()));\n setHeightMode(inferSizeMode(el, 'height', cs.height.trim()));\n setJustifyVal(cs.justifyContent.trim() || 'normal');\n setAlignItemsVal(cs.alignItems.trim() || 'normal');\n setPendingTranslate(null); setPendingWidth(''); setPendingHeight('');\n setPendingWidthMode(null); setPendingHeightMode(null);\n setPendingJustifyContent('');\n setPendingAlignItems('');\n setSizeDraft({});\n\n setNote('');\n setTextContent(getTextContent(el));\n if (selectedComponentMeta) {\n setComponentSelectorVal(getSelectorForScope(el, 'component'));\n } else {\n setComponentSelectorVal('');\n }\n if (hasEditableText) {\n const componentText = getButtonText(el);\n setComponentTextVal(componentText);\n setComponentTextDraft(componentText);\n } else {\n setComponentTextVal('');\n setComponentTextDraft('');\n }\n const editableSlotValues = getComponentSlotValues(el, selectedCapability?.textSlots);\n const childSlotValues = getComponentSlotValues(el, selectedCapability?.childSlots);\n setComponentTextSlotVals(editableSlotValues);\n setComponentTextSlotDrafts(editableSlotValues);\n setComponentChildSlotVals(childSlotValues);\n if (isButtonComponent) {\n setComponentVariantVal(normalizeButtonVariant(selectedComponentMeta?.variant ?? ''));\n setComponentVariantClassVal(getButtonVariantClass(el));\n setComponentSizeVal(inferButtonSize(el));\n } else if (isIconComponent) {\n setComponentVariantVal('secondary');\n setComponentVariantClassVal('');\n setComponentSizeVal(inferIconSize(el));\n setIconColorVal(inferIconColor(el));\n } else if (isBadgeComponent) {\n const status = inferBadgeStatus(getClasses(el));\n setComponentVariantVal('secondary');\n setComponentVariantClassVal('');\n setComponentSizeVal(inferBadgeSize(el));\n setBadgeStatusVal(status);\n setBadgeStatusClassVal(getBadgeStatusClass(el));\n } else if (isCardComponent) {\n setComponentVariantVal('secondary');\n setComponentVariantClassVal('');\n setComponentSizeVal('m');\n setIconColorVal('default');\n setBadgeStatusVal('default');\n setBadgeStatusClassVal('');\n setCardVariantVal(inferCardVariant(getClasses(el)));\n setCardVariantClassVal(getCardVariantClass(el));\n } else {\n setComponentVariantVal('secondary');\n setComponentVariantClassVal('');\n setComponentSizeVal('m');\n setIconColorVal('default');\n setBadgeStatusVal('default');\n setBadgeStatusClassVal('');\n setCardVariantVal('default');\n setCardVariantClassVal('');\n }\n setPendingComponentText(null);\n setPendingComponentTextSlots({});\n setPendingComponentVariant('');\n setPendingComponentSize('');\n setPendingIconColor('');\n setPendingBadgeStatus('');\n setPendingCardVariant('');\n setNewTokenProp(null);\n setExpandedColor(null);\n setShowScopeHelp(false);\n setIsEditing(false); // 选中新元素时重置为查看模式\n setSelected(el);\n }, []);\n\n // targetEl 变化时读取样式(包含初始化)\n useEffect(() => { selectEl(targetEl); }, [targetEl]); // eslint-disable-line\n\n // 高亮选中\n useEffect(() => {\n document.querySelectorAll('.di-selected').forEach(e => e.classList.remove('di-selected'));\n if (scope !== 'current') {\n getScopeTargets(selected, scope).forEach(e => e.classList.add('di-selected'));\n } else {\n selected.classList.add('di-selected');\n }\n return () => {\n document.querySelectorAll('.di-selected').forEach(e => e.classList.remove('di-selected'));\n };\n }, [selected, scope]);\n\n // ─── 应用改动到 DOM ───────────────────────────────────────────\n function applyToDOM(changes: { prop: string; val: string }[]) {\n const el = selectedRef.current;\n if (!el) return;\n const targets = getScopeTargets(el, scope);\n changes.forEach(({ prop, val }) => {\n targets.forEach(t => (t as HTMLElement).style.setProperty(prop, val));\n });\n }\n\n function onDragStart(e: React.MouseEvent) {\n if ((e.target as Element).closest('button, input, textarea')) return;\n e.preventDefault();\n dragRef.current = { sx: e.clientX, sy: e.clientY, sl: panelPos.left, st: panelPos.top };\n const onMove = (ev: MouseEvent) => {\n if (!dragRef.current) return;\n const left = Math.max(0, Math.min(window.innerWidth - 380, dragRef.current.sl + ev.clientX - dragRef.current.sx));\n const top = Math.max(0, Math.min(window.innerHeight - 60, dragRef.current.st + ev.clientY - dragRef.current.sy));\n setPanelPos({ left, top });\n };\n const onUp = () => {\n dragRef.current = null;\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n }\n\n function handleAddToken(val: string, cssProp?: string) {\n setAddTokenModal({ value: val, cssProp });\n }\n\n function handleTokenConfirm(cssVar: string, val: string, usage: string) {\n setPendingNewToken({ cssVar, value: val, usage });\n onTokenMapUpdate({ [val]: cssVar });\n (tokenLabels as Record<string, string>)[cssVar] = cssVar.replace('--color-', '').replace(/-/g, '·');\n }\n\n function liveApply(prop: string, val: string) {\n if (prop === 'gap' && gapTargetRef.current) {\n if (isNegativeSpacingValue(val)) return;\n gapTargetRef.current.style.setProperty('gap', val);\n } else {\n applyToDOM([{ prop, val }]);\n }\n }\n\n function liveApplyMany(changes: { prop: string; val: string }[]) {\n applyToDOM(changes);\n }\n\n function applyTypographyStyle(style: TypographyStyleOption) {\n setPendingFontSize(style.value);\n setPendingFontWeight(style.fontWeight);\n setPendingTextColor(style.color);\n setTypographyCustomMode(false);\n liveApplyMany([\n { prop: 'font-size', val: style.value },\n { prop: 'font-weight', val: style.fontWeight },\n { prop: 'color', val: style.color },\n ]);\n }\n\n function applyContainerStyle(style: ContainerStyleOption) {\n setPendingColors(prev => ({ ...prev, 'background-color': style.backgroundColor }));\n setPendingBorderColor(style.borderColor);\n setPendingBorderWidth(style.borderWidth);\n setPendingBorderStyle(style.borderStyle);\n setPendingRadius(style.borderRadius);\n setCustomRadius('');\n setContainerCustomMode(false);\n liveApplyMany([\n { prop: 'background-color', val: style.backgroundColor },\n { prop: 'border-color', val: style.borderColor },\n { prop: 'border-width', val: style.borderWidth },\n { prop: 'border-style', val: style.borderStyle },\n { prop: 'border-radius', val: style.borderRadius },\n ]);\n }\n\n function getPendingEntries() {\n const el = selectedRef.current;\n if (!el) return null;\n const fixedMinHeight = pendingHeight && pendingHeightMode === 'fixed'\n ? `${getOneLineHugHeight(el) || Number.parseFloat(pendingHeight) || 0}px`\n : '';\n\n const pending: [string, string][] = [\n ...Object.entries(pendingColors),\n ...(pendingTextColor ? [['color', pendingTextColor] as [string, string]] : []),\n ...(pendingRadius ? [['border-radius', pendingRadius] as [string, string]] : []),\n ...(pendingShadow ? [['box-shadow', pendingShadow] as [string, string]] : []),\n ...(pendingBorderColor ? [['border-color', pendingBorderColor] as [string, string]] : []),\n ...(pendingBorderWidth ? [['border-width', pendingBorderWidth] as [string, string]] : []),\n ...(pendingBorderStyle ? [['border-style', pendingBorderStyle] as [string, string]] : []),\n ...(pendingFontSize ? [['font-size', pendingFontSize] as [string, string]] : []),\n ...(pendingFontWeight ? [['font-weight', pendingFontWeight] as [string, string]] : []),\n ...(pendingPadding ? [['padding', pendingPadding] as [string, string]] : []),\n ...(pendingMargin ? [['margin', pendingMargin] as [string, string]] : []),\n ...(pendingGap ? [['gap', pendingGap] as [string, string]] : []),\n ...(pendingTranslate ? [['translate', formatTranslate(pendingTranslate)] as [string, string]] : []),\n ...(pendingWidth ? [['width', pendingWidth] as [string, string]] : []),\n ...(pendingHeight ? [['height', pendingHeight] as [string, string]] : []),\n ...(fixedMinHeight ? [['min-height', fixedMinHeight] as [string, string]] : []),\n ...(pendingHeight && pendingHeightMode === 'fixed' ? [['max-height', pendingHeight] as [string, string]] : []),\n ...(pendingJustifyContent ? [['justify-content', pendingJustifyContent] as [string, string]] : []),\n ...(pendingAlignItems ? [['align-items', pendingAlignItems] as [string, string]] : []),\n ];\n\n const gapEntry = pending.find(([p]) => p === 'gap');\n const nonGapPending = pending.filter(([p]) => p !== 'gap');\n const selector = getSelectorForScope(el, scope);\n const entries: { selector: string; changes: { prop: string; val: string; from?: string }[]; note?: string }[] = [];\n\n if (gapEntry && gapTargetRef.current && gapTargetRef.current !== el) {\n entries.push({\n selector: getSelectorForScope(gapTargetRef.current, 'current'),\n changes: [{ prop: 'gap', from: gapVal, val: gapEntry[1] }],\n });\n }\n\n entries.push({\n selector,\n changes: (gapEntry && gapTargetRef.current !== el ? nonGapPending : pending)\n .map(([prop, val]) => ({ prop, from: getOriginalValueForProp(prop), val })),\n note: note || undefined,\n });\n\n return {\n el,\n selector,\n pending,\n entries,\n };\n }\n\n function getDisplayPosition(translate: { x: number; y: number }) {\n return {\n x: positionBaseVal.x + translate.x,\n y: positionBaseVal.y + translate.y,\n };\n }\n\n function getTranslateFromDisplayPosition(pos: { x: number; y: number }) {\n return {\n x: pos.x - positionBaseVal.x,\n y: pos.y - positionBaseVal.y,\n };\n }\n\n function setTranslateAxis(axis: 'x' | 'y', value: string) {\n const base = getDisplayPosition(pendingTranslate ?? translateVal);\n const nextValue = getNumericCssValue(normalizeCssSize(value));\n const next = getTranslateFromDisplayPosition({ ...base, [axis]: nextValue });\n setPendingTranslate(next);\n liveApply('translate', formatTranslate(next));\n }\n\n function getAlignmentLabel(prop: AlignProp, value: string): string {\n const options = prop === 'justify-content' ? JUSTIFY_OPTIONS : ALIGN_ITEMS_OPTIONS;\n return options.find(option => option.value === value)?.label ?? value;\n }\n\n function setAlignment(prop: AlignProp, value: string) {\n if (prop === 'justify-content') setPendingJustifyContent(value);\n else setPendingAlignItems(value);\n liveApply(prop, value);\n }\n\n function stepTranslateAxis(axis: 'x' | 'y', delta: number) {\n const base = getDisplayPosition(pendingTranslate ?? translateVal);\n setTranslateAxis(axis, `${base[axis] + delta}px`);\n }\n\n function stepSize(prop: SizeAxis, value: string, delta: number) {\n const fallback = getNumericCssValue(prop === 'width' ? pendingWidth || widthVal : pendingHeight || heightVal);\n const next = `${Math.round(getNumericCssValue(value, fallback) + delta)}px`;\n setSizeDraft(prev => ({ ...prev, [prop]: formatLengthControlValue(next) }));\n setSize(prop, next, 'fixed');\n }\n\n function setCustomShadowPart(part: keyof ShadowParts, value: string) {\n const current = parseShadowParts(pendingShadow || shadowVal);\n const nextParts = {\n ...current,\n [part]: part === 'color' ? value : normalizeShadowLengthInput(value),\n };\n const next = buildShadowValue(nextParts);\n setShadowCustomMode(true);\n setPendingShadow(next);\n liveApply('box-shadow', next);\n }\n\n function stepCustomShadowPart(part: Exclude<keyof ShadowParts, 'color'>, delta: number) {\n const current = parseShadowParts(pendingShadow || shadowVal);\n const next = `${Math.round(getNumericCssValue(current[part]) + delta)}px`;\n setCustomShadowPart(part, next);\n }\n\n function setSize(prop: SizeAxis, val: string, mode: SizeMode = 'fixed') {\n const current = prop === 'width' ? widthVal : heightVal;\n const next = normalizeCssSize(val);\n const selectedEl = selectedRef.current;\n const cssValue = prop === 'height' && mode === 'fixed'\n ? clampHeightToOneLine(next, selectedEl)\n : mode === 'fixed' ? next : sizeValueForMode(mode, current);\n if (prop === 'width') {\n setPendingWidth(cssValue);\n setPendingWidthMode(mode);\n } else {\n setPendingHeight(cssValue);\n setPendingHeightMode(mode);\n }\n if (prop === 'height' && mode === 'fixed') {\n const minHeight = `${getOneLineHugHeight(selectedEl) || Number.parseFloat(cssValue) || 0}px`;\n liveApplyMany([\n { prop: 'height', val: cssValue },\n { prop: 'min-height', val: minHeight },\n { prop: 'max-height', val: cssValue },\n ]);\n return;\n }\n if (prop === 'height') {\n const el = selectedRef.current as HTMLElement | null;\n if (el) {\n const targets = getScopeTargets(el, scope);\n targets.forEach(t => (t as HTMLElement).style.removeProperty('min-height'));\n targets.forEach(t => (t as HTMLElement).style.removeProperty('max-height'));\n }\n }\n liveApply(prop, cssValue);\n }\n\n function getComponentTargets(): Element[] {\n const el = selectedRef.current;\n return el ? getScopeTargets(el, scope) : [];\n }\n\n function getComponentContentTargets(): Element[] {\n const el = selectedRef.current;\n return el ? [el] : [];\n }\n\n function updateComponentText(value: string) {\n setComponentTextDraft(value);\n setPendingComponentText(value === componentTextVal ? null : value);\n getComponentContentTargets().forEach(target => { target.textContent = value; });\n }\n\n function updateComponentTextSlot(slot: ComponentTextSlotDefinition, value: string) {\n setComponentTextSlotDrafts(prev => ({ ...prev, [slot.key]: value }));\n setPendingComponentTextSlots(prev => {\n const next = { ...prev };\n if (value === componentTextSlotVals[slot.key]) {\n delete next[slot.key];\n } else {\n next[slot.key] = value;\n }\n return next;\n });\n getComponentContentTargets().forEach(target => {\n const slotEl = getComponentSlotElement(target, slot);\n if (slotEl) slotEl.textContent = value;\n });\n }\n\n function updateComponentVariant(variant: ButtonVariantKey) {\n const targets = getComponentTargets();\n if (variant === componentVariantVal) {\n setPendingComponentVariant('');\n setButtonVariantOnTargets(targets, componentVariantVal, componentVariantClassVal);\n return;\n }\n setPendingComponentVariant(variant);\n setButtonVariantOnTargets(targets, variant);\n }\n\n function updateComponentSize(size: ButtonSizeKey) {\n const meta = getInspectorComponentMeta(selectedRef.current);\n const capability = getComponentCapability(meta);\n const targets = getComponentTargets();\n setPendingComponentSize(size === componentSizeVal ? '' : size);\n if (size === componentSizeVal) {\n clearButtonSizeOnTargets(targets);\n clearIconSizeOnTargets(targets);\n clearBadgeSizeOnTargets(targets);\n return;\n }\n if (capability?.sizeKind === 'icon') {\n setIconSizeOnTargets(targets, size);\n return;\n }\n if (capability?.sizeKind === 'badge') {\n setBadgeSizeOnTargets(targets, size);\n return;\n }\n setButtonSizeOnTargets(targets, size);\n }\n\n function updateIconColor(color: IconColorKey) {\n const targets = getComponentTargets();\n setPendingIconColor(color === iconColorVal ? '' : color);\n if (color === iconColorVal) {\n clearIconColorOnTargets(targets);\n return;\n }\n setIconColorOnTargets(targets, color);\n }\n\n function updateBadgeStatus(status: BadgeStatusKey) {\n const targets = getComponentTargets();\n if (status === badgeStatusVal) {\n setPendingBadgeStatus('');\n setBadgeStatusOnTargets(targets, badgeStatusVal, badgeStatusClassVal);\n return;\n }\n setPendingBadgeStatus(status);\n setBadgeStatusOnTargets(targets, status);\n }\n\n function updateCardVariant(variant: CardVariantKey) {\n const targets = getComponentTargets();\n if (variant === cardVariantVal) {\n setPendingCardVariant('');\n setCardVariantOnTargets(targets, cardVariantVal, cardVariantClassVal);\n return;\n }\n setPendingCardVariant(variant);\n setCardVariantOnTargets(targets, variant);\n }\n\n // ─── 保存并修改 ───────────────────────────────────────────────\n function handleSave() {\n const payload = getPendingEntries();\n if (!payload) return;\n const { el, pending, entries } = payload;\n\n if (pending.length === 0 && !note && !newTokenName) {\n setSaveMsg('无改动');\n setTimeout(() => setSaveMsg(''), 1500);\n return;\n }\n\n applyToDOM(pending.map(([prop, val]) => ({ prop, val })));\n\n if (!canPersistSelector(el, scope)) {\n setSaveMsg('需选中具体类名');\n setTimeout(() => setSaveMsg(''), 2000);\n return;\n }\n\n fetch(endpoints.applyCss, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ entries }),\n })\n .then(r => r.json())\n .then(r => {\n setSaveMsg(r.ok ? '已保存 ✓' : '保存失败');\n setTimeout(() => setSaveMsg(''), 2000);\n })\n .catch(() => { setSaveMsg('保存失败'); setTimeout(() => setSaveMsg(''), 2000); });\n }\n\n async function copyTextToClipboard(text: string): Promise<boolean> {\n if (navigator.clipboard?.writeText) {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n // 异步请求返回后常常丢失用户激活态,继续尝试 execCommand 兜底\n }\n }\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;opacity:0;top:0;left:0';\n document.body.appendChild(ta);\n ta.select();\n const copied = document.execCommand('copy');\n document.body.removeChild(ta);\n return copied;\n }\n\n function buildAiTaskPrompt(params: {\n entryId?: string;\n pageLabel: string;\n targetLabel: string;\n selector: string;\n scopeLabel: string;\n changes: { prop: string; from: string; val: string }[];\n note?: string;\n }) {\n const changes = params.changes\n .map((change, index) => `${index + 1}. ${getChangeLabel(change.prop)}:${formatStoredChangeRecordValue(change.prop, change.from)} → ${formatStoredChangeRecordValue(change.prop, change.val)}`)\n .join('\\n');\n const latestHint = params.entryId\n ? `优先处理 id = ${params.entryId} 这条记录。`\n : '这条任务来自 DevInspector 当前选中元素。';\n return [\n 'DevInspector 样式任务',\n `页面:${params.pageLabel}`,\n `元素:${params.targetLabel}`,\n `范围:${params.scopeLabel}`,\n `选择器:${params.selector}`,\n '改动:',\n changes || '无样式改动',\n ...(params.note ? ['补充:', params.note] : []),\n '定位提示:',\n latestHint,\n '请优先定位该选择器对应的组件或样式源码,判断是否应固化为正式组件样式;不要手改 dist。',\n ].join('\\n');\n }\n\n function buildAiDraftBasketPrompt(drafts: LocalDraftEntry[]) {\n const sections = drafts\n .sort((a, b) => a.updatedAt - b.updatedAt)\n .map((draft, index) => {\n const changes = draft.changes\n .map((change, changeIndex) => `${changeIndex + 1}. ${getChangeLabel(change.prop)}:${formatStoredChangeRecordValue(change.prop, change.from)} → ${formatStoredChangeRecordValue(change.prop, change.val)}`)\n .join('\\n');\n return [\n `${index + 1}. 元素:${draft.targetLabel}`,\n `范围:${draft.scopeLabel}`,\n `选择器:${draft.selector}`,\n '改动:',\n changes || '无样式改动',\n ].join('\\n');\n })\n .join('\\n\\n');\n return [\n 'DevInspector 样式任务',\n `页面:${document.title || '当前页面'}(${window.location.href})`,\n `待处理对象:${drafts.length}`,\n sections,\n ...(note ? ['补充:', note] : []),\n '定位提示:',\n '这些内容来自 DevInspector 本次修改内容,请按对象逐一定位源码,判断是否应固化为组件样式、token 或局部覆盖;不要手改 dist。',\n ].join('\\n');\n }\n\n function handleSubmitToAi() {\n const draftEntries = Object.values(localDraftsRef.current);\n if (draftEntries.length > 0) {\n const prompt = buildAiDraftBasketPrompt(draftEntries);\n copyTextToClipboard(prompt)\n .then((copied) => {\n setSubmitMsg(copied ? '任务文本已复制 ✓' : '复制失败');\n setTimeout(() => setSubmitMsg(''), copied ? 2200 : 1800);\n })\n .catch(() => {\n setSubmitMsg('复制失败');\n setTimeout(() => setSubmitMsg(''), 1800);\n });\n return;\n }\n\n const payload = getPendingEntries();\n if (!payload) return;\n const { el, pending, selector } = payload;\n const componentMeta = getInspectorComponentMeta(el);\n const changes = getPendingChangeRecords();\n if (pending.length === 0 && !note && !componentMeta) {\n setSubmitMsg('先改点样式或写备注');\n setTimeout(() => setSubmitMsg(''), 1800);\n return;\n }\n\n const hasOnlyInstanceContentPending = componentMeta\n && (pendingComponentText !== null || Object.keys(pendingComponentTextSlots).length > 0)\n && !pendingComponentVariant\n && !pendingComponentSize\n && !pendingIconColor\n && !pendingBadgeStatus\n && !pendingCardVariant\n && pending.length === 0;\n const scopeLabel = hasOnlyInstanceContentPending\n ? '当前元素'\n : scope === 'current' ? '当前元素' : '相同元素';\n const targetLabel = getTargetDisplayLabel(el, componentMeta);\n const stableSelector = componentMeta && hasComponentAttrPending && componentSelectorVal\n ? componentSelectorVal\n : selector;\n\n const prompt = buildAiTaskPrompt({\n pageLabel: `${document.title || '当前页面'}(${window.location.href})`,\n targetLabel,\n selector: stableSelector,\n scopeLabel,\n changes,\n note,\n });\n copyTextToClipboard(prompt)\n .then((copied) => {\n setSubmitMsg(copied ? '任务文本已复制 ✓' : '复制失败');\n setTimeout(() => setSubmitMsg(''), copied ? 2200 : 1800);\n })\n .catch(() => {\n setSubmitMsg('复制失败');\n setTimeout(() => setSubmitMsg(''), 1800);\n });\n }\n\n function handleDeleteStyleIntent(intentId: string, selector?: string, prop?: string) {\n fetch(endpoints.deleteStyleIntent, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ id: intentId, selector, prop }),\n })\n .then(async response => {\n let body: any = null;\n try {\n body = await response.json();\n } catch {\n body = null;\n }\n return {\n httpOk: response.ok,\n ...(body ?? {}),\n };\n })\n .then(r => {\n if (r.ok) {\n setStyleIntentSummary(formatStyleIntentSummary(r));\n setSubmitMsg(prop ? '已删除属性' : '已删除对象');\n } else {\n const errorMsg = !r.httpOk\n ? '删除失败:本地服务异常'\n : `删除失败${r.error ? `:${String(r.error)}` : ''}`;\n setSubmitMsg(errorMsg);\n }\n setTimeout(() => setSubmitMsg(''), 1800);\n })\n .catch(() => {\n setSubmitMsg('删除失败:请刷新页面或重启本地 dev');\n setTimeout(() => setSubmitMsg(''), 1800);\n });\n }\n\n function getOriginalValueForProp(prop: string) {\n if (prop === 'font-size') return fontSizeVal;\n if (prop === 'font-weight') return fontWeightVal;\n if (prop === 'color') return getDisplayLabel(textColorVal, tokenMap, colorPalette, tokenLabels).label;\n if (prop === 'background-color') return getDisplayLabel(colors[prop] ?? '', tokenMap, colorPalette, tokenLabels).label;\n if (prop === 'border-color') return getDisplayLabel(borderColorVal, tokenMap, colorPalette, tokenLabels).label;\n if (prop === 'border-width') return borderWidthVal;\n if (prop === 'border-style') return borderStyleVal;\n if (prop === 'border-radius') return radiusVal;\n if (prop === 'box-shadow') return getShadowChangeDisplay(shadowVal, shadowAuthoredVal, shadowTokens);\n if (prop === 'padding') return paddingVal;\n if (prop === 'margin') return marginVal;\n if (prop === 'gap') return gapVal;\n if (prop === 'translate') return formatTranslate(translateVal);\n if (prop === 'width') return widthVal;\n if (prop === 'height') return heightVal;\n if (prop === 'min-height') return `${getOneLineHugHeight(selectedRef.current) || Number.parseFloat(heightVal) || 0}px`;\n if (prop === 'max-height') return heightVal;\n if (prop === 'justify-content') return getAlignmentLabel('justify-content', justifyVal);\n if (prop === 'align-items') return getAlignmentLabel('align-items', alignItemsVal);\n return '';\n }\n\n function formatChangeRecordValue(prop: string, value: string): string {\n if (prop === 'padding' || prop === 'margin') {\n return getSpaceRecordSummary(prop, value) || '无';\n }\n if (prop === 'gap') {\n return getSpaceRecordSummary('gap', value) || '无';\n }\n if (prop === 'width' || prop === 'height' || prop === 'min-height' || prop === 'max-height') {\n return formatSizeDisplay(value);\n }\n if (prop === 'justify-content') return getAlignmentLabel('justify-content', value);\n if (prop === 'align-items') return getAlignmentLabel('align-items', value);\n return value;\n }\n\n function formatStoredChangeRecordValue(prop: string, value: string): string {\n if (prop === 'padding' || prop === 'margin' || prop === 'gap') {\n return formatStoredSpaceRecordValue(value);\n }\n return value;\n }\n\n function normalizeChangeRecordValue(prop: string, value: string): string {\n const formatted = formatChangeRecordValue(prop, value).trim();\n if (!formatted || formatted === '无' || formatted === 'none') return 'empty';\n if (isZeroLengthValue(formatted)) return '0';\n return formatted.replace(/\\s+/g, ' ');\n }\n\n function getPendingChangeRecords() {\n const records: { prop: string; from: string; val: string }[] = [];\n const add = (prop: string, from: string, val: string) => {\n if (normalizeChangeRecordValue(prop, from) === normalizeChangeRecordValue(prop, val)) return;\n records.push({\n prop,\n from: formatChangeRecordValue(prop, from),\n val: formatChangeRecordValue(prop, val),\n });\n };\n if (pendingFontSize) add('font-size', fontSizeVal, pendingFontSize);\n if (pendingFontWeight) add('font-weight', fontWeightVal, pendingFontWeight);\n if (pendingTextColor) add('color', getDisplayLabel(textColorVal, tokenMap, colorPalette, tokenLabels).label, getDisplayLabel(pendingTextColor, tokenMap, colorPalette, tokenLabels).label);\n for (const [prop, val] of Object.entries(pendingColors)) {\n add(prop, getDisplayLabel(colors[prop] ?? '', tokenMap, colorPalette, tokenLabels).label, getDisplayLabel(val, tokenMap, colorPalette, tokenLabels).label);\n }\n if (pendingBorderColor) add('border-color', getDisplayLabel(borderColorVal, tokenMap, colorPalette, tokenLabels).label, getDisplayLabel(pendingBorderColor, tokenMap, colorPalette, tokenLabels).label);\n if (pendingBorderWidth) add('border-width', borderWidthVal, pendingBorderWidth);\n if (pendingBorderStyle) add('border-style', borderStyleVal, pendingBorderStyle);\n if (pendingRadius) add('border-radius', radiusVal, pendingRadius);\n if (pendingShadow) add('box-shadow', getShadowChangeDisplay(shadowVal, shadowAuthoredVal, shadowTokens), getShadowChangeDisplay(pendingShadow, pendingShadow, shadowTokens));\n if (pendingPadding) add('padding', paddingVal, pendingPadding);\n if (pendingMargin) add('margin', marginVal, pendingMargin);\n if (pendingGap) add('gap', gapVal, pendingGap);\n if (pendingTranslate) add('translate', formatPositionRecord(getDisplayPosition(translateVal)), formatPositionRecord(getDisplayPosition(pendingTranslate)));\n if (pendingWidth) add('width', widthVal, pendingWidth);\n if (pendingHeight) add('height', heightVal, pendingHeight);\n if (pendingJustifyContent) add('justify-content', justifyVal, pendingJustifyContent);\n if (pendingAlignItems) add('align-items', alignItemsVal, pendingAlignItems);\n if (pendingComponentText !== null && pendingComponentText !== componentTextVal) {\n add('component-text', componentTextVal || '空', pendingComponentText || '空');\n }\n for (const [slotKey, nextValue] of Object.entries(pendingComponentTextSlots)) {\n const fromValue = componentTextSlotVals[slotKey] ?? '空';\n add(`component-slot:${slotKey}`, fromValue || '空', nextValue || '空');\n }\n if (pendingComponentVariant) {\n add('component-variant', componentVariantVal, pendingComponentVariant);\n }\n if (pendingComponentSize) {\n add('component-size', componentSizeVal.toUpperCase(), pendingComponentSize.toUpperCase());\n }\n if (pendingIconColor) {\n add('component-color', iconColorVal, pendingIconColor);\n }\n if (pendingBadgeStatus) {\n add('component-status', badgeStatusVal, pendingBadgeStatus);\n }\n if (pendingCardVariant) {\n const fromLabel = CARD_VARIANT_OPTIONS.find(option => option.key === cardVariantVal)?.label ?? cardVariantVal;\n const toLabel = CARD_VARIANT_OPTIONS.find(option => option.key === pendingCardVariant)?.label ?? pendingCardVariant;\n add('component-variant', fromLabel, toLabel);\n }\n if (pendingNewToken) add('token', '新增', `${pendingNewToken.cssVar}: ${pendingNewToken.value}`);\n return records;\n }\n\n useEffect(() => {\n const el = selectedRef.current;\n if (!el) return;\n const changes = getPendingChangeRecords();\n const info = getDraftTargetInfo(el);\n const hasCurrentPendingState = Object.keys(pendingColors).length > 0\n || !!pendingTextColor\n || !!pendingRadius\n || !!pendingShadow\n || !!pendingBorderColor\n || !!pendingBorderWidth\n || !!pendingBorderStyle\n || !!pendingFontSize\n || !!pendingFontWeight\n || !!pendingPadding\n || !!pendingMargin\n || !!pendingGap\n || !!pendingTranslate\n || !!pendingWidth\n || !!pendingHeight\n || !!pendingJustifyContent\n || !!pendingAlignItems\n || pendingComponentText !== null\n || Object.keys(pendingComponentTextSlots).length > 0\n || !!pendingComponentVariant\n || !!pendingComponentSize\n || !!pendingIconColor\n || !!pendingBadgeStatus\n || !!pendingCardVariant\n || !!pendingNewToken;\n if (changes.length === 0) {\n if (hasCurrentPendingState) removeLocalDraftEntry(info.key);\n return;\n }\n setLocalDrafts(prev => {\n const existing = prev[info.key];\n const existingByProp = new Map(existing?.changes.map(change => [change.prop, change]) ?? []);\n const mergedByProp = new Map<string, LocalDraftChange>();\n existing?.changes.forEach(change => mergedByProp.set(change.prop, change));\n changes.forEach(change => {\n const previous = existingByProp.get(change.prop);\n mergedByProp.set(change.prop, {\n ...change,\n from: previous?.from ?? change.from,\n });\n });\n const mergedChanges = Array.from(mergedByProp.values());\n const comparableExisting = existing\n ? {\n key: existing.key,\n selector: existing.selector,\n targetLabel: existing.targetLabel,\n scopeLabel: existing.scopeLabel,\n changes: existing.changes,\n }\n : null;\n const comparableNext = { ...info, changes: mergedChanges };\n if (JSON.stringify(comparableExisting) === JSON.stringify(comparableNext)) return prev;\n const nextEntry: LocalDraftEntry = {\n ...info,\n changes: mergedChanges,\n updatedAt: Date.now(),\n };\n return { ...prev, [info.key]: nextEntry };\n });\n });\n\n function getChangeLabel(prop: string) {\n const map: Record<string, string> = {\n 'font-size': '字号',\n 'font-weight': '字重',\n 'color': '文字色',\n 'background-color': '背景色',\n 'border-color': '边框色',\n 'border-width': '边框粗细',\n 'border-style': '边框样式',\n 'border-radius': '圆角',\n 'box-shadow': '阴影',\n 'padding': '内边距',\n 'margin': '外边距',\n 'gap': '元素间距',\n 'translate': '位置',\n 'width': '宽度',\n 'height': '高度',\n 'min-height': '最小高度',\n 'max-height': '最大高度',\n 'justify-content': '水平对齐',\n 'align-items': '垂直对齐',\n 'component-text': '组件文案',\n 'component-variant': componentCapability?.variantKind === 'card' ? '组件展示' : '组件变体',\n 'component-size': '组件尺寸',\n 'component-color': '组件颜色',\n 'component-status': '标签状态',\n };\n if (prop.startsWith('component-slot:')) {\n const slotKey = prop.replace('component-slot:', '');\n const slotLabel = componentCapability?.textSlots?.find(slot => slot.key === slotKey)?.label ?? slotKey;\n return `组件内容 · ${slotLabel}`;\n }\n return map[prop] || prop;\n }\n\n function clearPendingForProp(prop: string) {\n if (prop === 'font-size') setPendingFontSize('');\n else if (prop === 'font-weight') setPendingFontWeight('');\n else if (prop === 'color') setPendingTextColor('');\n else if (prop === 'background-color') {\n setPendingColors(prev => {\n const next = { ...prev };\n delete next[prop];\n return next;\n });\n } else if (prop === 'border-color') setPendingBorderColor('');\n else if (prop === 'border-width') setPendingBorderWidth('');\n else if (prop === 'border-style') setPendingBorderStyle('');\n else if (prop === 'border-radius') setPendingRadius('');\n else if (prop === 'box-shadow') {\n setPendingShadow('');\n setShadowCustomMode(false);\n } else if (prop === 'padding') setPendingPadding('');\n else if (prop === 'margin') setPendingMargin('');\n else if (prop === 'gap') setPendingGap('');\n else if (prop === 'translate') setPendingTranslate(null);\n else if (prop === 'justify-content') setPendingJustifyContent('');\n else if (prop === 'align-items') setPendingAlignItems('');\n else if (prop === 'width') {\n setPendingWidth('');\n setPendingWidthMode(null);\n setSizeDraft(prev => {\n const next = { ...prev };\n delete next.width;\n return next;\n });\n } else if (prop === 'height' || prop === 'min-height' || prop === 'max-height') {\n setPendingHeight('');\n setPendingHeightMode(null);\n setSizeDraft(prev => {\n const next = { ...prev };\n delete next.height;\n return next;\n });\n } else if (prop === 'component-text') {\n setPendingComponentText(null);\n setComponentTextDraft(componentTextVal);\n getComponentContentTargets().forEach(target => { target.textContent = componentTextVal; });\n } else if (prop.startsWith('component-slot:')) {\n const slotKey = prop.replace('component-slot:', '');\n setPendingComponentTextSlots(prev => {\n const next = { ...prev };\n delete next[slotKey];\n return next;\n });\n setComponentTextSlotDrafts(prev => ({ ...prev, [slotKey]: componentTextSlotVals[slotKey] ?? '' }));\n const slot = componentCapability?.textSlots?.find(item => item.key === slotKey);\n if (slot) {\n getComponentContentTargets().forEach(target => {\n const slotEl = getComponentSlotElement(target, slot);\n if (slotEl) slotEl.textContent = componentTextSlotVals[slot.key] ?? '';\n });\n }\n } else if (prop === 'component-variant') {\n setPendingComponentVariant('');\n setPendingCardVariant('');\n } else if (prop === 'component-size') {\n setPendingComponentSize('');\n } else if (prop === 'component-color') {\n setPendingIconColor('');\n } else if (prop === 'component-status') {\n setPendingBadgeStatus('');\n }\n }\n\n function getDraftSelectorTargets(selector: string): Element[] {\n try {\n return Array.from(document.querySelectorAll(selector));\n } catch {\n return [];\n }\n }\n\n function resetDraftChangeOnPage(draft: LocalDraftEntry, change: LocalDraftChange) {\n const isCurrentDraft = selectedRef.current ? getDraftTargetInfo(selectedRef.current).key === draft.key : false;\n if (isCurrentDraft) clearPendingForProp(change.prop);\n\n const targets = getDraftSelectorTargets(draft.selector);\n if (change.prop === 'component-text') {\n targets.forEach(target => { target.textContent = change.from === '空' ? '' : change.from; });\n return;\n }\n if (change.prop.startsWith('component-slot:')) return;\n if (change.prop.startsWith('component-')) {\n if (isCurrentDraft) {\n const currentTargets = getComponentTargets();\n if (change.prop === 'component-variant') {\n setButtonVariantOnTargets(currentTargets, componentVariantVal, componentVariantClassVal);\n setCardVariantOnTargets(currentTargets, cardVariantVal, cardVariantClassVal);\n } else if (change.prop === 'component-size') {\n clearButtonSizeOnTargets(currentTargets);\n clearIconSizeOnTargets(currentTargets);\n clearBadgeSizeOnTargets(currentTargets);\n } else if (change.prop === 'component-color') {\n clearIconColorOnTargets(currentTargets);\n } else if (change.prop === 'component-status') {\n setBadgeStatusOnTargets(currentTargets, badgeStatusVal, badgeStatusClassVal);\n }\n }\n return;\n }\n\n targets.forEach(target => {\n const hEl = target as HTMLElement;\n hEl.style.removeProperty(change.prop);\n if (change.prop === 'height') {\n hEl.style.removeProperty('min-height');\n hEl.style.removeProperty('max-height');\n }\n });\n if (change.prop === 'gap' && isCurrentDraft && gapTargetRef.current) {\n gapTargetRef.current.style.removeProperty('gap');\n }\n }\n\n function handleDeleteLocalDraft(key: string) {\n const draft = localDraftsRef.current[key];\n if (draft) draft.changes.forEach(change => resetDraftChangeOnPage(draft, change));\n removeLocalDraftEntry(key);\n }\n\n function handleResetLocalDraftChange(key: string, prop: string) {\n const draft = localDraftsRef.current[key];\n const change = draft?.changes.find(item => item.prop === prop);\n if (!draft || !change) return;\n resetDraftChangeOnPage(draft, change);\n setLocalDrafts(prev => {\n const current = prev[key];\n if (!current) return prev;\n const remaining = current.changes.filter(item => item.prop !== prop);\n const next = { ...prev };\n if (remaining.length === 0) {\n delete next[key];\n } else {\n next[key] = { ...current, changes: remaining, updatedAt: Date.now() };\n }\n return next;\n });\n }\n\n function isPropPending(prop: string): boolean {\n if (prop === 'font-size') return !!pendingFontSize;\n if (prop === 'font-weight') return !!pendingFontWeight;\n if (prop === 'color') return !!pendingTextColor;\n if (prop === 'box-shadow') return !!pendingShadow;\n if (prop === 'padding') return !!pendingPadding;\n if (prop === 'margin') return !!pendingMargin;\n if (prop === 'gap') return !!pendingGap;\n if (prop === 'translate') return !!pendingTranslate;\n if (prop === 'width') return !!pendingWidth;\n if (prop === 'height' || prop === 'min-height' || prop === 'max-height') return !!pendingHeight;\n if (prop === 'justify-content') return !!pendingJustifyContent;\n if (prop === 'align-items') return !!pendingAlignItems;\n return false;\n }\n\n function refreshSectionComputedValues(section: InspectorSectionKey) {\n const el = selectedRef.current;\n if (!el) return;\n const cs = getComputedStyle(el);\n if (section === 'text') {\n setFontSizeVal(cs.fontSize.trim());\n setFontWeightVal(cs.fontWeight.trim());\n setTextColorVal(normalizeColor(cs.color.trim()));\n setFontSizeCustomDraft(cs.fontSize.trim());\n return;\n }\n if (section === 'layout') {\n const nextTranslate = parseTranslate(cs.translate);\n setTranslateVal(nextTranslate);\n setPositionBaseVal(getPositionBase(el, nextTranslate));\n setWidthVal(cs.width.trim());\n setHeightVal(cs.height.trim());\n setWidthMode(inferSizeMode(el, 'width', cs.width.trim()));\n setHeightMode(inferSizeMode(el, 'height', cs.height.trim()));\n setJustifyVal(cs.justifyContent.trim() || 'normal');\n setAlignItemsVal(cs.alignItems.trim() || 'normal');\n return;\n }\n if (section === 'shadow') {\n const shadowComputed = cs.boxShadow.trim() || 'none';\n setShadowVal(shadowComputed === 'rgba(0, 0, 0, 0) 0px 0px 0px 0px' ? 'none' : shadowComputed);\n setShadowAuthoredVal(getAuthoredStyleValue(el, 'box-shadow'));\n return;\n }\n const normSpace = (v: string) => {\n const parts = v.trim().split(' ');\n return parts.every(p => p === parts[0]) ? parts[0] : v.trim();\n };\n setPaddingVal(normSpace(`${cs.paddingTop} ${cs.paddingRight} ${cs.paddingBottom} ${cs.paddingLeft}`));\n setMarginVal(normSpace(`${cs.marginTop} ${cs.marginRight} ${cs.marginBottom} ${cs.marginLeft}`));\n const g = cs.gap.trim();\n setGapVal(g === 'normal' ? '0px' : g);\n }\n\n function handleResetSection(section: InspectorSectionKey) {\n const el = selectedRef.current;\n if (!el) return;\n const props = SECTION_RESET_PROPS[section];\n const currentKey = getDraftTargetInfo(el).key;\n const draft = localDraftsRef.current[currentKey];\n const draftChanges = draft?.changes.filter(change => props.includes(change.prop)) ?? [];\n draftChanges.forEach(change => resetDraftChangeOnPage(draft!, change));\n if (draftChanges.length > 0) {\n setLocalDrafts(prev => {\n const current = prev[currentKey];\n if (!current) return prev;\n const remaining = current.changes.filter(change => !props.includes(change.prop));\n const next = { ...prev };\n if (remaining.length === 0) {\n delete next[currentKey];\n } else {\n next[currentKey] = { ...current, changes: remaining, updatedAt: Date.now() };\n }\n return next;\n });\n }\n\n const targets = getScopeTargets(el, scope);\n props.forEach(prop => {\n if (isPropPending(prop)) {\n targets.forEach(target => {\n const hEl = target as HTMLElement;\n hEl.style.removeProperty(prop);\n if (prop === 'height') {\n hEl.style.removeProperty('min-height');\n hEl.style.removeProperty('max-height');\n }\n });\n if (prop === 'gap' && gapTargetRef.current) {\n gapTargetRef.current.style.removeProperty('gap');\n }\n }\n clearPendingForProp(prop);\n });\n\n if (section === 'text') {\n setTypographyCustomMode(false);\n setShowTypographyStyleDrop(false);\n setShowFontSizeDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(false);\n } else if (section === 'layout') {\n setSizeDraft({});\n } else if (section === 'shadow') {\n setShadowCustomMode(false);\n setShowShadowDrop(false);\n setShowShadowColorDrop(false);\n } else {\n setSpaceCustomModes({ padding: false, margin: false, gap: false });\n }\n refreshSectionComputedValues(section);\n }\n\n // ─── 取消 ────────────────────────────────────────────────────\n function handleReset() {\n const el = selectedRef.current;\n if (!el) return;\n // 还原所有 inline style 改动\n const targets = getScopeTargets(el, scope);\n if (pendingComponentText !== null) {\n getComponentContentTargets().forEach(t => { t.textContent = componentTextVal; });\n }\n const meta = getInspectorComponentMeta(el);\n const capability = getComponentCapability(meta);\n for (const slot of capability?.textSlots ?? []) {\n if (!(slot.key in pendingComponentTextSlots)) continue;\n getComponentContentTargets().forEach(t => {\n const slotEl = getComponentSlotElement(t, slot);\n if (slotEl) slotEl.textContent = componentTextSlotVals[slot.key] ?? '';\n });\n }\n if (pendingComponentVariant) {\n setButtonVariantOnTargets(targets, componentVariantVal, componentVariantClassVal);\n }\n if (pendingComponentSize) {\n clearButtonSizeOnTargets(targets);\n clearIconSizeOnTargets(targets);\n clearBadgeSizeOnTargets(targets);\n }\n if (pendingIconColor) {\n clearIconColorOnTargets(targets);\n }\n if (pendingBadgeStatus) {\n setBadgeStatusOnTargets(targets, badgeStatusVal, badgeStatusClassVal);\n }\n if (pendingCardVariant) {\n setCardVariantOnTargets(targets, cardVariantVal, cardVariantClassVal);\n }\n targets.forEach(t => {\n const hEl = t as HTMLElement;\n [...Object.keys(pendingColors)].forEach(p => hEl.style.removeProperty(p));\n if (pendingRadius) hEl.style.removeProperty('border-radius');\n if (pendingShadow) hEl.style.removeProperty('box-shadow');\n if (pendingBorderColor) hEl.style.removeProperty('border-color');\n if (pendingBorderWidth) hEl.style.removeProperty('border-width');\n if (pendingBorderStyle) hEl.style.removeProperty('border-style');\n if (pendingPadding) hEl.style.removeProperty('padding');\n if (pendingMargin) hEl.style.removeProperty('margin');\n if (pendingGap) hEl.style.removeProperty('gap');\n if (pendingTranslate) hEl.style.removeProperty('translate');\n if (pendingWidth) hEl.style.removeProperty('width');\n if (pendingHeight) hEl.style.removeProperty('height');\n if (pendingHeight) hEl.style.removeProperty('min-height');\n if (pendingHeight) hEl.style.removeProperty('max-height');\n if (pendingJustifyContent) hEl.style.removeProperty('justify-content');\n if (pendingAlignItems) hEl.style.removeProperty('align-items');\n });\n if (pendingGap && gapTargetRef.current) {\n gapTargetRef.current.style.removeProperty('gap');\n }\n setPendingColors({});\n setPendingRadius('');\n setPendingShadow('');\n setShadowCustomMode(false);\n setShowShadowColorDrop(false);\n setPendingFontSize(''); setPendingFontWeight(''); setPendingTextColor('');\n setPendingBorderColor(''); setPendingBorderWidth(''); setPendingBorderStyle('');\n setContainerCustomMode(false);\n setShowContainerStyleDrop(false);\n setShowBorderWidthDrop(false);\n setShowRadiusDrop(false);\n setPendingPadding(''); setPendingMargin(''); setPendingGap('');\n setSpaceCustomModes({ padding: false, margin: false, gap: false });\n setPendingTranslate(null); setPendingWidth(''); setPendingHeight('');\n setPendingWidthMode(null); setPendingHeightMode(null);\n setPendingJustifyContent('');\n setPendingAlignItems('');\n setSizeDraft({});\n setComponentTextDraft(componentTextVal);\n setComponentTextSlotDrafts(componentTextSlotVals);\n setPendingComponentText(null);\n setPendingComponentTextSlots({});\n setPendingComponentVariant('');\n setPendingComponentSize('');\n setPendingIconColor('');\n setPendingBadgeStatus('');\n setPendingCardVariant('');\n setCustomColorVals({});\n // 重新读取当前计算值\n setColors(Object.fromEntries(\n COLOR_PROPS.map(({ prop }) => [prop, getComputedColor(el, prop)])\n .filter(([, v]) => v && v !== 'rgba(0, 0, 0, 0)' && v !== 'transparent')\n ));\n const cs = getComputedStyle(el);\n setRadiusVal(getComputedRadius(el));\n setShadowVal(cs.boxShadow.trim() === 'rgba(0, 0, 0, 0) 0px 0px 0px 0px' ? 'none' : cs.boxShadow.trim());\n setShadowAuthoredVal(getAuthoredStyleValue(el, 'box-shadow'));\n const normSpace = (v: string) => {\n const parts = v.trim().split(' ');\n return parts.every(p => p === parts[0]) ? parts[0] : v.trim();\n };\n setPaddingVal(normSpace(`${cs.paddingTop} ${cs.paddingRight} ${cs.paddingBottom} ${cs.paddingLeft}`));\n setMarginVal(normSpace(`${cs.marginTop} ${cs.marginRight} ${cs.marginBottom} ${cs.marginLeft}`));\n const g = cs.gap.trim();\n setGapVal(g === 'normal' ? '0px' : g);\n const nextTranslate = parseTranslate(cs.translate);\n setTranslateVal(nextTranslate);\n setPositionBaseVal(getPositionBase(el, nextTranslate));\n setWidthVal(cs.width.trim());\n setHeightVal(cs.height.trim());\n setWidthMode(inferSizeMode(el, 'width', cs.width.trim()));\n setHeightMode(inferSizeMode(el, 'height', cs.height.trim()));\n setJustifyVal(cs.justifyContent.trim() || 'normal');\n setAlignItemsVal(cs.alignItems.trim() || 'normal');\n removeLocalDraftEntry(getDraftTargetInfo(el).key);\n }\n\n function handleClose() {\n onClose();\n }\n\n const componentMeta = getInspectorComponentMeta(selected);\n const componentCapability = getComponentCapability(componentMeta);\n const componentEditableSlots = componentCapability?.textSlots ?? [];\n const componentChildSlots = componentCapability?.childSlots ?? [];\n const visibleChildSlots = componentChildSlots\n .map(slot => ({ slot, value: componentChildSlotVals[slot.key] ?? '', element: getComponentSlotElement(selected, slot) }))\n .filter(item => item.element);\n const hasComponentAttrPending = pendingComponentText !== null\n || Object.keys(pendingComponentTextSlots).length > 0\n || !!pendingComponentVariant\n || !!pendingComponentSize\n || !!pendingIconColor\n || !!pendingBadgeStatus\n || !!pendingCardVariant;\n const componentSelector = componentMeta && hasComponentAttrPending && componentSelectorVal\n ? componentSelectorVal\n : getSelectorForScope(selected, 'component');\n const componentDisplayName = componentMeta ? getComponentDisplayName(componentMeta) : '';\n const showComponentVariantMeta = !!componentMeta\n && (!!componentCapability?.variantKind || componentMeta.variant !== 'default');\n const isTextOnlyTarget = isTextOnlyTargetElement(selected);\n const canAlignChildren = isFlexGridDisplay(getComputedStyle(selected).display);\n const activeButtonVariant = pendingComponentVariant || componentVariantVal;\n const activeButtonSize = pendingComponentSize || componentSizeVal;\n const activeIconColor = pendingIconColor || iconColorVal;\n const activeBadgeStatus = pendingBadgeStatus || badgeStatusVal;\n const activeCardVariant = pendingCardVariant || cardVariantVal;\n const componentSizeOptions = getComponentSizeControlOptions(componentCapability);\n const showElementStyleSections = !componentMeta;\n const localDraftEntries = Object.values(localDrafts).sort((a, b) => b.updatedAt - a.updatedAt);\n const localDraftChangeCount = localDraftEntries.reduce((sum, entry) => sum + entry.changes.length, 0);\n const currentPendingChangeCount = getPendingChangeRecords().length;\n const currentDraftEntry = localDrafts[getDraftTargetInfo(selected).key];\n const hasSectionChanges = (section: InspectorSectionKey) => {\n const props = SECTION_RESET_PROPS[section];\n return props.some(isPropPending)\n || !!currentDraftEntry?.changes.some(change => props.includes(change.prop));\n };\n const renderSectionReset = (section: InspectorSectionKey, label: string) => (\n hasSectionChanges(section) ? (\n <button\n type=\"button\"\n className=\"di-section-icon-action di-section-icon-action--reset\"\n onClick={() => handleResetSection(section)}\n title={`重置${label}`}\n aria-label={`重置${label}`}\n >\n <RotateCcw size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n ) : null\n );\n const activePaddingValue = pendingPadding || paddingVal;\n const activeMarginValue = pendingMargin || marginVal;\n const activeGapValue = pendingGap || gapVal;\n const shouldUseCustomSpaceControls = (variant: SpaceVariant, value: string) => (\n spaceCustomModes[variant] || isEmptySpaceValue(variant, value)\n );\n\n // ─── Render ──────────────────────────────────────────────────\n return (\n <>\n {/* 添加 token 弹出框 */}\n {addTokenModal && (\n <AddTokenModal\n value={addTokenModal.value}\n cssProp={addTokenModal.cssProp}\n elementClasses={getClasses(selected)}\n colorPalette={colorPalette}\n onClose={() => setAddTokenModal(null)}\n onConfirm={handleTokenConfirm}\n />\n )}\n\n {(\n <div\n ref={panelElRef}\n className=\"di-panel\"\n data-di-panel-role=\"primary\"\n style={{ top: panelPos.top, left: panelPos.left }}\n >\n\n {/* 顶部 */}\n <div className=\"di-head\" onMouseDown={onDragStart}>\n <div className=\"di-head-left\">\n <span className=\"di-title\">页面样式</span>\n <span className=\"di-badge-dev\">Dev Only</span>\n <button\n className=\"di-head-icon-btn\"\n title=\"选中父层\"\n disabled={!selected.parentElement || selected.parentElement === document.body}\n onClick={() => { if (selected.parentElement && selected.parentElement !== document.body) selectEl(selected.parentElement); }}\n >\n <ArrowUp size={15} strokeWidth={2} aria-hidden=\"true\" />\n </button>\n <button\n className=\"di-head-icon-btn\"\n title=\"选中第一个子层\"\n disabled={!selected.firstElementChild}\n onClick={() => { if (selected.firstElementChild) selectEl(selected.firstElementChild); }}\n >\n <ArrowDown size={15} strokeWidth={2} aria-hidden=\"true\" />\n </button>\n </div>\n <div className=\"di-head-right\">\n <button className=\"di-head-icon-btn\" onClick={handleClose} title=\"关闭面板\" aria-label=\"关闭面板\">\n <X size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n\n <div className=\"di-body\">\n\n {/* 作用范围 */}\n <div className=\"di-section\">\n <div className=\"di-section-title-row\">\n <div className=\"di-section-title\">作用范围</div>\n <button\n type=\"button\"\n className={`di-help-icon${showScopeHelp ? ' di-help-icon--on' : ''}`}\n aria-label=\"查看作用范围说明\"\n aria-expanded={showScopeHelp}\n onClick={() => setShowScopeHelp(v => !v)}\n >\n <CircleHelp size={14} strokeWidth={1.8} />\n </button>\n </div>\n {showScopeHelp && (\n <div className=\"di-help-popover\">\n 相同元素 = 与当前选中对象属于同一组件或同一基础元素的一组对象;会忽略 selected、disabled、floating 等状态或变体差异。\n </div>\n )}\n <div className=\"di-scope-row\">\n <button className={`di-scope-btn${scope === 'current' ? ' di-scope-btn--on' : ''}`} onClick={() => setScope('current')}>当前元素</button>\n <button className={`di-scope-btn${scope === 'component' ? ' di-scope-btn--on' : ''}`} onClick={() => setScope('component')}>\n 相同元素 {selected && <span className=\"di-scope-count\">{getSameComponentEls(selected).length}</span>}\n </button>\n </div>\n </div>\n\n {componentMeta && (\n <div className=\"di-section\">\n <div className=\"di-section-title\">组件</div>\n <div className=\"di-component-card\">\n <div className=\"di-component-head\">\n <div className=\"di-component-main\">\n <span className=\"di-component-name\">{componentDisplayName}</span>\n </div>\n </div>\n <div className=\"di-component-meta-row\">\n {showComponentVariantMeta && (\n <span>{componentCapability?.variantKind === 'card' ? '展示' : '变体'}:{componentCapability?.variantKind === 'card' ? getCardDisplayLabel(componentMeta.variant) : componentMeta.variant}</span>\n )}\n <span>状态:{getComponentStateLabel(componentMeta.state)}</span>\n </div>\n {componentCapability && (\n <div className=\"di-component-fields\">\n {componentEditableSlots.map(slot => (\n <label className=\"di-component-field di-component-field--text\" key={slot.key}>\n <span>{slot.label}</span>\n <input\n className=\"di-component-text-input\"\n value={componentTextSlotDrafts[slot.key] ?? ''}\n onChange={event => updateComponentTextSlot(slot, event.currentTarget.value)}\n />\n </label>\n ))}\n {visibleChildSlots.length > 0 && (\n <div className=\"di-component-field di-component-field--children\">\n <span>{visibleChildSlots.length === 1 ? visibleChildSlots[0].slot.label : '可选项'}</span>\n <div className=\"di-component-child-list\">\n {visibleChildSlots.map(({ slot, value, element }) => {\n const childMeta = element ? getInspectorComponentMeta(element) : null;\n const childName = childMeta ? getComponentDisplayName(childMeta) : slot.label;\n const childValue = value || childMeta?.variant || childName;\n const showChildLabel = visibleChildSlots.length > 1;\n return (\n <div className={`di-component-child-item${showChildLabel ? ' di-component-child-item--with-label' : ''}`} key={slot.key}>\n {showChildLabel && <span className=\"di-component-child-label\">{slot.label}</span>}\n <span className=\"di-component-child-value\">{childValue}</span>\n <button\n type=\"button\"\n className=\"di-component-child-select\"\n onClick={() => { if (element) selectEl(element); }}\n title={`选择 ${childName}`}\n >\n 选择\n </button>\n </div>\n );\n })}\n </div>\n </div>\n )}\n {componentCapability.editableText && (\n <label className=\"di-component-field di-component-field--text\">\n <span>文案</span>\n <input\n className=\"di-component-text-input\"\n value={componentTextDraft}\n onChange={event => updateComponentText(event.currentTarget.value)}\n />\n </label>\n )}\n {componentCapability.variantKind === 'button' && (\n <div className=\"di-component-field\">\n <span>变体</span>\n <div className=\"di-component-segment\" role=\"group\" aria-label=\"按钮变体\">\n {BUTTON_VARIANT_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeButtonVariant === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateComponentVariant(option.key)}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n {componentCapability.variantKind === 'card' && (\n <div className=\"di-component-field\">\n <span>展示</span>\n <div className=\"di-component-segment\" role=\"group\" aria-label=\"卡片展示方式\">\n {CARD_VARIANT_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeCardVariant === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateCardVariant(option.key)}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n {componentCapability.colorKind === 'icon' && (\n <div className=\"di-component-field\">\n <span>颜色</span>\n <div className=\"di-component-segment di-component-segment--tone\" role=\"group\" aria-label=\"图标颜色\">\n {ICON_COLOR_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeIconColor === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateIconColor(option.key)}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n {componentCapability.statusKind === 'badge' && (\n <div className=\"di-component-field\">\n <span>状态</span>\n <div className=\"di-component-segment di-component-segment--tone\" role=\"group\" aria-label=\"标签状态\">\n {BADGE_STATUS_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeBadgeStatus === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateBadgeStatus(option.key)}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n {componentCapability.sizeKind && (\n <div className=\"di-component-field\">\n <span>尺寸</span>\n <div className=\"di-component-segment di-component-segment--size\" role=\"group\" aria-label=\"组件尺寸\">\n {componentSizeOptions.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeButtonSize === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateComponentSize(option.key)}\n title={option.title}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n\n {componentMeta && (\n <div className=\"di-section di-layout-section\">\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">外部布局</div>\n {renderSectionReset('layout', '外部布局')}\n </div>\n <div className=\"di-layout-grid\">\n <div className=\"di-layout-card di-layout-card--position\">\n <div className=\"di-layout-card-title\">位置</div>\n <div className=\"di-position-fields\" aria-label=\"移动组件\">\n {([\n { key: 'x', label: 'X', value: getDisplayPosition(pendingTranslate ?? translateVal).x },\n { key: 'y', label: 'Y', value: getDisplayPosition(pendingTranslate ?? translateVal).y },\n ] as const).map(item => (\n <div className=\"di-position-row\" key={item.key}>\n <AxisNumberInput\n label={item.label}\n value={formatLengthControlValue(`${Math.round(item.value)}px`)}\n ariaLabel={`${item.label} 位置`}\n inputClassName=\"di-position-value\"\n onChangeValue={next => setTranslateAxis(item.key, next)}\n onStep={delta => stepTranslateAxis(item.key, delta)}\n />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"di-layout-card di-layout-card--size\">\n <div className=\"di-layout-card-title\">尺寸</div>\n {([\n { key: 'width', label: 'W', current: widthVal, pending: pendingWidth, mode: widthMode, pendingMode: pendingWidthMode },\n { key: 'height', label: 'H', current: heightVal, pending: pendingHeight, mode: heightMode, pendingMode: pendingHeightMode },\n ] as const).map(item => {\n const cur = displaySizeValue(item.pending, item.current);\n const inputVal = formatLengthControlValue(sizeDraft[item.key] ?? cur);\n const activeMode = item.pendingMode ?? item.mode;\n return (\n <div className=\"di-size-row\" key={item.key}>\n <div className=\"di-size-field\">\n <AxisNumberInput\n label={item.label}\n value={inputVal}\n ariaLabel={`${item.label} 自定义尺寸`}\n inputClassName=\"di-size-value\"\n onChangeValue={next => {\n setSizeDraft(prev => ({ ...prev, [item.key]: next }));\n setSize(item.key, next, 'fixed');\n }}\n onFocusValue={() => setSizeDraft(prev => ({ ...prev, [item.key]: cur }))}\n onBlur={() => setSizeDraft(prev => {\n const next = { ...prev };\n delete next[item.key];\n return next;\n })}\n onStep={delta => stepSize(item.key, inputVal, delta)}\n onEnter={event => event.currentTarget.blur()}\n />\n <select\n className=\"di-size-mode-select\"\n value={activeMode}\n aria-label={`${item.label} 尺寸模式`}\n onChange={e => {\n const mode = e.target.value as SizeMode;\n setSize(item.key, item.current, mode);\n }}\n >\n {SIZE_OPTIONS.map(opt => (\n <option key={opt.mode} value={opt.mode}>{opt.label}</option>\n ))}\n </select>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n )}\n\n {showElementStyleSections && (\n <>\n {/* 文字区(内容 + 一行式文字工具条) */}\n <div className=\"di-section di-text-section\">\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">文字</div>\n {renderSectionReset('text', '文字')}\n </div>\n <div className=\"di-text-card\">\n {/* 文字样式:组件化预设 + 单项覆盖 */}\n <div className=\"di-text-field-row di-text-field-row--style\">\n <span className=\"di-text-field-label\">样式</span>\n {(() => {\n const curSize = pendingFontSize || fontSizeVal || '—';\n const curWeight = pendingFontWeight || fontWeightVal;\n const curColor = pendingTextColor || textColorVal;\n const curStyle = getTypographyStyle(curSize, curWeight, curColor, typographyStyles, typographyTokens);\n const showTypographyCustomControls = typographyCustomMode || !curStyle;\n const sizeOptions = fontSizeOptions ?? [];\n const curSizeOpt = sizeOptions.find(opt => opt.value === curSize);\n const curWeightOpt = fontWeightOptions.find(o => o.value === curWeight) ?? fontWeightOptions[1];\n const { label: tcLabel, sub: tcSub, isHardcoded: tcHard } = getDisplayLabel(curColor, tokenMap, colorPalette, tokenLabels);\n const chevron = (\n <svg width=\"8\" height=\"5\" viewBox=\"0 0 8 5\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 1l3 3 3-3\" stroke=\"#9ca3af\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n\n return (\n <>\n <div className={`di-typography-toolbar${showTypographyCustomControls ? ' di-typography-toolbar--custom' : ''}`}>\n {!showTypographyCustomControls && (\n <div className=\"di-typography-control-wrap\">\n <button\n className=\"di-typography-control di-typography-control--style-compact\"\n type=\"button\"\n title=\"文字样式\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowFontSizeDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(false);\n setShowTypographyStyleDrop(v=>!v);\n }}\n >\n <span className=\"di-token-name\">{curStyle?.label}</span>\n {chevron}\n </button>\n </div>\n )}\n\n {showTypographyCustomControls ? (\n <>\n <div className=\"di-typography-control-wrap\">\n <button\n className={`di-typography-control di-typography-control--size${curSizeOpt ? ' di-typography-control--size-token' : ''}`}\n type=\"button\"\n title=\"字号\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowTypographyStyleDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(false);\n setShowStyleDrop(false);\n setExpandedBorderColor(false);\n setShowShadowDrop(false);\n setCustomRadius('');\n setSizeDraft({});\n setFontSizeCustomDraft(curSize === '—' ? '' : formatLengthControlValue(curSize));\n setShowFontSizeDrop(v=>!v);\n }}\n >\n {curSizeOpt && <span className=\"di-border-style-label\">{curSizeOpt.label}</span>}\n <span className=\"di-typography-control-value\">{formatFontSizeControlValue(curSize)}</span>\n {chevron}\n </button>\n {showFontSizeDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowFontSizeDrop(false)} />\n <div className=\"di-border-style-drop di-typography-size-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {sizeOptions.map(opt => (\n <button key={opt.value}\n className={`di-border-style-drop-item${curSizeOpt?.value===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setTypographyCustomMode(true);\n setPendingFontSize(opt.value);\n liveApply('font-size', opt.value);\n setShowFontSizeDrop(false);\n }}>\n <span className=\"di-border-style-label\">{opt.label}</span>\n <span className=\"di-border-style-name\">{formatLengthControlValue(opt.value)}</span>\n </button>\n ))}\n <div className=\"di-dropdown-custom\">\n <input\n className=\"di-dropdown-custom-input\"\n value={fontSizeCustomDraft}\n placeholder=\"13\"\n onChange={(e) => {\n const draft = e.target.value;\n const next = normalizeCssLengthInput(draft);\n setFontSizeCustomDraft(draft);\n if (!next || !supportsCssValue('font-size', next)) return;\n setTypographyCustomMode(true);\n setPendingFontSize(next);\n liveApply('font-size', next);\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const next = normalizeCssLengthInput(fontSizeCustomDraft);\n if (!next || !supportsCssValue('font-size', next)) return;\n setTypographyCustomMode(true);\n setPendingFontSize(next);\n liveApply('font-size', next);\n setShowFontSizeDrop(false);\n }\n }}\n />\n <button\n type=\"button\"\n className=\"di-dropdown-custom-apply\"\n onClick={(e) => {\n e.stopPropagation();\n const next = normalizeCssLengthInput(fontSizeCustomDraft);\n if (!next || !supportsCssValue('font-size', next)) return;\n setTypographyCustomMode(true);\n setPendingFontSize(next);\n liveApply('font-size', next);\n setShowFontSizeDrop(false);\n }}\n >\n 应用\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-typography-control-wrap\">\n <button\n className=\"di-typography-control di-typography-control--weight\"\n type=\"button\"\n title=\"字重\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowTypographyStyleDrop(false);\n setShowFontSizeDrop(false);\n setExpandedTextColor(false);\n setShowWeightDrop(v=>!v);\n }}\n >\n <span className=\"di-border-style-label\" style={curWeightOpt.value === 'none' ? { color: '#9ca3af' } : undefined}>{curWeightOpt.label}</span>\n <span className=\"di-typography-control-value\">{curWeight}</span>\n {chevron}\n </button>\n {showWeightDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowWeightDrop(false)} />\n <div className=\"di-border-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {fontWeightOptions.map(opt => (\n <button key={opt.value}\n className={`di-border-style-drop-item${curWeight===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => { setTypographyCustomMode(true); setPendingFontWeight(opt.value); liveApply('font-weight',opt.value); setShowWeightDrop(false); }}>\n <span className=\"di-border-style-label\" style={opt.value === 'none' ? { color: '#9ca3af' } : undefined}>{opt.label}</span>\n <span className=\"di-border-style-name\">{opt.value}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-typography-control-wrap\">\n <ColorSelectButton\n className=\"di-typography-control di-typography-control--color\"\n value={curColor}\n label={tcLabel}\n sub={tcSub}\n isHardcoded={tcHard}\n title=\"颜色\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowTypographyStyleDrop(false);\n setShowFontSizeDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(v=>!v);\n }}\n />\n {expandedTextColor && (\n <ColorDropdown value={curColor} pos={dropPos} colorPalette={colorPalette}\n onChange={c=>{ setTypographyCustomMode(true); setPendingTextColor(c); liveApply('color',c); }}\n onClose={()=>setExpandedTextColor(false)}\n onAddToken={v=>handleAddToken(v,'color')}\n />\n )}\n </div>\n {typographyStyles.length > 0 && (\n <SourcePickerButton\n className=\"di-source-action--field\"\n title=\"选择文字样式 token\"\n onClick={event => {\n const r = event.currentTarget.getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowFontSizeDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(false);\n setShowTypographyStyleDrop(v => !v);\n }}\n />\n )}\n </>\n ) : null}\n </div>\n {showTypographyStyleDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowTypographyStyleDrop(false)} />\n <div className=\"di-border-style-drop di-typography-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {typographyStyles.map(style => (\n <button key={style.key}\n className={`di-border-style-drop-item${!showTypographyCustomControls && curStyle?.key===style.key?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n applyTypographyStyle(style);\n setShowTypographyStyleDrop(false);\n }}>\n <span className=\"di-border-style-label\">{style.label}</span>\n <span className=\"di-typography-style-drop-meta\">\n <span className=\"di-border-style-name\">{`${formatLengthControlValue(style.value)} / ${style.fontWeight}`}</span>\n <span className=\"di-shadow-drop-value\">{style.colorVar || style.color}</span>\n </span>\n </button>\n ))}\n {showTypographyCustomControls ? (\n <div className=\"di-typography-custom-note\">\n <span className=\"di-border-style-label\">自定义模式</span>\n <span className=\"di-shadow-drop-value\">当前已展开字号 / 字重 / 颜色单项调整</span>\n </div>\n ) : (\n <button\n type=\"button\"\n className=\"di-typography-custom-action\"\n onClick={() => {\n setTypographyCustomMode(true);\n setShowTypographyStyleDrop(false);\n }}\n >\n <span className=\"di-border-style-label\">基于当前样式自定义</span>\n <span className=\"di-shadow-drop-value\">进入字号 / 字重 / 颜色单项调整</span>\n </button>\n )}\n </div>\n </>\n )}\n </>\n );\n })()}\n </div>\n {/* 文字内容 */}\n {textContent !== null && (\n <div className=\"di-text-field-row\">\n <span className=\"di-text-field-label\">内容</span>\n <textarea className=\"di-note di-note--sm\" defaultValue={textContent}\n ref={(el) => { if (el) resizeTextareaToContent(el); }}\n placeholder=\"修改文字内容...\"\n onChange={e => {\n resizeTextareaToContent(e.currentTarget);\n const el = selectedRef.current;\n if (!el) return;\n const ts = getScopeTargets(el, scope);\n ts.forEach(t => { t.textContent = e.currentTarget.value; });\n }}\n />\n </div>\n )}\n </div>\n </div>\n\n {/* 外观区 */}\n {!isTextOnlyTarget && (\n <div className=\"di-section di-appearance-section\">\n {(() => {\n const curBackgroundColor = pendingColors['background-color'] ?? colors['background-color'] ?? 'transparent';\n const curBorderWidth = pendingBorderWidth || borderWidthVal || '0px';\n const curBorderStyleValue = pendingBorderStyle || borderStyleVal || 'none';\n const curBorderColor = pendingBorderColor || borderColorVal || 'transparent';\n const curBorderRadius = pendingRadius || radiusVal || '0px';\n const curContainerPreset = getContainerStyle(curBackgroundColor, curBorderWidth, curBorderStyleValue, curBorderColor, curBorderRadius, containerStyles);\n const showContainerCustomControls = containerCustomMode || !curContainerPreset;\n const curLineOpt = BORDER_STYLE_OPTIONS.find(o => o.value === curBorderStyleValue) ?? BORDER_STYLE_OPTIONS[0];\n const curRadiusPreset = matchPreset(radiusPresets, curBorderRadius);\n const { label: backgroundLabel, sub: backgroundSub, isHardcoded: backgroundHard } = getDisplayLabel(curBackgroundColor, tokenMap, colorPalette, tokenLabels);\n const { label: borderColorLabel, sub: borderColorSub, isHardcoded: borderColorHard } = getDisplayLabel(curBorderColor, tokenMap, colorPalette, tokenLabels);\n const backgroundIsEmpty = isTransparentColor(curBackgroundColor);\n const borderColorIsEmpty = isTransparentColor(curBorderColor);\n const hasVisibleBorder = !isZeroLengthValue(curBorderWidth)\n && curBorderStyleValue !== 'none'\n && !borderColorIsEmpty;\n const isAppearanceEmpty = backgroundIsEmpty\n && !hasVisibleBorder\n && isZeroLengthValue(curBorderRadius);\n const borderSummary = `${formatLengthControlValue(curBorderWidth)} / ${curLineOpt.title} / ${formatLengthControlValue(curBorderRadius)}`;\n const containerSummary = `${backgroundLabel} / ${borderSummary}`;\n const chevron = (\n <svg width=\"8\" height=\"5\" viewBox=\"0 0 8 5\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 1l3 3 3-3\" stroke=\"#9ca3af\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n const ensureVisibleBorder = () => {\n if (curBorderWidth === '0px') {\n setPendingBorderWidth('1px');\n liveApply('border-width', '1px');\n }\n if (curBorderStyleValue === 'none') {\n setPendingBorderStyle('solid');\n liveApply('border-style', 'solid');\n }\n };\n\n if (isAppearanceEmpty && !containerCustomMode) {\n return (\n <div className=\"di-section-title-row di-section-title-row--action di-section-title-row--empty\">\n <div className=\"di-section-title\">外观</div>\n <button\n type=\"button\"\n className=\"di-section-icon-action\"\n onClick={() => setContainerCustomMode(true)}\n title=\"添加外观\"\n aria-label=\"添加外观\"\n >\n <Plus size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n );\n }\n\n return (\n <>\n <div className=\"di-section-title\">外观</div>\n <div className={`di-container-toolbar${showContainerCustomControls ? ' di-container-toolbar--custom' : ''}`}>\n <div className=\"di-typography-control-wrap\">\n {showContainerCustomControls ? (\n <CustomSelectButton\n title=\"自定义容器样式\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setShowContainerStyleDrop(v=>!v);\n }}\n />\n ) : (\n <button\n className=\"di-typography-control di-typography-control--style-compact\"\n type=\"button\"\n title=\"容器样式\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setShowContainerStyleDrop(v=>!v);\n }}\n >\n <span className=\"di-token-name\">{curContainerPreset?.label}</span>\n {chevron}\n </button>\n )}\n {showContainerStyleDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowContainerStyleDrop(false)} />\n <div className=\"di-border-style-drop di-container-preset-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {containerStyles.map(style => (\n <button key={style.key}\n className={`di-border-style-drop-item${!showContainerCustomControls && curContainerPreset?.key===style.key?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n applyContainerStyle(style);\n setShowContainerStyleDrop(false);\n }}>\n <span className=\"di-border-style-label\">{style.label}</span>\n <span className=\"di-typography-style-drop-meta\">\n <span className=\"di-border-style-name\">{`${style.backgroundVar || style.backgroundColor} / ${formatLengthControlValue(style.borderWidth)} ${BORDER_STYLE_OPTIONS.find(o => o.value === style.borderStyle)?.title ?? style.borderStyle} / ${formatLengthControlValue(style.borderRadius)}`}</span>\n <span className=\"di-shadow-drop-value\">{style.colorVar || style.borderColor}</span>\n </span>\n </button>\n ))}\n <button\n type=\"button\"\n className={`di-border-style-drop-item${showContainerCustomControls ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n setContainerCustomMode(true);\n setShowContainerStyleDrop(false);\n }}\n >\n <span className=\"di-border-style-label\">自定义</span>\n <span className=\"di-typography-style-drop-meta\">\n <span className=\"di-border-style-name\">{containerSummary}</span>\n <span className=\"di-shadow-drop-value\">使用右侧单项调整</span>\n </span>\n </button>\n </div>\n </>\n )}\n </div>\n\n {showContainerCustomControls ? (\n <>\n <div className=\"di-typography-control-wrap\">\n <ColorSelectButton\n className=\"di-typography-control di-typography-control--color\"\n value={backgroundIsEmpty ? 'transparent' : curBackgroundColor}\n label={backgroundIsEmpty ? '无' : backgroundLabel}\n sub={backgroundSub}\n isHardcoded={backgroundHard || backgroundIsEmpty}\n title=\"背景色\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setExpandedColor(expandedColor === 'background-color' ? null : 'background-color');\n }}\n />\n {expandedColor === 'background-color' && (\n <ColorDropdown value={backgroundIsEmpty ? '' : curBackgroundColor} pos={dropPos} colorPalette={colorPalette}\n onChange={c => {\n setContainerCustomMode(true);\n setPendingColors(prev => ({ ...prev, 'background-color': c }));\n liveApply('background-color', c);\n }}\n onClose={() => setExpandedColor(null)}\n onAddToken={v=>handleAddToken(v,'background-color')}\n />\n )}\n </div>\n\n <div className=\"di-typography-control-wrap\">\n <ColorSelectButton\n className=\"di-typography-control di-typography-control--color\"\n value={borderColorIsEmpty ? 'transparent' : curBorderColor}\n label={borderColorIsEmpty ? '无' : borderColorLabel}\n sub={borderColorSub}\n isHardcoded={borderColorHard || borderColorIsEmpty}\n title=\"边框颜色\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedColor(null);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setExpandedBorderColor(v=>!v);\n }}\n />\n {expandedBorderColor && (\n <ColorDropdown value={borderColorIsEmpty ? '' : curBorderColor} pos={dropPos} colorPalette={colorPalette}\n onChange={c => {\n setContainerCustomMode(true);\n setPendingBorderColor(c);\n liveApply('border-color', c);\n ensureVisibleBorder();\n }}\n onClose={() => setExpandedBorderColor(false)}\n onAddToken={v=>handleAddToken(v,'border-color')}\n />\n )}\n </div>\n\n <div className=\"di-typography-control-wrap\">\n <button\n className=\"di-typography-control di-border-control--width\"\n type=\"button\"\n title=\"边框粗细\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedBorderColor(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setShowBorderWidthDrop(v=>!v);\n }}\n >\n <span className=\"di-typography-control-value\">{formatLengthControlValue(curBorderWidth)}</span>\n {chevron}\n </button>\n {showBorderWidthDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowBorderWidthDrop(false)} />\n <div className=\"di-border-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {borderWidthSteps.map(step => (\n <button key={step}\n className={`di-border-style-drop-item${curBorderWidth===step?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setContainerCustomMode(true);\n setPendingBorderWidth(step);\n liveApply('border-width', step);\n if (step === '0px') {\n setPendingBorderStyle('none');\n liveApply('border-style', 'none');\n } else if (curBorderStyleValue === 'none') {\n setPendingBorderStyle('solid');\n liveApply('border-style', 'solid');\n }\n setShowBorderWidthDrop(false);\n }}>\n <span className=\"di-border-style-name\">{formatLengthControlValue(step)}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-typography-control-wrap\">\n <button\n className=\"di-typography-control di-border-control--line\"\n type=\"button\"\n title=\"边框线型\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowRadiusDrop(false);\n setShowStyleDrop(v=>!v);\n }}\n >\n <span className=\"di-border-style-label\" style={curLineOpt.value === 'none' ? { color: '#9ca3af' } : undefined}>{curLineOpt.label}</span>\n <span className=\"di-typography-control-value\">{curLineOpt.title}</span>\n {chevron}\n </button>\n {showStyleDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={() => setShowStyleDrop(false)} />\n <div className=\"di-border-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {BORDER_STYLE_OPTIONS.map(opt => (\n <button key={opt.value}\n className={`di-border-style-drop-item${curBorderStyleValue===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setContainerCustomMode(true);\n setPendingBorderStyle(opt.value);\n liveApply('border-style', opt.value);\n if (opt.value === 'none') {\n setPendingBorderWidth('0px');\n liveApply('border-width', '0px');\n } else if (curBorderWidth === '0px') {\n setPendingBorderWidth('1px');\n liveApply('border-width', '1px');\n }\n setShowStyleDrop(false);\n }}>\n <span className=\"di-border-style-label\" style={opt.value === 'none' ? { color: '#9ca3af' } : undefined}>{opt.label}</span>\n <span className=\"di-border-style-name\">{opt.title}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-typography-control-wrap\">\n <button\n className=\"di-typography-control di-border-control--radius\"\n type=\"button\"\n title=\"圆角\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setCustomRadius(curBorderRadius === '0px' ? '' : formatLengthControlValue(curBorderRadius));\n setShowRadiusDrop(v=>!v);\n }}\n >\n {curRadiusPreset && <span className=\"di-border-style-label\">{curRadiusPreset.label}</span>}\n <span className=\"di-typography-control-value\">{formatLengthControlValue(curBorderRadius)}</span>\n {chevron}\n </button>\n {showRadiusDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={() => setShowRadiusDrop(false)} />\n <div className=\"di-border-style-drop di-radius-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {radiusPresets.map(opt => (\n <button key={opt.label}\n className={`di-border-style-drop-item${curRadiusPreset?.value===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setContainerCustomMode(true);\n setPendingRadius(opt.value);\n setCustomRadius('');\n liveApply('border-radius', opt.value);\n setShowRadiusDrop(false);\n }}>\n <span className=\"di-border-style-label\">{opt.label}</span>\n {opt.sub && <span className=\"di-border-style-name\">{formatLengthControlValue(opt.sub)}</span>}\n </button>\n ))}\n <div className=\"di-dropdown-custom\">\n <input\n className=\"di-dropdown-custom-input\"\n value={customRadius}\n placeholder=\"12\"\n onChange={(e) => {\n const draft = e.target.value;\n const next = normalizeCssLengthInput(draft);\n setCustomRadius(draft);\n if (!next || !supportsCssValue('border-radius', next)) return;\n setContainerCustomMode(true);\n setPendingRadius(next);\n liveApply('border-radius', next);\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const next = normalizeCssLengthInput(customRadius);\n if (!next || !supportsCssValue('border-radius', next)) return;\n setContainerCustomMode(true);\n setPendingRadius(next);\n liveApply('border-radius', next);\n setShowRadiusDrop(false);\n }\n }}\n />\n <button\n type=\"button\"\n className=\"di-dropdown-custom-apply\"\n onClick={(e) => {\n e.stopPropagation();\n const next = normalizeCssLengthInput(customRadius);\n if (!next || !supportsCssValue('border-radius', next)) return;\n setContainerCustomMode(true);\n setPendingRadius(next);\n liveApply('border-radius', next);\n setShowRadiusDrop(false);\n }}\n >\n 应用\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n </>\n ) : (\n <div className=\"di-typography-readout\" aria-label=\"当前容器样式参数\">\n <span className=\"di-typography-readout-line\">{containerSummary}</span>\n <span className=\"di-typography-readout-token\">\n {`${curContainerPreset?.backgroundVar || curBackgroundColor} / ${curContainerPreset?.colorVar || curBorderColor}`}\n </span>\n </div>\n )}\n </div>\n </>\n );\n })()}\n </div>\n )}\n\n {/* 布局区 */}\n {!componentMeta && (\n <div className=\"di-section di-layout-section\">\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">布局</div>\n {renderSectionReset('layout', '布局')}\n </div>\n <div className=\"di-layout-grid\">\n <div className=\"di-layout-card di-layout-card--position\">\n <div className=\"di-layout-card-title\">位置</div>\n <div className=\"di-position-fields\" aria-label=\"移动元素\">\n {([\n { key: 'x', label: 'X', value: getDisplayPosition(pendingTranslate ?? translateVal).x },\n { key: 'y', label: 'Y', value: getDisplayPosition(pendingTranslate ?? translateVal).y },\n ] as const).map(item => (\n <div className=\"di-position-row\" key={item.key}>\n <AxisNumberInput\n label={item.label}\n value={formatLengthControlValue(`${Math.round(item.value)}px`)}\n ariaLabel={`${item.label} 位置`}\n inputClassName=\"di-position-value\"\n onChangeValue={next => setTranslateAxis(item.key, next)}\n onStep={delta => stepTranslateAxis(item.key, delta)}\n />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"di-layout-card di-layout-card--size\">\n <div className=\"di-layout-card-title\">尺寸</div>\n {([\n { key: 'width', label: 'W', current: widthVal, pending: pendingWidth, mode: widthMode, pendingMode: pendingWidthMode },\n { key: 'height', label: 'H', current: heightVal, pending: pendingHeight, mode: heightMode, pendingMode: pendingHeightMode },\n ] as const).map(item => {\n const cur = displaySizeValue(item.pending, item.current);\n const inputVal = formatLengthControlValue(sizeDraft[item.key] ?? cur);\n const activeMode = item.pendingMode ?? item.mode;\n return (\n <div className=\"di-size-row\" key={item.key}>\n <div className=\"di-size-field\">\n <AxisNumberInput\n label={item.label}\n value={inputVal}\n ariaLabel={`${item.label} 自定义尺寸`}\n inputClassName=\"di-size-value\"\n onChangeValue={next => {\n setSizeDraft(prev => ({ ...prev, [item.key]: next }));\n setSize(item.key, next, 'fixed');\n }}\n onFocusValue={() => setSizeDraft(prev => ({ ...prev, [item.key]: cur }))}\n onBlur={() => setSizeDraft(prev => {\n const next = { ...prev };\n delete next[item.key];\n return next;\n })}\n onStep={delta => stepSize(item.key, inputVal, delta)}\n onEnter={event => event.currentTarget.blur()}\n />\n <select\n className=\"di-size-mode-select\"\n value={activeMode}\n aria-label={`${item.label} 尺寸模式`}\n onChange={e => {\n const mode = e.target.value as SizeMode;\n setSize(item.key, item.current, mode);\n }}\n >\n {SIZE_OPTIONS.map(opt => (\n <option key={opt.mode} value={opt.mode}>{opt.label}</option>\n ))}\n </select>\n </div>\n </div>\n );\n })}\n </div>\n\n {canAlignChildren && (\n <div className=\"di-layout-card di-layout-card--alignment\">\n <div className=\"di-layout-card-title\">对齐</div>\n <div className=\"di-alignment-fields\">\n {([\n {\n prop: 'justify-content',\n label: '水平',\n value: pendingJustifyContent || justifyVal || 'normal',\n options: JUSTIFY_OPTIONS,\n },\n {\n prop: 'align-items',\n label: '垂直',\n value: pendingAlignItems || alignItemsVal || 'normal',\n options: ALIGN_ITEMS_OPTIONS,\n },\n ] as const).map(item => {\n const selectValue = item.options.some(option => option.value === item.value) ? item.value : 'normal';\n return (\n <label className=\"di-alignment-field\" key={item.prop}>\n <span className=\"di-alignment-label\">{item.label}</span>\n <select\n className=\"di-alignment-select\"\n value={selectValue}\n aria-label={`${item.label}对齐`}\n onChange={event => setAlignment(item.prop, event.currentTarget.value)}\n >\n {item.options.map(option => (\n <option key={option.value} value={option.value}>{option.label}</option>\n ))}\n </select>\n </label>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* 阴影区 */}\n <div className=\"di-section di-shadow-section\">\n <div className=\"di-shadow-panel\">\n {(() => {\n const activeShadow = pendingShadow || shadowVal;\n const activeShadowAuthored = pendingShadow ? pendingShadow : shadowAuthoredVal;\n const matchedOption = shadowOptions.find(option => canonicalizeShadowValue(option.value) === canonicalizeShadowValue(activeShadow)) ?? null;\n const activeOption = matchedOption ?? shadowOptions[0];\n const isShadowCustom = shadowCustomMode || (!matchedOption && activeShadow !== 'none');\n const shadowDisplay = isShadowCustom\n ? { label: '自定义', sub: formatShadowDisplay(activeShadow), isHardcoded: true }\n : getShadowDisplay(activeShadow, activeShadowAuthored, shadowTokens);\n const shadowParts = parseShadowParts(activeShadow);\n const { label: shadowColorLabel, sub: shadowColorSub, isHardcoded: shadowColorHard } = getDisplayLabel(shadowParts.color, tokenMap, colorPalette, tokenLabels);\n const shadowControlLabel = isShadowCustom ? '自定义' : activeOption.label;\n const isShadowEmpty = !isShadowCustom && activeShadow === 'none';\n const hasShadowSourceOptions = shadowOptions.some(option => Boolean(option.cssVar));\n const openShadowMenu = (trigger: HTMLElement) => {\n const r = trigger.getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowShadowDrop(v => !v);\n };\n const addCustomShadow = () => {\n const value = buildShadowValue(EMPTY_CUSTOM_SHADOW_PARTS);\n setPendingShadow(value);\n setShadowCustomMode(true);\n liveApply('box-shadow', value);\n setShowShadowDrop(false);\n };\n const shadowDrop = showShadowDrop ? (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={() => setShowShadowDrop(false)} />\n <div className=\"di-border-style-drop di-shadow-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {shadowOptions.map(option => {\n const isOn = !isShadowCustom && canonicalizeShadowValue(option.value) === canonicalizeShadowValue(activeShadow);\n return (\n <button\n key={option.cssVar || option.label}\n className={`di-border-style-drop-item${isOn ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n setPendingShadow(option.value);\n setShadowCustomMode(false);\n liveApply('box-shadow', option.value);\n setShowShadowDrop(false);\n }}\n >\n <span className=\"di-border-style-label\" style={option.cssVar ? undefined : { color: '#9ca3af' }}>{option.label}</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">{option.cssVar || option.usage}</span>\n {option.cssVar && <span className=\"di-shadow-drop-value\">{option.value}</span>}\n </span>\n </button>\n );\n })}\n <button\n className={`di-border-style-drop-item${isShadowCustom ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n const value = buildShadowValue(EMPTY_CUSTOM_SHADOW_PARTS);\n setPendingShadow(value);\n setShadowCustomMode(true);\n liveApply('box-shadow', value);\n setShowShadowDrop(false);\n }}\n >\n <span className=\"di-custom-option-label\">自定义</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">手动调整参数</span>\n <span className=\"di-shadow-drop-value\">X / Y / 模糊 / 扩散 / 颜色</span>\n </span>\n </button>\n </div>\n </>\n ) : null;\n return (\n <>\n {isShadowEmpty ? (\n <div className=\"di-section-title-row di-section-title-row--action di-section-title-row--empty\">\n <div className=\"di-section-title\">阴影</div>\n <button\n type=\"button\"\n className=\"di-section-icon-action\"\n onClick={addCustomShadow}\n title=\"添加阴影\"\n aria-label=\"添加阴影\"\n >\n <Plus size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n ) : (\n <>\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">阴影</div>\n {renderSectionReset('shadow', '阴影')}\n </div>\n <div className={`di-shadow-card${hasSectionChanges('shadow') ? ' di-shadow-card--with-reset' : ''}`}>\n <div className=\"di-shadow-field-row\">\n <span className=\"di-text-field-label\">样式</span>\n {isShadowCustom ? (\n <div className=\"di-shadow-custom-toolbar\">\n <ColorSelectButton\n className=\"di-color-select--fill\"\n value={shadowParts.color}\n label={shadowColorLabel}\n sub={shadowColorSub}\n isHardcoded={shadowColorHard}\n title=\"阴影颜色\"\n onClick={event => {\n const r = (event.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowShadowColorDrop(v => !v);\n }}\n />\n {hasShadowSourceOptions && (\n <SourcePickerButton\n className=\"di-source-action--field\"\n title=\"选择阴影 token\"\n onClick={event => openShadowMenu(event.currentTarget)}\n />\n )}\n </div>\n ) : (\n <div className=\"di-shadow-toolbar\">\n <ColorSelectButton\n className=\"di-color-select--fill di-color-select--shadow\"\n value=\"#ffffff\"\n label={shadowControlLabel}\n sub={shadowDisplay.sub}\n isHardcoded={!activeOption.cssVar}\n title=\"阴影\"\n swatchClassName=\"di-color-select-swatch--shadow\"\n swatchStyle={{ boxShadow: activeShadow }}\n onClick={event => openShadowMenu(event.currentTarget)}\n />\n </div>\n )}\n </div>\n {isShadowCustom && (\n <div className=\"di-shadow-field-row di-shadow-field-row--params\">\n <span className=\"di-text-field-label\">参数</span>\n <div className=\"di-shadow-custom-grid\">\n {([\n { key: 'x', label: 'X', value: shadowParts.x },\n { key: 'y', label: 'Y', value: shadowParts.y },\n { key: 'blur', label: '模糊', value: shadowParts.blur },\n { key: 'spread', label: '扩散', value: shadowParts.spread },\n ] as const).map(item => (\n <div className=\"di-shadow-custom-row\" key={item.key}>\n <AxisNumberInput\n label={item.label}\n value={formatLengthControlValue(item.value)}\n ariaLabel={`阴影${item.label}`}\n inputClassName=\"di-shadow-custom-input\"\n wideLabel={item.key === 'blur' || item.key === 'spread'}\n onChangeValue={next => setCustomShadowPart(item.key, next)}\n onStep={delta => stepCustomShadowPart(item.key, delta)}\n />\n </div>\n ))}\n {showShadowColorDrop && (\n <ColorDropdown\n value={shadowParts.color}\n pos={dropPos}\n colorPalette={colorPalette}\n onChange={color => setCustomShadowPart('color', color)}\n onClose={() => setShowShadowColorDrop(false)}\n />\n )}\n </div>\n </div>\n )}\n </div>\n </>\n )}\n {shadowDrop}\n </>\n );\n })()}\n </div>\n </div>\n\n {/* 间距区 */}\n <div className=\"di-section di-space-section\">\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">间距</div>\n {renderSectionReset('space', '间距')}\n </div>\n <div className=\"di-space-row\">\n <SpaceCard\n title=\"内边距\" variant=\"padding\"\n value={activePaddingValue}\n spaceSteps={spaceSteps}\n custom={shouldUseCustomSpaceControls('padding', activePaddingValue)}\n onCustomChange={v => {\n setSpaceCustomModes(prev => ({ ...prev, padding: v }));\n }}\n onChange={v => { setPendingPadding(v); liveApply('padding', v); }}\n />\n <SpaceCard\n title=\"外边距\" variant=\"margin\"\n value={activeMarginValue}\n spaceSteps={spaceSteps}\n custom={shouldUseCustomSpaceControls('margin', activeMarginValue)}\n onCustomChange={v => {\n setSpaceCustomModes(prev => ({ ...prev, margin: v }));\n }}\n onChange={v => { setPendingMargin(v); liveApply('margin', v); }}\n />\n <SpaceCard\n title=\"元素间距\" variant=\"gap\"\n value={activeGapValue}\n spaceSteps={spaceSteps}\n custom={shouldUseCustomSpaceControls('gap', activeGapValue)}\n onCustomChange={v => {\n setSpaceCustomModes(prev => ({ ...prev, gap: v }));\n }}\n onChange={v => { setPendingGap(v); liveApply('gap', v); }}\n />\n </div>\n </div>\n\n <div className=\"di-section\">\n <div className=\"di-section-title\">本次修改内容 {localDraftChangeCount}</div>\n <div className=\"di-inbox-summary\">\n {localDraftEntries.length > 0 ? (\n <div className=\"di-inbox-list\">\n {localDraftEntries.map((entry) => (\n <div className=\"di-inbox-card di-inbox-card--draft\" key={entry.key}>\n <div className=\"di-inbox-card-head\">\n <div>\n <div className=\"di-inbox-target\">{entry.targetLabel}</div>\n <div className=\"di-inbox-meta\">{entry.scopeLabel} · {entry.selector}</div>\n </div>\n <button\n className=\"di-inbox-icon-btn\"\n onClick={() => handleDeleteLocalDraft(entry.key)}\n title=\"删除这个对象的全部修改\"\n aria-label=\"删除这个对象的全部修改\"\n >\n <Trash2 size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n <ol className=\"di-inbox-change-list\">\n {entry.changes.map((change, idx) => (\n <li className=\"di-inbox-change-item\" key={`${entry.key}-${change.prop}-${idx}`}>\n <span className=\"di-inbox-change-text\">\n {idx + 1}. {getChangeLabel(change.prop)}:{formatStoredChangeRecordValue(change.prop, change.from)} → {formatStoredChangeRecordValue(change.prop, change.val)}\n </span>\n <button\n className=\"di-inbox-icon-btn di-inbox-icon-btn--mini\"\n onClick={() => handleResetLocalDraftChange(entry.key, change.prop)}\n title=\"移除并重置这条修改\"\n aria-label=\"移除并重置这条修改\"\n >\n <Minus size={14} strokeWidth={2.4} aria-hidden=\"true\" />\n </button>\n </li>\n ))}\n </ol>\n </div>\n ))}\n </div>\n ) : styleIntentSummary.pendingEntries.length === 0 ? (\n <div className=\"di-empty\">还没有记录的修改</div>\n ) : null}\n {styleIntentSummary.pendingEntries.length > 0 ? (\n <div className=\"di-inbox-list di-inbox-list--stored\">\n {styleIntentSummary.pendingEntries.map((entry) => (\n <div className=\"di-inbox-card\" key={entry.id}>\n <div className=\"di-inbox-card-head\">\n <div className=\"di-inbox-target\">{entry.targetLabel || entry.selector || '未命名对象'}</div>\n <button\n className=\"di-inbox-icon-btn\"\n onClick={() => handleDeleteStyleIntent(entry.id)}\n title=\"删除这条已记录对象\"\n aria-label=\"删除这条已记录对象\"\n >\n <Trash2 size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n {entry.note ? <div className=\"di-inbox-note\">{entry.note}</div> : null}\n <ol className=\"di-inbox-change-list\">\n {entry.entries.flatMap((group) => group.changes.map((change) => ({ selector: group.selector, ...change }))).map((change, idx) => (\n <li className=\"di-inbox-change-item\" key={`${entry.id}-${change.selector}-${change.prop}-${idx}`}>\n <span className=\"di-inbox-change-text\">\n {idx + 1}. {getChangeLabel(change.prop)}:{change.from ? `${formatStoredChangeRecordValue(change.prop, change.from)} → ` : ''}{formatStoredChangeRecordValue(change.prop, change.val)}\n </span>\n <button\n className=\"di-inbox-icon-btn di-inbox-icon-btn--mini\"\n onClick={() => handleDeleteStyleIntent(entry.id, change.selector, change.prop)}\n title=\"删除这条已记录属性\"\n aria-label=\"删除这条已记录属性\"\n >\n <Minus size={14} strokeWidth={2.4} aria-hidden=\"true\" />\n </button>\n </li>\n ))}\n </ol>\n </div>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n </>\n )}\n\n </div>\n\n {/* 底部操作 */}\n {(() => {\n const hasPending = localDraftChangeCount > 0 || currentPendingChangeCount > 0 || !!note;\n return (\n <div className=\"di-foot\">\n <button className=\"di-btn-cancel\" onClick={handleReset}>重置</button>\n <button className=\"di-btn-cancel\" onClick={() => {\n const el = selectedRef.current;\n if (!el) return;\n // 合并实际值 + pending 改动,pending 优先\n const effectiveColors = { ...colors, ...pendingColors };\n const pending: [string, string][] = [\n ...Object.entries(effectiveColors).filter(([, v]) => v && v !== 'transparent'),\n [(pendingTextColor || textColorVal) ? 'color' : '', pendingTextColor || textColorVal],\n [(pendingRadius || radiusVal) ? 'border-radius' : '', pendingRadius || radiusVal],\n [(pendingShadow || (shadowVal !== 'none' ? shadowVal : '')) ? 'box-shadow' : '', pendingShadow || (shadowVal !== 'none' ? shadowVal : '')],\n [(pendingBorderColor || borderColorVal) ? 'border-color' : '', pendingBorderColor || borderColorVal],\n [(pendingBorderWidth || (borderWidthVal !== '0px' ? borderWidthVal : '')) ? 'border-width' : '', pendingBorderWidth || borderWidthVal],\n [(pendingBorderStyle || (borderStyleVal !== 'none' ? borderStyleVal : '')) ? 'border-style' : '', pendingBorderStyle || borderStyleVal],\n [(pendingFontSize || fontSizeVal) ? 'font-size' : '', pendingFontSize || fontSizeVal],\n [(pendingFontWeight || fontWeightVal) ? 'font-weight' : '', pendingFontWeight || fontWeightVal],\n [(pendingPadding || (paddingVal !== '0px' ? paddingVal : '')) ? 'padding' : '', pendingPadding || paddingVal],\n [(pendingMargin || (marginVal !== '0px' ? marginVal : '')) ? 'margin' : '', pendingMargin || marginVal],\n [(pendingGap || (gapVal !== '0px' ? gapVal : '')) ? 'gap' : '', pendingGap || gapVal],\n [(pendingWidth || widthVal) ? 'width' : '', pendingWidth || widthVal],\n [(pendingHeight || heightVal) ? 'height' : '', pendingHeight || heightVal],\n [pendingJustifyContent ? 'justify-content' : '', pendingJustifyContent],\n [pendingAlignItems ? 'align-items' : '', pendingAlignItems],\n ].filter(([k, v]) => k && v) as [string, string][];\n const selector = getSelectorForScope(el, scope);\n const css = pending.length > 0\n ? `${selector} {\\n${pending.map(([p, v]) => ` ${p}: ${v};`).join('\\n')}\\n}`\n : `/* ${selector} — 暂无改动 */`;\n const ta = document.createElement('textarea');\n ta.value = css;\n ta.style.cssText = 'position:fixed;opacity:0;top:0;left:0';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n _copiedStyles = pending.map(([p, v]) => ({ prop: p, val: v }));\n setHasCopied(true);\n setCopyMsg('已复制 ✓');\n setTimeout(() => setCopyMsg(''), 1500);\n }}>{copyMsg || '复制样式'}</button>\n <button\n className=\"di-btn-save\"\n onClick={handleSubmitToAi}\n disabled={!hasPending}\n style={!hasPending ? { opacity: 0.4, cursor: 'not-allowed' } : {}}\n title=\"复制一段可直接发给 AI 的任务文本\"\n >{submitMsg || '发送给AI'}</button>\n </div>\n );\n })()}\n {hasCopied && (\n <div className=\"di-paste-bar\">\n <button className=\"di-btn-paste\" onClick={() => {\n _copiedStyles.forEach(({ prop, val }) => {\n if (prop === 'background-color' || prop === 'background')\n setPendingColors(prev => ({ ...prev, [prop]: val }));\n else if (prop === 'color') setPendingTextColor(val);\n else if (prop === 'border-radius') setPendingRadius(val);\n else if (prop === 'box-shadow') setPendingShadow(val);\n else if (prop === 'border-color') setPendingBorderColor(val);\n else if (prop === 'border-width') setPendingBorderWidth(val);\n else if (prop === 'border-style') setPendingBorderStyle(val);\n else if (prop === 'font-size') setPendingFontSize(val);\n else if (prop === 'font-weight') setPendingFontWeight(val);\n else if (prop === 'padding') setPendingPadding(val);\n else if (prop === 'margin') setPendingMargin(val);\n else if (prop === 'gap') setPendingGap(val);\n else if (prop === 'width') setPendingWidth(val);\n else if (prop === 'height') setPendingHeight(val);\n else if (prop === 'justify-content') setPendingJustifyContent(val);\n else if (prop === 'align-items') setPendingAlignItems(val);\n });\n applyToDOM(_copiedStyles);\n }}>\n 粘贴样式({_copiedStyles.length} 个属性)\n </button>\n </div>\n )}\n\n </div>\n )}\n </>\n );\n}\n\n// ─── 主组件:管理 active + panels 数组 ───────────────────────────\ntype FileEntry = { name: string; desc: string };\n\nconst CODE_FILES: FileEntry[] = [\n { name: 'src/', desc: 'React 组件、页面、样式源码(不含调试工具)' },\n { name: 'index.html', desc: '应用入口 HTML' },\n { name: 'package.json', desc: '依赖包与脚本配置' },\n { name: 'tsconfig.json', desc: 'TypeScript 编译配置' },\n { name: 'vite.config.ts', desc: '构建工具配置' },\n];\n\nconst PRODUCT_FILES: FileEntry[] = [\n { name: 'docs/PRODUCT_PLAN.md', desc: '产品规划与路线图' },\n { name: 'docs/PROJECT.md', desc: '项目背景与目标概述' },\n { name: 'docs/DECISIONS.md', desc: '关键产品决策记录' },\n { name: 'docs/CHANGELOG.md', desc: '功能迭代变更日志' },\n { name: 'docs/CODE_STRUCTURE.md', desc: '前端目录结构说明' },\n { name: 'docs/DESIGN_STANDARDS.md', desc: '设计规范总览' },\n];\n\nconst DESIGN_FILES: FileEntry[] = [\n { name: 'docs/design/OVERVIEW.md', desc: '设计系统总览' },\n { name: 'docs/design/tokens.md', desc: 'Design Token 使用说明' },\n { name: 'docs/design/layout.md', desc: '页面布局规范' },\n { name: 'docs/design/component-index.md', desc: '组件清单索引' },\n { name: 'docs/design/business-components.md', desc: '业务组件说明' },\n];\n\nfunction FileList({ files }: { files: FileEntry[] }) {\n return (\n <ul className=\"di-dl-file-list\">\n {files.map(f => (\n <li key={f.name}>\n <span className=\"di-dl-file-name\">{f.name}</span>\n <span className=\"di-dl-file-desc\">{f.desc}</span>\n </li>\n ))}\n </ul>\n );\n}\n\ntype DlStatus = 'idle' | 'packing' | 'done' | 'error';\n\nfunction DownloadButton() {\n const { endpoints } = useDevInspectorConfig();\n const [open, setOpen] = useState(false);\n const [status, setStatus] = useState<DlStatus>('idle');\n const [filePath, setFilePath] = useState('');\n const [details, setDetails] = useState({ code: false, product: false, design: false });\n const [opts, setOpts] = useState({ code: true, product: false, design: false });\n\n function toggle(k: keyof typeof opts) {\n setOpts(prev => ({ ...prev, [k]: !prev[k] }));\n }\n function toggleDetail(k: keyof typeof details) {\n setDetails(prev => ({ ...prev, [k]: !prev[k] }));\n }\n function handleOpen() {\n setOpen(v => !v);\n if (open) setStatus('idle');\n }\n\n async function download() {\n if (!opts.code && !opts.product && !opts.design) return;\n setStatus('packing');\n try {\n const params = new URLSearchParams({\n code: opts.code ? '1' : '0',\n product: opts.product ? '1' : '0',\n design: opts.design ? '1' : '0',\n });\n const res = await fetch(`${endpoints.handoff}?${params}`);\n const json = await res.json();\n if (!json.ok) throw new Error(json.error);\n setFilePath(json.path);\n setStatus('done');\n } catch {\n setStatus('error');\n }\n }\n\n async function revealInFinder() {\n await fetch(`${endpoints.reveal}?path=${encodeURIComponent(filePath)}`);\n }\n\n const sections = [\n { key: 'code' as const, label: '前端代码', files: CODE_FILES },\n { key: 'product' as const, label: '产品文档', files: PRODUCT_FILES },\n { key: 'design' as const, label: '设计文档', files: DESIGN_FILES },\n ];\n\n return (\n <>\n <button className=\"di-dl-btn\" onClick={handleOpen}>下载</button>\n\n {open && (\n <div className=\"di-dl-modal\">\n <div className=\"di-dl-title\">选择下载内容</div>\n\n {status === 'packing' && (\n <div className=\"di-dl-status\">\n <span className=\"di-dl-spinner\" />\n 正在打包,请稍候…\n </div>\n )}\n\n {status === 'done' && (\n <div className=\"di-dl-done\">\n <div className=\"di-dl-done-check\">✓ 已保存至桌面</div>\n <div className=\"di-dl-done-path\">{filePath.replace(/.*\\//, '')}</div>\n <button className=\"di-dl-reveal-btn\" onClick={revealInFinder}>\n 在 Finder 中显示\n </button>\n </div>\n )}\n\n {status === 'error' && (\n <div className=\"di-dl-status di-dl-status--error\">打包失败,请查看控制台</div>\n )}\n\n {(status === 'idle' || status === 'error') && (<>\n {sections.map(({ key, label, files }) => (\n <div key={key}>\n <div className=\"di-dl-row\">\n <label className=\"di-dl-check-label\">\n <input type=\"checkbox\" checked={opts[key]} onChange={() => toggle(key)} />\n {label}\n </label>\n <button className=\"di-dl-detail-btn\" onClick={() => toggleDetail(key)}>\n {details[key] ? '收起' : '详情'}\n </button>\n </div>\n {details[key] && <FileList files={files} />}\n </div>\n ))}\n\n <button\n className=\"di-dl-confirm\"\n onClick={download}\n disabled={!opts.code && !opts.product && !opts.design}\n >\n 下载\n </button>\n </>)}\n </div>\n )}\n </>\n );\n}\n\nexport default function DevInspector() {\n const [active, setActive] = useState(false);\n const [tokenMap, setTokenMap] = useState<Record<string, string>>({});\n const [panels, setPanels] = useState<{ id: string; el: Element }[]>([]);\n const [viewportTick, setViewportTick] = useState(0);\n const modalOpenRef = useRef(false);\n\n useEffect(() => { setTokenMap(scanTokenMap()); }, []);\n\n useEffect(() => {\n const fn = (e: KeyboardEvent) => {\n if (!e.defaultPrevented && e.altKey && e.code === 'KeyI' && !isTextEntryTarget(e.target)) {\n e.preventDefault();\n setActive(v => {\n if (v) setPanels([]);\n return !v;\n });\n }\n if (e.key === 'Escape') { setActive(false); setPanels([]); }\n };\n window.addEventListener('keydown', fn);\n return () => window.removeEventListener('keydown', fn);\n }, []);\n\n useEffect(() => {\n const onOver = (e: MouseEvent) => {\n if (!active || modalOpenRef.current) return;\n const el = e.target as Element;\n if (!el?.classList) return;\n if (isInsidePanel(el)) { el.classList.remove('di-hover'); return; }\n el.classList.add('di-hover');\n };\n const onOut = (e: MouseEvent) => { (e.target as Element)?.classList?.remove('di-hover'); };\n const onClick = (e: MouseEvent) => {\n if (!active || modalOpenRef.current) return;\n const el = e.target as Element;\n if (isInsidePanel(el)) return;\n e.preventDefault(); e.stopPropagation();\n el.classList.remove('di-hover');\n setPanels(prev =>\n prev.length === 0\n ? [{ id: 'main', el }]\n : prev.map((p, i) => i === 0 ? { ...p, el } : p)\n );\n };\n document.addEventListener('mouseover', onOver, true);\n document.addEventListener('mouseout', onOut, true);\n document.addEventListener('click', onClick, true);\n return () => {\n document.removeEventListener('mouseover', onOver, true);\n document.removeEventListener('mouseout', onOut, true);\n document.removeEventListener('click', onClick, true);\n };\n }, [active]);\n\n useEffect(() => {\n if (!active) {\n document.querySelectorAll('.di-selected,.di-hover').forEach(e => e.classList.remove('di-selected','di-hover'));\n }\n }, [active]);\n\n useEffect(() => {\n document.body.style.cursor = active ? 'crosshair' : '';\n return () => { document.body.style.cursor = ''; };\n }, [active]);\n\n useEffect(() => {\n if (!active) return undefined;\n let frame = 0;\n const update = () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => setViewportTick(tick => tick + 1));\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n return () => {\n cancelAnimationFrame(frame);\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }, [active]);\n\n const primaryEl = panels[0]?.el;\n const triggerTooltip = active\n ? `退出编辑(${EXIT_SHORTCUT_LABEL})`\n : `进入编辑(${EDIT_SHORTCUT_LABEL})`;\n\n return (\n <>\n <DownloadButton />\n\n <button\n className={`di-trigger${active ? ' di-trigger--on' : ''}`}\n onClick={() => { setActive(v => !v); if (active) setPanels([]); }}\n title={triggerTooltip}\n aria-label={triggerTooltip}\n data-tooltip={triggerTooltip}\n >\n {active ? '退出' : '编辑'}\n </button>\n\n {/* 已选中标签 */}\n {active && primaryEl && (() => {\n void viewportTick;\n const rect = primaryEl.getBoundingClientRect();\n const labelText = `已选中 ${getElementDisplayName(primaryEl)}`;\n const labelPos = calcSelectionLabelPos(rect, labelText);\n return (\n <div\n className={`di-label di-label--${labelPos.placement}`}\n style={{ top: labelPos.top, left: labelPos.left }}\n >\n {labelText}\n </div>\n );\n })()}\n\n {panels.map((p) => (\n <InspectorPanel\n key={p.id}\n targetEl={p.el}\n tokenMap={tokenMap}\n onTokenMapUpdate={updates => setTokenMap(prev => ({ ...prev, ...updates }))}\n onClose={() => setPanels(prev => prev.filter(x => x.id !== p.id))}\n />\n ))}\n </>\n );\n}\n","import { createContext, useContext, type ReactNode } from 'react';\nimport { type DevInspectorConfig, defaultDevInspectorConfig, mergeDevInspectorConfig } from './config';\n\nconst DevInspectorConfigContext = createContext<DevInspectorConfig>(defaultDevInspectorConfig);\n\nexport function DevInspectorProvider({\n children,\n config,\n}: {\n children: ReactNode;\n config?: Partial<DevInspectorConfig> & {\n endpoints?: Partial<DevInspectorConfig['endpoints']>;\n tokens?: Partial<DevInspectorConfig['tokens']>;\n };\n}) {\n return (\n <DevInspectorConfigContext.Provider value={mergeDevInspectorConfig(config)}>\n {children}\n </DevInspectorConfigContext.Provider>\n );\n}\n\nexport function useDevInspectorConfig() {\n return useContext(DevInspectorConfigContext);\n}\n","// ─── 类型 ────────────────────────────────────────────────────\n\nexport type PaletteColor = { label: string; val: string; token: string };\nexport type PaletteGroup = { group: string; colors: PaletteColor[] };\n\nexport type ShadowToken = {\n cssVar: string;\n value: string;\n label: string;\n usage: string;\n};\n\nexport type TypographyToken = {\n key: string;\n label: string;\n fontSizeVar: string;\n fontWeightVar: string;\n colorVar: string;\n fontSize: string;\n fontWeight: string;\n color: string;\n usage: string;\n};\n\nexport type RadiusPreset = {\n label: string;\n sub: string;\n value: string;\n token: string;\n};\n\nexport type SpaceStep = {\n label: string;\n size: string;\n val: string;\n};\n\nexport type TypographyStyleOption = {\n key: string;\n label: string;\n value: string;\n fontWeight: string;\n color: string;\n colorVar: string;\n usage: string;\n};\n\nexport type FontSizeOption = {\n label: string;\n value: string;\n token?: string;\n};\n\nexport type FontWeightOption = { label: string; value: string };\n\nexport type ContainerStyleOption = {\n key: string;\n label: string;\n backgroundColor: string;\n backgroundVar: string;\n borderColor: string;\n colorVar: string;\n borderWidth: string;\n borderStyle: string;\n borderRadius: string;\n radiusVar?: string;\n usage: string;\n};\n\nexport type BorderStyleOption = ContainerStyleOption;\n\nexport type DevInspectorEndpoints = {\n applyCss: string;\n submitStyleIntent: string;\n styleIntents: string;\n deleteStyleIntent: string;\n handoff: string;\n reveal: string;\n};\n\nexport type DevInspectorTokenConfig = {\n colorPalette: PaletteGroup[];\n tokenLabels: Record<string, string>;\n radiusPresets: RadiusPreset[];\n spaceSteps: SpaceStep[];\n borderWidthSteps: string[];\n containerStyles?: ContainerStyleOption[];\n borderStyles?: BorderStyleOption[];\n typographyStyles?: TypographyStyleOption[];\n fontSizeOptions?: FontSizeOption[];\n fontWeightOptions: FontWeightOption[];\n shadowTokens: ShadowToken[];\n typographyTokens: TypographyToken[];\n};\n\nexport type DevInspectorConfig = {\n rootId: string;\n endpoints: DevInspectorEndpoints;\n tokens: DevInspectorTokenConfig;\n};\n\nexport type DevInspectorConfigOverrides = Omit<Partial<DevInspectorConfig>, 'endpoints' | 'tokens'> & {\n endpoints?: Partial<DevInspectorEndpoints>;\n tokens?: Partial<DevInspectorTokenConfig>;\n};\n\n// ─── 内置最小默认值(项目侧可通过 Provider 覆盖) ───────────────\n\nconst FALLBACK_TYPOGRAPHY_STYLES: TypographyStyleOption[] = [\n {\n key: 'card-title',\n label: '卡片标题',\n value: '14px',\n fontWeight: '700',\n color: '#111827',\n colorVar: '--color-text-strong',\n usage: '卡片、模块、表单区块标题',\n },\n {\n key: 'card-body',\n label: '卡片正文',\n value: '13px',\n fontWeight: '400',\n color: '#374151',\n colorVar: '--color-text-default',\n usage: '卡片描述、正文说明',\n },\n {\n key: 'helper-text',\n label: '辅助文字',\n value: '12px',\n fontWeight: '400',\n color: '#64748b',\n colorVar: '--color-text-muted',\n usage: '提示、说明、次要信息',\n },\n];\n\nconst FALLBACK_FONT_SIZE_OPTIONS: FontSizeOption[] = [\n { label: 'XS', value: '11px', token: '--font-size-xs' },\n { label: 'S', value: '12px', token: '--font-size-s' },\n { label: 'M', value: '14px', token: '--font-size-m' },\n { label: 'L', value: '16px', token: '--font-size-l' },\n { label: 'XL', value: '20px', token: '--font-size-xl' },\n { label: 'XXL', value: '24px', token: '--font-size-xxl' },\n];\n\nconst FALLBACK_CONTAINER_STYLES: ContainerStyleOption[] = [\n {\n key: 'plain-surface',\n label: '纯色容器',\n backgroundColor: '#ffffff',\n backgroundVar: '--color-surface',\n borderColor: 'transparent',\n colorVar: 'transparent',\n borderWidth: '0px',\n borderStyle: 'none',\n borderRadius: '0px',\n usage: '无描边普通容器',\n },\n {\n key: 'surface-card',\n label: '容器边框',\n backgroundColor: '#ffffff',\n backgroundVar: '--color-surface',\n borderColor: '#e5e7eb',\n colorVar: '--color-border-default',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: '8px',\n usage: '普通卡片、表单容器',\n },\n {\n key: 'focus-card',\n label: '强调边框',\n backgroundColor: '#ffffff',\n backgroundVar: '--color-surface',\n borderColor: '#7c3aed',\n colorVar: '--color-brand-primary',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: '8px',\n usage: '选中态、强调容器',\n },\n];\n\nconst FALLBACK_SHADOW_TOKENS: ShadowToken[] = [\n {\n cssVar: '--shadow-soft',\n value: '0 14px 42px rgba(15,23,42,0.08)',\n label: '柔和',\n usage: '普通卡片、表单容器',\n },\n {\n cssVar: '--shadow-floating',\n value: '0 22px 56px rgba(15,23,42,0.14)',\n label: '浮起',\n usage: '浮层、Popover、悬浮卡片',\n },\n {\n cssVar: '--shadow-emphasis',\n value: '0 24px 72px rgba(109,93,252,0.18)',\n label: '强调',\n usage: '品牌强调、选中态',\n },\n];\n\nconst FALLBACK_TOKENS: DevInspectorTokenConfig = {\n colorPalette: [],\n tokenLabels: {},\n radiusPresets: [\n { label: '无', sub: '', value: '0px', token: '' },\n { label: 'S', sub: '4px', value: '4px', token: '' },\n { label: 'M', sub: '8px', value: '8px', token: '' },\n { label: 'L', sub: '12px', value: '12px', token: '' },\n { label: 'XL', sub: '16px', value: '16px', token: '' },\n { label: 'XXL', sub: '24px', value: '24px', token: '' },\n ],\n spaceSteps: [\n { label: '无', size: '', val: '0px' },\n { label: 'S', size: '4px', val: '4px' },\n { label: 'M', size: '8px', val: '8px' },\n { label: 'L', size: '12px', val: '12px' },\n { label: 'XL', size: '16px', val: '16px' },\n { label: 'XXL', size: '24px', val: '24px' },\n ],\n borderWidthSteps: ['0px', '1px', '2px', '4px'],\n containerStyles: FALLBACK_CONTAINER_STYLES,\n typographyStyles: FALLBACK_TYPOGRAPHY_STYLES,\n fontSizeOptions: FALLBACK_FONT_SIZE_OPTIONS,\n fontWeightOptions: [\n { label: '常', value: '400' },\n { label: '中', value: '500' },\n { label: '粗', value: '600' },\n { label: '黑', value: '700' },\n ],\n shadowTokens: FALLBACK_SHADOW_TOKENS,\n typographyTokens: [],\n};\n\nexport const defaultDevInspectorConfig: DevInspectorConfig = {\n rootId: 'dev-inspector-root',\n endpoints: {\n applyCss: '/__dev/apply-css',\n submitStyleIntent: '/__dev/submit-style-intent',\n styleIntents: '/__dev/style-intents',\n deleteStyleIntent: '/__dev/style-intents/delete',\n handoff: '/__dev/handoff',\n reveal: '/__dev/reveal',\n },\n tokens: FALLBACK_TOKENS,\n};\n\nexport function mergeDevInspectorConfig(\n overrides?: DevInspectorConfigOverrides,\n): DevInspectorConfig {\n return {\n ...defaultDevInspectorConfig,\n ...overrides,\n endpoints: {\n ...defaultDevInspectorConfig.endpoints,\n ...overrides?.endpoints,\n },\n tokens: {\n ...defaultDevInspectorConfig.tokens,\n ...overrides?.tokens,\n },\n };\n}\n","import { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport DevInspector from './DevInspector';\nimport { DevInspectorProvider } from './DevInspectorProvider';\nimport { mergeDevInspectorConfig, type DevInspectorConfigOverrides } from './config';\n\nexport function mountDevInspector(\n config?: DevInspectorConfigOverrides,\n) {\n const resolved = mergeDevInspectorConfig(config);\n const existingRoot = document.getElementById(resolved.rootId);\n if (existingRoot) return existingRoot;\n\n const devRoot = document.createElement('div');\n devRoot.id = resolved.rootId;\n document.body.appendChild(devRoot);\n\n createRoot(devRoot).render(\n <StrictMode>\n <DevInspectorProvider config={resolved}>\n <DevInspector />\n </DevInspectorProvider>\n </StrictMode>,\n );\n\n return devRoot;\n}\n"],"mappings":"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","names":["jsx","jsx","componentMeta","prompt","jsx"]}
1
+ {"version":3,"sources":["../src/DevInspector.tsx","../src/DevInspectorProvider.tsx","../src/tokens/typography.json","../src/config.ts","../src/plugins/component-maker.ts","../src/mount.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\nimport type { CSSProperties, KeyboardEvent as ReactKeyboardEvent, MouseEvent as ReactMouseEvent } from 'react';\nimport { ArrowDown, ArrowLeft, ArrowUp, Check, ChevronDown, CircleHelp, Component as ComponentIcon, Library as LibraryIcon, Minus, Plus, RotateCcw, Trash2, Upload, WandSparkles, X } from 'lucide-react';\nimport './dev-inspector.css';\nimport { useDevInspectorConfig } from './DevInspectorProvider';\nimport type { DevInspectorTokenConfig } from './config';\nimport type {\n ContainerStyleOption,\n DevInspectorComponentPreview,\n DevInspectorComponentPreviewCategory,\n DevInspectorComponentPreviewVariant,\n PaletteColor,\n PaletteGroup,\n TypographyStyleOption,\n} from './config';\nimport { buildComponentMakerPrompt, formatComponentMakerSpecDraft, formatComponentMakerVariantDraft } from './plugins/component-maker';\nimport type { ComponentMakerContext, ComponentMakerEditablePart, ComponentMakerSpecDraft, ComponentMakerVariantDraft, ComponentMakerVariantItem } from './plugins/component-maker';\n\ndeclare global {\n interface Window {\n __DEV_INSPECTOR_LAST_PROMPT__?: string;\n }\n}\n\nfunction calcDropPos(rect: DOMRect, dropHeight = 280, dropWidth = 280): { top: number; left: number } {\n const spaceBelow = window.innerHeight - rect.bottom;\n const top = spaceBelow >= dropHeight + 8 ? rect.bottom + 4 : rect.top - dropHeight - 4;\n const maxLeft = Math.max(8, window.innerWidth - dropWidth - 8);\n return { top: Math.max(8, top), left: Math.min(Math.max(8, rect.left), maxLeft) };\n}\n\nfunction handleArrowKeyStep<T extends HTMLElement>(\n event: ReactKeyboardEvent<T>,\n onStep: (delta: number) => void,\n onEnter?: () => void,\n) {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault();\n onStep(event.key === 'ArrowUp' ? 1 : -1);\n return;\n }\n if (event.key === 'Enter') onEnter?.();\n}\n\nfunction renderSubmitLabel(submitMsg: string) {\n if (submitMsg === '已复制') {\n return (\n <span className=\"di-btn-save-content\">\n <Check size={14} strokeWidth={2.4} aria-hidden=\"true\" />\n <span>已复制</span>\n </span>\n );\n }\n return submitMsg || '发送给AI';\n}\n\n// ─── 常量(Inspector 专属)───────────────────────────────────────\nconst COLOR_PROPS = [\n { label: '背景色', prop: 'background-color' },\n];\n\n// hex/rgba → 短标签(通过色板反查)\nfunction getColorLabel(val: string, colorPalette: DevInspectorTokenConfig['colorPalette']): string | null {\n const normalizedVal = resolveColorValue(val);\n for (const g of colorPalette) {\n const found = g.colors.find((c: PaletteColor) => resolveColorValue(c.val) === normalizedVal);\n if (found) return `${g.group}·${found.label}`;\n }\n return null;\n}\n\nfunction getTypographyToken(\n fontSize: string,\n fontWeight: string,\n color: string,\n typographyTokens: DevInspectorTokenConfig['typographyTokens'],\n) {\n const normalizedColor = normalizeColor(color);\n return typographyTokens.find(token =>\n token.fontSize === fontSize.trim()\n && token.fontWeight === fontWeight.trim()\n && normalizeColor(token.color) === normalizedColor,\n ) ?? null;\n}\n\nfunction getTypographyStyles(tokens: DevInspectorTokenConfig): TypographyStyleOption[] {\n return tokens.typographyStyles ?? [];\n}\n\nfunction getContainerStyles(tokens: DevInspectorTokenConfig): ContainerStyleOption[] {\n return tokens.containerStyles ?? tokens.borderStyles ?? [];\n}\n\nfunction getTypographyStyle(\n fontSize: string,\n fontWeight: string,\n color: string,\n typographyStyles: TypographyStyleOption[],\n typographyTokens: DevInspectorTokenConfig['typographyTokens'],\n): TypographyStyleOption | null {\n const matchedToken = getTypographyToken(fontSize, fontWeight, color, typographyTokens);\n const normalizedColor = normalizeColor(color);\n\n return (matchedToken\n ? typographyStyles.find(style => style.key === matchedToken.key)\n : null)\n ?? typographyStyles.find(style =>\n style.value === fontSize.trim()\n && style.fontWeight === fontWeight.trim()\n && normalizeColor(style.color) === normalizedColor,\n )\n ?? null;\n}\n\nfunction getContainerStyle(\n backgroundColor: string,\n borderWidth: string,\n borderStyle: string,\n borderColor: string,\n borderRadius: string,\n containerStyles: ContainerStyleOption[],\n): ContainerStyleOption | null {\n const normalizedBackground = normalizeColor(backgroundColor || 'transparent');\n const normalizedColor = normalizeColor(borderColor || 'transparent');\n const normalizedWidth = borderWidth.trim();\n const normalizedStyle = borderStyle.trim();\n const normalizedRadius = borderRadius.trim();\n\n return containerStyles.find(style =>\n normalizeColor(style.backgroundColor) === normalizedBackground\n && style.borderWidth === normalizedWidth\n && style.borderStyle === normalizedStyle\n && normalizeColor(style.borderColor) === normalizedColor\n && style.borderRadius === normalizedRadius,\n ) ?? null;\n}\n\nconst BORDER_STYLE_OPTIONS = [\n { label: '─', value: 'solid', title: '实线' },\n { label: '┄', value: 'dashed', title: '虚线' },\n { label: '⋯', value: 'dotted', title: '点线' },\n { label: '✕', value: 'none', title: '无' },\n];\n\ntype SizeAxis = 'width' | 'height';\ntype SizeMode = 'fill' | 'hug' | 'fixed';\ntype AlignProp = 'justify-content' | 'align-items';\ntype ScopeMode = 'current' | 'component';\ntype InspectorPluginMode = 'component-maker';\ntype ComponentMakerSourceMode = 'existing' | 'new';\ntype ComponentMakerAction = 'create-current' | 'add-slot' | 'create-current-variant' | 'create-other-variant';\ntype ComponentCreateResolution = 'reuse' | 'new';\ntype ComponentMakerVariantVisual = 'neutral' | 'compact' | 'floating' | 'emphasis' | 'success' | 'warning' | 'danger' | 'disabled' | 'brand' | 'size';\ntype ComponentMakerVariantSuggestion = ComponentMakerVariantItem & {\n id: string;\n label: string;\n description: string;\n visual: ComponentMakerVariantVisual;\n};\ntype StyleIntentChange = { prop: string; val: string; from?: string };\ntype StyleIntentEntryGroup = { selector: string; changes: StyleIntentChange[] };\ntype StyleIntentQueueEntry = {\n id: string;\n createdAt: string;\n targetLabel?: string;\n selector?: string;\n note?: string;\n entries: StyleIntentEntryGroup[];\n};\ntype StyleIntentSummary = {\n pendingCount: number;\n latestPending: StyleIntentQueueEntry | null;\n pendingEntries: StyleIntentQueueEntry[];\n};\ntype LocalDraftChange = { prop: string; from: string; val: string };\ntype LocalDraftEntry = {\n key: string;\n selector: string;\n targetLabel: string;\n scopeLabel: string;\n changes: LocalDraftChange[];\n updatedAt: number;\n};\n\nconst EMPTY_COMPONENT_SPEC_DRAFT: ComponentMakerSpecDraft = {\n sourceMode: '',\n action: '',\n classification: '',\n componentName: '',\n usage: '',\n editableParts: [],\n variants: '',\n slots: '',\n styleRules: '',\n};\n\nconst EMPTY_COMPONENT_VARIANT_DRAFT: ComponentMakerVariantDraft = {\n dimension: '',\n name: '',\n base: '',\n rules: '',\n items: [],\n};\n\nconst SIZE_OPTIONS: { label: string; mode: SizeMode; value?: string }[] = [\n { label: 'Fill', mode: 'fill', value: '100%' },\n { label: 'Hug', mode: 'hug', value: 'fit-content' },\n { label: 'Fixed', mode: 'fixed' },\n];\n\ntype ComponentTypeGroup = 'text' | 'action' | 'structure' | 'data' | 'form' | 'media' | 'navigation';\ntype ComponentContainerKey = 'page' | 'card' | 'menu' | 'form' | 'modal' | 'list' | 'navigation' | 'action' | 'other';\n\ntype ComponentTypeOption = {\n label: string;\n name: string;\n hint: string;\n group: ComponentTypeGroup;\n category: string;\n codeName: string;\n slotLabel: string;\n};\n\ntype ComponentContainerOption = {\n key: ComponentContainerKey;\n label: string;\n codePrefix: string;\n hint: string;\n};\n\ntype ComponentPurposeOption = {\n label: string;\n codePart: string;\n slotLabel: string;\n hint: string;\n group: ComponentTypeGroup;\n};\n\nconst COMPONENT_TYPE_GROUP_LABELS: Record<ComponentTypeGroup, string> = {\n text: '文本',\n action: '操作',\n structure: '结构',\n data: '数据',\n form: '表单',\n media: '媒体',\n navigation: '导航',\n};\n\nconst COMPONENT_TYPE_ALIASES: Record<string, string> = {\n 标题: '页面标题',\n 文本: '正文',\n 标签: '状态标签',\n 输入框: '输入框',\n 表单控件: '输入框',\n};\n\nconst COMPONENT_CONTAINER_OPTIONS: ComponentContainerOption[] = [\n { key: 'page', label: '页面', codePrefix: 'page', hint: '页面级内容或页面骨架' },\n { key: 'card', label: '卡片', codePrefix: 'card', hint: '卡片内的信息块' },\n { key: 'menu', label: '菜单', codePrefix: 'menu', hint: '菜单或列表导航项' },\n { key: 'form', label: '表单', codePrefix: 'form', hint: '表单字段、控件和提示' },\n { key: 'modal', label: '弹窗', codePrefix: 'modal', hint: '弹窗、抽屉或浮层内容' },\n { key: 'list', label: '列表', codePrefix: 'list', hint: '重复列表或表格单元' },\n { key: 'navigation', label: '导航', codePrefix: 'nav', hint: '导航栏、面包屑和入口' },\n { key: 'action', label: '操作区', codePrefix: 'action', hint: '按钮组或操作工具区' },\n { key: 'other', label: '其他', codePrefix: 'section', hint: '暂未明确语义的区域' },\n];\n\nconst COMPONENT_PURPOSE_OPTIONS: ComponentPurposeOption[] = [\n { label: '标题', codePart: 'title', slotLabel: '标题文字', hint: '标题或主视觉文字', group: 'text' },\n { label: '正文', codePart: 'text', slotLabel: '文本内容', hint: '正文、段落或普通内容', group: 'text' },\n { label: '说明', codePart: 'description', slotLabel: '说明文', hint: '描述、提示或辅助说明', group: 'text' },\n { label: '标签', codePart: 'tag', slotLabel: '标签文案', hint: '分类或短标签', group: 'data' },\n { label: '操作入口', codePart: 'action', slotLabel: '操作文案', hint: '主要操作或入口按钮', group: 'action' },\n { label: '按钮文案', codePart: 'button-label', slotLabel: '按钮文案', hint: '按钮内可替换文案', group: 'text' },\n { label: '占位提示', codePart: 'placeholder', slotLabel: '占位提示', hint: '输入控件里的 placeholder', group: 'form' },\n { label: '输入控件', codePart: 'input', slotLabel: '输入值', hint: '表单输入或选择控件', group: 'form' },\n { label: '帮助说明', codePart: 'help-text', slotLabel: '帮助说明', hint: '字段帮助或补充说明', group: 'text' },\n { label: '错误提示', codePart: 'error-message', slotLabel: '错误提示', hint: '校验失败或错误说明', group: 'form' },\n { label: '数值', codePart: 'value', slotLabel: '数值', hint: '指标、数量或价格', group: 'data' },\n { label: '状态', codePart: 'status', slotLabel: '状态文案', hint: '状态展示或状态标签', group: 'data' },\n { label: '图标', codePart: 'icon', slotLabel: '图标名称', hint: '图形符号或 icon', group: 'media' },\n { label: '内容区块', codePart: 'section', slotLabel: '内容', hint: '承载布局或内容区域', group: 'structure' },\n { label: '菜单项', codePart: 'menu-item', slotLabel: '菜单文案', hint: '菜单或下拉里的选项', group: 'navigation' },\n { label: '分组标题', codePart: 'group-title', slotLabel: '分组标题', hint: '分组或列表的小标题', group: 'text' },\n { label: '导航项', codePart: 'nav-item', slotLabel: '导航文案', hint: '导航入口或跳转项', group: 'navigation' },\n { label: '主操作', codePart: 'primary-action', slotLabel: '主操作文案', hint: '页面或区块的主要动作', group: 'action' },\n { label: '次操作', codePart: 'secondary-action', slotLabel: '次操作文案', hint: '辅助动作或次级按钮', group: 'action' },\n { label: '图标按钮', codePart: 'icon-button', slotLabel: '图标名称', hint: '仅用图标表达的操作', group: 'action' },\n { label: '功能列表', codePart: 'feature-list', slotLabel: '列表内容', hint: '展示功能、能力或任务条目', group: 'structure' },\n { label: '数据列表', codePart: 'data-list', slotLabel: '列表内容', hint: '展示数据记录或业务对象', group: 'structure' },\n { label: '导航列表', codePart: 'nav-list', slotLabel: '列表内容', hint: '展示导航入口集合', group: 'navigation' },\n { label: '步骤列表', codePart: 'step-list', slotLabel: '列表内容', hint: '展示流程步骤或顺序', group: 'structure' },\n { label: '内容列表', codePart: 'content-list', slotLabel: '列表内容', hint: '展示文章、说明或内容集合', group: 'structure' },\n { label: '其他', codePart: 'custom', slotLabel: '内容', hint: '自定义职责,可在任务里补充说明', group: 'structure' },\n];\n\nconst COMPONENT_PURPOSES_BY_CONTAINER: Record<ComponentContainerKey, string[]> = {\n page: ['标题', '正文', '说明', '内容区块', '操作入口', '其他'],\n card: ['标题', '正文', '说明', '标签', '操作入口', '内容区块'],\n menu: ['菜单项', '分组标题', '图标', '状态', '操作入口', '其他'],\n form: ['输入控件', '占位提示', '帮助说明', '错误提示', '操作入口', '其他'],\n modal: ['标题', '正文', '说明', '内容区块', '操作入口', '其他'],\n list: ['功能列表', '数据列表', '导航列表', '步骤列表', '内容列表', '其他'],\n navigation: ['导航项', '分组标题', '图标', '状态', '其他'],\n action: ['主操作', '次操作', '按钮文案', '图标按钮', '其他'],\n other: ['内容区块', '标题', '正文', '说明', '操作入口', '其他'],\n};\n\nconst COMPONENT_TYPE_OPTIONS: ComponentTypeOption[] = [\n { label: '页面标题', name: 'Heading', hint: '页面主标题', group: 'text', category: '标题', codeName: 'page-title', slotLabel: '标题文字' },\n { label: '区块标题', name: 'Heading', hint: '区块标题', group: 'text', category: '标题', codeName: 'section-title', slotLabel: '标题文字' },\n { label: '小标题', name: 'Heading', hint: '局部小标题', group: 'text', category: '标题', codeName: 'subsection-title', slotLabel: '标题文字' },\n { label: '卡片标题', name: 'Heading', hint: '卡片内标题', group: 'text', category: '标题', codeName: 'card-title', slotLabel: '标题文字' },\n { label: '正文', name: 'Text', hint: '段落正文', group: 'text', category: '文本', codeName: 'body-text', slotLabel: '文本内容' },\n { label: '说明文字', name: 'Text', hint: '辅助说明 / 描述', group: 'text', category: '文本', codeName: 'description-text', slotLabel: '说明文' },\n { label: '链接文字', name: 'Text link', hint: '文本跳转入口', group: 'text', category: '文本', codeName: 'text-link', slotLabel: '链接文案' },\n { label: '按钮文字', name: 'Button label', hint: '按钮内文案', group: 'text', category: '文本', codeName: 'button-label', slotLabel: '按钮文案' },\n { label: '按钮', name: 'Button', hint: '触发操作', group: 'action', category: '操作', codeName: 'button', slotLabel: '按钮文案' },\n { label: '图标按钮', name: 'Icon button', hint: '图标触发操作', group: 'action', category: '操作', codeName: 'icon-button', slotLabel: '无' },\n { label: '文字按钮', name: 'Text button', hint: '轻量文字操作', group: 'action', category: '操作', codeName: 'text-button', slotLabel: '按钮文案' },\n { label: '卡片', name: 'Card', hint: '承载一组信息', group: 'structure', category: '容器', codeName: 'card', slotLabel: '内容' },\n { label: '容器', name: 'Container', hint: '布局承载', group: 'structure', category: '布局', codeName: 'container', slotLabel: '内容' },\n { label: '列表项', name: 'List item', hint: '重复列表单元', group: 'structure', category: '列表', codeName: 'list-item', slotLabel: '内容' },\n { label: '状态标签', name: 'Badge', hint: '状态标识', group: 'data', category: '标识', codeName: 'status-badge', slotLabel: '状态文案' },\n { label: '分类标签', name: 'Tag', hint: '分类标识', group: 'data', category: '标识', codeName: 'tag', slotLabel: '标签文案' },\n { label: '输入框', name: 'Input', hint: '单行文本输入', group: 'form', category: '输入', codeName: 'input', slotLabel: '输入值' },\n { label: '文本域', name: 'Textarea', hint: '多行文本输入', group: 'form', category: '输入', codeName: 'textarea', slotLabel: '输入值' },\n { label: '选择控件', name: 'Select', hint: '选择一个选项', group: 'form', category: '选择', codeName: 'select', slotLabel: '选项值' },\n { label: '图片', name: 'Image', hint: '图片展示', group: 'media', category: '媒体', codeName: 'image', slotLabel: '图片资源' },\n { label: '图标', name: 'Icon', hint: '图形符号', group: 'media', category: '符号', codeName: 'icon', slotLabel: '图标名称' },\n { label: '导航项', name: 'Nav item', hint: '导航入口', group: 'navigation', category: '导航', codeName: 'nav-item', slotLabel: '导航文案' },\n { label: '面包屑项', name: 'Breadcrumb item', hint: '层级导航项', group: 'navigation', category: '导航', codeName: 'breadcrumb-item', slotLabel: '导航文案' },\n];\n\nconst COMPONENT_MAKER_ACTION_OPTIONS: { key: ComponentMakerAction; label: string; hint: string }[] = [\n { key: 'create-current', label: '新建组件', hint: '把当前对象沉淀为默认组件' },\n { key: 'add-slot', label: '加入组件', hint: '作为组件里的可编辑内容' },\n { key: 'create-current-variant', label: '新增当前变体', hint: '把当前样式作为该组件新变体' },\n { key: 'create-other-variant', label: '新增其他变体', hint: '手动定义未出现在页面上的变体' },\n];\n\nconst COMPONENT_MAKER_ACTION_LABELS: Record<ComponentMakerAction, string> = Object.fromEntries(\n COMPONENT_MAKER_ACTION_OPTIONS.map(option => [option.key, option.label]),\n) as Record<ComponentMakerAction, string>;\n\nconst COMPONENT_INTERACTION_STATE_OPTIONS: {\n key: string;\n label: string;\n description: string;\n visual: ComponentMakerVariantVisual;\n}[] = [\n { key: 'hover', label: '悬停', description: '鼠标悬停反馈', visual: 'floating' },\n { key: 'pressed', label: '按下', description: '按下瞬间反馈', visual: 'compact' },\n { key: 'selected', label: '选中', description: '当前选中状态', visual: 'brand' },\n { key: 'disabled', label: '禁用', description: '不可操作状态', visual: 'disabled' },\n];\n\nconst COMPONENT_GENERIC_SIZE_OPTIONS: {\n key: string;\n label: string;\n description: string;\n visual: ComponentMakerVariantVisual;\n}[] = [\n { key: 's', label: 'S', description: '小规格', visual: 'compact' },\n { key: 'm', label: 'M', description: '默认规格', visual: 'size' },\n { key: 'l', label: 'L', description: '大规格', visual: 'size' },\n];\n\nconst JUSTIFY_OPTIONS = [\n { label: '默认', value: 'normal' },\n { label: '左', value: 'flex-start' },\n { label: '中', value: 'center' },\n { label: '右', value: 'flex-end' },\n { label: '分散', value: 'space-between' },\n];\n\nconst ALIGN_ITEMS_OPTIONS = [\n { label: '默认', value: 'normal' },\n { label: '上', value: 'flex-start' },\n { label: '中', value: 'center' },\n { label: '下', value: 'flex-end' },\n { label: '拉伸', value: 'stretch' },\n];\n\nconst EDIT_SHORTCUT_LABEL = 'Mac Option+I / Windows Alt+I';\nconst EXIT_SHORTCUT_LABEL = 'Esc / Mac Option+I / Windows Alt+I';\n\ntype InspectorSectionKey = 'text' | 'layout' | 'shadow' | 'space';\n\nconst SECTION_RESET_PROPS: Record<InspectorSectionKey, string[]> = {\n text: ['font-size', 'font-weight', 'color'],\n layout: ['translate', 'width', 'height', 'min-height', 'max-height', 'justify-content', 'align-items'],\n shadow: ['box-shadow'],\n space: ['padding', 'margin', 'gap'],\n};\n\n// ─── 工具函数 ────────────────────────────────────────────────────\nfunction rgbToHex(rgb: string): string {\n const m = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (!m) return rgb;\n return '#' + [m[1], m[2], m[3]].map(n => parseInt(n).toString(16).padStart(2, '0')).join('');\n}\n\nfunction isTextEntryTarget(target: EventTarget | null): boolean {\n const el = target instanceof HTMLElement ? target : null;\n if (!el) return false;\n const tag = el.tagName.toLowerCase();\n return el.isContentEditable\n || tag === 'input'\n || tag === 'textarea'\n || tag === 'select'\n || !!el.closest('[contenteditable=\"true\"]');\n}\n\nfunction normalizeColor(val: string): string {\n const raw = val.trim();\n if (raw === 'transparent' || /^rgba\\(\\s*0,\\s*0,\\s*0,\\s*0\\s*\\)$/i.test(raw)) return 'transparent';\n const m = raw.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)$/);\n if (m) return '#' + [m[1],m[2],m[3]].map(n=>parseInt(n).toString(16).padStart(2,'0')).join('');\n if (/^#[0-9a-f]{3,8}$/i.test(raw)) return raw.toLowerCase();\n return raw;\n}\n\nfunction resolveColorValue(val: string): string {\n const normalized = normalizeColor(val || '');\n if (!normalized || normalized === 'transparent') return normalized || 'transparent';\n if (/^#[0-9a-f]{6}$/i.test(normalized)) return normalized;\n if (typeof document === 'undefined' || !document.body) return normalized;\n const probe = document.createElement('div');\n probe.style.color = normalized;\n probe.style.position = 'fixed';\n probe.style.opacity = '0';\n probe.style.pointerEvents = 'none';\n document.body.appendChild(probe);\n const computed = normalizeColor(getComputedStyle(probe).color.trim());\n probe.remove();\n return computed || normalized;\n}\n\nfunction isTransparentColor(val: string): boolean {\n return normalizeColor(val || 'transparent') === 'transparent';\n}\n\nfunction formatColorDisplay(val: string): string {\n if (isTransparentColor(val)) return '透明';\n // rgba(r,g,b,a) → #hex / a%\n const m = val.match(/^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([\\d.]+)\\)$/);\n if (m) {\n const hex = '#' + [m[1],m[2],m[3]].map(n=>parseInt(n).toString(16).padStart(2,'0')).join('');\n const alpha = Math.round(parseFloat(m[4]) * 100);\n return alpha < 100 ? `${hex} / ${alpha}%` : hex;\n }\n return val;\n}\n\nfunction isColorDark(val: string): boolean {\n if (isTransparentColor(val)) return false;\n const m = val.match(/^#([0-9a-f]{6})$/i);\n if (!m) return true;\n const r = parseInt(m[1].slice(0,2),16);\n const g = parseInt(m[1].slice(2,4),16);\n const b = parseInt(m[1].slice(4,6),16);\n return (r*299 + g*587 + b*114) / 1000 < 128;\n}\n\nconst shadowValueCache = new Map<string, string>();\n\n// 跨面板共享的复制样式缓存\nlet _copiedStyles: { prop: string; val: string }[] = [];\n\nfunction canonicalizeShadowValue(val: string): string {\n const raw = (val || 'none').trim() || 'none';\n if (shadowValueCache.has(raw)) return shadowValueCache.get(raw)!;\n if (typeof document === 'undefined' || !document.body) return raw;\n const probe = document.createElement('div');\n probe.style.boxShadow = raw;\n probe.style.position = 'fixed';\n probe.style.opacity = '0';\n probe.style.pointerEvents = 'none';\n document.body.appendChild(probe);\n const normalized = getComputedStyle(probe).boxShadow.trim() || raw;\n probe.remove();\n shadowValueCache.set(raw, normalized);\n return normalized;\n}\n\nfunction formatShadowDisplay(val: string): string {\n if (!val || val === 'none') return 'none';\n return val.replace(/(-?\\d+(?:\\.\\d+)?)px\\b/gi, '$1').replace(/\\s+/g, ' ');\n}\n\ntype ShadowParts = {\n x: string;\n y: string;\n blur: string;\n spread: string;\n color: string;\n};\n\nconst DEFAULT_SHADOW_PARTS: ShadowParts = {\n x: '0px',\n y: '14px',\n blur: '42px',\n spread: '0px',\n color: 'rgba(15,23,42,0.08)',\n};\n\nconst EMPTY_CUSTOM_SHADOW_PARTS: ShadowParts = {\n x: '0px',\n y: '0px',\n blur: '0px',\n spread: '0px',\n color: 'rgba(15,23,42,0)',\n};\n\nfunction normalizeShadowLengthInput(input: string): string {\n const raw = input.trim();\n if (!raw) return '0px';\n if (/^-?\\d+(?:\\.\\d+)?$/.test(raw)) return `${raw}px`;\n return raw;\n}\n\nfunction parseShadowParts(value: string): ShadowParts {\n const raw = (value || 'none').trim();\n if (!raw || raw === 'none') return { ...DEFAULT_SHADOW_PARTS };\n const colorPattern = /(rgba?\\([^)]+\\)|hsla?\\([^)]+\\)|#[0-9a-f]{3,8}\\b|var\\([^)]+\\)|\\b(?:black|white|transparent)\\b)/i;\n const colorMatch = raw.match(colorPattern);\n const color = colorMatch?.[0] ?? DEFAULT_SHADOW_PARTS.color;\n const remainder = raw\n .replace(colorPattern, '')\n .replace(/\\binset\\b/i, '')\n .split(/\\s*,\\s*/)[0]\n .trim();\n const parts = remainder.match(/-?\\d*\\.?\\d+(?:px|rem|em|%)?/g) ?? [];\n return {\n x: normalizeShadowLengthInput(parts[0] ?? DEFAULT_SHADOW_PARTS.x),\n y: normalizeShadowLengthInput(parts[1] ?? DEFAULT_SHADOW_PARTS.y),\n blur: normalizeShadowLengthInput(parts[2] ?? DEFAULT_SHADOW_PARTS.blur),\n spread: normalizeShadowLengthInput(parts[3] ?? DEFAULT_SHADOW_PARTS.spread),\n color,\n };\n}\n\nfunction buildShadowValue(parts: ShadowParts): string {\n return `${normalizeShadowLengthInput(parts.x)} ${normalizeShadowLengthInput(parts.y)} ${normalizeShadowLengthInput(parts.blur)} ${normalizeShadowLengthInput(parts.spread)} ${parts.color}`;\n}\n\nfunction getShadowDisplay(\n val: string,\n authoredVal: string,\n shadowTokens: DevInspectorTokenConfig['shadowTokens'],\n): { label: string; sub: string; isHardcoded: boolean } {\n const authoredVar = authoredVal.match(/var\\((--[^),\\s]+)/)?.[1];\n const normalized = canonicalizeShadowValue(val);\n const matched = shadowTokens.find(token => token.cssVar === authoredVar)\n ?? shadowTokens.find(token => canonicalizeShadowValue(token.value) === normalized);\n\n if (matched) {\n return {\n label: matched.label,\n sub: matched.cssVar,\n isHardcoded: false,\n };\n }\n\n return {\n label: val === 'none' ? '无' : '自定义',\n sub: formatShadowDisplay(val),\n isHardcoded: val !== 'none',\n };\n}\n\nfunction getShadowChangeDisplay(\n val: string,\n authoredVal: string,\n shadowTokens: DevInspectorTokenConfig['shadowTokens'],\n): string {\n const display = getShadowDisplay(val, authoredVal, shadowTokens);\n if (display.label === '无') return display.label;\n if (display.isHardcoded) return `${display.label}(${display.sub})`;\n return display.label;\n}\n\nfunction getClasses(el: Element): string[] {\n return Array.from(el.classList).filter(c => !c.startsWith('di-'));\n}\n\nconst STATE_CLASS_NAMES = new Set([\n 'active', 'selected', 'current', 'open', 'expanded', 'collapsed',\n 'disabled', 'enabled', 'checked', 'focus', 'focused', 'hover', 'pressed',\n 'loading', 'error', 'success', 'warning',\n]);\n\nfunction isStateClass(className: string): boolean {\n return STATE_CLASS_NAMES.has(className)\n || className.startsWith('is-')\n || className.startsWith('has-')\n || className.startsWith('state-')\n || className.endsWith('--active')\n || className.endsWith('--selected')\n || className.endsWith('--current')\n || className.endsWith('--open')\n || className.endsWith('--disabled');\n}\n\nfunction getPrimitiveClasses(el: Element): string[] {\n const classes = getClasses(el);\n if (el.tagName.toLowerCase() === 'svg' && classes.includes('lucide')) {\n return ['lucide'];\n }\n return [];\n}\n\nfunction getComponentClasses(el: Element): string[] {\n const primitiveClasses = getPrimitiveClasses(el);\n if (primitiveClasses.length) return primitiveClasses;\n\n const classes = getClasses(el);\n const cardBaseClass = classes.find(className =>\n isCardRootClass(className)\n && !className.includes('--'),\n );\n if (cardBaseClass) return [cardBaseClass];\n\n const badgeBaseClass = classes.find(className =>\n /(^|[-_])(badge|tag|chip)([-_]|$)/i.test(className)\n && !className.includes('--')\n && !/(default|progress|processing|info|done|success|complete|completed|warning|warn|danger|error|destructive)/i.test(className),\n );\n if (badgeBaseClass) return [badgeBaseClass];\n\n const componentClasses = classes.filter(c =>\n !isStateClass(c)\n && !/^lucide(-|$)/.test(c)\n );\n return componentClasses.length ? componentClasses : classes;\n}\n\nfunction getStateClasses(el: Element): string[] {\n return getClasses(el).filter(c => !/^lucide(-|$)/.test(c));\n}\n\nconst UNSAFE_GLOBAL_TAGS = new Set([\n 'a', 'aside', 'button', 'div', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'img', 'input', 'label', 'li', 'main', 'ol', 'p', 'path', 'section',\n 'span', 'strong', 'svg', 'textarea', 'ul',\n]);\n\nconst TEXT_ONLY_TAGS = new Set([\n 'a',\n 'em',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'label',\n 'p',\n 'span',\n 'strong',\n]);\n\nconst TEXT_SEMANTIC_CLASS_RE = /(^|[-_])(caption|copy|desc|description|eyebrow|heading|label|subtitle|text|title)([-_]|$)/i;\nconst STRUCTURAL_CONTAINER_CLASS_RE = /(^|[-_])(area|block|card|container|content|group|grid|item|layout|list|panel|row|section|shell|stack|zone)([-_]|$)/i;\nconst PAGE_SHELL_CLASS_RE = /(^|[-_])(app|page|root|screen|shell|workspace)([-_]|$)/i;\nconst CARD_ROOT_CLASS_NAMES = new Set(['task-card']);\nconst TEXT_GROUP_EXCLUDED_SELECTOR = [\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'img',\n 'svg',\n 'video',\n 'canvas',\n '[role=\"button\"]',\n '[contenteditable=\"true\"]',\n].join(',');\nconst TEXT_GROUP_MAX_CHILDREN = 4;\nconst STRUCTURAL_CONTAINER_TAGS = new Set([\n 'article',\n 'aside',\n 'div',\n 'form',\n 'li',\n 'main',\n 'nav',\n 'ol',\n 'section',\n 'ul',\n]);\n\nfunction hasTextSemanticClass(el: Element): boolean {\n return getClasses(el).some(className =>\n !isStateClass(className)\n && !/^lucide(-|$)/.test(className)\n && TEXT_SEMANTIC_CLASS_RE.test(className),\n );\n}\n\nfunction getRegisteredComponentType(el: Element): string {\n return (el.getAttribute('data-component') || '').trim();\n}\n\nfunction isCardRootClass(className: string): boolean {\n return CARD_ROOT_CLASS_NAMES.has(className) || /(^|[-_])card($|--)/i.test(className);\n}\n\nfunction hasStructuralContainerClass(el: Element): boolean {\n return getClasses(el).some(className =>\n !isStateClass(className)\n && STRUCTURAL_CONTAINER_CLASS_RE.test(className),\n );\n}\n\nfunction isTextOnlyTargetElement(el: Element): boolean {\n if (getInspectorComponentMeta(el)) return false;\n\n const tag = el.tagName.toLowerCase();\n if (TEXT_ONLY_TAGS.has(tag)) return true;\n if (el.matches(TEXT_GROUP_EXCLUDED_SELECTOR)) return false;\n if (hasStructuralContainerClass(el)) return false;\n if (hasTextSemanticClass(el)) return true;\n\n const children = Array.from(el.children);\n if (!children.length || children.length > TEXT_GROUP_MAX_CHILDREN) return false;\n if (STRUCTURAL_CONTAINER_TAGS.has(tag) && children.length > 1) return false;\n if (children.some(child => child.matches(TEXT_GROUP_EXCLUDED_SELECTOR))) return false;\n\n return children.every(child => {\n const childTag = child.tagName.toLowerCase();\n return TEXT_ONLY_TAGS.has(childTag) || hasTextSemanticClass(child);\n });\n}\n\nfunction isSimpleTextGroupTargetElement(el: Element): boolean {\n if (getInspectorComponentMeta(el)) return false;\n if (el.matches(TEXT_GROUP_EXCLUDED_SELECTOR)) return false;\n\n const tag = el.tagName.toLowerCase();\n if (!STRUCTURAL_CONTAINER_TAGS.has(tag) && !hasStructuralContainerClass(el)) return false;\n\n const children = Array.from(el.children).filter(isInspectableChildElement);\n if (children.length < 2 || children.length > TEXT_GROUP_MAX_CHILDREN) return false;\n if (children.some(child => child.matches(TEXT_GROUP_EXCLUDED_SELECTOR) || getInspectorComponentMeta(child))) return false;\n\n return children.every(child => {\n const childTag = child.tagName.toLowerCase();\n return TEXT_ONLY_TAGS.has(childTag) || hasTextSemanticClass(child) || isTextOnlyTargetElement(child);\n });\n}\n\nfunction isStructuralContainerTargetElement(el: Element): boolean {\n if (getInspectorComponentMeta(el)) return false;\n if (isTextOnlyTargetElement(el)) return false;\n if (isSimpleTextGroupTargetElement(el)) return false;\n\n const tag = el.tagName.toLowerCase();\n if (!STRUCTURAL_CONTAINER_TAGS.has(tag) && !hasStructuralContainerClass(el)) return false;\n\n return el.children.length > 0;\n}\n\nfunction isNearAppRoot(el: Element): boolean {\n const parent = el.parentElement;\n if (!parent) return false;\n if (parent === document.body) return true;\n if (parent.id === 'root') return true;\n if (parent.parentElement === document.body && parent.children.length === 1) return true;\n return false;\n}\n\nfunction isPageShellTargetElement(el: Element): boolean {\n if (getInspectorComponentMeta(el)) return false;\n if (isTextOnlyTargetElement(el)) return false;\n if (el === document.documentElement || el === document.body) return false;\n\n const tag = el.tagName.toLowerCase();\n const children = Array.from(el.children).filter(isInspectableChildElement);\n if (children.length < 2) return false;\n\n const rect = el.getBoundingClientRect();\n const coversPageArea = rect.width >= window.innerWidth * 0.55 && rect.height >= window.innerHeight * 0.45;\n const hasPageShellClass = getClasses(el).some(className =>\n !isStateClass(className) && PAGE_SHELL_CLASS_RE.test(className)\n );\n\n if (tag === 'main' && coversPageArea) return true;\n if (isNearAppRoot(el) && coversPageArea && hasPageShellClass) return true;\n return false;\n}\n\nfunction isInspectableChildElement(el: Element): boolean {\n if (el.closest('.di-panel')) return false;\n const rect = el.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return false;\n const style = getComputedStyle(el);\n if (style.display === 'none' || style.visibility === 'hidden') return false;\n return true;\n}\n\nfunction getVisibleDirectChildCount(el: Element): number {\n return Array.from(el.children).filter(isInspectableChildElement).length;\n}\n\nfunction canControlElementGap(el: Element): boolean {\n const cs = getComputedStyle(el);\n return isFlexGridDisplay(cs.display) && getVisibleDirectChildCount(el) >= 2;\n}\n\nfunction classSelector(classes: string[]): string {\n const escapeClass = (value: string) => {\n try { return CSS.escape(value); } catch { return value.replace(/[^a-zA-Z0-9_-]/g, '\\\\$&'); }\n };\n return classes.length ? '.' + classes.map(escapeClass).join('.') : '';\n}\n\nfunction queryByClasses(el: Element, classes: string[]): Element[] {\n if (!classes.length) return [el];\n const includePanels = !!el.closest('.di-panel');\n try {\n return Array.from(document.querySelectorAll(classSelector(classes)))\n .filter(e => includePanels || !e.closest('.di-panel'));\n } catch { return [el]; }\n}\n\nfunction getSameComponentEls(el: Element): Element[] {\n return queryByClasses(el, getComponentClasses(el));\n}\n\nfunction getSameStateEls(el: Element): Element[] {\n return queryByClasses(el, getStateClasses(el));\n}\n\ntype InspectorComponentMeta = {\n name: string;\n type: string;\n layer: 'Component' | 'Primitive';\n variant: string;\n state: string;\n};\n\nfunction classIncludes(classes: string[], pattern: RegExp): boolean {\n return classes.some(className => pattern.test(className));\n}\n\nfunction inferVariantFromClasses(classes: string[]): string {\n const variantClass = classes.find(className =>\n /(^|[-_])(primary|secondary|ghost|text|link|outline|solid|soft|danger|success|warning)([-_]|$)/i.test(className),\n );\n if (!variantClass) return 'default';\n const match = variantClass.match(/primary|secondary|ghost|text|link|outline|solid|soft|danger|success|warning/i);\n return match?.[0].toLowerCase() ?? 'default';\n}\n\nfunction inferStateFromElement(el: Element, classes: string[]): string {\n if ((el as HTMLButtonElement).disabled || el.getAttribute('aria-disabled') === 'true') return 'disabled';\n const stateClass = classes.find(isStateClass);\n if (!stateClass) return 'default';\n return stateClass.replace(/^(is-|has-|state-)/, '').replace(/^.+--/, '');\n}\n\nfunction getComponentStateLabel(state: string): string {\n const map: Record<string, string> = {\n default: '默认',\n selected: '选中',\n active: '激活',\n disabled: '禁用',\n open: '展开',\n current: '当前',\n };\n return map[state] ?? state;\n}\n\nfunction getInspectorComponentMeta(el: Element): InspectorComponentMeta | null {\n const tag = el.tagName.toLowerCase();\n const classes = getClasses(el);\n const componentClasses = getComponentClasses(el);\n const registeredComponentType = getRegisteredComponentType(el);\n\n if (registeredComponentType) {\n const type = registeredComponentType;\n return {\n name: componentClasses[0] ?? type,\n type,\n layer: 'Component',\n variant: inferVariantFromClasses(classes),\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (tag === 'svg' && classes.includes('lucide')) {\n const iconClass = classes.find(className => /^lucide-/.test(className));\n return {\n name: iconClass ?? 'lucide',\n type: 'Icon',\n layer: 'Primitive',\n variant: iconClass ? iconClass.replace(/^lucide-/, '') : 'default',\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (tag === 'button' || classIncludes(classes, /(^|[-_])(btn|button)([-_]|$)/i)) {\n const name = componentClasses.find(className => /(button|btn)/i.test(className)) ?? componentClasses[0] ?? 'button';\n return {\n name,\n type: 'Button',\n layer: 'Component',\n variant: inferVariantFromClasses(classes),\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (classes.some(isCardRootClass)) {\n return {\n name: componentClasses.find(className => isCardRootClass(className)) ?? componentClasses[0] ?? 'card',\n type: 'Card',\n layer: 'Component',\n variant: inferCardVariant(classes),\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (tag === 'form' || classIncludes(classes, /(^|[-_])(form|form-section|field-group)([-_]|$)/i)) {\n return {\n name: componentClasses.find(className => /form/i.test(className)) ?? componentClasses[0] ?? 'form',\n type: 'Form',\n layer: 'Component',\n variant: 'default',\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (tag === 'input' || tag === 'textarea' || tag === 'select') {\n return {\n name: componentClasses[0] ?? tag,\n type: 'Control',\n layer: 'Primitive',\n variant: tag,\n state: inferStateFromElement(el, classes),\n };\n }\n\n if (classIncludes(classes, /(^|[-_])(badge|tag|chip)([-_]|$)/i)) {\n return {\n name: componentClasses[0] ?? 'badge',\n type: 'Badge',\n layer: 'Component',\n variant: inferBadgeStatus(classes),\n state: inferStateFromElement(el, classes),\n };\n }\n\n return null;\n}\n\nconst COMPONENT_ATTRIBUTE_ONLY_NAMES_BY_TYPE: Record<string, Set<string>> = {\n button: new Set([\n 'primary',\n 'secondary',\n 'ghost',\n 'text',\n 'link',\n 'outline',\n 'solid',\n 'soft',\n 'danger',\n 'success',\n 'warning',\n ]),\n badge: new Set([\n 'default',\n 'progress',\n 'processing',\n 'info',\n 'done',\n 'success',\n 'complete',\n 'completed',\n 'warning',\n 'warn',\n 'danger',\n 'error',\n 'destructive',\n ]),\n};\n\nfunction getControlDisplayName(meta: InspectorComponentMeta): string {\n const controlType = meta.variant && meta.variant !== 'default' ? meta.variant : meta.type.toLowerCase();\n for (const suffix of ['input', 'textarea', 'select']) {\n const tail = `-${suffix}`;\n if (meta.name.endsWith(tail)) {\n const base = meta.name.slice(0, -tail.length);\n return base ? `${suffix}-${base}` : suffix;\n }\n }\n return meta.name === controlType ? controlType : `${controlType}-${meta.name}`;\n}\n\nfunction getComponentDisplayName(meta: InspectorComponentMeta): string {\n if (meta.type === 'Control') return getControlDisplayName(meta);\n if (meta.layer === 'Primitive') return meta.name;\n const type = meta.type.toLowerCase();\n const suffixes = type === 'button'\n ? ['button', 'btn']\n : type === 'badge'\n ? ['badge', 'tag', 'chip']\n : [type];\n\n for (const suffix of suffixes) {\n const tail = `-${suffix}`;\n if (meta.name.endsWith(tail)) {\n const base = meta.name.slice(0, -tail.length);\n if (COMPONENT_ATTRIBUTE_ONLY_NAMES_BY_TYPE[type]?.has(base.toLowerCase())) return type;\n return base ? `${type}-${base}` : meta.name;\n }\n }\n\n return meta.name.startsWith(`${type}-`) ? meta.name : `${type}-${meta.name}`;\n}\n\nconst SEMANTIC_TAG_DISPLAY_NAMES: Record<string, string> = {\n h1: '页面标题',\n h2: '章节标题',\n h3: '小节标题',\n h4: '标题文本',\n h5: '标题文本',\n h6: '标题文本',\n p: '正文文本',\n span: '文本',\n strong: '强调文本',\n em: '强调文本',\n a: '链接文本',\n label: '表单标签',\n img: '图片',\n section: '页面区块',\n main: '页面主体',\n aside: '侧边内容',\n div: '容器',\n};\n\nfunction getElementDisplayName(el: Element, meta: InspectorComponentMeta | null = getInspectorComponentMeta(el)): string {\n if (meta) return getComponentDisplayName(meta);\n\n const explicitName = el.getAttribute('data-di-name')\n || el.getAttribute('data-component')\n || el.getAttribute('data-role')\n || el.getAttribute('aria-label');\n if (explicitName?.trim()) return explicitName.trim();\n\n const semanticClass = getClasses(el).find(className =>\n !isStateClass(className)\n && !/^lucide(-|$)/.test(className)\n );\n if (semanticClass) return semanticClass;\n\n const tag = el.tagName.toLowerCase();\n return SEMANTIC_TAG_DISPLAY_NAMES[tag] ?? tag;\n}\n\nfunction getTargetDisplayLabel(el: Element, meta: InspectorComponentMeta | null = getInspectorComponentMeta(el)): string {\n return meta\n ? `${meta.type} / ${getComponentDisplayName(meta)}`\n : getElementDisplayName(el, meta);\n}\n\ntype ButtonVariantKey = 'primary' | 'secondary' | 'ghost' | 'text';\ntype ButtonSizeKey = 's' | 'm' | 'l';\ntype IconColorKey = 'default' | 'muted' | 'brand' | 'success' | 'warning' | 'danger';\ntype BadgeStatusKey = 'default' | 'progress' | 'success' | 'warning' | 'danger';\ntype CardVariantKey = 'default' | 'compact' | 'floating' | 'emphasis';\ntype ComponentSizeKind = 'button' | 'icon' | 'badge';\ntype DesignLibraryTab = 'tokens' | 'components' | 'changes' | 'usage';\ntype DesignLibraryTokenUsageFilter = 'all' | 'used' | 'unused' | 'unknown';\ntype DesignLibraryCrudAction = 'create' | 'update' | 'delete';\ntype LibraryTokenCategory = 'all' | 'color' | 'typography' | 'appearance' | 'space' | 'radius' | 'shadow';\ntype LibraryTokenItemCategory = Exclude<LibraryTokenCategory, 'all'>;\ntype LibraryComponentCategory = 'all' | DevInspectorComponentPreviewCategory;\ntype LibraryComponentItemCategory = Exclude<LibraryComponentCategory, 'all'>;\n\ntype LibraryTokenItem = {\n id: string;\n category: LibraryTokenItemCategory;\n categoryLabel: string;\n name: string;\n value: string;\n usage: string;\n status: string;\n preview: 'color' | 'text' | 'appearance' | 'space' | 'radius' | 'shadow';\n previewValue?: string;\n rawValue?: string;\n source?: 'system' | 'custom' | 'draft';\n};\n\ntype LibraryTokenFormDraft = {\n mode: Extract<DesignLibraryCrudAction, 'create' | 'update'>;\n baseId?: string;\n category: LibraryTokenItemCategory;\n name: string;\n value: string;\n usage: string;\n status: string;\n};\n\ntype LibraryComponentItem = {\n id: string;\n category: LibraryComponentItemCategory;\n categoryLabel: string;\n type: string;\n label: string;\n summary: string;\n selector: string;\n status: string;\n preview?: DevInspectorComponentPreview;\n source?: 'system' | 'custom' | 'draft';\n};\n\ntype LibraryComponentFormDraft = {\n mode: Extract<DesignLibraryCrudAction, 'create' | 'update'>;\n baseId?: string;\n category: LibraryComponentItemCategory;\n type: string;\n label: string;\n summary: string;\n selector: string;\n status: string;\n};\n\ntype ComponentImportDraft = {\n type: string;\n label?: string;\n category?: LibraryComponentItemCategory;\n summary?: string;\n selector?: string;\n status?: string;\n variants?: string[];\n sizes?: string[];\n tokenRefs?: string[];\n};\n\ntype LibraryComponentSpecDetail = {\n component: LibraryComponentItem;\n variant: DevInspectorComponentPreviewVariant;\n key: string;\n selector: string;\n purpose: string;\n capabilities: string[];\n tokenRefs: string[];\n usageCount: number | null;\n};\n\nconst LIBRARY_TOKEN_CATEGORIES: { key: LibraryTokenCategory; label: string }[] = [\n { key: 'all', label: '全部' },\n { key: 'color', label: '颜色' },\n { key: 'typography', label: '文字' },\n { key: 'appearance', label: '外观' },\n { key: 'space', label: '间距' },\n { key: 'radius', label: '圆角' },\n { key: 'shadow', label: '阴影' },\n];\n\nconst LIBRARY_COMPONENT_CATEGORIES: { key: LibraryComponentCategory; label: string }[] = [\n { key: 'all', label: '全部' },\n { key: 'action', label: '操作' },\n { key: 'display', label: '展示' },\n { key: 'feedback', label: '反馈' },\n { key: 'container', label: '容器' },\n { key: 'form', label: '表单' },\n { key: 'icon', label: '图标' },\n { key: 'custom', label: '自定义' },\n];\n\nconst LIBRARY_COMPONENT_LABELS: Record<string, string> = {\n Button: '按钮',\n Icon: '图标',\n Badge: '标签',\n Card: '卡片',\n Form: '表单',\n};\n\nfunction getLibraryComponentCategory(type: string): LibraryComponentItemCategory {\n const normalized = type.trim().toLowerCase();\n if (normalized.includes('button') || normalized.includes('action')) return 'action';\n if (normalized.includes('badge') || normalized.includes('tag') || normalized.includes('chip')) return 'feedback';\n if (normalized.includes('card') || normalized.includes('text') || normalized.includes('typography')) return 'display';\n if (normalized.includes('form') || normalized.includes('input') || normalized.includes('textarea') || normalized.includes('control')) return 'form';\n if (normalized.includes('icon')) return 'icon';\n if (normalized.includes('container') || normalized.includes('layout') || normalized.includes('section') || normalized.includes('panel')) return 'container';\n return 'custom';\n}\n\nfunction getLibraryComponentCategoryLabel(category: LibraryComponentItemCategory): string {\n return LIBRARY_COMPONENT_CATEGORIES.find(item => item.key === category)?.label ?? '自定义';\n}\n\nfunction getLibraryComponentVariantKey(componentId: string, variantId: string): string {\n return `${componentId}::${variantId}`;\n}\n\nfunction getLibraryComponentVariantPurpose(component: LibraryComponentItem, variant: DevInspectorComponentPreviewVariant): string {\n if (variant.usage) return variant.usage;\n const normalizedType = component.type.trim().toLowerCase();\n const normalizedProps = (variant.propsLabel ?? '').toLowerCase();\n if (normalizedType.includes('button')) {\n if (normalizedProps.includes('primary')) return '主行动、关键提交、确认操作';\n if (normalizedProps.includes('secondary')) return '次级操作、辅助确认、备用入口';\n if (normalizedProps.includes('ghost')) return '低强调操作、工具区动作、弱边界按钮';\n if (normalizedProps.includes('text')) return '轻量文本操作、链接式动作、局部补充入口';\n return '操作触发、表单提交或流程推进';\n }\n if (normalizedType.includes('badge')) return '状态提示、分类标记和结果反馈';\n if (normalizedType.includes('card')) return '信息分组、任务展示和内容承载';\n if (normalizedType.includes('form')) return '信息录入、编辑和提交';\n if (normalizedType.includes('icon')) return '图形化操作入口或状态表达';\n return component.summary || '组件规格展示和复用治理';\n}\n\nfunction getLibraryComponentVariantCapabilities(component: LibraryComponentItem, variant: DevInspectorComponentPreviewVariant): string[] {\n if (variant.capabilities?.length) return variant.capabilities;\n const capability = COMPONENT_CAPABILITIES[component.type];\n const normalizedType = component.type.trim().toLowerCase();\n const capabilities = new Set<string>();\n if (capability?.variantKind || variant.propsLabel?.includes('variant=')) capabilities.add('变体');\n if (capability?.sizeKind || variant.propsLabel?.includes('size=')) capabilities.add('尺寸');\n if (capability?.statusKind || variant.propsLabel?.includes('status=')) capabilities.add('状态');\n if (capability?.colorKind || variant.propsLabel?.includes('tone=')) capabilities.add('颜色');\n if (capability?.editableText || capability?.textSlots?.length) capabilities.add('文案');\n if (capability?.childSlots?.length) capabilities.add('子项');\n if (normalizedType.includes('button')) {\n capabilities.add('点击');\n capabilities.add('hover');\n capabilities.add('focus-visible');\n capabilities.add('disabled 待接入');\n }\n if (normalizedType.includes('form')) {\n capabilities.add('输入');\n capabilities.add('提交');\n }\n if (!capabilities.size) capabilities.add('预览');\n return Array.from(capabilities);\n}\n\nfunction getLibraryComponentVariantTokenRefs(component: LibraryComponentItem, variant: DevInspectorComponentPreviewVariant): string[] {\n if (variant.tokenRefs?.length) return variant.tokenRefs;\n const normalizedType = component.type.trim().toLowerCase();\n const normalizedProps = (variant.propsLabel ?? '').toLowerCase();\n const refs = new Set<string>();\n if (normalizedType.includes('button')) {\n refs.add('--radius-control');\n refs.add('--font-size-m');\n if (normalizedProps.includes('size=s')) refs.add('--font-size-s');\n if (normalizedProps.includes('size=l')) refs.add('--font-size-l');\n if (normalizedProps.includes('primary')) refs.add('--color-brand-primary');\n if (normalizedProps.includes('secondary') || normalizedProps.includes('ghost')) refs.add('--color-border-default');\n if (normalizedProps.includes('text')) refs.add('--color-brand-primary');\n } else if (normalizedType.includes('badge')) {\n refs.add('--radius-pill');\n refs.add('--font-size-xs');\n } else if (normalizedType.includes('card')) {\n refs.add('--color-surface');\n refs.add('--color-border-default');\n refs.add('--shadow-card');\n } else if (normalizedType.includes('form')) {\n refs.add('--color-surface');\n refs.add('--color-border-default');\n refs.add('--radius-control');\n } else if (normalizedType.includes('icon')) {\n refs.add('--color-icon-default');\n }\n return Array.from(refs);\n}\n\ntype ComponentTextSlotDefinition = {\n key: string;\n label: string;\n selector: string;\n};\n\ntype ComponentCapability = {\n type: string;\n editableText?: boolean;\n textSlots?: ComponentTextSlotDefinition[];\n childSlots?: ComponentTextSlotDefinition[];\n variantKind?: 'button' | 'card';\n statusKind?: 'badge';\n colorKind?: 'icon';\n sizeKind?: ComponentSizeKind;\n};\n\nconst CARD_EDITABLE_TEXT_SLOTS: ComponentTextSlotDefinition[] = [\n {\n key: 'title',\n label: '标题',\n selector: '[data-di-slot=\"title\"], .task-title, .card-title, h1, h2, h3',\n },\n {\n key: 'description',\n label: '说明文',\n selector: '[data-di-slot=\"description\"], .card-desc, .card-description, p',\n },\n];\n\nconst CARD_CHILD_SLOTS: ComponentTextSlotDefinition[] = [\n {\n key: 'status',\n label: '标签',\n selector: '[data-di-slot=\"status\"], .status-badge, .badge, .tag, .chip',\n },\n];\n\nconst FORM_CHILD_SLOTS: ComponentTextSlotDefinition[] = [\n {\n key: 'primary-input',\n label: '输入框',\n selector: '[data-di-slot=\"primary-input\"], .demo-input, input',\n },\n {\n key: 'description-input',\n label: '说明输入',\n selector: '[data-di-slot=\"description-input\"], .demo-textarea, textarea',\n },\n {\n key: 'cancel-action',\n label: '取消按钮',\n selector: '[data-di-slot=\"cancel-action\"], .ghost-button',\n },\n {\n key: 'submit-action',\n label: '提交按钮',\n selector: '[data-di-slot=\"submit-action\"], .primary-btn',\n },\n];\n\nconst COMPONENT_CAPABILITIES: Record<string, ComponentCapability> = {\n Button: {\n type: 'Button',\n editableText: true,\n variantKind: 'button',\n sizeKind: 'button',\n },\n Icon: {\n type: 'Icon',\n colorKind: 'icon',\n sizeKind: 'icon',\n },\n Badge: {\n type: 'Badge',\n editableText: true,\n statusKind: 'badge',\n sizeKind: 'badge',\n },\n Card: {\n type: 'Card',\n variantKind: 'card',\n textSlots: CARD_EDITABLE_TEXT_SLOTS,\n childSlots: CARD_CHILD_SLOTS,\n },\n Form: {\n type: 'Form',\n childSlots: FORM_CHILD_SLOTS,\n },\n};\n\nfunction getComponentCapability(meta: InspectorComponentMeta | null): ComponentCapability | null {\n return meta ? COMPONENT_CAPABILITIES[meta.type] ?? null : null;\n}\n\nfunction getComponentSlotElement(root: Element, slot: ComponentTextSlotDefinition): Element | null {\n try {\n return root.querySelector(slot.selector);\n } catch {\n return null;\n }\n}\n\nfunction getComponentSlotValues(root: Element, slots: ComponentTextSlotDefinition[] = []): Record<string, string> {\n return Object.fromEntries(slots.map(slot => [\n slot.key,\n (getComponentSlotElement(root, slot)?.textContent ?? '').trim(),\n ]));\n}\n\nconst BUTTON_VARIANT_OPTIONS: { key: ButtonVariantKey; label: string }[] = [\n { key: 'primary', label: '主按钮' },\n { key: 'secondary', label: '次按钮' },\n { key: 'ghost', label: '幽灵' },\n { key: 'text', label: '文字' },\n];\n\nconst BUTTON_VARIANT_CLASS_BY_KEY: Record<ButtonVariantKey, string> = {\n primary: 'primary-btn',\n secondary: 'secondary-button',\n ghost: 'ghost-button',\n text: 'text-button',\n};\n\nconst BUTTON_VARIANT_CLASS_NAMES = new Set([\n ...Object.values(BUTTON_VARIANT_CLASS_BY_KEY),\n 'secondary-btn',\n 'outline-button',\n 'outline-btn',\n 'btn-primary',\n 'btn-secondary',\n 'btn-ghost',\n 'btn-text',\n]);\n\nconst BUTTON_SIZE_OPTIONS: { key: ButtonSizeKey; label: string; minHeight: string; padding: string; fontSize: string }[] = [\n { key: 's', label: 'S', minHeight: '34px', padding: '0 16px', fontSize: '13px' },\n { key: 'm', label: 'M', minHeight: '42px', padding: '0 24px', fontSize: '14px' },\n { key: 'l', label: 'L', minHeight: '48px', padding: '0 28px', fontSize: '15px' },\n];\n\nfunction normalizeButtonVariant(variant: string): ButtonVariantKey {\n return BUTTON_VARIANT_OPTIONS.some(option => option.key === variant)\n ? variant as ButtonVariantKey\n : 'secondary';\n}\n\nfunction getButtonText(el: Element): string {\n return (el.textContent ?? '').trim();\n}\n\nfunction getButtonVariantClass(el: Element): string {\n const classes = getClasses(el);\n return classes.find(className => BUTTON_VARIANT_CLASS_NAMES.has(className))\n ?? classes.find(className => /(button|btn)/i.test(className) && /primary|secondary|ghost|text|outline/i.test(className))\n ?? '';\n}\n\nfunction setButtonVariantOnTargets(targets: Element[], variant: ButtonVariantKey, restoreClass?: string) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n Array.from(el.classList).forEach(className => {\n const isKnownVariant = BUTTON_VARIANT_CLASS_NAMES.has(className);\n const isButtonVariant = /(button|btn)/i.test(className) && /primary|secondary|ghost|text|outline/i.test(className);\n if (isKnownVariant || isButtonVariant) el.classList.remove(className);\n });\n const nextClass = restoreClass === undefined ? BUTTON_VARIANT_CLASS_BY_KEY[variant] : restoreClass;\n if (nextClass) el.classList.add(nextClass);\n });\n}\n\nfunction inferButtonSize(el: Element): ButtonSizeKey {\n const height = Number.parseFloat(getComputedStyle(el).height);\n if (height <= 36) return 's';\n if (height <= 44) return 'm';\n return 'l';\n}\n\nfunction getButtonSizeOption(size: ButtonSizeKey) {\n return BUTTON_SIZE_OPTIONS.find(option => option.key === size) ?? BUTTON_SIZE_OPTIONS[1];\n}\n\nfunction setButtonSizeOnTargets(targets: Element[], size: ButtonSizeKey) {\n const option = getButtonSizeOption(size);\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.setProperty('min-height', option.minHeight);\n el.style.setProperty('padding', option.padding);\n el.style.setProperty('font-size', option.fontSize);\n });\n}\n\nfunction clearButtonSizeOnTargets(targets: Element[]) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.removeProperty('min-height');\n el.style.removeProperty('padding');\n el.style.removeProperty('font-size');\n });\n}\n\nconst ICON_SIZE_OPTIONS: { key: ButtonSizeKey; label: string; size: string }[] = [\n { key: 's', label: 'S', size: '16px' },\n { key: 'm', label: 'M', size: '20px' },\n { key: 'l', label: 'L', size: '24px' },\n];\n\nconst ICON_COLOR_OPTIONS: { key: IconColorKey; label: string; value: string }[] = [\n { key: 'default', label: '默认', value: 'var(--color-text-default, #334155)' },\n { key: 'muted', label: '弱化', value: 'var(--color-text-muted, #64748b)' },\n { key: 'brand', label: '品牌', value: 'var(--color-brand-primary, #6d5dfc)' },\n { key: 'success', label: '成功', value: 'var(--color-success, #10a56f)' },\n { key: 'warning', label: '警告', value: 'var(--color-warning, #f59e0b)' },\n { key: 'danger', label: '危险', value: 'var(--color-danger, #ef4444)' },\n];\n\nfunction inferIconSize(el: Element): ButtonSizeKey {\n const cs = getComputedStyle(el);\n const size = Number.parseFloat(cs.width || cs.height);\n if (size <= 17) return 's';\n if (size <= 21) return 'm';\n return 'l';\n}\n\nfunction inferIconColor(el: Element): IconColorKey {\n const color = normalizeColor(getComputedStyle(el).color);\n if (color === '#64748b') return 'muted';\n if (color === '#6d5dfc' || color === '#7c3aed') return 'brand';\n if (color === '#10a56f' || color === '#16a34a') return 'success';\n if (color === '#f59e0b' || color === '#d97706') return 'warning';\n if (color === '#ef4444' || color === '#dc2626') return 'danger';\n return 'default';\n}\n\nfunction setIconSizeOnTargets(targets: Element[], size: ButtonSizeKey) {\n const option = ICON_SIZE_OPTIONS.find(item => item.key === size) ?? ICON_SIZE_OPTIONS[1];\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.setProperty('width', option.size);\n el.style.setProperty('height', option.size);\n });\n}\n\nfunction clearIconSizeOnTargets(targets: Element[]) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.removeProperty('width');\n el.style.removeProperty('height');\n });\n}\n\nfunction setIconColorOnTargets(targets: Element[], color: IconColorKey) {\n const option = ICON_COLOR_OPTIONS.find(item => item.key === color) ?? ICON_COLOR_OPTIONS[0];\n targets.forEach(target => (target as HTMLElement).style.setProperty('color', option.value));\n}\n\nfunction clearIconColorOnTargets(targets: Element[]) {\n targets.forEach(target => (target as HTMLElement).style.removeProperty('color'));\n}\n\nconst BADGE_STATUS_OPTIONS: { key: BadgeStatusKey; label: string }[] = [\n { key: 'default', label: '默认' },\n { key: 'progress', label: '进行中' },\n { key: 'success', label: '成功' },\n { key: 'warning', label: '警告' },\n { key: 'danger', label: '危险' },\n];\n\nconst BADGE_STATUS_CLASS_BY_KEY: Record<BadgeStatusKey, string> = {\n default: '',\n progress: 'status-badge--progress',\n success: 'status-badge--done',\n warning: 'status-badge--warning',\n danger: 'status-badge--danger',\n};\n\nconst BADGE_STATUS_CLASS_NAMES = new Set([\n ...Object.values(BADGE_STATUS_CLASS_BY_KEY).filter(Boolean),\n 'badge--default',\n 'badge--progress',\n 'badge--success',\n 'badge--warning',\n 'badge--danger',\n 'tag--default',\n 'tag--progress',\n 'tag--success',\n 'tag--warning',\n 'tag--danger',\n 'chip--default',\n 'chip--progress',\n 'chip--success',\n 'chip--warning',\n 'chip--danger',\n]);\n\nconst BADGE_SIZE_OPTIONS: { key: ButtonSizeKey; label: string; minHeight: string; padding: string; fontSize: string }[] = [\n { key: 's', label: 'S', minHeight: '20px', padding: '0 8px', fontSize: '11px' },\n { key: 'm', label: 'M', minHeight: '24px', padding: '0 12px', fontSize: '12px' },\n { key: 'l', label: 'L', minHeight: '28px', padding: '0 14px', fontSize: '13px' },\n];\n\nfunction inferBadgeStatus(classes: string[]): BadgeStatusKey {\n if (classIncludes(classes, /(^|[-_])(progress|processing|info)([-_]|$)/i)) return 'progress';\n if (classIncludes(classes, /(^|[-_])(done|success|complete|completed)([-_]|$)/i)) return 'success';\n if (classIncludes(classes, /(^|[-_])(warning|warn)([-_]|$)/i)) return 'warning';\n if (classIncludes(classes, /(^|[-_])(danger|error|destructive)([-_]|$)/i)) return 'danger';\n return 'default';\n}\n\nfunction getBadgeStatusClass(el: Element): string {\n const classes = getClasses(el);\n return classes.find(className => BADGE_STATUS_CLASS_NAMES.has(className)) ?? '';\n}\n\nfunction setBadgeStatusOnTargets(targets: Element[], status: BadgeStatusKey, restoreClass?: string) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n Array.from(el.classList).forEach(className => {\n const isKnownStatus = BADGE_STATUS_CLASS_NAMES.has(className);\n const isBadgeStatus = /(badge|tag|chip)/i.test(className) && /(default|progress|processing|info|done|success|complete|completed|warning|warn|danger|error|destructive)/i.test(className);\n if (isKnownStatus || isBadgeStatus) el.classList.remove(className);\n });\n const nextClass = restoreClass === undefined ? BADGE_STATUS_CLASS_BY_KEY[status] : restoreClass;\n if (nextClass) el.classList.add(nextClass);\n });\n}\n\nfunction inferBadgeSize(el: Element): ButtonSizeKey {\n const height = Number.parseFloat(getComputedStyle(el).height);\n if (height <= 22) return 's';\n if (height <= 26) return 'm';\n return 'l';\n}\n\nfunction setBadgeSizeOnTargets(targets: Element[], size: ButtonSizeKey) {\n const option = BADGE_SIZE_OPTIONS.find(item => item.key === size) ?? BADGE_SIZE_OPTIONS[1];\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.setProperty('min-height', option.minHeight);\n el.style.setProperty('padding', option.padding);\n el.style.setProperty('font-size', option.fontSize);\n });\n}\n\nfunction clearBadgeSizeOnTargets(targets: Element[]) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n el.style.removeProperty('min-height');\n el.style.removeProperty('padding');\n el.style.removeProperty('font-size');\n });\n}\n\nconst CARD_VARIANT_OPTIONS: { key: CardVariantKey; label: string; modifier?: string }[] = [\n { key: 'default', label: '默认' },\n { key: 'compact', label: '紧凑', modifier: 'compact' },\n { key: 'floating', label: '浮起', modifier: 'floating' },\n { key: 'emphasis', label: '强调', modifier: 'emphasis' },\n];\n\nfunction getCardDisplayLabel(variant: string): string {\n return CARD_VARIANT_OPTIONS.find(option => option.key === variant)?.label ?? variant;\n}\n\nfunction inferCardVariant(classes: string[]): CardVariantKey {\n if (classIncludes(classes, /--compact$/i)) return 'compact';\n if (classIncludes(classes, /--floating$/i)) return 'floating';\n if (classIncludes(classes, /--emphasis$/i)) return 'emphasis';\n return 'default';\n}\n\nfunction getCardVariantClass(el: Element): string {\n return getClasses(el).find(className => (\n /card/i.test(className)\n && /--(compact|floating|emphasis)$/i.test(className)\n )) ?? '';\n}\n\nfunction getCardBaseClass(el: Element): string {\n return getComponentClasses(el).find(className => /card/i.test(className) && !className.includes('--'))\n ?? 'card';\n}\n\nfunction setCardVariantOnTargets(targets: Element[], variant: CardVariantKey, restoreClass?: string) {\n targets.forEach(target => {\n const el = target as HTMLElement;\n Array.from(el.classList).forEach(className => {\n if (/card/i.test(className) && /--(compact|floating|emphasis)$/i.test(className)) {\n el.classList.remove(className);\n }\n });\n\n const nextClass = restoreClass === undefined\n ? CARD_VARIANT_OPTIONS.find(option => option.key === variant)?.modifier\n : restoreClass;\n if (nextClass && restoreClass === undefined) {\n el.classList.add(`${getCardBaseClass(el)}--${nextClass}`);\n } else if (nextClass) {\n el.classList.add(nextClass);\n }\n });\n}\n\nfunction getComponentSizeControlOptions(capability: ComponentCapability | null): { key: ButtonSizeKey; label: string; title: string }[] {\n if (capability?.sizeKind === 'icon') {\n return ICON_SIZE_OPTIONS.map(option => ({ key: option.key, label: option.label, title: `${option.label} · ${option.size}` }));\n }\n if (capability?.sizeKind === 'badge') {\n return BADGE_SIZE_OPTIONS.map(option => ({ key: option.key, label: option.label, title: `${option.label} · ${option.minHeight}` }));\n }\n return BUTTON_SIZE_OPTIONS.map(option => ({ key: option.key, label: option.label, title: `${option.label} · ${option.minHeight}` }));\n}\n\nfunction getScopeTargets(el: Element, scope: ScopeMode): Element[] {\n if (scope === 'component') return getSameComponentEls(el);\n return [el];\n}\n\nfunction getClassSelectorForScope(el: Element, scope: ScopeMode): string {\n const classes = scope === 'component' ? getComponentClasses(el) : getStateClasses(el);\n return classSelector(classes) || el.tagName.toLowerCase();\n}\n\nfunction getStructuralStep(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const parent = el.parentElement;\n if (!parent) return tag;\n const sameTagSiblings = Array.from(parent.children).filter(child => child.tagName === el.tagName);\n if (sameTagSiblings.length <= 1) return tag;\n return `${tag}:nth-of-type(${sameTagSiblings.indexOf(el) + 1})`;\n}\n\nfunction getContextualSelectorForScope(el: Element, scope: ScopeMode): string {\n let anchor = el.parentElement;\n while (anchor && !getClasses(anchor).length) anchor = anchor.parentElement;\n if (!anchor) return '';\n\n const anchorSelector = getClassSelectorForScope(anchor, scope);\n const path: string[] = [];\n let cursor: Element | null = el;\n\n while (cursor && cursor !== anchor) {\n path.unshift(getStructuralStep(cursor));\n cursor = cursor.parentElement;\n }\n\n return path.length ? `${anchorSelector} > ${path.join(' > ')}` : anchorSelector;\n}\n\nfunction getSelectorForScope(el: Element, scope: ScopeMode): string {\n const classes = scope === 'component' ? getComponentClasses(el) : getStateClasses(el);\n if (classes.length) return classSelector(classes);\n const tag = el.tagName.toLowerCase();\n if (!UNSAFE_GLOBAL_TAGS.has(tag)) return tag;\n const contextualSelector = getContextualSelectorForScope(el, scope);\n return contextualSelector || tag;\n}\n\nfunction canPersistSelector(el: Element, scope: ScopeMode): boolean {\n const classes = scope === 'component' ? getComponentClasses(el) : getStateClasses(el);\n if (classes.length) return true;\n if (el.classList.contains('lucide') || Array.from(el.classList).some(c => /^lucide-/.test(c))) {\n return getContextualSelectorForScope(el, scope).length > 0;\n }\n const tag = el.tagName.toLowerCase();\n if (!UNSAFE_GLOBAL_TAGS.has(tag)) return true;\n return getContextualSelectorForScope(el, scope).length > 0;\n}\n\nfunction isInsidePanel(el: Element): boolean {\n return el.closest('.di-panel') !== null || el.closest('.di-trigger') !== null || el.closest('.di-label') !== null;\n}\n\nfunction resolveSelectionTarget(raw: Element): Element {\n let cursor: Element | null = raw;\n while (cursor && cursor !== document.body && cursor !== document.documentElement) {\n if (getInspectorComponentMeta(cursor)) return cursor;\n cursor = cursor.parentElement;\n }\n return raw;\n}\n\nfunction pickPanelElement(x: number, y: number, panel: HTMLElement, excluded?: Element): Element | null {\n const stack = document.elementsFromPoint(x, y);\n return stack.find(el =>\n el !== excluded &&\n el !== panel &&\n panel.contains(el)\n ) ?? null;\n}\n\n// 扫描 :root CSS 变量,建立 值→token 映射\nfunction scanTokenMap(): Record<string, string> {\n const map: Record<string, string> = {};\n try {\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n for (const rule of Array.from(sheet.cssRules)) {\n if (rule instanceof CSSStyleRule && rule.selectorText === ':root') {\n for (let i = 0; i < rule.style.length; i++) {\n const prop = rule.style[i];\n if (!prop.startsWith('--')) continue;\n const raw = rule.style.getPropertyValue(prop).trim();\n const hex = raw.startsWith('rgb') ? rgbToHex(raw) : raw;\n map[raw] = prop;\n if (hex !== raw) map[hex] = prop;\n }\n }\n }\n } catch { /* cross-origin */ }\n }\n } catch {}\n return map;\n}\n\nfunction getComputedColor(el: Element, prop: string): string {\n return normalizeColor(getComputedStyle(el).getPropertyValue(prop).trim());\n}\n\nfunction getComputedRadius(el: Element): string {\n return getComputedStyle(el).getPropertyValue('border-radius').trim();\n}\n\nfunction getComputedPadding(el: Element): string {\n const cs = getComputedStyle(el);\n const t = cs.paddingTop, r = cs.paddingRight, b = cs.paddingBottom, l = cs.paddingLeft;\n if (t === r && r === b && b === l) return t;\n return `${t} ${r} ${b} ${l}`;\n}\n\nfunction parseTranslate(val: string): { x: number; y: number } {\n const raw = (val || 'none').trim();\n if (!raw || raw === 'none') return { x: 0, y: 0 };\n const parts = raw.split(/\\s+/);\n const toNum = (v?: string) => v ? Number.parseFloat(v) || 0 : 0;\n return { x: toNum(parts[0]), y: toNum(parts[1]) };\n}\n\nfunction getElementDocumentPosition(el: Element): { x: number; y: number } {\n const rect = el.getBoundingClientRect();\n return {\n x: rect.left + window.scrollX,\n y: rect.top + window.scrollY,\n };\n}\n\nfunction getPositionBase(el: Element, translate: { x: number; y: number }): { x: number; y: number } {\n const pos = getElementDocumentPosition(el);\n return {\n x: pos.x - translate.x,\n y: pos.y - translate.y,\n };\n}\n\nfunction formatTranslate(pos: { x: number; y: number }): string {\n return `${Math.round(pos.x)}px ${Math.round(pos.y)}px`;\n}\n\nfunction formatPositionRecord(pos: { x: number; y: number }): string {\n return `X ${Math.round(pos.x)}px / Y ${Math.round(pos.y)}px`;\n}\n\nfunction normalizeCssSize(v: string): string {\n const raw = v.trim();\n if (!raw) return 'auto';\n if (/^-?\\d+(\\.\\d+)?$/.test(raw)) return `${raw}px`;\n const appendedPxNumber = raw.match(/px(-?\\d+(?:\\.\\d+)?)$/i);\n if (appendedPxNumber) return `${appendedPxNumber[1]}px`;\n return raw;\n}\n\nfunction getNumericCssValue(value: string, fallback = 0): number {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction isFlexGridDisplay(display: string): boolean {\n return display.includes('flex') || display.includes('grid');\n}\n\nfunction getAuthoredStyleValue(el: Element, prop: string): string {\n const inline = (el as HTMLElement).style.getPropertyValue(prop).trim();\n if (inline) return inline;\n let found = '';\n try {\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n for (const rule of Array.from(sheet.cssRules)) {\n if (!(rule instanceof CSSStyleRule)) continue;\n if (!rule.style.getPropertyValue(prop)) continue;\n if (el.matches(rule.selectorText)) found = rule.style.getPropertyValue(prop).trim();\n }\n } catch { /* ignore */ }\n }\n } catch {}\n return found;\n}\n\nfunction inferSizeMode(el: Element, axis: SizeAxis, computedSize: string): SizeMode {\n const cs = getComputedStyle(el);\n const authored = getAuthoredStyleValue(el, axis).toLowerCase();\n const display = cs.display.trim();\n const flexGrow = Number.parseFloat(cs.flexGrow) || 0;\n\n if (authored) {\n if (authored === 'auto') return axis === 'height' ? 'hug' : 'fill';\n if (authored.includes('fit-content') || authored.includes('max-content') || authored.includes('min-content')) return 'hug';\n if (authored.includes('%') || authored.includes('vw') || authored.includes('vh') || flexGrow > 0) return 'fill';\n return 'fixed';\n }\n\n if (axis === 'width') {\n if (flexGrow > 0) return 'fill';\n if (display === 'block' && el.parentElement) {\n const parentWidth = el.parentElement.getBoundingClientRect().width;\n const selfWidth = el.getBoundingClientRect().width;\n if (parentWidth > 0 && selfWidth / parentWidth > 0.88) return 'fill';\n }\n if (display.startsWith('inline')) return 'hug';\n }\n\n if (axis === 'height' && !getAuthoredStyleValue(el, 'min-height') && computedSize !== '0px') {\n return 'hug';\n }\n\n return 'fixed';\n}\n\nfunction sizeValueForMode(mode: SizeMode, current: string): string {\n if (mode === 'fill') return '100%';\n if (mode === 'hug') return 'fit-content';\n return current || '0px';\n}\n\nfunction formatSizeDisplay(value: string): string {\n const raw = value.trim();\n const pxMatch = raw.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n if (!pxMatch) return raw;\n const rounded = Math.round(Number.parseFloat(pxMatch[1]) * 10) / 10;\n return `${Number.isInteger(rounded) ? rounded.toFixed(0) : rounded.toFixed(1)}px`;\n}\n\nfunction formatLengthControlValue(value: string): string {\n const raw = formatSizeDisplay(value || '').trim();\n const pxMatch = raw.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n return pxMatch ? pxMatch[1] : raw;\n}\n\nfunction formatFontSizeControlValue(value: string): string {\n const raw = formatSizeDisplay(value || '').trim();\n if (!raw || raw === '—') return raw || '—';\n const pxMatch = raw.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n return pxMatch ? `${pxMatch[1]}px` : raw;\n}\n\nfunction displaySizeValue(cssValue: string, current: string): string {\n if (!cssValue || cssValue === '100%' || cssValue === 'fit-content') return formatLengthControlValue(current || '0px');\n return formatLengthControlValue(cssValue);\n}\n\nfunction getOneLineHugHeight(el: Element | null): number {\n if (!(el instanceof HTMLElement)) return 0;\n const hasText = (el.textContent ?? '').trim().length > 0;\n const isTextControl = el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement || el instanceof HTMLButtonElement;\n if (!hasText && !isTextControl) return 0;\n\n const cs = getComputedStyle(el);\n const fontSize = Number.parseFloat(cs.fontSize) || 0;\n const lineHeight = cs.lineHeight === 'normal'\n ? fontSize * 1.2\n : Number.parseFloat(cs.lineHeight) || fontSize * 1.2;\n const paddingY = (Number.parseFloat(cs.paddingTop) || 0) + (Number.parseFloat(cs.paddingBottom) || 0);\n const borderY = (Number.parseFloat(cs.borderTopWidth) || 0) + (Number.parseFloat(cs.borderBottomWidth) || 0);\n return Math.ceil(lineHeight + paddingY + borderY);\n}\n\nfunction clampHeightToOneLine(cssValue: string, el: Element | null): string {\n const px = cssValue.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n if (!px) return cssValue;\n const minH = getOneLineHugHeight(el);\n if (!minH) return cssValue;\n return `${Math.max(Number.parseFloat(px[1]), minH)}px`;\n}\n\nfunction normalizeSpacingInput(\n input: string,\n spaceSteps: DevInspectorTokenConfig['spaceSteps'],\n): string {\n const raw = input.trim();\n if (!raw) return '0px';\n\n const step = spaceSteps.find(s => s.label.toLowerCase() === raw.toLowerCase());\n if (step) return step.val;\n\n if (/^-?\\d+(?:\\.\\d+)?$/.test(raw)) return `${raw}px`;\n return raw;\n}\n\nfunction normalizeCssLengthInput(input: string): string {\n const raw = input.trim();\n if (!raw) return '';\n if (/^-?\\d+(?:\\.\\d+)?$/.test(raw)) return `${raw}px`;\n return raw;\n}\n\nfunction supportsCssValue(prop: string, value: string): boolean {\n return typeof CSS === 'undefined' || CSS.supports(prop, value);\n}\n\nfunction isNegativeSpacingValue(value: string): boolean {\n return /^-\\d/.test(value.trim());\n}\n\nfunction calcPanelPos(rect: DOMRect): { top: number; left: number } {\n const W = 380;\n const maxH = window.innerHeight * 0.9; // 和 CSS max-height: 90vh 保持一致\n let left = rect.right + 16;\n let top = rect.top;\n if (left + W > window.innerWidth - 8) left = Math.max(8, rect.left - W - 16);\n // 确保面板不超出底部:top + 90vh <= 100vh\n top = Math.min(top, window.innerHeight - maxH - 8);\n top = Math.max(8, top);\n return { top, left };\n}\n\ntype SelectionLabelPlacement = 'top' | 'bottom' | 'inside';\n\nfunction calcSelectionLabelPos(rect: DOMRect, text: string): { top: number; left: number; placement: SelectionLabelPlacement } {\n const labelH = 30;\n const gap = 8;\n const margin = 8;\n const labelW = Math.min(260, Math.max(96, text.length * 13 + 28));\n const panelRect = document.querySelector('.di-panel')?.getBoundingClientRect() ?? null;\n const clampLeft = (left: number) => Math.min(\n Math.max(left, margin + labelW / 2),\n window.innerWidth - margin - labelW / 2,\n );\n const intersectsPanel = (top: number, left: number) => {\n if (!panelRect) return false;\n const box = {\n left: left - labelW / 2,\n right: left + labelW / 2,\n top,\n bottom: top + labelH,\n };\n return box.left < panelRect.right\n && box.right > panelRect.left\n && box.top < panelRect.bottom\n && box.bottom > panelRect.top;\n };\n const centerLeft = clampLeft(rect.left + rect.width / 2);\n const candidates: Array<{ placement: SelectionLabelPlacement; top: number; left: number }> = [\n { placement: 'top', top: rect.top - labelH - gap, left: centerLeft },\n { placement: 'bottom', top: rect.bottom + gap, left: centerLeft },\n ];\n const visibleCandidate = candidates.find(candidate =>\n candidate.top >= margin\n && candidate.top + labelH <= window.innerHeight - margin\n && !intersectsPanel(candidate.top, candidate.left)\n );\n if (visibleCandidate) return visibleCandidate;\n\n const insideLeft = clampLeft(\n rect.width >= labelW + 16 ? rect.left + labelW / 2 + 8 : rect.left + rect.width / 2,\n );\n const insideTop = Math.min(\n Math.max(rect.top + 8, margin),\n window.innerHeight - labelH - margin,\n );\n return { placement: 'inside', top: insideTop, left: insideLeft };\n}\n\nfunction matchPreset<T extends { value: string }>(presets: T[], val: string): T | null {\n const px = val.replace(/\\s/g, '');\n return presets.find(p => p.value === px || p.value === val) ?? null;\n}\n\nfunction resizeTextareaToContent(el: HTMLTextAreaElement) {\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n}\n\n// ── SideInput:单格输入,支持 token 下拉 ──────────────────────\nfunction SideInput({\n value,\n onChange,\n spaceSteps,\n wide,\n compact,\n}: {\n value: string;\n onChange: (v: string) => void;\n spaceSteps: DevInspectorTokenConfig['spaceSteps'];\n wide?: boolean;\n compact?: boolean;\n}) {\n const [focused, setFocused] = useState(false);\n const [draft, setDraft] = useState('');\n const [popupPos, setPopupPos] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLDivElement>(null);\n const step = spaceSteps.find(s => s.val === value);\n const displayLabel = step && step.label !== '无' ? step.label : value === '0px' ? '0' : formatLengthControlValue(value);\n const displaySub = step && step.label !== '无' ? formatLengthControlValue(value) : null;\n\n return (\n <div className={`di-side-combo${wide ? ' di-side-combo--wide' : ''}${compact ? ' di-side-combo--compact' : ''}`}>\n <div className=\"di-side-display\" ref={triggerRef} onClick={() => {\n if (triggerRef.current) {\n const r = triggerRef.current.getBoundingClientRect();\n // wide 时左对齐,普通时居中\n setPopupPos({ top: r.bottom + 4, left: wide ? r.left : r.left + r.width / 2 });\n }\n setFocused(true); setDraft(value);\n }}>\n <span className=\"di-side-display-label\">{displayLabel}</span>\n {displaySub && <span className=\"di-side-display-sub\">{displaySub}</span>}\n </div>\n {focused && (\n <>\n <div className=\"di-side-overlay\" onClick={() => setFocused(false)} />\n <div className=\"di-side-popup\" style={{ top: popupPos.top, left: popupPos.left, transform: wide ? 'none' : 'translateX(-50%)' }}>\n <input\n className=\"di-side-input-edit\"\n value={draft}\n autoFocus\n onChange={e => setDraft(e.target.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n onChange(normalizeSpacingInput(draft, spaceSteps));\n setFocused(false);\n }\n if (e.key === 'Escape') setFocused(false);\n }}\n placeholder=\"输入数值…\"\n />\n <div className=\"di-side-steps\">\n {spaceSteps.map(s => (\n <button key={s.val}\n className={`di-side-step-item${value === s.val ? ' di-side-step-item--on' : ''}`}\n onMouseDown={e => { e.preventDefault(); onChange(s.val); setFocused(false); }}>\n <span>{s.label}</span>\n {s.val !== '0px' && <span className=\"di-side-step-sub\">{formatLengthControlValue(s.val)}</span>}\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n\ntype FourSides = { top: string; right: string; bottom: string; left: string };\nfunction parseFourSides(val: string): FourSides {\n const p = (val || '0px').trim().split(/\\s+/);\n if (p.length === 1) return { top: p[0], right: p[0], bottom: p[0], left: p[0] };\n if (p.length === 2) return { top: p[0], right: p[1], bottom: p[0], left: p[1] };\n if (p.length === 3) return { top: p[0], right: p[1], bottom: p[2], left: p[1] };\n return { top: p[0], right: p[1], bottom: p[2], left: p[3] };\n}\nfunction joinFourSides(s: FourSides): string {\n if (s.top === s.right && s.right === s.bottom && s.bottom === s.left) return s.top;\n if (s.top === s.bottom && s.left === s.right) return `${s.top} ${s.right}`;\n return `${s.top} ${s.right} ${s.bottom} ${s.left}`;\n}\n\ntype SpaceVariant = 'padding' | 'margin' | 'gap';\n\nfunction formatSpaceShort(value: string): string {\n const normalized = normalizeSpacingInput(value || '0px', []);\n return normalized.replace(/px$/i, '');\n}\n\nfunction formatSpaceRecordShort(value: string): string {\n return normalizeSpacingInput(value || '0px', []);\n}\n\nfunction isZeroLengthValue(value: string): boolean {\n const normalized = normalizeSpacingInput(value || '0px', []).trim();\n return /^-?0(?:\\.0+)?(?:px|rem|em|%)?$/i.test(normalized);\n}\n\nfunction getSpaceStepMatch(\n variant: SpaceVariant,\n value: string,\n spaceSteps: DevInspectorTokenConfig['spaceSteps'],\n) {\n if (variant === 'gap') {\n const normalized = normalizeSpacingInput(value, spaceSteps);\n return spaceSteps.find(step => step.val === normalized) ?? null;\n }\n const sides = parseFourSides(value);\n const isUniform = sides.top === sides.right && sides.right === sides.bottom && sides.bottom === sides.left;\n return isUniform ? spaceSteps.find(step => step.val === sides.top) ?? null : null;\n}\n\nfunction isEmptySpaceValue(variant: SpaceVariant, value: string): boolean {\n if (variant === 'gap') return isZeroLengthValue(value);\n const sides = parseFourSides(value);\n return Object.values(sides).every(isZeroLengthValue);\n}\n\nfunction getSpaceSummary(variant: SpaceVariant, value: string): string {\n if (variant === 'gap') return isEmptySpaceValue(variant, value) ? '' : `gap ${formatSpaceShort(value)}`;\n const sides = parseFourSides(value);\n const entries = [\n ['上', sides.top],\n ['右', sides.right],\n ['下', sides.bottom],\n ['左', sides.left],\n ].filter(([, sideValue]) => !isZeroLengthValue(sideValue));\n return entries.map(([label, sideValue]) => `${label}${formatSpaceShort(sideValue)}`).join(' / ');\n}\n\nfunction getSpaceRecordSummary(variant: SpaceVariant, value: string): string {\n if (variant === 'gap') return isEmptySpaceValue(variant, value) ? '' : `gap ${formatSpaceRecordShort(value)}`;\n const sides = parseFourSides(value);\n const entries = [\n ['上', sides.top],\n ['右', sides.right],\n ['下', sides.bottom],\n ['左', sides.left],\n ].filter(([, sideValue]) => !isZeroLengthValue(sideValue));\n return entries.map(([label, sideValue]) => `${label}${formatSpaceRecordShort(sideValue)}`).join(' / ');\n}\n\nfunction formatStoredSpaceRecordValue(value: string): string {\n if (!value || value === '无') return value;\n return value.replace(\n /(上|右|下|左|gap\\s*)(-?\\d+(?:\\.\\d+)?)(?!\\s*(?:px|rem|em|%))/gi,\n '$1$2px',\n );\n}\n\nfunction getCompactAxisInputWidth(label: string, value: string): number {\n const text = String(value || '0');\n const leftPadding = label.length > 1 ? 42 : 25;\n const rightPadding = 9;\n const valueWidth = Math.max(8, text.length * 7.5);\n const minWidth = label.length > 1 ? 66 : 52;\n return Math.ceil(Math.min(96, Math.max(minWidth, leftPadding + valueWidth + rightPadding)));\n}\n\n// SpaceCard 子组件\nfunction SpaceCard({ title, variant, value, onChange, spaceSteps, custom, onCustomChange }: {\n title: string;\n variant: SpaceVariant;\n value: string;\n onChange: (v: string) => void;\n spaceSteps: DevInspectorTokenConfig['spaceSteps'];\n custom: boolean;\n onCustomChange: (v: boolean) => void;\n}) {\n const [showDrop, setShowDrop] = useState(false);\n const [popupPos, setPopupPos] = useState({ top: 0, left: 0 });\n const matchedStep = getSpaceStepMatch(variant, value, spaceSteps);\n const isCustom = custom || !matchedStep;\n const isEmptySpace = !isCustom && matchedStep?.val === '0px';\n const spaceTokenMeta = isCustom || matchedStep?.val === '0px' ? '' : formatLengthControlValue(matchedStep?.val ?? '');\n const spaceSummary = getSpaceSummary(variant, value);\n const sides = parseFourSides(value);\n const emptySpaceStep = spaceSteps.find(step => step.val === '0px') ?? { label: '无', size: '', val: '0px' };\n const spaceTokenSteps = spaceSteps.filter(step => step.val !== '0px');\n const spaceTokenUsage = variant === 'gap' ? '元素间距 token' : `${title} token`;\n\n function updateSide(side: keyof FourSides, v: string) {\n const nextValue = normalizeSpacingInput(v, spaceSteps);\n const next = { ...sides, [side]: nextValue };\n onCustomChange(true);\n onChange(joinFourSides(next));\n }\n\n function stepSide(side: keyof FourSides, delta: number) {\n const rawNext = Math.round(getNumericCssValue(sides[side]) + delta);\n const next = variant === 'margin' ? rawNext : Math.max(0, rawNext);\n updateSide(side, `${next}px`);\n }\n\n function updateGap(v: string) {\n onCustomChange(true);\n onChange(normalizeSpacingInput(v, spaceSteps));\n }\n\n function stepGap(delta: number) {\n const rawNext = Math.round(getNumericCssValue(value) + delta);\n updateGap(`${Math.max(0, rawNext)}px`);\n }\n\n return (\n <div className={`di-space-card di-space-card--${variant}`}>\n <div className=\"di-space-row-head\">\n <span className=\"di-space-title\">{title}</span>\n <div className={`di-space-control-line${isCustom ? ' di-space-control-line--custom' : ''}${isCustom && variant !== 'gap' ? ' di-space-control-line--sides' : ''}${isCustom && variant === 'gap' ? ' di-space-control-line--gap' : ''}`}>\n {!isCustom && (\n <button\n type=\"button\"\n className={`di-space-token-trigger${isEmptySpace ? ' di-space-token-trigger--empty' : ''}`}\n onClick={event => {\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n setPopupPos(calcDropPos(rect, 260));\n setShowDrop(v => !v);\n }}\n >\n <span className=\"di-space-token-label\">{matchedStep?.label}</span>\n {spaceTokenMeta && <span className=\"di-space-token-meta\">{spaceTokenMeta}</span>}\n <svg width=\"8\" height=\"5\" viewBox=\"0 0 8 5\" fill=\"none\" style={{marginLeft:'auto',flexShrink:0}}><path d=\"M1 1l3 3 3-3\" stroke=\"#9ca3af\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/></svg>\n </button>\n )}\n {spaceSummary && <span className=\"di-space-summary\">{spaceSummary}</span>}\n {showDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={() => setShowDrop(false)} />\n <div className=\"di-border-style-drop di-space-token-menu\" style={{position:'fixed',top:popupPos.top,left:popupPos.left,zIndex:99998}}>\n {[emptySpaceStep, ...spaceTokenSteps].map(step => {\n const isOn = !isCustom && matchedStep?.val === step.val;\n return (\n <button\n key={step.val}\n type=\"button\"\n className={`di-border-style-drop-item${isOn ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n onCustomChange(false);\n onChange(step.val);\n setShowDrop(false);\n }}\n >\n <span className={step.val === '0px' ? 'di-border-style-label di-token-name--empty' : 'di-border-style-label'}>{step.label}</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">{formatLengthControlValue(step.val)}</span>\n <span className=\"di-shadow-drop-value\">{step.val === '0px' ? '空值状态' : spaceTokenUsage}</span>\n </span>\n </button>\n );\n })}\n {spaceTokenSteps.length === 0 && (\n <div className=\"di-token-empty-state\">\n No variables available\n </div>\n )}\n <button\n type=\"button\"\n className={`di-border-style-drop-item${isCustom ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n onCustomChange(true);\n setShowDrop(false);\n }}\n >\n <span className=\"di-custom-option-label\">自定义</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">手动调整参数</span>\n <span className=\"di-shadow-drop-value\">{variant === 'gap' ? '间距' : '上 / 右 / 下 / 左'}</span>\n </span>\n </button>\n </div>\n </>\n )}\n\n {isCustom && variant !== 'gap' && (\n <div className=\"di-space-custom-grid di-space-custom-grid--sides\">\n {([\n { key: 'top', label: '上', value: sides.top },\n { key: 'right', label: '右', value: sides.right },\n { key: 'bottom', label: '下', value: sides.bottom },\n { key: 'left', label: '左', value: sides.left },\n ] as const).map(item => (\n <div\n className=\"di-space-custom-row\"\n key={item.key}\n style={{ '--di-space-input-width': `${getCompactAxisInputWidth(item.label, formatLengthControlValue(item.value))}px` } as CSSProperties}\n >\n <AxisNumberInput\n label={item.label}\n value={formatLengthControlValue(item.value)}\n ariaLabel={`${title}${item.label}`}\n inputClassName=\"di-space-custom-input\"\n onChangeValue={next => updateSide(item.key, next)}\n onStep={delta => stepSide(item.key, delta)}\n />\n </div>\n ))}\n </div>\n )}\n\n {isCustom && variant === 'gap' && (\n <div className=\"di-space-custom-grid di-space-custom-grid--gap\">\n <div\n className=\"di-space-custom-row\"\n style={{ '--di-space-input-width': `${getCompactAxisInputWidth('间距', formatLengthControlValue(value))}px` } as CSSProperties}\n >\n <AxisNumberInput\n label=\"间距\"\n value={formatLengthControlValue(value)}\n ariaLabel=\"元素间距\"\n inputClassName=\"di-space-custom-input\"\n wideLabel\n onChangeValue={updateGap}\n onStep={stepGap}\n />\n </div>\n </div>\n )}\n {isCustom && (\n <SourcePickerButton\n className=\"di-source-action--field\"\n title={`选择${title} token`}\n onClick={event => {\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n setPopupPos(calcDropPos(rect, 260));\n setShowDrop(v => !v);\n }}\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// 判断是否为文字元素(直接包含文本内容)\nfunction getTextContent(el: Element): string | null {\n const text = Array.from(el.childNodes)\n .filter(n => n.nodeType === Node.TEXT_NODE)\n .map(n => n.textContent ?? '')\n .join('')\n .trim();\n // 只有纯文本(或极少子元素)才视为文字层\n return text.length > 0 ? el.textContent?.trim() ?? null : null;\n}\n\ntype ComponentElementInfo = {\n key: string;\n label: string;\n selector: string;\n text: string;\n style: string;\n spacing: string;\n styleStatus: 'token' | 'raw';\n spacingStatus: 'token' | 'raw' | null;\n};\n\ntype MatchBadgeTone = 'matched' | 'pending' | 'token' | 'raw';\n\nfunction MatchBadge({\n label,\n tooltip,\n tone,\n}: {\n label: string;\n tooltip: string;\n tone: MatchBadgeTone;\n}) {\n return (\n <span\n className={`di-match-badge di-match-badge--${tone}`}\n title={tooltip}\n data-tooltip={tooltip}\n tabIndex={0}\n >\n {label}\n </span>\n );\n}\n\nfunction getComputedMargin(el: Element): string {\n const cs = getComputedStyle(el);\n const t = cs.marginTop, r = cs.marginRight, b = cs.marginBottom, l = cs.marginLeft;\n if (t === r && r === b && b === l) return t;\n return `${t} ${r} ${b} ${l}`;\n}\n\nfunction formatReadableColor(value: string): string {\n if (!value || isTransparentColor(value)) return '透明';\n return formatColorDisplay(resolveColorValue(value));\n}\n\nfunction getComponentElementStyleSummary(el: Element): string {\n const cs = getComputedStyle(el);\n const parts: string[] = [];\n const text = getTextContent(el);\n const tag = el.tagName.toLowerCase();\n const borderWidth = getNumericCssValue(cs.borderTopWidth);\n const radius = cs.borderRadius.trim();\n const bg = cs.backgroundColor.trim();\n const color = cs.color.trim();\n\n if (text || /^(p|span|a|button|label|h1|h2|h3|h4|h5|h6|li|strong|em)$/i.test(tag)) {\n parts.push(`字 ${formatLengthControlValue(cs.fontSize)}`);\n parts.push(`重 ${cs.fontWeight}`);\n parts.push(`色 ${formatReadableColor(color)}`);\n }\n\n if (!isTransparentColor(bg)) {\n parts.push(`背景 ${formatReadableColor(bg)}`);\n }\n\n if (borderWidth > 0 && !isTransparentColor(cs.borderTopColor)) {\n parts.push(`描边 ${formatLengthControlValue(cs.borderTopWidth)} ${formatReadableColor(cs.borderTopColor)}`);\n }\n\n if (!isZeroLengthValue(radius)) {\n parts.push(`圆角 ${formatLengthControlValue(radius)}`);\n }\n\n return parts.join(' / ') || '无明显样式';\n}\n\nfunction getComponentElementSpacingSummary(el: Element): string {\n const cs = getComputedStyle(el);\n const parts: string[] = [];\n const paddingSummary = getSpaceSummary('padding', getComputedPadding(el));\n const marginSummary = getSpaceSummary('margin', getComputedMargin(el));\n const gapSummary = canControlElementGap(el) ? getSpaceSummary('gap', cs.gap.trim()) : '';\n\n if (paddingSummary) parts.push(`内边距 ${paddingSummary}`);\n if (marginSummary) parts.push(`外边距 ${marginSummary}`);\n if (gapSummary) parts.push(`元素间距 ${gapSummary.replace(/^gap\\s*/i, '')}`);\n\n return parts.join(' / ') || '无额外间距';\n}\n\nfunction getComponentElementStyleStatus(\n el: Element,\n tokenMap: Record<string, string>,\n colorPalette: DevInspectorTokenConfig['colorPalette'],\n tokenLabels: DevInspectorTokenConfig['tokenLabels'],\n typographyTokens: DevInspectorTokenConfig['typographyTokens'],\n): 'token' | 'raw' {\n const cs = getComputedStyle(el);\n const colorInfo = getDisplayLabel(normalizeColor(cs.color), tokenMap, colorPalette, tokenLabels);\n const backgroundInfo = getDisplayLabel(normalizeColor(cs.backgroundColor), tokenMap, colorPalette, tokenLabels);\n const borderInfo = getDisplayLabel(normalizeColor(cs.borderTopColor), tokenMap, colorPalette, tokenLabels);\n const typographyMatched = Boolean(getTypographyToken(cs.fontSize.trim(), cs.fontWeight.trim(), normalizeColor(cs.color), typographyTokens));\n\n if (typographyMatched) return 'token';\n if (!colorInfo.isHardcoded || !backgroundInfo.isHardcoded || !borderInfo.isHardcoded) return 'token';\n return 'raw';\n}\n\nfunction getComponentElementSpacingStatus(\n el: Element,\n spaceSteps: DevInspectorTokenConfig['spaceSteps'],\n): 'token' | 'raw' | null {\n const cs = getComputedStyle(el);\n const paddingValue = getComputedPadding(el);\n const marginValue = getComputedMargin(el);\n const gapValue = cs.gap.trim();\n const paddingSummary = getSpaceSummary('padding', paddingValue);\n const marginSummary = getSpaceSummary('margin', marginValue);\n const gapSummary = canControlElementGap(el) ? getSpaceSummary('gap', gapValue) : '';\n const hasSpacing = Boolean(paddingSummary || marginSummary || gapSummary);\n\n if (!hasSpacing) return null;\n\n const paddingMatched = !paddingSummary || Boolean(getSpaceStepMatch('padding', paddingValue, spaceSteps));\n const marginMatched = !marginSummary || Boolean(getSpaceStepMatch('margin', marginValue, spaceSteps));\n const gapMatched = !gapSummary || Boolean(getSpaceStepMatch('gap', gapValue, spaceSteps));\n\n return paddingMatched && marginMatched && gapMatched ? 'token' : 'raw';\n}\n\nconst TOKEN_TYPES = [\n { key: 'bg', label: '背景色', code: 'bg' },\n { key: 'text', label: '文字色', code: 'text' },\n { key: 'accent', label: '强调色', code: 'accent' },\n { key: 'border', label: '边框色', code: 'border' },\n];\nconst TOKEN_COMPONENTS = [\n { key: 'global', label: '全局', code: 'global' },\n { key: 'sidebar', label: '侧边栏', code: 'sidebar' },\n { key: 'button', label: '按钮', code: 'button' },\n { key: 'card', label: '卡片', code: 'card' },\n { key: 'tag', label: '标签', code: 'tag' },\n { key: 'input', label: '输入框', code: 'input' },\n];\nconst TOKEN_STATES = [\n { key: 'default', label: '默认态', code: 'default' },\n { key: 'hover', label: '悬浮态', code: 'hover' },\n { key: 'active', label: '激活态', code: 'active' },\n { key: 'disabled', label: '禁用态', code: 'disabled' },\n { key: 'success', label: '成功态', code: 'success' },\n { key: 'warning', label: '警告态', code: 'warning' },\n];\n\n// ─── ColorDropdown:色板分组下拉 ──────────────────────────────────\nfunction ColorDropdown({ value, onChange, onClose, onAddToken, pos, colorPalette }: {\n value: string;\n onChange: (v: string, token: string) => void;\n onClose: () => void;\n onAddToken?: (val: string) => void; // 只传颜色值,Modal 里选 token 名\n pos?: { top: number; left: number };\n colorPalette: DevInspectorTokenConfig['colorPalette'];\n}) {\n const resolvedValue = resolveColorValue(value);\n const initHex = /^#[0-9a-f]{6}$/i.test(resolvedValue) ? resolvedValue : '#6b7280';\n const initAlpha = (() => {\n const rgbaMatch = value.match(/^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([\\d.]+)\\)$/i);\n if (!rgbaMatch) return 100;\n return Math.max(0, Math.min(100, Math.round(parseFloat(rgbaMatch[4]) * 100)));\n })();\n const [hexInput, setHexInput] = useState(initHex);\n const [alpha, setAlpha] = useState(initAlpha);\n const customColorInputRef = useRef<HTMLInputElement | null>(null);\n\n function buildColor(hex: string, a: number): string {\n const m = hex.match(/^#([0-9a-f]{6})$/i);\n if (!m || a >= 100) return hex;\n const r=parseInt(m[1].slice(0,2),16), g=parseInt(m[1].slice(2,4),16), b=parseInt(m[1].slice(4,6),16);\n return `rgba(${r},${g},${b},${(a/100).toFixed(2)})`;\n }\n\n function applyColor(hex: string, a: number) {\n onChange(buildColor(hex, a), '');\n }\n\n const style = pos ? { position: 'fixed' as const, top: pos.top, left: pos.left, zIndex: 99998 } : {};\n return (\n <>\n <div style={{ position: 'fixed', inset: 0, zIndex: 99997 }} onClick={onClose} />\n <div className=\"di-palette-dropdown\" style={style}>\n <div className=\"di-palette-scroll\">\n {/* 无背景色 */}\n <div className=\"di-palette-group\">\n <div className=\"di-palette-group-label\">无</div>\n <div className=\"di-palette-swatches\">\n <button className=\"di-palette-none\" title=\"无背景色 / transparent\"\n onClick={() => { onChange('transparent', ''); onClose(); }} />\n </div>\n </div>\n\n {/* 色板 + 每组末尾「+」格子 */}\n {colorPalette.map((g, index) => (\n <div key={g.group} className={`di-palette-group${index === colorPalette.length - 1 ? ' di-palette-group--last' : ''}`}>\n <div className=\"di-palette-group-label\">{g.group}</div>\n <div className=\"di-palette-swatches\">\n {g.colors.map(c => (\n <button key={c.token}\n className={`di-palette-swatch${value === c.val ? ' di-palette-swatch--on' : ''}`}\n title={`${g.group}·${c.label} ${c.val}`}\n onClick={() => { onChange(c.val, c.token); onClose(); }}\n >\n <span className=\"di-palette-swatch-fill\" style={{ background: c.val }} />\n </button>\n ))}\n {onAddToken && (\n <button className=\"di-palette-add-btn\" title={`添加为${g.group}色 token`}\n onClick={() => { onAddToken(buildColor(hexInput, alpha)); onClose(); }}>\n +\n </button>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* 自定义底部:色块 + [#][hex] + [alpha][%] */}\n <div className=\"di-custom-bottom\">\n <button\n className=\"di-custom-color-trigger\"\n style={{ background: buildColor(hexInput, alpha), flexShrink: 0 }}\n title=\"选择自定义颜色\"\n onClick={() => customColorInputRef.current?.click()}\n />\n <input\n ref={customColorInputRef}\n className=\"di-custom-color-input\"\n type=\"color\"\n value={/^#[0-9a-f]{6}$/i.test(hexInput) ? hexInput : '#6b7280'}\n aria-label=\"选择自定义颜色\"\n onChange={event => {\n const h = event.currentTarget.value;\n setHexInput(h);\n applyColor(h, alpha);\n }}\n />\n {/* hex 输入,# 是灰色前缀 */}\n <div className=\"di-field-wrap\">\n <span className=\"di-field-prefix\">#</span>\n <input className=\"di-field-input\" value={hexInput.replace(/^#/, '')} placeholder=\"ffffff\"\n onChange={e => { const h='#'+e.target.value; setHexInput(h); applyColor(h, alpha); }}\n onBlur={e => { if (!/^[0-9a-f]{6}$/i.test(e.target.value)) setHexInput(initHex); }}\n />\n </div>\n {/* 透明度,% 是灰色后缀 */}\n <div className=\"di-field-wrap di-field-wrap--fixed\">\n <input className=\"di-field-input di-field-input--num\" type=\"number\" min=\"0\" max=\"100\" value={alpha}\n onChange={e => { const a=Math.min(100,Math.max(0,+e.target.value||0)); setAlpha(a); applyColor(hexInput, a); }}\n />\n <span className=\"di-field-suffix\">%</span>\n </div>\n </div>\n </div>\n </>\n );\n}\n\n// 从 CSS 属性名推断颜色类型\nfunction inferType(cssProp?: string): string {\n if (!cssProp) return 'bg';\n if (cssProp === 'color') return 'text';\n if (cssProp.includes('border')) return 'border';\n if (cssProp.includes('background')) return 'bg';\n return 'accent';\n}\n\n// 从 class 列表推断组件\nfunction inferComponent(classes: string[]): string {\n const joined = classes.join(' ').toLowerCase();\n if (/sidebar|nav-item|nav/.test(joined)) return 'sidebar';\n if (/button|btn|start/.test(joined)) return 'button';\n if (/card/.test(joined)) return 'card';\n if (/tag|badge|chip/.test(joined)) return 'tag';\n if (/input|field|form/.test(joined)) return 'input';\n return 'global';\n}\n\n// 从 class 列表推断状态\nfunction inferState(classes: string[]): string {\n const joined = classes.join(' ').toLowerCase();\n if (/is-active|active|is-current|current/.test(joined)) return 'active';\n if (/disabled/.test(joined)) return 'disabled';\n if (/hover/.test(joined)) return 'hover';\n if (/success/.test(joined)) return 'success';\n if (/warning/.test(joined)) return 'warning';\n return 'default';\n}\n\n// ─── AddTokenModal:添加 token 弹出框 ─────────────────────────────\nfunction AddTokenModal({ value, cssProp, elementClasses, onClose, onConfirm, colorPalette }: {\n value: string;\n cssProp?: string;\n elementClasses?: string[];\n onClose: () => void;\n onConfirm: (cssVar: string, val: string, usage: string) => void;\n colorPalette: DevInspectorTokenConfig['colorPalette'];\n}) {\n const [mode, setMode] = useState<'new' | 'replace'>('new');\n const [type, setType] = useState(() => inferType(cssProp));\n const [component, setComponent] = useState(() => inferComponent(elementClasses ?? []));\n const [state, setState] = useState(() => inferState(elementClasses ?? []));\n const [replaceTarget, setReplaceTarget] = useState('');\n\n const allTokens = colorPalette.flatMap(g => g.colors);\n const typeObj = TOKEN_TYPES.find(t => t.key === type)!;\n const componentObj = TOKEN_COMPONENTS.find(c => c.key === component)!;\n const stateObj = TOKEN_STATES.find(s => s.key === state)!;\n\n const generatedVar = mode === 'new'\n ? `--color-${typeObj.code}-${componentObj.code}-${stateObj.code}`\n : replaceTarget;\n\n const BtnGroup = ({ items, active, onSelect }: { items: {key:string;label:string}[]; active: string; onSelect:(k:string)=>void }) => (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>\n {items.map(i => (\n <button key={i.key}\n className={`di-modal-opt-btn${active === i.key ? ' --on' : ''}`}\n onClick={() => onSelect(i.key)}>\n {i.label}\n </button>\n ))}\n </div>\n );\n\n return (\n <div className=\"di-modal-overlay\" onClick={onClose}>\n <div className=\"di-modal\" onClick={e => e.stopPropagation()}>\n {/* 顶部颜色信息 */}\n <div className=\"di-modal-header\">\n <span className=\"di-modal-swatch\" style={{ background: value }} />\n <span className=\"di-modal-hex\">{value}</span>\n <div style={{ flex: 1 }} />\n <span style={{ fontSize: 12, color: '#6b7280' }}>添加为 token</span>\n </div>\n\n <div className=\"di-modal-body\">\n {/* 模式切换 */}\n <div className=\"di-modal-tabs\">\n {[{k:'new',l:'新建 token'},{k:'replace',l:'替换已有 token'}].map(m => (\n <button key={m.k} className={`di-modal-tab${mode===m.k?' --on':''}`}\n onClick={() => setMode(m.k as 'new'|'replace')}>{m.l}</button>\n ))}\n </div>\n\n {mode === 'new' ? (\n <>\n <div className=\"di-modal-field\">\n <div className=\"di-modal-field-label\">颜色类型 <span className=\"di-modal-auto-tag\">自动识别</span></div>\n <BtnGroup items={TOKEN_TYPES} active={type} onSelect={setType} />\n </div>\n <div className=\"di-modal-field\">\n <div className=\"di-modal-field-label\">组件 <span className=\"di-modal-auto-tag\">自动识别</span></div>\n <BtnGroup items={TOKEN_COMPONENTS} active={component} onSelect={setComponent} />\n </div>\n <div className=\"di-modal-field\">\n <div className=\"di-modal-field-label\">用途 / 状态 <span className=\"di-modal-auto-tag\">自动推断,可改</span></div>\n <BtnGroup items={TOKEN_STATES} active={state} onSelect={setState} />\n </div>\n </>\n ) : (\n <div className=\"di-modal-field\">\n <div className=\"di-modal-field-label\">选择要替换的 token</div>\n <select className=\"di-modal-select\"\n value={replaceTarget} onChange={e => setReplaceTarget(e.target.value)}>\n <option value=\"\">请选择…</option>\n {allTokens.map(c => (\n <option key={c.token} value={c.token}>{c.token}({c.val})</option>\n ))}\n </select>\n </div>\n )}\n\n {/* 生成结果预览 */}\n {generatedVar && (\n <div className=\"di-modal-result\">\n <div className=\"di-modal-result-label\">系统生成 token 名称</div>\n <div className=\"di-modal-result-var\">{generatedVar}</div>\n {mode === 'new' && (\n <div className=\"di-modal-result-trail\">\n {typeObj.label} → <code>{typeObj.code}</code>\n &ensp;{componentObj.label} → <code>{componentObj.code}</code>\n &ensp;{stateObj.label} → <code>{stateObj.code}</code>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* 底部按钮 */}\n <div className=\"di-modal-foot\">\n <button className=\"di-modal-cancel\" onClick={onClose}>取消</button>\n <button className=\"di-modal-ok\" disabled={!generatedVar}\n onClick={() => { if (generatedVar) { onConfirm(generatedVar, value, type); onClose(); } }}>\n 确认创建\n </button>\n </div>\n </div>\n </div>\n );\n}\n\n// 获取颜色的显示标签(优先用色板短标签,其次 tokenMap,最后 hex)\nfunction getDisplayLabel(\n val: string,\n tokenMap: Record<string, string>,\n colorPalette: DevInspectorTokenConfig['colorPalette'],\n tokenLabels: DevInspectorTokenConfig['tokenLabels'],\n): { label: string; sub: string; isHardcoded: boolean } {\n if (isTransparentColor(val)) return { label: '无', sub: '', isHardcoded: true };\n const resolvedVal = resolveColorValue(val);\n const displayVal = formatColorDisplay(resolvedVal);\n const paletteLabel = getColorLabel(resolvedVal, colorPalette);\n if (paletteLabel) return { label: paletteLabel, sub: displayVal, isHardcoded: false };\n const token = tokenMap[val] ?? tokenMap[resolvedVal];\n if (token) return { label: tokenLabels[token] ?? token.replace('--', ''), sub: displayVal, isHardcoded: false };\n return { label: displayVal, sub: '', isHardcoded: true };\n}\n\nfunction normalizeLibraryTokenName(value: string): string {\n return value.replace(/^--/, '').replace(/-/g, '·');\n}\n\nfunction getLibraryTokenItems(\n tokens: DevInspectorTokenConfig,\n tokenMap: Record<string, string>,\n): LibraryTokenItem[] {\n const items: LibraryTokenItem[] = [];\n const seen = new Set<string>();\n const add = (item: LibraryTokenItem) => {\n const key = `${item.category}:${item.name}:${item.value}`;\n if (seen.has(key)) return;\n seen.add(key);\n items.push(item);\n };\n\n tokens.colorPalette.forEach(group => {\n group.colors.forEach(color => add({\n id: `color:${group.group}:${color.token || color.label}`,\n category: 'color',\n categoryLabel: '颜色',\n name: color.token || `${group.group}.${color.label}`,\n value: formatColorDisplay(color.val),\n rawValue: color.val,\n usage: `${group.group} / ${color.label}`,\n status: '系统 token',\n preview: 'color',\n previewValue: color.val,\n source: 'system',\n }));\n });\n\n Object.entries(tokenMap).forEach(([value, token]) => {\n if (!token || seen.has(`color:${token}:${formatColorDisplay(value)}`)) return;\n if (!/^#|rgb|hsl/i.test(value.trim())) return;\n add({\n id: `custom-color:${token}:${value}`,\n category: 'color',\n categoryLabel: '颜色',\n name: token,\n value: formatColorDisplay(value),\n rawValue: value,\n usage: normalizeLibraryTokenName(token),\n status: '自定义 token',\n preview: 'color',\n previewValue: value,\n source: 'custom',\n });\n });\n\n (tokens.typographyStyles ?? []).forEach(style => add({\n id: `typography-style:${style.key}`,\n category: 'typography',\n categoryLabel: '文字',\n name: style.key,\n value: `${style.value} / ${style.fontWeight}`,\n rawValue: style.value,\n usage: style.usage || style.label,\n status: '系统 token',\n preview: 'text',\n previewValue: style.color,\n source: 'system',\n }));\n\n tokens.typographyTokens.forEach(token => add({\n id: `typography-token:${token.key}`,\n category: 'typography',\n categoryLabel: '文字',\n name: token.key,\n value: `${token.fontSize} / ${token.fontWeight}`,\n rawValue: token.fontSize,\n usage: token.usage || token.label,\n status: '系统 token',\n preview: 'text',\n previewValue: token.color,\n source: 'system',\n }));\n\n getContainerStyles(tokens).forEach(style => add({\n id: `appearance:${style.key}`,\n category: 'appearance',\n categoryLabel: '外观',\n name: style.key,\n value: `${style.backgroundVar || formatColorDisplay(style.backgroundColor)} / ${style.borderWidth} / ${style.borderStyle} / ${style.borderRadius}`,\n rawValue: style.backgroundColor,\n usage: style.usage || style.label,\n status: '系统 token',\n preview: 'appearance',\n previewValue: style.borderColor || style.backgroundColor,\n source: 'system',\n }));\n\n tokens.spaceSteps.forEach(step => add({\n id: `space:${step.label}:${step.val}`,\n category: 'space',\n categoryLabel: '间距',\n name: step.label,\n value: step.val,\n rawValue: step.val,\n usage: step.size || '空值 / 无间距',\n status: '系统 token',\n preview: 'space',\n source: 'system',\n }));\n\n tokens.radiusPresets.forEach(radius => add({\n id: `radius:${radius.label}:${radius.value}`,\n category: 'radius',\n categoryLabel: '圆角',\n name: radius.token || radius.label,\n value: radius.value,\n rawValue: radius.value,\n usage: radius.sub || '无圆角',\n status: '系统 token',\n preview: 'radius',\n source: 'system',\n }));\n\n tokens.shadowTokens.forEach(shadow => add({\n id: `shadow:${shadow.cssVar || shadow.label}`,\n category: 'shadow',\n categoryLabel: '阴影',\n name: shadow.cssVar || shadow.label,\n value: shadow.value,\n rawValue: shadow.value,\n usage: shadow.usage,\n status: '系统 token',\n preview: 'shadow',\n source: 'system',\n }));\n\n return items;\n}\n\nconst LIBRARY_TOKEN_USAGE_PROPS: Record<LibraryTokenItemCategory, string[]> = {\n color: ['color', 'background-color', 'border-color'],\n typography: ['font-size'],\n appearance: ['background-color', 'border-color', 'border-radius'],\n space: ['padding-top', 'padding-right', 'padding-bottom', 'padding-left', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left', 'gap'],\n radius: ['border-radius'],\n shadow: ['box-shadow'],\n};\n\nfunction getLibraryTokenUsageTargets(item: LibraryTokenItem): Element[] | null {\n if (!item.rawValue || item.rawValue.includes('var(')) return null;\n const needle = item.category === 'color' || item.category === 'appearance'\n ? normalizeColor(item.rawValue)\n : item.rawValue.trim();\n if (!needle || needle === 'transparent') return null;\n\n const props = LIBRARY_TOKEN_USAGE_PROPS[item.category] ?? [];\n const targets: Element[] = [];\n if (typeof document === 'undefined') return targets;\n document.querySelectorAll('body *').forEach(el => {\n if (isInsidePanel(el)) return;\n const cs = getComputedStyle(el);\n if (props.some(prop => {\n const value = cs.getPropertyValue(prop).trim();\n const normalized = item.category === 'color' || item.category === 'appearance'\n ? normalizeColor(value)\n : value;\n return normalized === needle;\n })) targets.push(el);\n });\n return targets;\n}\n\nfunction countLibraryTokenUsage(item: LibraryTokenItem): number | null {\n return getLibraryTokenUsageTargets(item)?.length ?? null;\n}\n\nfunction getComponentCapabilitySummary(type: string, capability: ComponentCapability): string {\n const parts = [\n capability.editableText ? '文案' : '',\n capability.variantKind ? (capability.variantKind === 'card' ? '展示' : '变体') : '',\n capability.sizeKind ? '尺寸' : '',\n capability.colorKind ? '颜色' : '',\n capability.statusKind ? '状态' : '',\n capability.textSlots?.length ? '可编辑内容' : '',\n capability.childSlots?.length ? '子组件入口' : '',\n ].filter(Boolean);\n return parts.join(' / ') || `${type} 识别`;\n}\n\nfunction ColorSelectButton({\n value,\n label,\n sub,\n isHardcoded,\n title,\n className = '',\n swatchClassName = '',\n swatchStyle,\n onClick,\n}: {\n value: string;\n label: string;\n sub?: string;\n isHardcoded?: boolean;\n title: string;\n className?: string;\n swatchClassName?: string;\n swatchStyle?: CSSProperties;\n onClick: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n}) {\n const isEmpty = isTransparentColor(value);\n const displayLabel = isEmpty ? '透明' : isHardcoded ? '自定义色' : label;\n const detail = isEmpty ? '' : sub || (displayLabel !== label ? label : '');\n const buttonTitle = detail ? `${title}: ${displayLabel} ${detail}` : `${title}: ${displayLabel}`;\n return (\n <button\n className={`di-color-select ${className}`.trim()}\n type=\"button\"\n title={buttonTitle}\n onClick={onClick}\n >\n <span\n className={`di-color-select-swatch${swatchClassName ? ` ${swatchClassName}` : ''}${isColorDark(value) ? ' di-color-select-swatch--dark' : ''}${isEmpty ? ' di-color-swatch--empty' : ''}`}\n style={{ background: isEmpty ? undefined : value, ...swatchStyle }}\n />\n <span className=\"di-color-select-copy\">\n <span className={isHardcoded || isEmpty ? 'di-token-name--plain' : 'di-token-name'}>{displayLabel}</span>\n </span>\n </button>\n );\n}\n\nfunction CustomSelectButton({\n title = '自定义',\n className = '',\n onClick,\n}: {\n title?: string;\n className?: string;\n onClick: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n}) {\n return (\n <button\n className={`di-custom-select ${className}`.trim()}\n type=\"button\"\n title={title}\n onClick={onClick}\n >\n <span className=\"di-custom-select-label\">自定义</span>\n </button>\n );\n}\n\nfunction SourcePickerButton({\n title,\n className = '',\n onClick,\n}: {\n title: string;\n className?: string;\n onClick: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n}) {\n return (\n <button\n className={`di-source-action ${className}`.trim()}\n type=\"button\"\n title={title}\n aria-label={title}\n onClick={onClick}\n >\n <ComponentIcon size={15} strokeWidth={2.1} aria-hidden=\"true\" />\n </button>\n );\n}\n\nfunction AxisNumberInput({\n label,\n value,\n ariaLabel,\n inputClassName,\n wideLabel = false,\n onChangeValue,\n onStep,\n onFocusValue,\n onBlur,\n onEnter,\n}: {\n label: string;\n value: string;\n ariaLabel: string;\n inputClassName: string;\n wideLabel?: boolean;\n onChangeValue: (value: string) => void;\n onStep: (delta: number) => void;\n onFocusValue?: () => void;\n onBlur?: () => void;\n onEnter?: (event: ReactKeyboardEvent<HTMLInputElement>) => void;\n}) {\n return (\n <div className={`di-number-stepper di-number-stepper--with-axis${wideLabel ? ' di-number-stepper--wide-axis' : ''}`}>\n <span className={`di-field-axis${wideLabel ? ' di-field-axis--wide' : ''}`} aria-hidden=\"true\">{label}</span>\n <input\n className={`${inputClassName} di-number-stepper-input`}\n value={value}\n aria-label={ariaLabel}\n onChange={event => onChangeValue(event.currentTarget.value)}\n onFocus={event => {\n onFocusValue?.();\n event.currentTarget.select();\n }}\n onClick={event => event.currentTarget.select()}\n onMouseUp={event => event.preventDefault()}\n onBlur={onBlur}\n onKeyDown={event => handleArrowKeyStep(event, onStep, () => onEnter?.(event))}\n />\n <div className=\"di-number-stepper-buttons\">\n <button type=\"button\" onClick={() => onStep(1)} aria-label={`${ariaLabel}增加 1px`}>⌃</button>\n <button type=\"button\" onClick={() => onStep(-1)} aria-label={`${ariaLabel}减少 1px`}>⌄</button>\n </div>\n </div>\n );\n}\n\n// ─── InspectorPanel:可复用的面板组件 ────────────────────────────\nexport function InspectorPanel({\n targetEl,\n tokenMap,\n onTokenMapUpdate,\n onTargetChange,\n onClose,\n}: {\n targetEl: Element;\n tokenMap: Record<string, string>;\n onTokenMapUpdate: (updates: Record<string, string>) => void;\n onTargetChange: (el: Element) => void;\n onClose: () => void;\n}) {\n const isSecondary = false;\n const { componentPreviews, endpoints, tokens } = useDevInspectorConfig();\n const {\n colorPalette,\n tokenLabels,\n inspectorTypography,\n radiusPresets,\n spaceSteps,\n borderWidthSteps,\n fontSizeOptions,\n fontWeightOptions,\n shadowTokens,\n typographyTokens,\n } = tokens;\n const typographyStyles = getTypographyStyles(tokens);\n const containerStyles = getContainerStyles(tokens);\n const shadowOptions = [\n { cssVar: '', value: 'none', label: '无', usage: '不使用阴影' },\n ...shadowTokens,\n ];\n const inspectorTypographyVars = {\n '--di-text-title-size': inspectorTypography.title.fontSize,\n '--di-text-title-weight': inspectorTypography.title.fontWeight,\n '--di-text-title-line-height': inspectorTypography.title.lineHeight,\n '--di-text-title-color': inspectorTypography.title.color,\n '--di-text-label-size': inspectorTypography.sectionLabel.fontSize,\n '--di-text-label-weight': inspectorTypography.sectionLabel.fontWeight,\n '--di-text-label-line-height': inspectorTypography.sectionLabel.lineHeight,\n '--di-text-label-color': inspectorTypography.sectionLabel.color,\n '--di-text-body-size': inspectorTypography.body.fontSize,\n '--di-text-body-weight': inspectorTypography.body.fontWeight,\n '--di-text-body-line-height': inspectorTypography.body.lineHeight,\n '--di-text-body-color': inspectorTypography.body.color,\n '--di-text-meta-size': inspectorTypography.meta.fontSize,\n '--di-text-meta-weight': inspectorTypography.meta.fontWeight,\n '--di-text-meta-line-height': inspectorTypography.meta.lineHeight,\n '--di-text-meta-color': inspectorTypography.meta.color,\n '--di-text-tiny-badge-size': inspectorTypography.tinyBadge.fontSize,\n '--di-text-tiny-badge-weight': inspectorTypography.tinyBadge.fontWeight,\n '--di-text-tiny-badge-line-height': inspectorTypography.tinyBadge.lineHeight,\n '--di-text-tiny-badge-color': inspectorTypography.tinyBadge.color,\n } as React.CSSProperties;\n const [isEditing, setIsEditing] = useState(false);\n const panelElRef = useRef<HTMLDivElement>(null);\n const [selected, setSelected] = useState<Element>(targetEl);\n const [panelPos, setPanelPos] = useState(() => calcPanelPos(targetEl.getBoundingClientRect()));\n const dragRef = useRef<{ sx: number; sy: number; sl: number; st: number } | null>(null);\n const modalOpenRef = useRef(false);\n const [colors, setColors] = useState<Record<string, string>>({});\n const [radiusVal, setRadiusVal] = useState('');\n const [paddingVal, setPaddingVal] = useState('0px');\n const [marginVal, setMarginVal] = useState('0px');\n const [gapVal, setGapVal] = useState('0px');\n const [translateVal, setTranslateVal] = useState({ x: 0, y: 0 });\n const [positionBaseVal, setPositionBaseVal] = useState({ x: 0, y: 0 });\n const [widthVal, setWidthVal] = useState('');\n const [heightVal, setHeightVal] = useState('');\n const [widthMode, setWidthMode] = useState<SizeMode>('fixed');\n const [heightMode, setHeightMode] = useState<SizeMode>('hug');\n const [justifyVal, setJustifyVal] = useState('normal');\n const [alignItemsVal, setAlignItemsVal] = useState('normal');\n const [customRadius, setCustomRadius] = useState('');\n const [scope, setScope] = useState<ScopeMode>('current');\n const [note, setNote] = useState('');\n const [textContent, setTextContent] = useState<string | null>(null);\n const [pendingColors, setPendingColors] = useState<Record<string, string>>({});\n const [pendingRadius, setPendingRadius] = useState('');\n const [shadowVal, setShadowVal] = useState('none');\n const [shadowAuthoredVal, setShadowAuthoredVal] = useState('');\n const [pendingShadow, setPendingShadow] = useState('');\n const [borderColorVal, setBorderColorVal] = useState('');\n const [borderWidthVal, setBorderWidthVal] = useState('0px');\n const [borderStyleVal, setBorderStyleVal] = useState('none');\n const [pendingBorderColor, setPendingBorderColor] = useState('');\n const [pendingBorderWidth, setPendingBorderWidth] = useState('');\n const [pendingBorderStyle, setPendingBorderStyle] = useState('');\n const [expandedBorderColor, setExpandedBorderColor] = useState(false);\n const [showContainerStyleDrop, setShowContainerStyleDrop] = useState(false);\n const [showBorderWidthDrop, setShowBorderWidthDrop] = useState(false);\n const [showRadiusDrop, setShowRadiusDrop] = useState(false);\n const [containerCustomMode, setContainerCustomMode] = useState(false);\n const [showShadowDrop, setShowShadowDrop] = useState(false);\n const [showShadowColorDrop, setShowShadowColorDrop] = useState(false);\n const [shadowCustomMode, setShadowCustomMode] = useState(false);\n const [showStyleDrop, setShowStyleDrop] = useState(false);\n const [showWeightDrop, setShowWeightDrop] = useState(false);\n const [showFontSizeDrop, setShowFontSizeDrop] = useState(false);\n const [showTypographyStyleDrop, setShowTypographyStyleDrop] = useState(false);\n const [typographyCustomMode, setTypographyCustomMode] = useState(false);\n const [showScopeHelp, setShowScopeHelp] = useState(false);\n const [dropPos, setDropPos] = useState({ top: 0, left: 0 });\n const [fontSizeVal, setFontSizeVal] = useState('');\n const [fontWeightVal, setFontWeightVal] = useState('');\n const [textColorVal, setTextColorVal] = useState('');\n const [fontSizeCustomDraft, setFontSizeCustomDraft] = useState('');\n const [expandedTextColor, setExpandedTextColor] = useState(false);\n const [pendingFontSize, setPendingFontSize] = useState('');\n const [pendingFontWeight, setPendingFontWeight] = useState('');\n const [pendingTextColor, setPendingTextColor] = useState('');\n const [pendingPadding, setPendingPadding] = useState('');\n const [pendingMargin, setPendingMargin] = useState('');\n const [pendingGap, setPendingGap] = useState('');\n const [spaceCustomModes, setSpaceCustomModes] = useState<Record<SpaceVariant, boolean>>({\n padding: false,\n margin: false,\n gap: false,\n });\n const [pendingTranslate, setPendingTranslate] = useState<{ x: number; y: number } | null>(null);\n const [pendingWidth, setPendingWidth] = useState('');\n const [pendingHeight, setPendingHeight] = useState('');\n const [pendingWidthMode, setPendingWidthMode] = useState<SizeMode | null>(null);\n const [pendingHeightMode, setPendingHeightMode] = useState<SizeMode | null>(null);\n const [pendingJustifyContent, setPendingJustifyContent] = useState('');\n const [pendingAlignItems, setPendingAlignItems] = useState('');\n const [sizeDraft, setSizeDraft] = useState<Partial<Record<SizeAxis, string>>>({});\n const [newTokenProp, setNewTokenProp] = useState<string | null>(null);\n const [newTokenName, setNewTokenName] = useState('');\n const [saveMsg, setSaveMsg] = useState('');\n const [copyMsg, setCopyMsg] = useState('');\n const [submitMsg, setSubmitMsg] = useState('');\n const [componentTextVal, setComponentTextVal] = useState('');\n const [componentTextDraft, setComponentTextDraft] = useState('');\n const [componentTextSlotVals, setComponentTextSlotVals] = useState<Record<string, string>>({});\n const [componentTextSlotDrafts, setComponentTextSlotDrafts] = useState<Record<string, string>>({});\n const [componentChildSlotVals, setComponentChildSlotVals] = useState<Record<string, string>>({});\n const [pendingComponentTextSlots, setPendingComponentTextSlots] = useState<Record<string, string>>({});\n const [pendingComponentText, setPendingComponentText] = useState<string | null>(null);\n const [componentSelectorVal, setComponentSelectorVal] = useState('');\n const [componentVariantVal, setComponentVariantVal] = useState<ButtonVariantKey>('secondary');\n const [componentVariantClassVal, setComponentVariantClassVal] = useState('');\n const [pendingComponentVariant, setPendingComponentVariant] = useState<ButtonVariantKey | ''>('');\n const [componentSizeVal, setComponentSizeVal] = useState<ButtonSizeKey>('m');\n const [pendingComponentSize, setPendingComponentSize] = useState<ButtonSizeKey | ''>('');\n const [iconColorVal, setIconColorVal] = useState<IconColorKey>('default');\n const [pendingIconColor, setPendingIconColor] = useState<IconColorKey | ''>('');\n const [badgeStatusVal, setBadgeStatusVal] = useState<BadgeStatusKey>('default');\n const [badgeStatusClassVal, setBadgeStatusClassVal] = useState('');\n const [pendingBadgeStatus, setPendingBadgeStatus] = useState<BadgeStatusKey | ''>('');\n const [cardVariantVal, setCardVariantVal] = useState<CardVariantKey>('default');\n const [cardVariantClassVal, setCardVariantClassVal] = useState('');\n const [pendingCardVariant, setPendingCardVariant] = useState<CardVariantKey | ''>('');\n const [componentInfoOpen, setComponentInfoOpen] = useState(false);\n const [annotationOpen, setAnnotationOpen] = useState(false);\n const [annotationText, setAnnotationText] = useState('');\n const [componentMakerSourceMode, setComponentMakerSourceMode] = useState<ComponentMakerSourceMode>('new');\n const [componentMakerAction, setComponentMakerAction] = useState<ComponentMakerAction>('create-current');\n const [componentSpecDraft, setComponentSpecDraft] = useState<ComponentMakerSpecDraft>(EMPTY_COMPONENT_SPEC_DRAFT);\n const [componentCreateOpen, setComponentCreateOpen] = useState(false);\n const [componentCreateContainer, setComponentCreateContainer] = useState<ComponentContainerKey>('page');\n const [componentCreateContainerMenuOpen, setComponentCreateContainerMenuOpen] = useState(false);\n const [componentCreateType, setComponentCreateType] = useState('');\n const [componentCreateTypeMenuOpen, setComponentCreateTypeMenuOpen] = useState(false);\n const [componentCreatePurpose, setComponentCreatePurpose] = useState('');\n const [componentCreateNameTouched, setComponentCreateNameTouched] = useState(false);\n const [componentCreateResolution, setComponentCreateResolution] = useState<ComponentCreateResolution>('new');\n const [componentVariantDraft, setComponentVariantDraft] = useState<ComponentMakerVariantDraft>(EMPTY_COMPONENT_VARIANT_DRAFT);\n const [componentVariantExcludedIds, setComponentVariantExcludedIds] = useState<string[]>([]);\n const [componentVariantPreviewId, setComponentVariantPreviewId] = useState('');\n const [localDrafts, setLocalDrafts] = useState<Record<string, LocalDraftEntry>>({});\n const [styleIntentSummary, setStyleIntentSummary] = useState<StyleIntentSummary>({ pendingCount: 0, latestPending: null, pendingEntries: [] });\n const [activePlugin, setActivePlugin] = useState<InspectorPluginMode | null>(null);\n const [pluginMsg, setPluginMsg] = useState('');\n const [hasCopied, setHasCopied] = useState(() => _copiedStyles.length > 0);\n const [expandedColor, setExpandedColor] = useState<string | null>(null);\n const [pendingNewToken, setPendingNewToken] = useState<{ cssVar: string; value: string; usage: string } | null>(null);\n const [addTokenModal, setAddTokenModal] = useState<{ value: string; cssProp?: string } | null>(null);\n const [libraryOpen, setLibraryOpen] = useState(false);\n const [libraryWorkbenchOpen, setLibraryWorkbenchOpen] = useState(false);\n const [libraryTab, setLibraryTab] = useState<DesignLibraryTab>('tokens');\n const [libraryTokenCategory, setLibraryTokenCategory] = useState<LibraryTokenCategory>('all');\n const [libraryComponentCategory, setLibraryComponentCategory] = useState<LibraryComponentCategory>('all');\n const [libraryTokenUsageFilter, setLibraryTokenUsageFilter] = useState<DesignLibraryTokenUsageFilter>('all');\n const [librarySearch, setLibrarySearch] = useState('');\n const [selectedLibraryTokenId, setSelectedLibraryTokenId] = useState('');\n const [selectedLibraryComponentId, setSelectedLibraryComponentId] = useState('');\n const [selectedLibraryComponentVariantId, setSelectedLibraryComponentVariantId] = useState('');\n const [libraryTokenForm, setLibraryTokenForm] = useState<LibraryTokenFormDraft | null>(null);\n const [libraryComponentForm, setLibraryComponentForm] = useState<LibraryComponentFormDraft | null>(null);\n const [libraryComponentImportOpen, setLibraryComponentImportOpen] = useState(false);\n const [libraryComponentImportMsg, setLibraryComponentImportMsg] = useState('');\n const [libraryCustomTokens, setLibraryCustomTokens] = useState<LibraryTokenItem[]>([]);\n const [libraryTokenOverrides, setLibraryTokenOverrides] = useState<Record<string, Partial<LibraryTokenItem>>>({});\n const [libraryDeletedTokenIds, setLibraryDeletedTokenIds] = useState<Record<string, string>>({});\n const [libraryCustomComponents, setLibraryCustomComponents] = useState<LibraryComponentItem[]>([]);\n const [libraryComponentOverrides, setLibraryComponentOverrides] = useState<Record<string, Partial<LibraryComponentItem>>>({});\n const [libraryDeletedComponentIds, setLibraryDeletedComponentIds] = useState<Record<string, string>>({});\n const [customColorVals, setCustomColorVals] = useState<Record<string, string>>({});\n const selectedRef = useRef<Element>(targetEl);\n const localDraftsRef = useRef<Record<string, LocalDraftEntry>>({});\n const gapTargetRef = useRef<HTMLElement | null>(null); // gap 只作用于当前可产生子项间距的容器\n\n useEffect(() => { modalOpenRef.current = addTokenModal !== null; }, [addTokenModal]);\n useEffect(() => { localDraftsRef.current = localDrafts; }, [localDrafts]);\n useEffect(() => { setComponentInfoOpen(false); }, [selected]);\n\n const formatStyleIntentSummary = useCallback((r: any): StyleIntentSummary => ({\n pendingCount: r.pendingCount ?? 0,\n latestPending: r.latestPending\n ? {\n id: r.latestPending.id,\n targetLabel: r.latestPending.targetLabel,\n selector: r.latestPending.selector,\n createdAt: r.latestPending.createdAt,\n note: r.latestPending.note,\n entries: r.latestPending.entries ?? [],\n }\n : null,\n pendingEntries: Array.isArray(r.pendingEntries)\n ? r.pendingEntries.map((entry: any) => ({\n id: entry.id,\n targetLabel: entry.targetLabel,\n selector: entry.selector,\n createdAt: entry.createdAt,\n note: entry.note,\n entries: entry.entries ?? [],\n }))\n : [],\n }), []);\n\n const refreshStyleIntentSummary = useCallback(() => {\n fetch(endpoints.styleIntents)\n .then(r => r.json())\n .then(r => {\n if (r.ok) {\n setStyleIntentSummary(formatStyleIntentSummary(r));\n }\n })\n .catch(() => {});\n }, [endpoints.styleIntents, formatStyleIntentSummary]);\n\n useEffect(() => {\n refreshStyleIntentSummary();\n }, [refreshStyleIntentSummary]);\n\n function getDraftTargetInfo(el: Element): Pick<LocalDraftEntry, 'key' | 'selector' | 'targetLabel' | 'scopeLabel'> {\n const componentMeta = getInspectorComponentMeta(el);\n const selector = getSelectorForScope(el, scope);\n return {\n key: `${scope}:${selector}`,\n selector,\n targetLabel: getTargetDisplayLabel(el, componentMeta),\n scopeLabel: scope === 'current' ? '当前元素' : '相同元素',\n };\n }\n\n function removeLocalDraftEntry(key: string) {\n setLocalDrafts(prev => {\n if (!prev[key]) return prev;\n const next = { ...prev };\n delete next[key];\n return next;\n });\n }\n\n function getAnnotationTargetInfo(el: Element): Pick<LocalDraftEntry, 'key' | 'selector' | 'targetLabel' | 'scopeLabel'> {\n const componentMeta = getInspectorComponentMeta(el);\n const selector = getSelectorForScope(el, 'current');\n return {\n key: `current:${selector}`,\n selector,\n targetLabel: getTargetDisplayLabel(el, componentMeta),\n scopeLabel: '当前元素',\n };\n }\n\n function getAnnotationChange(changes: LocalDraftChange[] = []): LocalDraftChange | undefined {\n return changes.find(change => change.prop === 'annotation:intent');\n }\n\n function updateAnnotationDraft(nextText: string) {\n const el = selectedRef.current;\n if (!el) return;\n const text = nextText.trim();\n const info = getAnnotationTargetInfo(el);\n setLocalDrafts(prev => {\n const existing = prev[info.key];\n const remainingChanges = existing?.changes.filter(change => change.prop !== 'annotation:intent') ?? [];\n if (!text) {\n if (!existing) return prev;\n const next = { ...prev };\n if (remainingChanges.length === 0) {\n delete next[info.key];\n } else {\n next[info.key] = { ...existing, changes: remainingChanges, updatedAt: Date.now() };\n }\n return next;\n }\n const change: LocalDraftChange = {\n prop: 'annotation:intent',\n from: 'AI识别',\n val: text,\n };\n const nextEntry: LocalDraftEntry = {\n ...info,\n changes: [...remainingChanges, change],\n updatedAt: Date.now(),\n };\n return { ...prev, [info.key]: nextEntry };\n });\n }\n\n // 选中逻辑\n const selectEl = useCallback((el: Element) => {\n selectedRef.current = el;\n const rect = el.getBoundingClientRect();\n setPanelPos(calcPanelPos(rect));\n if (el !== targetEl) onTargetChange(el);\n\n // 读颜色\n const elCs = getComputedStyle(el);\n const selectedComponentMeta = getInspectorComponentMeta(el);\n const selectedCapability = getComponentCapability(selectedComponentMeta);\n const annotationDraft = localDraftsRef.current[getAnnotationTargetInfo(el).key];\n setAnnotationText(getAnnotationChange(annotationDraft?.changes)?.val ?? '');\n const isButtonComponent = selectedCapability?.type === 'Button';\n const isIconComponent = selectedCapability?.type === 'Icon';\n const isBadgeComponent = selectedCapability?.type === 'Badge';\n const isCardComponent = selectedCapability?.type === 'Card';\n const hasEditableText = !!selectedCapability?.editableText;\n const c: Record<string, string> = {};\n for (const { prop } of COLOR_PROPS) {\n const val = getComputedColor(el, prop);\n if (!val || val === 'rgba(0, 0, 0, 0)' || val === 'transparent') continue;\n // 边框色:只在有真实边框时才显示\n if (prop === 'border-color' && elCs.borderWidth.trim() === '0px') continue;\n c[prop] = val;\n }\n setColors(c);\n setPendingColors({});\n\n // 字体\n setFontSizeVal(elCs.fontSize.trim());\n setFontWeightVal(elCs.fontWeight.trim());\n setTextColorVal(normalizeColor(elCs.color.trim()));\n setFontSizeCustomDraft(elCs.fontSize.trim());\n setPendingFontSize(''); setPendingFontWeight(''); setPendingTextColor('');\n setTypographyCustomMode(false);\n setExpandedTextColor(false);\n\n // 边框\n const bw = elCs.borderTopWidth.trim();\n const bs = elCs.borderTopStyle.trim();\n const bc = normalizeColor(elCs.borderTopColor.trim());\n setBorderWidthVal(bw);\n setBorderStyleVal(bs);\n setBorderColorVal(bw !== '0px' ? bc : '');\n setPendingBorderColor(''); setPendingBorderWidth(''); setPendingBorderStyle('');\n setExpandedBorderColor(false);\n setShowContainerStyleDrop(false);\n setShowBorderWidthDrop(false);\n setShowRadiusDrop(false);\n setContainerCustomMode(false);\n\n // 圆角\n const r = getComputedRadius(el);\n setRadiusVal(r);\n setPendingRadius('');\n\n // 阴影\n const shadowComputed = elCs.boxShadow.trim() || 'none';\n setShadowVal(shadowComputed === 'rgba(0, 0, 0, 0) 0px 0px 0px 0px' ? 'none' : shadowComputed);\n setShadowAuthoredVal(getAuthoredStyleValue(el, 'box-shadow'));\n setPendingShadow('');\n setShadowCustomMode(false);\n setShowShadowDrop(false);\n setShowShadowColorDrop(false);\n\n // 间距\n const cs = getComputedStyle(el);\n const normPad = (v: string) => {\n const parts = v.trim().split(' ');\n return parts.every(p => p === parts[0]) ? parts[0] : v.trim();\n };\n setPaddingVal(normPad(`${cs.paddingTop} ${cs.paddingRight} ${cs.paddingBottom} ${cs.paddingLeft}`));\n setMarginVal(normPad(`${cs.marginTop} ${cs.marginRight} ${cs.marginBottom} ${cs.marginLeft}`));\n if (canControlElementGap(el)) {\n const g = cs.gap.trim();\n setGapVal(g === 'normal' ? '0px' : g);\n gapTargetRef.current = el as HTMLElement;\n } else {\n setGapVal('0px');\n gapTargetRef.current = null;\n }\n setPendingPadding(''); setPendingMargin(''); setPendingGap('');\n setSpaceCustomModes({ padding: false, margin: false, gap: false });\n\n const nextTranslate = parseTranslate(cs.translate);\n setTranslateVal(nextTranslate);\n setPositionBaseVal(getPositionBase(el, nextTranslate));\n setWidthVal(cs.width.trim());\n setHeightVal(cs.height.trim());\n setWidthMode(inferSizeMode(el, 'width', cs.width.trim()));\n setHeightMode(inferSizeMode(el, 'height', cs.height.trim()));\n setJustifyVal(cs.justifyContent.trim() || 'normal');\n setAlignItemsVal(cs.alignItems.trim() || 'normal');\n setPendingTranslate(null); setPendingWidth(''); setPendingHeight('');\n setPendingWidthMode(null); setPendingHeightMode(null);\n setPendingJustifyContent('');\n setPendingAlignItems('');\n setSizeDraft({});\n\n setNote('');\n setTextContent(getTextContent(el));\n if (selectedComponentMeta) {\n setComponentSelectorVal(getSelectorForScope(el, 'component'));\n } else {\n setComponentSelectorVal('');\n }\n if (hasEditableText) {\n const componentText = getButtonText(el);\n setComponentTextVal(componentText);\n setComponentTextDraft(componentText);\n } else {\n setComponentTextVal('');\n setComponentTextDraft('');\n }\n const editableSlotValues = getComponentSlotValues(el, selectedCapability?.textSlots);\n const childSlotValues = getComponentSlotValues(el, selectedCapability?.childSlots);\n setComponentTextSlotVals(editableSlotValues);\n setComponentTextSlotDrafts(editableSlotValues);\n setComponentChildSlotVals(childSlotValues);\n if (isButtonComponent) {\n setComponentVariantVal(normalizeButtonVariant(selectedComponentMeta?.variant ?? ''));\n setComponentVariantClassVal(getButtonVariantClass(el));\n setComponentSizeVal(inferButtonSize(el));\n } else if (isIconComponent) {\n setComponentVariantVal('secondary');\n setComponentVariantClassVal('');\n setComponentSizeVal(inferIconSize(el));\n setIconColorVal(inferIconColor(el));\n } else if (isBadgeComponent) {\n const status = inferBadgeStatus(getClasses(el));\n setComponentVariantVal('secondary');\n setComponentVariantClassVal('');\n setComponentSizeVal(inferBadgeSize(el));\n setBadgeStatusVal(status);\n setBadgeStatusClassVal(getBadgeStatusClass(el));\n } else if (isCardComponent) {\n setComponentVariantVal('secondary');\n setComponentVariantClassVal('');\n setComponentSizeVal('m');\n setIconColorVal('default');\n setBadgeStatusVal('default');\n setBadgeStatusClassVal('');\n setCardVariantVal(inferCardVariant(getClasses(el)));\n setCardVariantClassVal(getCardVariantClass(el));\n } else {\n setComponentVariantVal('secondary');\n setComponentVariantClassVal('');\n setComponentSizeVal('m');\n setIconColorVal('default');\n setBadgeStatusVal('default');\n setBadgeStatusClassVal('');\n setCardVariantVal('default');\n setCardVariantClassVal('');\n }\n setPendingComponentText(null);\n setPendingComponentTextSlots({});\n setPendingComponentVariant('');\n setPendingComponentSize('');\n setPendingIconColor('');\n setPendingBadgeStatus('');\n setPendingCardVariant('');\n setComponentMakerSourceMode(selectedComponentMeta ? 'existing' : 'new');\n setComponentMakerAction(selectedComponentMeta ? 'create-current-variant' : 'create-current');\n setComponentSpecDraft(getComponentMakerSpecDefaults(el));\n const suggestedCreateContainer = getSuggestedComponentContainer(el);\n setComponentCreateContainer(suggestedCreateContainer);\n setComponentCreateContainerMenuOpen(false);\n setComponentCreateType(getSuggestedComponentCreatePurposeType(el, suggestedCreateContainer));\n setComponentCreatePurpose(getSuggestedComponentPurpose(el));\n setComponentCreateOpen(false);\n setComponentVariantDraft(getComponentMakerVariantDefaults(el));\n setComponentVariantExcludedIds([]);\n setComponentVariantPreviewId('');\n setNewTokenProp(null);\n setExpandedColor(null);\n setShowScopeHelp(false);\n setIsEditing(false); // 选中新元素时重置为查看模式\n setSelected(el);\n }, [onTargetChange, targetEl]);\n\n // targetEl 变化时读取样式(包含初始化)\n useEffect(() => { selectEl(targetEl); }, [targetEl]); // eslint-disable-line\n\n // 高亮选中\n useEffect(() => {\n document.querySelectorAll('.di-selected').forEach(e => e.classList.remove('di-selected'));\n if (scope !== 'current') {\n getScopeTargets(selected, scope).forEach(e => e.classList.add('di-selected'));\n } else {\n selected.classList.add('di-selected');\n }\n return () => {\n document.querySelectorAll('.di-selected').forEach(e => e.classList.remove('di-selected'));\n };\n }, [selected, scope]);\n\n // ─── 应用改动到 DOM ───────────────────────────────────────────\n function applyToDOM(changes: { prop: string; val: string }[]) {\n const el = selectedRef.current;\n if (!el) return;\n const targets = getScopeTargets(el, scope);\n changes.forEach(({ prop, val }) => {\n targets.forEach(t => (t as HTMLElement).style.setProperty(prop, val));\n });\n }\n\n function onDragStart(e: React.MouseEvent) {\n if ((e.target as Element).closest('button, input, textarea')) return;\n e.preventDefault();\n dragRef.current = { sx: e.clientX, sy: e.clientY, sl: panelPos.left, st: panelPos.top };\n const onMove = (ev: MouseEvent) => {\n if (!dragRef.current) return;\n const left = Math.max(0, Math.min(window.innerWidth - 380, dragRef.current.sl + ev.clientX - dragRef.current.sx));\n const top = Math.max(0, Math.min(window.innerHeight - 60, dragRef.current.st + ev.clientY - dragRef.current.sy));\n setPanelPos({ left, top });\n };\n const onUp = () => {\n dragRef.current = null;\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onUp);\n };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp);\n }\n\n function handleAddToken(val: string, cssProp?: string) {\n setAddTokenModal({ value: val, cssProp });\n }\n\n function handleTokenConfirm(cssVar: string, val: string, usage: string) {\n setPendingNewToken({ cssVar, value: val, usage });\n onTokenMapUpdate({ [val]: cssVar });\n (tokenLabels as Record<string, string>)[cssVar] = cssVar.replace('--color-', '').replace(/-/g, '·');\n }\n\n function liveApply(prop: string, val: string) {\n if (prop === 'gap' && gapTargetRef.current) {\n if (isNegativeSpacingValue(val)) return;\n gapTargetRef.current.style.setProperty('gap', val);\n } else {\n applyToDOM([{ prop, val }]);\n }\n }\n\n function liveApplyMany(changes: { prop: string; val: string }[]) {\n applyToDOM(changes);\n }\n\n function applyTypographyStyle(style: TypographyStyleOption) {\n setPendingFontSize(style.value);\n setPendingFontWeight(style.fontWeight);\n setPendingTextColor(style.color);\n setTypographyCustomMode(false);\n liveApplyMany([\n { prop: 'font-size', val: style.value },\n { prop: 'font-weight', val: style.fontWeight },\n { prop: 'color', val: style.color },\n ]);\n }\n\n function applyContainerStyle(style: ContainerStyleOption) {\n setPendingColors(prev => ({ ...prev, 'background-color': style.backgroundColor }));\n setPendingBorderColor(style.borderColor);\n setPendingBorderWidth(style.borderWidth);\n setPendingBorderStyle(style.borderStyle);\n setPendingRadius(style.borderRadius);\n setCustomRadius('');\n setContainerCustomMode(false);\n liveApplyMany([\n { prop: 'background-color', val: style.backgroundColor },\n { prop: 'border-color', val: style.borderColor },\n { prop: 'border-width', val: style.borderWidth },\n { prop: 'border-style', val: style.borderStyle },\n { prop: 'border-radius', val: style.borderRadius },\n ]);\n }\n\n function getPendingEntries() {\n const el = selectedRef.current;\n if (!el) return null;\n const fixedMinHeight = pendingHeight && pendingHeightMode === 'fixed'\n ? `${getOneLineHugHeight(el) || Number.parseFloat(pendingHeight) || 0}px`\n : '';\n\n const pending: [string, string][] = [\n ...Object.entries(pendingColors),\n ...(pendingTextColor ? [['color', pendingTextColor] as [string, string]] : []),\n ...(pendingRadius ? [['border-radius', pendingRadius] as [string, string]] : []),\n ...(pendingShadow ? [['box-shadow', pendingShadow] as [string, string]] : []),\n ...(pendingBorderColor ? [['border-color', pendingBorderColor] as [string, string]] : []),\n ...(pendingBorderWidth ? [['border-width', pendingBorderWidth] as [string, string]] : []),\n ...(pendingBorderStyle ? [['border-style', pendingBorderStyle] as [string, string]] : []),\n ...(pendingFontSize ? [['font-size', pendingFontSize] as [string, string]] : []),\n ...(pendingFontWeight ? [['font-weight', pendingFontWeight] as [string, string]] : []),\n ...(pendingPadding ? [['padding', pendingPadding] as [string, string]] : []),\n ...(pendingMargin ? [['margin', pendingMargin] as [string, string]] : []),\n ...(pendingGap && gapTargetRef.current ? [['gap', pendingGap] as [string, string]] : []),\n ...(pendingTranslate ? [['translate', formatTranslate(pendingTranslate)] as [string, string]] : []),\n ...(pendingWidth ? [['width', pendingWidth] as [string, string]] : []),\n ...(pendingHeight ? [['height', pendingHeight] as [string, string]] : []),\n ...(fixedMinHeight ? [['min-height', fixedMinHeight] as [string, string]] : []),\n ...(pendingHeight && pendingHeightMode === 'fixed' ? [['max-height', pendingHeight] as [string, string]] : []),\n ...(pendingJustifyContent ? [['justify-content', pendingJustifyContent] as [string, string]] : []),\n ...(pendingAlignItems ? [['align-items', pendingAlignItems] as [string, string]] : []),\n ];\n\n const gapEntry = pending.find(([p]) => p === 'gap');\n const nonGapPending = pending.filter(([p]) => p !== 'gap');\n const selector = getSelectorForScope(el, scope);\n const entries: { selector: string; changes: { prop: string; val: string; from?: string }[]; note?: string }[] = [];\n\n if (gapEntry && gapTargetRef.current && gapTargetRef.current !== el) {\n entries.push({\n selector: getSelectorForScope(gapTargetRef.current, 'current'),\n changes: [{ prop: 'gap', from: gapVal, val: gapEntry[1] }],\n });\n }\n\n entries.push({\n selector,\n changes: (gapEntry && gapTargetRef.current !== el ? nonGapPending : pending)\n .map(([prop, val]) => ({ prop, from: getOriginalValueForProp(prop), val })),\n note: note || undefined,\n });\n\n return {\n el,\n selector,\n pending,\n entries,\n };\n }\n\n function getDisplayPosition(translate: { x: number; y: number }) {\n return {\n x: positionBaseVal.x + translate.x,\n y: positionBaseVal.y + translate.y,\n };\n }\n\n function getTranslateFromDisplayPosition(pos: { x: number; y: number }) {\n return {\n x: pos.x - positionBaseVal.x,\n y: pos.y - positionBaseVal.y,\n };\n }\n\n function setTranslateAxis(axis: 'x' | 'y', value: string) {\n const base = getDisplayPosition(pendingTranslate ?? translateVal);\n const nextValue = getNumericCssValue(normalizeCssSize(value));\n const next = getTranslateFromDisplayPosition({ ...base, [axis]: nextValue });\n setPendingTranslate(next);\n liveApply('translate', formatTranslate(next));\n }\n\n function getAlignmentLabel(prop: AlignProp, value: string): string {\n const options = prop === 'justify-content' ? JUSTIFY_OPTIONS : ALIGN_ITEMS_OPTIONS;\n return options.find(option => option.value === value)?.label ?? value;\n }\n\n function setAlignment(prop: AlignProp, value: string) {\n if (prop === 'justify-content') setPendingJustifyContent(value);\n else setPendingAlignItems(value);\n liveApply(prop, value);\n }\n\n function stepTranslateAxis(axis: 'x' | 'y', delta: number) {\n const base = getDisplayPosition(pendingTranslate ?? translateVal);\n setTranslateAxis(axis, `${base[axis] + delta}px`);\n }\n\n function stepSize(prop: SizeAxis, value: string, delta: number) {\n const fallback = getNumericCssValue(prop === 'width' ? pendingWidth || widthVal : pendingHeight || heightVal);\n const next = `${Math.round(getNumericCssValue(value, fallback) + delta)}px`;\n setSizeDraft(prev => ({ ...prev, [prop]: formatLengthControlValue(next) }));\n setSize(prop, next, 'fixed');\n }\n\n function setCustomShadowPart(part: keyof ShadowParts, value: string) {\n const current = parseShadowParts(pendingShadow || shadowVal);\n const nextParts = {\n ...current,\n [part]: part === 'color' ? value : normalizeShadowLengthInput(value),\n };\n const next = buildShadowValue(nextParts);\n setShadowCustomMode(true);\n setPendingShadow(next);\n liveApply('box-shadow', next);\n }\n\n function stepCustomShadowPart(part: Exclude<keyof ShadowParts, 'color'>, delta: number) {\n const current = parseShadowParts(pendingShadow || shadowVal);\n const next = `${Math.round(getNumericCssValue(current[part]) + delta)}px`;\n setCustomShadowPart(part, next);\n }\n\n function setSize(prop: SizeAxis, val: string, mode: SizeMode = 'fixed') {\n const current = prop === 'width' ? widthVal : heightVal;\n const next = normalizeCssSize(val);\n const selectedEl = selectedRef.current;\n const cssValue = prop === 'height' && mode === 'fixed'\n ? clampHeightToOneLine(next, selectedEl)\n : mode === 'fixed' ? next : sizeValueForMode(mode, current);\n if (prop === 'width') {\n setPendingWidth(cssValue);\n setPendingWidthMode(mode);\n } else {\n setPendingHeight(cssValue);\n setPendingHeightMode(mode);\n }\n if (prop === 'height' && mode === 'fixed') {\n const minHeight = `${getOneLineHugHeight(selectedEl) || Number.parseFloat(cssValue) || 0}px`;\n liveApplyMany([\n { prop: 'height', val: cssValue },\n { prop: 'min-height', val: minHeight },\n { prop: 'max-height', val: cssValue },\n ]);\n return;\n }\n if (prop === 'height') {\n const el = selectedRef.current as HTMLElement | null;\n if (el) {\n const targets = getScopeTargets(el, scope);\n targets.forEach(t => (t as HTMLElement).style.removeProperty('min-height'));\n targets.forEach(t => (t as HTMLElement).style.removeProperty('max-height'));\n }\n }\n liveApply(prop, cssValue);\n }\n\n function getComponentTargets(): Element[] {\n const el = selectedRef.current;\n return el ? getScopeTargets(el, scope) : [];\n }\n\n function getComponentContentTargets(): Element[] {\n const el = selectedRef.current;\n return el ? [el] : [];\n }\n\n function updateComponentText(value: string) {\n setComponentTextDraft(value);\n setPendingComponentText(value === componentTextVal ? null : value);\n getComponentContentTargets().forEach(target => { target.textContent = value; });\n }\n\n function updateComponentTextSlot(slot: ComponentTextSlotDefinition, value: string) {\n setComponentTextSlotDrafts(prev => ({ ...prev, [slot.key]: value }));\n setPendingComponentTextSlots(prev => {\n const next = { ...prev };\n if (value === componentTextSlotVals[slot.key]) {\n delete next[slot.key];\n } else {\n next[slot.key] = value;\n }\n return next;\n });\n getComponentContentTargets().forEach(target => {\n const slotEl = getComponentSlotElement(target, slot);\n if (slotEl) slotEl.textContent = value;\n });\n }\n\n function updateComponentVariant(variant: ButtonVariantKey) {\n const targets = getComponentTargets();\n if (variant === componentVariantVal) {\n setPendingComponentVariant('');\n setButtonVariantOnTargets(targets, componentVariantVal, componentVariantClassVal);\n return;\n }\n setPendingComponentVariant(variant);\n setButtonVariantOnTargets(targets, variant);\n }\n\n function updateComponentSize(size: ButtonSizeKey) {\n const meta = getInspectorComponentMeta(selectedRef.current);\n const capability = getComponentCapability(meta);\n const targets = getComponentTargets();\n setPendingComponentSize(size === componentSizeVal ? '' : size);\n if (size === componentSizeVal) {\n clearButtonSizeOnTargets(targets);\n clearIconSizeOnTargets(targets);\n clearBadgeSizeOnTargets(targets);\n return;\n }\n if (capability?.sizeKind === 'icon') {\n setIconSizeOnTargets(targets, size);\n return;\n }\n if (capability?.sizeKind === 'badge') {\n setBadgeSizeOnTargets(targets, size);\n return;\n }\n setButtonSizeOnTargets(targets, size);\n }\n\n function updateIconColor(color: IconColorKey) {\n const targets = getComponentTargets();\n setPendingIconColor(color === iconColorVal ? '' : color);\n if (color === iconColorVal) {\n clearIconColorOnTargets(targets);\n return;\n }\n setIconColorOnTargets(targets, color);\n }\n\n function updateBadgeStatus(status: BadgeStatusKey) {\n const targets = getComponentTargets();\n if (status === badgeStatusVal) {\n setPendingBadgeStatus('');\n setBadgeStatusOnTargets(targets, badgeStatusVal, badgeStatusClassVal);\n return;\n }\n setPendingBadgeStatus(status);\n setBadgeStatusOnTargets(targets, status);\n }\n\n function updateBadgeStatusOnElement(element: Element, status: BadgeStatusKey) {\n const currentStatus = inferBadgeStatus(getClasses(element));\n const currentClass = getBadgeStatusClass(element);\n if (status === currentStatus) {\n setBadgeStatusOnTargets([element], currentStatus, currentClass);\n return;\n }\n setBadgeStatusOnTargets([element], status);\n }\n\n function updateCardVariant(variant: CardVariantKey) {\n const targets = getComponentTargets();\n if (variant === cardVariantVal) {\n setPendingCardVariant('');\n setCardVariantOnTargets(targets, cardVariantVal, cardVariantClassVal);\n return;\n }\n setPendingCardVariant(variant);\n setCardVariantOnTargets(targets, variant);\n }\n\n // ─── 保存并修改 ───────────────────────────────────────────────\n function handleSave() {\n const payload = getPendingEntries();\n if (!payload) return;\n const { el, pending, entries } = payload;\n\n if (pending.length === 0 && !note && !newTokenName) {\n setSaveMsg('无改动');\n setTimeout(() => setSaveMsg(''), 1500);\n return;\n }\n\n applyToDOM(pending.map(([prop, val]) => ({ prop, val })));\n\n if (!canPersistSelector(el, scope)) {\n setSaveMsg('需选中具体类名');\n setTimeout(() => setSaveMsg(''), 2000);\n return;\n }\n\n fetch(endpoints.applyCss, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ entries }),\n })\n .then(r => r.json())\n .then(r => {\n setSaveMsg(r.ok ? '已保存 ✓' : '保存失败');\n setTimeout(() => setSaveMsg(''), 2000);\n })\n .catch(() => { setSaveMsg('保存失败'); setTimeout(() => setSaveMsg(''), 2000); });\n }\n\n async function copyTextToClipboard(text: string): Promise<boolean> {\n if (navigator.clipboard?.writeText) {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n // 异步请求返回后常常丢失用户激活态,继续尝试 execCommand 兜底\n }\n }\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;opacity:0;top:0;left:0';\n document.body.appendChild(ta);\n ta.select();\n const copied = document.execCommand('copy');\n document.body.removeChild(ta);\n return copied;\n }\n\n function getPluginTargetContext(el: Element) {\n const meta = getInspectorComponentMeta(el);\n return {\n meta,\n label: getTargetDisplayLabel(el, meta),\n selector: meta ? getSelectorForScope(el, 'component') : getSelectorForScope(el, 'current'),\n };\n }\n\n function getComponentMakerSummary(el: Element): string[] {\n const meta = getInspectorComponentMeta(el);\n const capability = getComponentCapability(meta);\n if (!meta || !capability) return ['当前是普通元素:请判断是否应沉淀为组件、primitive 或保持局部元素。'];\n\n const lines = [\n `组件名:${getComponentDisplayName(meta)}`,\n `类型:${meta.type}`,\n `变体:${meta.variant || 'default'}`,\n `状态:${getComponentStateLabel(meta.state)}`,\n ];\n const textSlots = capability.textSlots?.map(slot => `${slot.label}=${(getComponentSlotElement(el, slot)?.textContent ?? '').trim() || '空'}`) ?? [];\n const childSlots = capability.childSlots?.map(slot => `${slot.label}=${(getComponentSlotElement(el, slot)?.textContent ?? '').trim() || '空'}`) ?? [];\n if (capability.editableText) lines.push(`文案:${getButtonText(el) || '空'}`);\n if (textSlots.length) lines.push(`可编辑内容:${textSlots.join(';')}`);\n if (childSlots.length) lines.push(`子组件:${childSlots.join(';')}`);\n return lines;\n }\n\n function getComponentMakerComponentOptions(current: Element) {\n const options = new Map<string, { name: string; type: string; layer: string; count: number }>();\n document.querySelectorAll('body *').forEach(item => {\n const node = item as HTMLElement;\n if (node.closest('.di-panel') || node.classList.contains('di-selected')) return;\n const meta = getInspectorComponentMeta(item);\n if (!meta) return;\n const name = getComponentDisplayName(meta);\n const existing = options.get(name);\n if (existing) {\n existing.count += 1;\n return;\n }\n options.set(name, {\n name,\n type: meta.type,\n layer: meta.layer,\n count: 1,\n });\n });\n\n const currentMeta = getInspectorComponentMeta(current);\n if (currentMeta) {\n const name = getComponentDisplayName(currentMeta);\n if (!options.has(name)) {\n options.set(name, {\n name,\n type: currentMeta.type,\n layer: currentMeta.layer,\n count: 1,\n });\n }\n }\n\n return Array.from(options.values()).sort((a, b) => a.name.localeCompare(b.name));\n }\n\n function getComponentMakerActions(mode: ComponentMakerSourceMode) {\n return COMPONENT_MAKER_ACTION_OPTIONS.filter(option => {\n if (mode === 'new') return option.key !== 'add-slot';\n return option.key !== 'create-current';\n });\n }\n\n function syncComponentSpecDraft(updates: Partial<ComponentMakerSpecDraft>) {\n setComponentSpecDraft(prev => ({ ...prev, ...updates }));\n }\n\n function updateComponentMakerSourceMode(mode: ComponentMakerSourceMode, fallbackName: string) {\n const availableActions = getComponentMakerActions(mode);\n const nextAction = availableActions.some(option => option.key === componentMakerAction)\n ? componentMakerAction\n : availableActions[0].key;\n setComponentMakerSourceMode(mode);\n setComponentMakerAction(nextAction);\n syncComponentSpecDraft({\n sourceMode: mode === 'existing' ? '已有组件' : '新建组件',\n action: COMPONENT_MAKER_ACTION_LABELS[nextAction],\n componentName: fallbackName,\n });\n }\n\n function updateComponentMakerAction(action: ComponentMakerAction) {\n setComponentMakerAction(action);\n syncComponentSpecDraft({ action: COMPONENT_MAKER_ACTION_LABELS[action] });\n }\n\n function getSuggestedComponentType(el: Element): string {\n const meta = getInspectorComponentMeta(el);\n if (meta?.type) return COMPONENT_TYPE_ALIASES[meta.type] ?? meta.type;\n const tag = el.tagName.toLowerCase();\n if (tag === 'h1') return '页面标题';\n if (tag === 'h2') return '区块标题';\n if (/^h[3-6]$/.test(tag)) return '小标题';\n if (tag === 'button') return '按钮';\n if (tag === 'a') return '链接文字';\n if (tag === 'img' || tag === 'picture') return '图片';\n if (tag === 'input') return '输入框';\n if (tag === 'textarea') return '文本域';\n if (tag === 'select') return '选择控件';\n if (tag === 'label') return '说明文字';\n if (tag === 'p') return '正文';\n if (tag === 'span' || tag === 'strong' || tag === 'em') return '说明文字';\n if (tag === 'section' || tag === 'main' || tag === 'aside' || tag === 'div') return '容器';\n return '容器';\n }\n\n function normalizeComponentType(value: string): string {\n return value.trim().toLowerCase();\n }\n\n function getComponentContainerOption(key: ComponentContainerKey): ComponentContainerOption {\n return COMPONENT_CONTAINER_OPTIONS.find(option => option.key === key) ?? COMPONENT_CONTAINER_OPTIONS[0];\n }\n\n function getPurposeOptionsForContainer(containerKey: ComponentContainerKey): ComponentPurposeOption[] {\n const labels = COMPONENT_PURPOSES_BY_CONTAINER[containerKey] ?? COMPONENT_PURPOSES_BY_CONTAINER.other;\n return labels\n .map(label => COMPONENT_PURPOSE_OPTIONS.find(option => option.label === label))\n .filter((option): option is ComponentPurposeOption => Boolean(option));\n }\n\n function isPurposeAllowedForContainer(type: string, containerKey: ComponentContainerKey): boolean {\n const label = getComponentPurposeOption(type).label;\n return getPurposeOptionsForContainer(containerKey).some(option => option.label === label);\n }\n\n function getDefaultPurposeForContainer(containerKey: ComponentContainerKey): ComponentPurposeOption {\n return getPurposeOptionsForContainer(containerKey)[0] ?? COMPONENT_PURPOSE_OPTIONS[0];\n }\n\n function getComponentPurposeOption(type: string): ComponentPurposeOption {\n const normalized = COMPONENT_TYPE_ALIASES[type] ?? type.trim();\n if (normalized.includes('标题')) return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '标题')!;\n if (normalized === '正文') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '正文')!;\n if (normalized === '说明文字' || normalized === '链接文字') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '说明')!;\n if (normalized === '状态标签' || normalized === '分类标签') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '标签')!;\n if (normalized === '按钮文字') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '按钮文案')!;\n if (normalized === '按钮') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '操作入口')!;\n if (normalized === '输入框' || normalized === '文本域' || normalized === '选择控件') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '输入控件')!;\n if (normalized === '图标') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '图标')!;\n if (normalized === '列表项') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '功能列表')!;\n if (normalized === '容器' || normalized === '卡片' || normalized === '内容容器' || normalized === '内容区块') return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === '内容区块')!;\n return COMPONENT_PURPOSE_OPTIONS.find(option => option.label === normalized) ?? COMPONENT_PURPOSE_OPTIONS[0];\n }\n\n function getSuggestedComponentContainer(el: Element): ComponentContainerKey {\n const meta = getInspectorComponentMeta(el);\n if (meta?.type === 'Card') return 'card';\n if (meta?.type === 'Button') return 'action';\n if (meta?.type === 'Badge') return 'card';\n\n const selfAndAncestors: HTMLElement[] = [];\n let node: Element | null = el;\n while (node && node !== document.body && selfAndAncestors.length < 6) {\n if (node instanceof HTMLElement) selfAndAncestors.push(node);\n node = node.parentElement;\n }\n const haystack = selfAndAncestors\n .map(item => `${item.tagName.toLowerCase()} ${Array.from(item.classList).join(' ')} ${item.getAttribute('role') ?? ''}`)\n .join(' ')\n .toLowerCase();\n\n if (/\\b(card|panel|tile|task-card)\\b/.test(haystack)) return 'card';\n if (/\\b(menu|dropdown|popover|option)\\b/.test(haystack)) return 'menu';\n if (/\\b(form|field|input|textarea|select)\\b/.test(haystack)) return 'form';\n if (/\\b(modal|dialog|drawer|sheet)\\b/.test(haystack)) return 'modal';\n if (/\\b(list|table|row|item|history)\\b/.test(haystack)) return 'list';\n if (/\\b(nav|navbar|breadcrumb|tabs)\\b/.test(haystack)) return 'navigation';\n if (/\\b(actions|toolbar|button-group|footer)\\b/.test(haystack)) return 'action';\n\n const tag = el.tagName.toLowerCase();\n if (tag === 'nav') return 'navigation';\n if (tag === 'form') return 'form';\n if (tag === 'button') return 'action';\n if (tag === 'li' || tag === 'tr') return 'list';\n return 'page';\n }\n\n function getSuggestedComponentCreatePurposeType(el: Element, containerKey: ComponentContainerKey = getSuggestedComponentContainer(el)): string {\n const tag = el.tagName.toLowerCase();\n const text = (getTextContent(el) ?? '').trim();\n if (/^h[1-6]$/.test(tag)) return '标题';\n if (tag === 'p') return '正文';\n if (tag === 'button') return '按钮文案';\n if (tag === 'input' || tag === 'textarea') return '占位提示';\n if (tag === 'img' || tag === 'svg' || tag === 'picture') return '图标';\n if (tag === 'label') return '说明';\n if (/\\b(status|badge|tag|chip)\\b/i.test(Array.from((el as HTMLElement).classList ?? []).join(' '))) return '标签';\n if (/^\\d+([.,]\\d+)?%?$/.test(text)) return '数值';\n if (tag === 'span' || tag === 'strong' || tag === 'em' || tag === 'a') return text.length <= 12 ? '说明' : '正文';\n if (containerKey === 'list') return '功能列表';\n if (tag === 'section' || tag === 'main' || tag === 'aside' || tag === 'div') return '内容区块';\n const suggested = getComponentPurposeOption(getSuggestedComponentType(el)).label;\n return isPurposeAllowedForContainer(suggested, containerKey) ? suggested : getDefaultPurposeForContainer(containerKey).label;\n }\n\n function getComponentTypeOption(type: string): ComponentTypeOption | undefined {\n const canonicalType = COMPONENT_TYPE_ALIASES[type] ?? type;\n return COMPONENT_TYPE_OPTIONS.find(item => normalizeComponentType(item.label) === normalizeComponentType(canonicalType));\n }\n\n function getComponentTypeClassification(type: string, fallbackGroup: ComponentTypeGroup = 'structure', containerKey?: ComponentContainerKey) {\n const option = getComponentTypeOption(type);\n const normalized = COMPONENT_TYPE_ALIASES[type] ?? type.trim();\n const purpose = getComponentPurposeOption(type);\n const group = option?.group ?? purpose.group ?? fallbackGroup;\n const groupLabel = containerKey ? getComponentContainerOption(containerKey).label : COMPONENT_TYPE_GROUP_LABELS[group];\n const category = option?.category ?? '自定义';\n const label = containerKey ? purpose.label : (option?.label ?? (normalized || '自定义'));\n return {\n group,\n groupLabel,\n category,\n label,\n path: containerKey ? `${groupLabel} / ${label}` : `${groupLabel} / ${category} / ${label}`,\n };\n }\n\n function getSuggestedComponentTypeGroup(el: Element): ComponentTypeGroup {\n const option = getComponentTypeOption(getSuggestedComponentType(el));\n if (option) return option.group;\n const tag = el.tagName.toLowerCase();\n if (/^h[1-6]$/.test(tag) || tag === 'p' || tag === 'span' || tag === 'strong' || tag === 'em' || tag === 'label' || tag === 'a') return 'text';\n if (tag === 'button') return 'action';\n if (tag === 'input' || tag === 'textarea' || tag === 'select') return 'form';\n if (tag === 'img' || tag === 'picture' || tag === 'svg') return 'media';\n if (tag === 'nav') return 'navigation';\n return 'structure';\n }\n\n function getComponentTypeHint(type: string): string {\n const option = getComponentTypeOption(type);\n const purpose = getComponentPurposeOption(type);\n return option ? `${purpose.label} · ${purpose.hint}` : `${purpose.label} · ${purpose.hint}`;\n }\n\n function getComponentNameByType(type: string, el: Element, containerKey?: ComponentContainerKey): string {\n const normalized = COMPONENT_TYPE_ALIASES[type] ?? type.trim();\n const option = getComponentTypeOption(normalized);\n const purpose = getComponentPurposeOption(type);\n if (containerKey) {\n const container = getComponentContainerOption(containerKey);\n if (container.key === 'other' && purpose.group === 'structure') return purpose.codePart === 'section' ? 'container' : purpose.codePart;\n return `${container.codePrefix}-${purpose.codePart}`;\n }\n const tag = el.tagName.toLowerCase();\n if (normalized === '页面标题' && tag === 'h1') return 'page-title';\n if (normalized === '区块标题' && tag === 'h2') return 'section-title';\n if (normalized === '小标题' && /^h[3-6]$/.test(tag)) return 'subsection-title';\n return option?.codeName ?? normalizeComponentMakerCodePart(normalized) ?? 'component';\n }\n\n function getComponentSpecValuePart(value: string, label: string): string {\n const escaped = label.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = value.match(new RegExp(`${escaped}:([^;]+)`));\n return match?.[1]?.trim() ?? '';\n }\n\n function getRecordedComponentSpecs() {\n return Object.values(localDraftsRef.current).flatMap(draft => (\n draft.changes\n .filter(change => change.prop === 'component-spec')\n .map(change => ({\n targetLabel: draft.targetLabel,\n componentName: getComponentSpecValuePart(change.val, '组件名'),\n classification: getComponentSpecValuePart(change.val, '归类'),\n usage: getComponentSpecValuePart(change.val, '使用场景'),\n }))\n .filter(spec => spec.componentName || spec.classification)\n ));\n }\n\n function getExistingComponentCreateMatch(classification: string, componentName: string) {\n const recordedSpecs = getRecordedComponentSpecs();\n const byClassification = recordedSpecs.find(spec => spec.classification === classification);\n if (byClassification) return byClassification;\n\n const normalizedName = normalizeComponentMakerCodePart(componentName);\n if (!normalizedName) return null;\n\n const recordedByName = recordedSpecs.find(spec => normalizeComponentMakerCodePart(spec.componentName) === normalizedName);\n if (recordedByName) return recordedByName;\n\n const current = selectedRef.current;\n const existingKnown = current ? getComponentMakerComponentOptions(current).find(option =>\n normalizeComponentMakerCodePart(option.name) === normalizedName\n ) : null;\n return existingKnown ? {\n targetLabel: existingKnown.name,\n componentName: existingKnown.name,\n classification,\n usage: `${existingKnown.type} · ${existingKnown.count}`,\n } : null;\n }\n\n function getUniqueComponentName(baseName: string) {\n const normalizedBase = normalizeComponentMakerCodePart(baseName) || 'component';\n const current = selectedRef.current;\n const used = new Set([\n ...getRecordedComponentSpecs().map(spec => normalizeComponentMakerCodePart(spec.componentName)),\n ...(current ? getComponentMakerComponentOptions(current).map(option => normalizeComponentMakerCodePart(option.name)) : []),\n ].filter(Boolean));\n if (!used.has(normalizedBase)) return normalizedBase;\n for (const suffix of ['alt', 'custom', 'local', 'variant']) {\n const candidate = `${normalizedBase}-${suffix}`;\n if (!used.has(candidate)) return candidate;\n }\n let index = 2;\n while (used.has(`${normalizedBase}-${index}`)) index += 1;\n return `${normalizedBase}-${index}`;\n }\n\n function getSuggestedComponentPurposeByType(type: string, el: Element, containerKey: ComponentContainerKey = getSuggestedComponentContainer(el)): string {\n const label = getElementDisplayName(el);\n const container = getComponentContainerOption(containerKey).label;\n const purpose = getComponentPurposeOption(type).label;\n if (purpose === '标题') return `用于${container}标题展示`;\n if (purpose === '正文') return `用于${container}正文内容展示`;\n if (purpose === '说明') return `用于${container}辅助说明展示`;\n if (purpose === '标签' || purpose === '状态') return `用于${container}状态或标签展示`;\n if (purpose === '按钮文案') return `用于${container}操作按钮文案`;\n if (purpose === '占位提示') return `用于${container}输入提示`;\n if (purpose === '数值') return `用于${container}数值展示`;\n if (purpose === '图标') return `用于${container}图标展示`;\n if (purpose === '内容区块') return `用于承载${label}区域内容`;\n if (purpose === '功能列表') return `用于${container}功能条目展示`;\n if (purpose === '数据列表') return `用于${container}数据记录展示`;\n if (purpose === '导航列表') return `用于${container}导航入口展示`;\n if (purpose === '步骤列表') return `用于${container}流程步骤展示`;\n if (purpose === '内容列表') return `用于${container}内容集合展示`;\n if (purpose === '菜单项') return `用于${container}菜单项展示`;\n if (purpose === '分组标题') return `用于${container}分组标题展示`;\n if (purpose === '导航项') return `用于${container}导航入口展示`;\n if (purpose === '主操作') return `用于${container}主操作`;\n if (purpose === '次操作') return `用于${container}次级操作`;\n if (purpose === '图标按钮') return `用于${container}图标操作`;\n return `用于${label}展示`;\n }\n\n function getSuggestedComponentSlotsByType(type: string): string {\n const option = getComponentTypeOption(type);\n return option?.slotLabel && option.slotLabel !== '无' ? option.slotLabel : '内容';\n }\n\n function getSuggestedComponentName(el: Element): string {\n const meta = getInspectorComponentMeta(el);\n if (meta) return getComponentDisplayName(meta);\n const tag = el.tagName.toLowerCase();\n const tagNameMap: Record<string, string> = {\n h1: 'page-title',\n h2: 'section-title',\n h3: 'subsection-title',\n p: 'body-text',\n span: 'inline-text',\n strong: 'strong-text',\n em: 'emphasis-text',\n a: 'text-link',\n label: 'form-label',\n button: 'button',\n img: 'image',\n section: 'section',\n main: 'main-content',\n aside: 'side-content',\n div: 'container',\n };\n if (tagNameMap[tag] && /^h[1-6]$/.test(tag)) return tagNameMap[tag];\n\n const semanticClass = getClasses(el).find(className =>\n !isStateClass(className)\n && !/^lucide(-|$)/.test(className)\n && /[a-zA-Z]/.test(className)\n );\n return normalizeComponentMakerCodePart(semanticClass || tagNameMap[tag] || getElementDisplayName(el)) || 'component';\n }\n\n function getSuggestedComponentPurpose(el: Element): string {\n const container = getSuggestedComponentContainer(el);\n const type = getSuggestedComponentCreatePurposeType(el, container);\n return getSuggestedComponentPurposeByType(type, el, container);\n }\n\n function getSuggestedComponentSlots(el: Element): string {\n const text = (getTextContent(el) ?? '').trim();\n const type = getSuggestedComponentType(el);\n if (!text) return '内容';\n return getSuggestedComponentSlotsByType(type);\n }\n\n function getEditablePartFieldName(label: string, type: string): string {\n const normalized = COMPONENT_TYPE_ALIASES[type] ?? type;\n if (label.includes('说明')) return 'description';\n if (label.includes('标签') || label.includes('状态')) return 'statusBadge';\n if (label.includes('按钮') || normalized === '按钮文字' || normalized === '按钮') return 'label';\n if (label.includes('标题')) return 'title';\n if (label.includes('正文') || label.includes('内容')) return 'content';\n return normalizeComponentMakerCodePart(label) || 'content';\n }\n\n function makeEditablePart(part: {\n id: string;\n label: string;\n value: string;\n type: string;\n editable?: boolean;\n readonlyReason?: string;\n }): ComponentMakerEditablePart {\n return {\n id: part.id,\n label: part.label,\n value: part.value.trim(),\n fieldName: getEditablePartFieldName(part.label, part.type),\n editable: part.editable ?? true,\n readonlyReason: part.readonlyReason,\n };\n }\n\n function getComponentCreateEditableParts(el: Element, type = getSuggestedComponentType(el)): ComponentMakerEditablePart[] {\n const meta = getInspectorComponentMeta(el);\n const capability = getComponentCapability(meta);\n const parts: ComponentMakerEditablePart[] = [];\n const pushUnique = (part: ComponentMakerEditablePart) => {\n if (!part.value && !part.label) return;\n if (parts.some(item => item.id === part.id || (item.label === part.label && item.value === part.value))) return;\n parts.push(part);\n };\n\n if (capability?.textSlots?.length) {\n capability.textSlots.forEach(slot => pushUnique(makeEditablePart({\n id: slot.key,\n label: slot.label,\n value: getComponentSlotValues(el, [slot])[slot.key] ?? '',\n type,\n })));\n }\n if (capability?.editableText) {\n pushUnique(makeEditablePart({\n id: 'text',\n label: getSuggestedComponentSlotsByType(type),\n value: getButtonText(el),\n type,\n }));\n }\n if (capability?.childSlots?.length) {\n capability.childSlots.forEach(slot => {\n const value = getComponentSlotValues(el, [slot])[slot.key] ?? '';\n if (!value) return;\n pushUnique(makeEditablePart({\n id: slot.key,\n label: slot.label,\n value,\n type,\n editable: false,\n readonlyReason: '子组件',\n }));\n });\n }\n\n if (!parts.length) {\n const directText = (getTextContent(el) ?? '').trim();\n if (directText) {\n pushUnique(makeEditablePart({\n id: 'text',\n label: getSuggestedComponentSlotsByType(type),\n value: directText,\n type,\n }));\n }\n }\n\n if (!parts.length) {\n const candidates: Array<{ id: string; label: string; selector: string; editable: boolean; readonlyReason?: string }> = [\n { id: 'title', label: '标题', selector: '[data-di-slot=\"title\"], .task-title, .card-title, h1, h2, h3', editable: true },\n { id: 'description', label: '说明文', selector: '[data-di-slot=\"description\"], .card-desc, .card-description, p', editable: true },\n { id: 'statusBadge', label: '标签', selector: '[data-di-slot=\"status\"], .status-badge, .badge, .tag, .chip', editable: false, readonlyReason: '子组件' },\n ];\n candidates.forEach(candidate => {\n const target = el.querySelector(candidate.selector);\n const value = (target?.textContent ?? '').trim();\n if (!value) return;\n pushUnique(makeEditablePart({\n id: candidate.id,\n label: candidate.label,\n value,\n type,\n editable: candidate.editable,\n readonlyReason: candidate.readonlyReason,\n }));\n });\n }\n\n if (!parts.length) {\n const allText = (el.textContent ?? '').trim();\n if (allText) {\n pushUnique(makeEditablePart({\n id: 'content',\n label: '内容',\n value: allText,\n type,\n }));\n }\n }\n\n return parts;\n }\n\n function getComponentEditablePartsSummary(parts: ComponentMakerEditablePart[]): string {\n const editable = parts.filter(part => part.editable);\n if (editable.length) return editable.map(part => part.label).join(';');\n return parts.length ? parts.map(part => `${part.label}(只读)`).join(';') : '内容';\n }\n\n function getComponentCreateStyleRules(type: string, purpose: string, fallbackGroup: ComponentTypeGroup = 'structure', containerKey?: ComponentContainerKey): string {\n const classification = getComponentTypeClassification(type, fallbackGroup, containerKey);\n return [\n `组件归类:${classification.path}`,\n `使用场景:${purpose.trim() || '用于当前元素复用'}`,\n '使用当前元素的文字、外观、布局、阴影和间距作为组件默认样式',\n 'token 优先:能匹配 token 的使用 token,无法匹配的保留自定义值',\n '暂不创建变体',\n '创建后用新组件替换当前元素',\n '不修改业务逻辑',\n ].join(';');\n }\n\n function getComponentMakerSpecDefaults(el: Element): ComponentMakerSpecDraft {\n const meta = getInspectorComponentMeta(el);\n const capability = getComponentCapability(meta);\n const suggestedContainer = getSuggestedComponentContainer(el);\n const suggestedType = getSuggestedComponentCreatePurposeType(el, suggestedContainer);\n const suggestedTypeGroup = getComponentPurposeOption(suggestedType).group;\n const classification = getComponentTypeClassification(suggestedType, suggestedTypeGroup, suggestedContainer).path;\n const editableParts = getComponentCreateEditableParts(el, suggestedType);\n const variantLabel = meta\n ? [\n capability?.variantKind === 'card' ? `展示=${getCardDisplayLabel(meta.variant)}` : `变体=${meta.variant || 'default'}`,\n `状态=${getComponentStateLabel(meta.state)}`,\n ].join(';')\n : 'default';\n return {\n sourceMode: meta ? '已有组件' : '新建组件',\n action: meta ? '新增当前变体' : '创建组件',\n classification: meta ? '' : classification,\n componentName: meta ? getComponentDisplayName(meta) : getComponentNameByType(suggestedType, el, suggestedContainer),\n usage: meta ? '' : getSuggestedComponentPurpose(el),\n editableParts,\n variants: variantLabel,\n slots: editableParts.length ? getComponentEditablePartsSummary(editableParts) : getSuggestedComponentSlots(el),\n styleRules: meta\n ? '沿用当前组件白名单,只开放允许修改的 props、可编辑内容、variant 和 token。'\n : getComponentCreateStyleRules(suggestedType, getSuggestedComponentPurpose(el), suggestedTypeGroup, suggestedContainer),\n };\n }\n\n function getComponentMakerVariantDefaults(el: Element): ComponentMakerVariantDraft {\n const meta = getInspectorComponentMeta(el);\n const capability = getComponentCapability(meta);\n const dimension = capability?.variantKind === 'card'\n ? '展示'\n : capability?.variantKind\n ? '变体'\n : capability?.statusKind\n ? '状态'\n : capability?.sizeKind\n ? '尺寸'\n : '自定义';\n const base = meta\n ? capability?.variantKind === 'card'\n ? getCardDisplayLabel(meta.variant)\n : meta.variant || getComponentStateLabel(meta.state)\n : '当前样式';\n return {\n dimension,\n name: '',\n base,\n rules: '基于当前组件样式创建新变体;只新增组件 API、token 映射和样式规则,不改业务逻辑。',\n };\n }\n\n function getComponentMakerDimensionDisplayName(dimension: string): string {\n if (dimension === '状态') return '交互状态';\n if (dimension === '尺寸') return '大小规格';\n if (dimension === '展示') return '展示形态';\n if (dimension === '变体') return '外观变体';\n if (dimension === '颜色') return '颜色规格';\n return dimension || '规格';\n }\n\n function normalizeComponentMakerCodePart(value: string): string {\n return value\n .trim()\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[^a-zA-Z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n }\n\n function getGeneratedComponentMakerVariantName(componentName: string, item: ComponentMakerVariantSuggestion | null): string {\n const base = normalizeComponentMakerCodePart(componentName) || 'component';\n const suffix = normalizeComponentMakerCodePart(item?.name || item?.label || 'variant') || 'variant';\n return `${base}--${suffix}`;\n }\n\n function makeComponentMakerVariantSuggestion(item: {\n id: string;\n dimension: string;\n name: string;\n label: string;\n base: string;\n rules: string;\n description: string;\n visual: ComponentMakerVariantVisual;\n }): ComponentMakerVariantSuggestion {\n return item;\n }\n\n function getComponentMakerVariantSuggestions(el: Element): ComponentMakerVariantSuggestion[] {\n const meta = getInspectorComponentMeta(el);\n const capability = getComponentCapability(meta);\n const base = getComponentMakerVariantDefaults(el).base || '当前样式';\n const cs = getComputedStyle(el);\n const colorInfo = getDisplayLabel(normalizeColor(cs.color), tokenMap, colorPalette, tokenLabels);\n const currentStyle = `${formatFontSizeControlValue(cs.fontSize.trim())} / ${cs.fontWeight.trim()} / ${colorInfo.label}`;\n const withBase = (item: Omit<ComponentMakerVariantSuggestion, 'base'>) => makeComponentMakerVariantSuggestion({\n ...item,\n base,\n });\n\n if (capability?.type === 'Button') {\n return [\n ...BUTTON_VARIANT_OPTIONS.map(option => withBase({\n id: `button-variant-${option.key}`,\n dimension: '变体',\n name: option.key,\n label: option.label,\n description: '按钮外观分支',\n rules: `补齐 ${option.label} 的默认、hover、focus-visible 和 disabled 视觉规则。`,\n visual: option.key === 'primary' ? 'brand' : option.key === 'ghost' ? 'neutral' : option.key === 'text' ? 'compact' : 'floating',\n })),\n ...BUTTON_SIZE_OPTIONS.map(option => withBase({\n id: `button-size-${option.key}`,\n dimension: '尺寸',\n name: option.key.toUpperCase(),\n label: option.label,\n description: `${option.minHeight} 高度规格`,\n rules: `新增 ${option.label} 尺寸:高度 ${option.minHeight},内边距 ${option.padding},字号 ${option.fontSize}。`,\n visual: 'size',\n })),\n withBase({\n id: 'button-state-disabled',\n dimension: '状态',\n name: 'disabled',\n label: '禁用',\n description: '不可点击状态',\n rules: '新增 disabled 状态:降低对比度,保留可读性,并禁止 hover 强反馈。',\n visual: 'disabled',\n }),\n ];\n }\n\n if (capability?.type === 'Badge') {\n return [\n ...BADGE_STATUS_OPTIONS.map(option => withBase({\n id: `badge-status-${option.key}`,\n dimension: '状态',\n name: option.key,\n label: option.label,\n description: '标签语义状态',\n rules: `补齐 ${option.label} 标签状态:背景、文字色、边框色优先复用语义 token。`,\n visual: option.key === 'success' ? 'success' : option.key === 'warning' ? 'warning' : option.key === 'danger' ? 'danger' : option.key === 'progress' ? 'brand' : 'neutral',\n })),\n ...BADGE_SIZE_OPTIONS.map(option => withBase({\n id: `badge-size-${option.key}`,\n dimension: '尺寸',\n name: option.key.toUpperCase(),\n label: option.label,\n description: `${option.minHeight} 标签尺寸`,\n rules: `新增 ${option.label} 尺寸:高度 ${option.minHeight},内边距 ${option.padding},字号 ${option.fontSize}。`,\n visual: 'size',\n })),\n ];\n }\n\n if (capability?.type === 'Card') {\n return [\n ...CARD_VARIANT_OPTIONS.filter(option => option.key !== 'default').map(option => withBase({\n id: `card-display-${option.key}`,\n dimension: '展示',\n name: option.key,\n label: option.label,\n description: '卡片展示形态',\n rules: `新增 ${option.label} 展示:基于当前卡片结构调整容器、阴影、间距和标题层级;可编辑内容保持不变。`,\n visual: option.key === 'compact' ? 'compact' : option.key === 'floating' ? 'floating' : option.key === 'emphasis' ? 'emphasis' : 'neutral',\n })),\n ...COMPONENT_INTERACTION_STATE_OPTIONS.map(option => withBase({\n id: `card-state-${option.key}`,\n dimension: '状态',\n name: option.key,\n label: option.label,\n description: option.description,\n rules: `新增 ${option.label} 交互状态:保留卡片结构,只调整视觉反馈和可访问状态。`,\n visual: option.visual,\n })),\n ...COMPONENT_GENERIC_SIZE_OPTIONS.map(option => withBase({\n id: `card-size-${option.key}`,\n dimension: '尺寸',\n name: option.key,\n label: option.label,\n description: option.description,\n rules: `新增 ${option.label} 大小规格:基于当前卡片调整内边距、最小高度和文字层级。`,\n visual: option.visual,\n })),\n ];\n }\n\n if (capability?.type === 'Icon') {\n return [\n ...ICON_COLOR_OPTIONS.map(option => withBase({\n id: `icon-color-${option.key}`,\n dimension: '颜色',\n name: option.key,\n label: option.label,\n description: '图标语义色',\n rules: `新增 ${option.label} 图标颜色映射:${option.value}。`,\n visual: option.key === 'success' ? 'success' : option.key === 'warning' ? 'warning' : option.key === 'danger' ? 'danger' : option.key === 'brand' ? 'brand' : 'neutral',\n })),\n ...ICON_SIZE_OPTIONS.map(option => withBase({\n id: `icon-size-${option.key}`,\n dimension: '尺寸',\n name: option.key.toUpperCase(),\n label: option.label,\n description: `${option.size} 图标尺寸`,\n rules: `新增 ${option.label} 图标尺寸:宽高 ${option.size}。`,\n visual: 'size',\n })),\n ];\n }\n\n const target = meta ? getComponentDisplayName(meta) : getElementDisplayName(el, meta);\n return [\n withBase({\n id: 'generic-default',\n dimension: '展示',\n name: 'default',\n label: '默认',\n description: currentStyle,\n rules: `沉淀 ${target} 的当前样式为默认态:${currentStyle}。`,\n visual: 'neutral',\n }),\n withBase({\n id: 'generic-compact',\n dimension: '展示',\n name: 'compact',\n label: '紧凑',\n description: '压缩空间',\n rules: '基于当前样式生成紧凑形态:字号、间距或高度降低一档,保持可读。',\n visual: 'compact',\n }),\n withBase({\n id: 'generic-emphasis',\n dimension: '展示',\n name: 'emphasis',\n label: '强调',\n description: '增强重点',\n rules: '基于当前样式生成强调形态:提升字重或语义色,不改变业务内容。',\n visual: 'emphasis',\n }),\n withBase({\n id: 'generic-muted',\n dimension: '状态',\n name: 'muted',\n label: '弱化',\n description: '降低层级',\n rules: '基于当前样式生成弱化形态:降低文字色层级或透明度,保留布局。',\n visual: 'disabled',\n }),\n withBase({\n id: 'generic-size-s',\n dimension: '尺寸',\n name: 'S',\n label: 'S',\n description: '小尺寸',\n rules: '基于当前样式生成小尺寸规格,压缩字号、内边距或高度一档。',\n visual: 'size',\n }),\n withBase({\n id: 'generic-size-l',\n dimension: '尺寸',\n name: 'L',\n label: 'L',\n description: '大尺寸',\n rules: '基于当前样式生成大尺寸规格,放大字号、内边距或高度一档。',\n visual: 'size',\n }),\n ];\n }\n\n function stripInspectorArtifactsFromPreview(el: Element) {\n el.classList.remove('di-selected');\n el.removeAttribute('data-di-panel-role');\n el.querySelectorAll('*').forEach(child => {\n child.classList.remove('di-selected');\n child.removeAttribute('data-di-panel-role');\n });\n }\n\n function applyGenericVariantPreview(el: Element, item: ComponentMakerVariantSuggestion) {\n if (!(el instanceof HTMLElement)) return;\n const key = item.name.toLowerCase();\n if (item.visual === 'compact') {\n el.style.setProperty('transform', key === 'pressed' ? 'scale(0.98)' : 'scale(0.92)');\n el.style.setProperty('transform-origin', 'left center');\n }\n if (item.visual === 'floating') {\n el.style.setProperty('box-shadow', '0 12px 28px rgba(15, 23, 42, 0.16)');\n el.style.setProperty('transform', 'translateY(-2px)');\n el.style.setProperty('transform-origin', 'left center');\n }\n if (item.visual === 'emphasis') {\n el.style.setProperty('font-weight', '800');\n el.style.setProperty('color', 'var(--color-text-strong, #0f172a)');\n }\n if (item.visual === 'brand') {\n el.style.setProperty('outline', '2px solid #7c3aed');\n el.style.setProperty('outline-offset', '2px');\n }\n if (item.visual === 'disabled') {\n el.style.setProperty('opacity', '0.52');\n }\n if (item.id.includes('-size-s')) {\n el.style.setProperty('transform', 'scale(0.92)');\n el.style.setProperty('transform-origin', 'left center');\n }\n if (item.id.includes('-size-l')) {\n el.style.setProperty('transform', 'scale(1.04)');\n el.style.setProperty('transform-origin', 'left center');\n }\n }\n\n function applyComponentMakerPreviewVariant(el: Element, item: ComponentMakerVariantSuggestion | null) {\n if (!item) return;\n const key = item.name.toLowerCase();\n\n if (item.id.startsWith('card-display-')) {\n setCardVariantOnTargets([el], key as CardVariantKey);\n return;\n }\n if (item.id.startsWith('card-state-') || item.id.startsWith('card-size-')) {\n applyGenericVariantPreview(el, item);\n return;\n }\n if (item.id.startsWith('button-variant-')) {\n setButtonVariantOnTargets([el], key as ButtonVariantKey);\n return;\n }\n if (item.id.startsWith('button-size-')) {\n setButtonSizeOnTargets([el], key as ButtonSizeKey);\n return;\n }\n if (item.id.startsWith('badge-status-')) {\n setBadgeStatusOnTargets([el], key as BadgeStatusKey);\n return;\n }\n if (item.id.startsWith('badge-size-')) {\n setBadgeSizeOnTargets([el], key as ButtonSizeKey);\n return;\n }\n if (item.id.startsWith('icon-color-')) {\n setIconColorOnTargets([el], key as IconColorKey);\n return;\n }\n if (item.id.startsWith('icon-size-')) {\n setIconSizeOnTargets([el], key as ButtonSizeKey);\n return;\n }\n\n applyGenericVariantPreview(el, item);\n }\n\n function getComponentMakerLivePreviewHtml(el: Element, item: ComponentMakerVariantSuggestion | null): string {\n const clone = el.cloneNode(true) as Element;\n stripInspectorArtifactsFromPreview(clone);\n applyComponentMakerPreviewVariant(clone, item);\n clone.classList.add('di-plugin-preview-node');\n if (clone instanceof HTMLElement) {\n clone.style.setProperty('max-width', '100%');\n clone.style.setProperty('box-sizing', 'border-box');\n }\n return clone.outerHTML;\n }\n\n function getSelectedComponentMakerVariantItems(el: Element): ComponentMakerVariantSuggestion[] {\n return getComponentMakerVariantSuggestions(el)\n .filter(item => !componentVariantExcludedIds.includes(item.id));\n }\n\n function getActiveComponentMakerVariantDraft(el: Element): ComponentMakerVariantDraft {\n const selectedItems = getSelectedComponentMakerVariantItems(el);\n return {\n ...componentVariantDraft,\n items: selectedItems,\n dimension: selectedItems.length === 1 ? selectedItems[0].dimension : componentVariantDraft.dimension,\n name: selectedItems.length === 1 ? selectedItems[0].name : componentVariantDraft.name,\n rules: selectedItems.length\n ? '基于当前选中对象生成一组组件变体草案;选中卡片即为本次要创建的变体。'\n : componentVariantDraft.rules,\n };\n }\n\n function toggleComponentMakerVariantSuggestion(id: string) {\n setComponentVariantPreviewId(id);\n setComponentVariantExcludedIds(prev => (\n prev.includes(id) ? prev.filter(item => item !== id) : [...prev, id]\n ));\n }\n\n function copyPluginPrompt(prompt: string, successMsg: string) {\n if (!prompt) return;\n debugAiPrompt(prompt, 'plugin');\n copyTextToClipboard(prompt)\n .then(copied => {\n setPluginMsg(copied ? successMsg : '复制失败');\n setTimeout(() => setPluginMsg(''), copied ? 2200 : 1800);\n })\n .catch(() => {\n setPluginMsg('复制失败');\n setTimeout(() => setPluginMsg(''), 1800);\n });\n }\n\n function handleRecordComponentSpecDraft(draftOverride: ComponentMakerSpecDraft = componentSpecDraft) {\n const nextEntry = buildComponentSpecDraftEntry(draftOverride);\n setLocalDrafts(prev => ({ ...prev, [nextEntry.key]: nextEntry }));\n setPluginMsg('组件规格已记录 ✓');\n setTimeout(() => setPluginMsg(''), 2200);\n }\n\n function buildComponentSpecDraftEntry(draftOverride: ComponentMakerSpecDraft): LocalDraftEntry {\n const el = selectedRef.current;\n const info = getDraftTargetInfo(el);\n const val = formatComponentMakerSpecDraft(draftOverride);\n const existing = localDraftsRef.current[info.key];\n const existingByProp = new Map(existing?.changes.map(change => [change.prop, change]) ?? []);\n const mergedByProp = new Map<string, LocalDraftChange>();\n existing?.changes.forEach(change => mergedByProp.set(change.prop, change));\n const previous = existingByProp.get('component-spec');\n mergedByProp.set('component-spec', {\n prop: 'component-spec',\n from: previous?.from ?? '未记录',\n val,\n });\n return {\n ...info,\n changes: Array.from(mergedByProp.values()),\n updatedAt: Date.now(),\n };\n }\n\n function openComponentCreateDrawer() {\n const el = selectedRef.current;\n setLibraryOpen(false);\n const defaults = getComponentMakerSpecDefaults(el);\n const suggestedContainer = getSuggestedComponentContainer(el);\n const suggestedType = getSuggestedComponentCreatePurposeType(el, suggestedContainer);\n const suggestedGroup = getComponentPurposeOption(suggestedType).group;\n const classification = getComponentTypeClassification(suggestedType, suggestedGroup, suggestedContainer).path;\n const suggestedName = getComponentNameByType(suggestedType, el, suggestedContainer);\n const existingMatch = getExistingComponentCreateMatch(classification, suggestedName);\n const resolution: ComponentCreateResolution = existingMatch ? 'reuse' : 'new';\n setComponentMakerSourceMode('new');\n setComponentMakerAction('create-current');\n setComponentSpecDraft({\n ...defaults,\n sourceMode: resolution === 'reuse' ? '复用已有组件' : '新建组件',\n action: resolution === 'reuse' ? '复用组件' : '创建组件',\n classification,\n componentName: resolution === 'reuse' && existingMatch?.componentName ? existingMatch.componentName : suggestedName,\n usage: getSuggestedComponentPurposeByType(suggestedType, el, suggestedContainer),\n editableParts: getComponentCreateEditableParts(el, suggestedType),\n variants: '暂不创建',\n });\n setComponentCreateContainer(suggestedContainer);\n setComponentCreateContainerMenuOpen(false);\n setComponentCreateType(suggestedType);\n setComponentCreateTypeMenuOpen(false);\n setComponentCreatePurpose(getSuggestedComponentPurposeByType(suggestedType, el, suggestedContainer));\n setComponentCreateNameTouched(false);\n setComponentCreateResolution(resolution);\n setComponentCreateOpen(true);\n }\n\n function applyComponentCreateContainer(nextContainer: ComponentContainerKey) {\n const el = selectedRef.current;\n if (!el) return;\n const currentType = componentCreateType || getSuggestedComponentCreatePurposeType(el, componentCreateContainer);\n const type = isPurposeAllowedForContainer(currentType, nextContainer)\n ? currentType\n : getSuggestedComponentCreatePurposeType(el, nextContainer);\n const group = getComponentPurposeOption(type).group;\n const classification = getComponentTypeClassification(type, group, nextContainer).path;\n const nextSuggestedName = getComponentNameByType(type, el, nextContainer);\n const existingMatch = getExistingComponentCreateMatch(classification, nextSuggestedName);\n const nextResolution: ComponentCreateResolution = existingMatch ? 'reuse' : 'new';\n const currentName = componentSpecDraft.componentName.trim();\n const previousSuggestedName = getComponentNameByType(type, el, componentCreateContainer);\n const shouldUpdateName = !componentCreateNameTouched || !currentName || currentName === previousSuggestedName || currentName === getSuggestedComponentName(el);\n const nextPurpose = getSuggestedComponentPurposeByType(type, el, nextContainer);\n\n setComponentCreateContainer(nextContainer);\n setComponentCreateType(type);\n setComponentCreateContainerMenuOpen(false);\n setComponentCreatePurpose(nextPurpose);\n setComponentCreateResolution(nextResolution);\n syncComponentSpecDraft({\n sourceMode: nextResolution === 'reuse' ? '复用已有组件' : '新建组件',\n action: nextResolution === 'reuse' ? '复用组件' : '创建组件',\n classification,\n usage: nextPurpose,\n ...(shouldUpdateName ? { componentName: nextResolution === 'reuse' && existingMatch?.componentName ? existingMatch.componentName : nextSuggestedName } : {}),\n styleRules: getComponentCreateStyleRules(type, nextPurpose, group, nextContainer),\n });\n }\n\n function applyComponentCreateType(nextType: string) {\n const type = nextType.trim();\n if (!type) return;\n const el = selectedRef.current;\n if (!el) return;\n const previousType = componentCreateType;\n const currentName = componentSpecDraft.componentName.trim();\n const currentSlots = componentSpecDraft.slots.trim();\n const previousSuggestedName = previousType ? getComponentNameByType(previousType, el, componentCreateContainer) : getSuggestedComponentName(el);\n const previousSuggestedSlots = previousType ? getSuggestedComponentSlotsByType(previousType) : getSuggestedComponentSlots(el);\n const nextEditableParts = getComponentCreateEditableParts(el, type);\n const group = getComponentPurposeOption(type).group;\n const classification = getComponentTypeClassification(type, group, componentCreateContainer).path;\n const nextSuggestedName = getComponentNameByType(type, el, componentCreateContainer);\n const existingMatch = getExistingComponentCreateMatch(classification, nextSuggestedName);\n const nextResolution: ComponentCreateResolution = existingMatch ? 'reuse' : 'new';\n const shouldUpdateName = !componentCreateNameTouched\n || !currentName\n || currentName === previousSuggestedName\n || currentName === getSuggestedComponentName(el);\n const shouldUpdateSlots = !currentSlots || currentSlots === previousSuggestedSlots || currentSlots === getSuggestedComponentSlots(el);\n\n setComponentCreateType(type);\n setComponentCreatePurpose(getSuggestedComponentPurposeByType(type, el, componentCreateContainer));\n setComponentCreateResolution(nextResolution);\n syncComponentSpecDraft({\n sourceMode: nextResolution === 'reuse' ? '复用已有组件' : '新建组件',\n action: nextResolution === 'reuse' ? '复用组件' : '创建组件',\n classification,\n usage: getSuggestedComponentPurposeByType(type, el, componentCreateContainer),\n editableParts: nextEditableParts,\n ...(shouldUpdateName ? { componentName: nextResolution === 'reuse' && existingMatch?.componentName ? existingMatch.componentName : nextSuggestedName } : {}),\n ...(shouldUpdateSlots ? { slots: getComponentEditablePartsSummary(nextEditableParts) } : {}),\n styleRules: getComponentCreateStyleRules(type, getSuggestedComponentPurposeByType(type, el, componentCreateContainer), group, componentCreateContainer),\n });\n setComponentCreateTypeMenuOpen(false);\n }\n\n function handleSendComponentCreateToAi() {\n const el = selectedRef.current;\n const draft: ComponentMakerSpecDraft = {\n ...componentSpecDraft,\n sourceMode: componentCreateResolution === 'reuse' ? '复用已有组件' : '新建组件',\n action: componentCreateResolution === 'reuse' ? '复用组件' : '创建组件',\n classification: getComponentTypeClassification(componentCreateType, getComponentPurposeOption(componentCreateType).group, componentCreateContainer).path,\n componentName: componentSpecDraft.componentName.trim() || getComponentNameByType(componentCreateType, el, componentCreateContainer),\n usage: componentCreatePurpose.trim() || getSuggestedComponentPurpose(el),\n editableParts: componentSpecDraft.editableParts?.length\n ? componentSpecDraft.editableParts\n : getComponentCreateEditableParts(el, componentCreateType),\n variants: '暂不创建',\n slots: componentSpecDraft.slots.trim()\n || getComponentEditablePartsSummary(componentSpecDraft.editableParts ?? [])\n || getSuggestedComponentSlots(el),\n styleRules: getComponentCreateStyleRules(componentCreateType, componentCreatePurpose, getComponentPurposeOption(componentCreateType).group, componentCreateContainer),\n };\n const nextEntry = buildComponentSpecDraftEntry(draft);\n const nextDrafts = { ...localDraftsRef.current, [nextEntry.key]: nextEntry };\n setComponentSpecDraft(draft);\n setLocalDrafts(nextDrafts);\n setComponentCreateOpen(false);\n setComponentCreateContainerMenuOpen(false);\n setComponentCreateTypeMenuOpen(false);\n copyDraftEntriesToAi(Object.values(nextDrafts));\n }\n\n function handleRecordComponentVariantDraft() {\n const el = selected;\n const info = getDraftTargetInfo(el);\n const selectedItems: ComponentMakerVariantItem[] = isRecognizedComponentVariantFlow\n ? activeComponentMakerVariantDraft.items ?? []\n : getSelectedComponentMakerVariantItems(el);\n if (!selectedItems.length) {\n setPluginMsg('至少保留一个变体');\n setTimeout(() => setPluginMsg(''), 1800);\n return;\n }\n const draft = isRecognizedComponentVariantFlow\n ? activeComponentMakerVariantDraft\n : getActiveComponentMakerVariantDraft(el);\n const val = formatComponentMakerVariantDraft(draft);\n const componentName = isRecognizedComponentVariantFlow\n ? componentMakerActiveComponentName\n : componentSpecDraft.componentName.trim() || getElementDisplayName(el);\n setLocalDrafts(prev => {\n const existing = prev[info.key];\n const existingByProp = new Map(existing?.changes.map(change => [change.prop, change]) ?? []);\n const mergedByProp = new Map<string, LocalDraftChange>();\n existing?.changes.forEach(change => mergedByProp.set(change.prop, change));\n const prop = `component-variant-group:${componentName}`;\n const previous = existingByProp.get(prop);\n mergedByProp.set(prop, {\n prop,\n from: previous?.from ?? '未创建',\n val,\n });\n const nextEntry: LocalDraftEntry = {\n ...info,\n changes: Array.from(mergedByProp.values()),\n updatedAt: Date.now(),\n };\n return { ...prev, [info.key]: nextEntry };\n });\n setPluginMsg('变体组已记录 ✓');\n setTimeout(() => setPluginMsg(''), 2200);\n }\n\n function recordLibraryCrudChange(params: {\n resource: 'token' | 'component';\n action: DesignLibraryCrudAction;\n name: string;\n from: string;\n val: string;\n }) {\n const actionLabel = params.action === 'create' ? '新增' : params.action === 'update' ? '编辑' : '删除';\n const safeName = params.name.trim() || '未命名';\n const prop = `library-${params.resource}:${params.action}:${safeName}`;\n const info: Pick<LocalDraftEntry, 'key' | 'selector' | 'targetLabel' | 'scopeLabel'> = {\n key: 'library:design-library',\n selector: 'Library / 设计库',\n targetLabel: 'Library / 设计库',\n scopeLabel: '设计库',\n };\n setLocalDrafts(prev => {\n const existing = prev[info.key];\n const mergedByProp = new Map<string, LocalDraftChange>();\n existing?.changes.forEach(change => mergedByProp.set(change.prop, change));\n mergedByProp.set(prop, {\n prop,\n from: params.from,\n val: `${actionLabel}:${params.val}`,\n });\n return {\n ...prev,\n [info.key]: {\n ...info,\n changes: Array.from(mergedByProp.values()),\n updatedAt: Date.now(),\n },\n };\n });\n }\n\n function getLibraryTokenPreviewKind(category: LibraryTokenItemCategory): LibraryTokenItem['preview'] {\n if (category === 'typography') return 'text';\n if (category === 'radius') return 'radius';\n if (category === 'shadow') return 'shadow';\n if (category === 'space') return 'space';\n if (category === 'appearance') return 'appearance';\n return 'color';\n }\n\n function getLibraryTokenCategoryLabel(category: LibraryTokenItemCategory): string {\n return LIBRARY_TOKEN_CATEGORIES.find(item => item.key === category)?.label ?? category;\n }\n\n function formatLibraryTokenSummary(item: Pick<LibraryTokenItem, 'categoryLabel' | 'name' | 'value' | 'usage' | 'status'>): string {\n return `${item.categoryLabel} / ${item.name} / ${item.value} / ${item.usage || '未登记用途'} / ${item.status}`;\n }\n\n function buildLibraryTokenItemFromForm(form: LibraryTokenFormDraft): LibraryTokenItem {\n const categoryLabel = getLibraryTokenCategoryLabel(form.category);\n return {\n id: form.baseId || `draft-token:${Date.now()}:${form.name}`,\n category: form.category,\n categoryLabel,\n name: form.name.trim(),\n value: form.value.trim(),\n rawValue: form.value.trim(),\n usage: form.usage.trim() || '未登记用途',\n status: form.status.trim() || (form.mode === 'create' ? '新增草稿' : '编辑草稿'),\n preview: getLibraryTokenPreviewKind(form.category),\n previewValue: form.value.trim(),\n source: 'draft',\n };\n }\n\n function openLibraryTokenCreate() {\n const fallbackValue = pendingTextColor || textColorVal || Object.values(pendingColors)[0] || '#111827';\n setLibraryTokenForm({\n mode: 'create',\n category: 'color',\n name: '--color-custom',\n value: fallbackValue,\n usage: '用于当前页面样式',\n status: '新增草稿',\n });\n }\n\n function openLibraryTokenEdit(item: LibraryTokenItem) {\n setSelectedLibraryTokenId(item.id);\n setLibraryTokenForm({\n mode: 'update',\n baseId: item.id,\n category: item.category,\n name: item.name,\n value: item.rawValue || item.value,\n usage: item.usage,\n status: item.status.includes('草稿') ? item.status : '编辑草稿',\n });\n }\n\n function submitLibraryTokenForm() {\n if (!libraryTokenForm) return;\n const nextItem = buildLibraryTokenItemFromForm(libraryTokenForm);\n if (!nextItem.name || !nextItem.value) return;\n if (libraryTokenForm.mode === 'create') {\n setLibraryCustomTokens(prev => [nextItem, ...prev]);\n setSelectedLibraryTokenId(nextItem.id);\n recordLibraryCrudChange({\n resource: 'token',\n action: 'create',\n name: nextItem.name,\n from: '未登记',\n val: formatLibraryTokenSummary(nextItem),\n });\n } else {\n setLibraryTokenOverrides(prev => ({ ...prev, [nextItem.id]: { ...nextItem, status: '编辑草稿', source: 'draft' } }));\n setSelectedLibraryTokenId(nextItem.id);\n const original = libraryTokenItems.find(item => item.id === nextItem.id);\n recordLibraryCrudChange({\n resource: 'token',\n action: 'update',\n name: nextItem.name,\n from: original ? formatLibraryTokenSummary(original) : '未登记',\n val: formatLibraryTokenSummary({ ...nextItem, status: '编辑草稿' }),\n });\n }\n setLibraryTokenForm(null);\n }\n\n function deleteLibraryToken(item: LibraryTokenItem) {\n const usageCount = countLibraryTokenUsage(item);\n const deleteHint = usageCount === null\n ? '删除草稿(使用情况无法统计,需 AI 复核)'\n : usageCount > 0\n ? `删除草稿(${usageCount} 处使用,需先替换)`\n : '删除草稿(未使用)';\n if (item.source === 'draft') {\n setLibraryCustomTokens(prev => prev.filter(token => token.id !== item.id));\n } else {\n setLibraryDeletedTokenIds(prev => ({ ...prev, [item.id]: deleteHint }));\n }\n if (selectedLibraryTokenId === item.id) setSelectedLibraryTokenId('');\n recordLibraryCrudChange({\n resource: 'token',\n action: 'delete',\n name: item.name,\n from: formatLibraryTokenSummary(item),\n val: `${item.name} / ${deleteHint}`,\n });\n }\n\n function focusLibraryTokenUsage(item: LibraryTokenItem) {\n setSelectedLibraryTokenId(item.id);\n const targets = getLibraryTokenUsageTargets(item);\n if (targets === null) {\n setSubmitMsg('该 token 暂无法统计使用');\n setTimeout(() => setSubmitMsg(''), 1800);\n return;\n }\n const target = targets[0];\n if (!target) {\n setSubmitMsg('当前页面未使用该 token');\n setTimeout(() => setSubmitMsg(''), 1800);\n return;\n }\n setLibraryWorkbenchOpen(false);\n setLibraryOpen(false);\n setComponentCreateOpen(false);\n target.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });\n selectEl(target);\n setSubmitMsg(`已定位 1 / ${targets.length}`);\n setTimeout(() => setSubmitMsg(''), 1800);\n }\n\n function formatLibraryComponentSummary(item: Pick<LibraryComponentItem, 'categoryLabel' | 'type' | 'label' | 'summary' | 'selector' | 'status'>): string {\n return `${item.label} / ${item.type} / ${item.categoryLabel} / ${item.summary || '未登记能力'} / ${item.selector || '未登记 selector'} / ${item.status}`;\n }\n\n function openLibraryComponentCreate() {\n setLibraryComponentImportOpen(false);\n setLibraryComponentForm({\n mode: 'create',\n category: libraryComponentCategory === 'all' ? 'custom' : libraryComponentCategory,\n type: 'Custom',\n label: '自定义组件',\n summary: '待补能力',\n selector: '.custom-component',\n status: '新增草稿',\n });\n }\n\n function openLibraryComponentEdit(item: LibraryComponentItem) {\n setLibraryComponentImportOpen(false);\n setSelectedLibraryComponentId(item.id);\n setLibraryComponentForm({\n mode: 'update',\n baseId: item.id,\n category: item.category,\n type: item.type,\n label: item.label,\n summary: item.summary,\n selector: item.selector,\n status: item.status.includes('草稿') ? item.status : '编辑草稿',\n });\n }\n\n function normalizeComponentImportDraft(raw: ComponentImportDraft): LibraryComponentFormDraft {\n const type = String(raw.type || '').trim() || 'Custom';\n const category = raw.category || getLibraryComponentCategory(type);\n const variantText = Array.isArray(raw.variants) && raw.variants.length ? `变体:${raw.variants.join(' / ')}` : '';\n const sizeText = Array.isArray(raw.sizes) && raw.sizes.length ? `尺寸:${raw.sizes.join(' / ')}` : '';\n const tokenText = Array.isArray(raw.tokenRefs) && raw.tokenRefs.length ? `Token:${raw.tokenRefs.join(' / ')}` : '';\n return {\n mode: 'create',\n category,\n type,\n label: String(raw.label || LIBRARY_COMPONENT_LABELS[type] || type).trim(),\n summary: String(raw.summary || [variantText, sizeText, tokenText].filter(Boolean).join(';') || '导入组件草稿').trim(),\n selector: String(raw.selector || `.${type.toLowerCase()}`).trim(),\n status: String(raw.status || '导入草稿').trim(),\n };\n }\n\n function submitImportedLibraryComponents(drafts: ComponentImportDraft[]) {\n const normalized = drafts.map(normalizeComponentImportDraft);\n const nextItems: LibraryComponentItem[] = normalized.map((form, index) => ({\n id: `draft-component-import:${Date.now()}:${index}:${form.type}`,\n category: form.category,\n categoryLabel: getLibraryComponentCategoryLabel(form.category),\n type: form.type,\n label: form.label,\n summary: form.summary,\n selector: form.selector,\n status: form.status,\n source: 'draft',\n }));\n if (!nextItems.length) {\n setLibraryComponentImportMsg('没有识别到组件');\n setTimeout(() => setLibraryComponentImportMsg(''), 1800);\n return;\n }\n setLibraryCustomComponents(prev => [...nextItems, ...prev]);\n setSelectedLibraryComponentId(nextItems[0].id);\n nextItems.forEach(item => {\n recordLibraryCrudChange({\n resource: 'component',\n action: 'create',\n name: item.type,\n from: '未登记',\n val: formatLibraryComponentSummary(item),\n });\n });\n setLibraryComponentImportMsg(`已导入 ${nextItems.length} 个组件草稿`);\n setTimeout(() => setLibraryComponentImportMsg(''), 2200);\n }\n\n async function handleComponentImportFile(file: File | null) {\n if (!file) return;\n try {\n const content = await file.text();\n const parsed = JSON.parse(content) as { components?: ComponentImportDraft[] } | ComponentImportDraft[];\n const drafts = Array.isArray(parsed) ? parsed : parsed.components ?? [];\n submitImportedLibraryComponents(drafts);\n } catch {\n setLibraryComponentImportMsg('JSON 解析失败');\n setTimeout(() => setLibraryComponentImportMsg(''), 1800);\n }\n }\n\n function copyComponentLibraryImportPrompt() {\n const prompt = [\n '请为当前项目生成 DevInspector 组件库接入草稿。',\n '',\n '目标:',\n '1. 扫描现有组件源码,识别组件 type、中文 label、selector、变体、尺寸和 tokenRefs。',\n '2. 优先使用 data-component / registry / 稳定 class;不确定项标为“待确认”。',\n '3. 输出 componentPreviews registry 或下面这种 JSON 草稿。',\n '',\n 'JSON 格式:',\n '{',\n ' \"components\": [',\n ' {',\n ' \"type\": \"Button\",',\n ' \"label\": \"按钮\",',\n ' \"category\": \"action\",',\n ' \"summary\": \"主按钮、次按钮、弱按钮\",',\n ' \"selector\": \".button, [data-component=\\\\\"Button\\\\\"]\",',\n ' \"variants\": [\"primary\", \"secondary\", \"ghost\"],',\n ' \"sizes\": [\"s\", \"m\", \"l\"],',\n ' \"tokenRefs\": [\"--color-brand-primary\"],',\n ' \"status\": \"待确认\"',\n ' }',\n ' ]',\n '}',\n '',\n '约束:请修改源码层接入,不要直接改 dist 产物。',\n ].join('\\n');\n debugAiPrompt(prompt, 'plugin');\n copyTextToClipboard(prompt)\n .then(copied => {\n setLibraryComponentImportMsg(copied ? '接入提示已复制' : '复制失败');\n setTimeout(() => setLibraryComponentImportMsg(''), copied ? 2200 : 1800);\n })\n .catch(() => {\n setLibraryComponentImportMsg('复制失败');\n setTimeout(() => setLibraryComponentImportMsg(''), 1800);\n });\n }\n\n function submitLibraryComponentForm() {\n if (!libraryComponentForm) return;\n const category = libraryComponentForm.category || getLibraryComponentCategory(libraryComponentForm.type);\n const nextItem: LibraryComponentItem = {\n id: libraryComponentForm.baseId || `draft-component:${Date.now()}:${libraryComponentForm.type}`,\n category,\n categoryLabel: getLibraryComponentCategoryLabel(category),\n type: libraryComponentForm.type.trim() || 'Custom',\n label: libraryComponentForm.label.trim() || libraryComponentForm.type.trim() || '自定义组件',\n summary: libraryComponentForm.summary.trim() || '待补能力',\n selector: libraryComponentForm.selector.trim() || '未登记 selector',\n status: libraryComponentForm.status.trim() || (libraryComponentForm.mode === 'create' ? '新增草稿' : '编辑草稿'),\n source: 'draft',\n };\n if (libraryComponentForm.mode === 'create') {\n setLibraryCustomComponents(prev => [nextItem, ...prev]);\n setSelectedLibraryComponentId(nextItem.id);\n recordLibraryCrudChange({\n resource: 'component',\n action: 'create',\n name: nextItem.type,\n from: '未登记',\n val: formatLibraryComponentSummary(nextItem),\n });\n } else {\n setLibraryComponentOverrides(prev => ({ ...prev, [nextItem.id]: { ...nextItem, status: '编辑草稿', source: 'draft' } }));\n setSelectedLibraryComponentId(nextItem.id);\n const original = componentLibraryItems.find(item => item.id === nextItem.id);\n recordLibraryCrudChange({\n resource: 'component',\n action: 'update',\n name: nextItem.type,\n from: original ? formatLibraryComponentSummary(original) : '未登记',\n val: formatLibraryComponentSummary({ ...nextItem, status: '编辑草稿' }),\n });\n }\n setLibraryComponentForm(null);\n }\n\n function deleteLibraryComponent(item: LibraryComponentItem) {\n const deleteHint = item.source === 'draft' ? '删除新增草稿' : '删除规格草稿(不删除源码组件)';\n if (item.source === 'draft') {\n setLibraryCustomComponents(prev => prev.filter(component => component.id !== item.id));\n } else {\n setLibraryDeletedComponentIds(prev => ({ ...prev, [item.id]: deleteHint }));\n }\n if (selectedLibraryComponentId === item.id) setSelectedLibraryComponentId('');\n recordLibraryCrudChange({\n resource: 'component',\n action: 'delete',\n name: item.type,\n from: formatLibraryComponentSummary(item),\n val: `${item.type} / ${deleteHint}`,\n });\n }\n\n function buildAiTaskPrompt(params: {\n entryId?: string;\n pageLabel: string;\n targetLabel: string;\n selector: string;\n scopeLabel: string;\n changes: { prop: string; from: string; val: string }[];\n note?: string;\n }) {\n const changes = formatPromptChanges(params.changes);\n return [\n `页面:${params.pageLabel}`,\n '待处理对象:1',\n `1. 元素:${params.targetLabel}`,\n `范围:${params.scopeLabel}`,\n `选择器:${params.selector}`,\n `类型:${getPromptChangeTypes(params.changes).join(' / ') || 'none'}`,\n '改动:',\n changes || '1. 无改动',\n ...(params.note ? ['补充:', params.note] : []),\n '给AI:按选择器先定位源码,再判断落为组件样式、token、局部覆盖或实现约束;不要手改 dist。',\n ].join('\\n');\n }\n\n function buildAiDraftBasketPrompt(drafts: LocalDraftEntry[]) {\n const hasComponentSpec = drafts.some(draft => draft.changes.some(change => (\n change.prop === 'component-spec'\n || change.prop.startsWith('component-new-variant:')\n || change.prop.startsWith('component-variant-group:')\n )));\n const hasLibraryChange = drafts.some(draft => draft.changes.some(change => change.prop.startsWith('library-')));\n const mode = hasLibraryChange\n ? 'library-crud'\n : hasComponentSpec ? 'component-spec' : 'style-update';\n const sections = drafts\n .sort((a, b) => a.updatedAt - b.updatedAt)\n .map((draft, index) => {\n const changes = formatPromptChanges(draft.changes);\n return [\n `${index + 1}. 元素:${draft.targetLabel}`,\n `范围:${draft.scopeLabel}`,\n `选择器:${draft.selector}`,\n `类型:${getPromptChangeTypes(draft.changes).join(' / ') || 'none'}`,\n '改动:',\n changes || '1. 无改动',\n ].join('\\n');\n })\n .join('\\n\\n');\n const aiHint = hasLibraryChange\n ? '给AI:先定位正式 token 配置、组件能力表或源码定义,再处理增删改;删除前先检查使用关系;不要手改 dist。'\n : hasComponentSpec\n ? '给AI:组件规格和新变体按已确认草稿处理;先定位组件定义、可编辑内容、变体维度和 token 映射;不要手改 dist。'\n : '给AI:按对象逐一定位源码,再判断落为组件样式、token、局部覆盖或实现约束;不要手改 dist。';\n return [\n `页面:${document.title || '当前页面'}(${window.location.href})`,\n `待处理对象:${drafts.length}`,\n sections,\n ...(note ? ['补充:', note] : []),\n aiHint,\n ].join('\\n');\n }\n\n function getPromptChangeType(prop: string) {\n if (prop.startsWith('annotation:')) return 'annotation';\n if (prop === 'component-spec') return 'component-spec';\n if (prop.startsWith('component-new-variant:')) return 'component-new-variant';\n if (prop.startsWith('component-variant-group:')) return 'component-variant-group';\n if (prop.startsWith('library-token:create')) return 'library-token-create';\n if (prop.startsWith('library-token:update')) return 'library-token-update';\n if (prop.startsWith('library-token:delete')) return 'library-token-delete';\n if (prop.startsWith('library-component:create')) return 'library-component-create';\n if (prop.startsWith('library-component:update')) return 'library-component-update';\n if (prop.startsWith('library-component:delete')) return 'library-component-delete';\n return 'style';\n }\n\n function getPromptChangeTypes(changes: { prop: string; from: string; val: string }[]) {\n return Array.from(new Set(changes.map(change => getPromptChangeType(change.prop))));\n }\n\n function formatPromptChanges(changes: { prop: string; from: string; val: string }[]) {\n return changes.map((change, index) => {\n const type = getPromptChangeType(change.prop);\n if (type === 'annotation') {\n return [\n `${index + 1}. 标注:${change.val || '空'}`,\n ].join('\\n');\n }\n return [\n `${index + 1}. ${getChangeLabel(change.prop)}:${formatStoredChangeRecordValue(change.prop, change.from) || '空'} → ${formatStoredChangeRecordValue(change.prop, change.val) || '空'}`,\n ].join('\\n');\n }).join('\\n');\n }\n\n function debugAiPrompt(prompt: string, source: 'single' | 'draft-basket' | 'plugin') {\n window.__DEV_INSPECTOR_LAST_PROMPT__ = prompt;\n console.groupCollapsed(`[DevInspector] AI prompt (${source})`);\n console.log(prompt);\n console.groupEnd();\n }\n\n function handleSubmitToAi() {\n const draftEntries = Object.values(localDraftsRef.current);\n if (draftEntries.length > 0) {\n copyDraftEntriesToAi(draftEntries);\n return;\n }\n\n const payload = getPendingEntries();\n if (!payload) return;\n const { el, pending, selector } = payload;\n const componentMeta = getInspectorComponentMeta(el);\n const changes = getPendingChangeRecords();\n if (pending.length === 0 && !note && !componentMeta) {\n setSubmitMsg('先改点样式或写备注');\n setTimeout(() => setSubmitMsg(''), 1800);\n return;\n }\n\n const hasOnlyInstanceContentPending = componentMeta\n && (pendingComponentText !== null || Object.keys(pendingComponentTextSlots).length > 0)\n && !pendingComponentVariant\n && !pendingComponentSize\n && !pendingIconColor\n && !pendingBadgeStatus\n && !pendingCardVariant\n && pending.length === 0;\n const scopeLabel = hasOnlyInstanceContentPending\n ? '当前元素'\n : scope === 'current' ? '当前元素' : '相同元素';\n const stableSelector = componentMeta && hasComponentAttrPending && componentSelectorVal\n ? componentSelectorVal\n : selector;\n\n const prompt = buildAiTaskPrompt({\n pageLabel: `${document.title || '当前页面'}(${window.location.href})`,\n targetLabel: getTargetDisplayLabel(el, componentMeta),\n selector: stableSelector,\n scopeLabel,\n changes,\n note,\n });\n debugAiPrompt(prompt, 'single');\n copyTextToClipboard(prompt)\n .then((copied) => {\n setSubmitMsg(copied ? '已复制' : '复制失败');\n setTimeout(() => setSubmitMsg(''), copied ? 2200 : 1800);\n })\n .catch(() => {\n setSubmitMsg('复制失败');\n setTimeout(() => setSubmitMsg(''), 1800);\n });\n }\n\n function copyDraftEntriesToAi(draftEntries: LocalDraftEntry[]) {\n const prompt = buildAiDraftBasketPrompt(draftEntries);\n debugAiPrompt(prompt, 'draft-basket');\n copyTextToClipboard(prompt)\n .then((copied) => {\n setSubmitMsg(copied ? '已复制' : '复制失败');\n setTimeout(() => setSubmitMsg(''), copied ? 2200 : 1800);\n })\n .catch(() => {\n setSubmitMsg('复制失败');\n setTimeout(() => setSubmitMsg(''), 1800);\n });\n }\n\n function handleDeleteStyleIntent(intentId: string, selector?: string, prop?: string) {\n fetch(endpoints.deleteStyleIntent, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ id: intentId, selector, prop }),\n })\n .then(async response => {\n let body: any = null;\n try {\n body = await response.json();\n } catch {\n body = null;\n }\n return {\n httpOk: response.ok,\n ...(body ?? {}),\n };\n })\n .then(r => {\n if (r.ok) {\n setStyleIntentSummary(formatStyleIntentSummary(r));\n setSubmitMsg(prop ? '已删除属性' : '已删除对象');\n } else {\n const errorMsg = !r.httpOk\n ? '删除失败:本地服务异常'\n : `删除失败${r.error ? `:${String(r.error)}` : ''}`;\n setSubmitMsg(errorMsg);\n }\n setTimeout(() => setSubmitMsg(''), 1800);\n })\n .catch(() => {\n setSubmitMsg('删除失败:请刷新页面或重启本地 dev');\n setTimeout(() => setSubmitMsg(''), 1800);\n });\n }\n\n function getOriginalValueForProp(prop: string) {\n if (prop === 'font-size') return fontSizeVal;\n if (prop === 'font-weight') return fontWeightVal;\n if (prop === 'color') return getDisplayLabel(textColorVal, tokenMap, colorPalette, tokenLabels).label;\n if (prop === 'background-color') return getDisplayLabel(colors[prop] ?? '', tokenMap, colorPalette, tokenLabels).label;\n if (prop === 'border-color') return getDisplayLabel(borderColorVal, tokenMap, colorPalette, tokenLabels).label;\n if (prop === 'border-width') return borderWidthVal;\n if (prop === 'border-style') return borderStyleVal;\n if (prop === 'border-radius') return radiusVal;\n if (prop === 'box-shadow') return getShadowChangeDisplay(shadowVal, shadowAuthoredVal, shadowTokens);\n if (prop === 'padding') return paddingVal;\n if (prop === 'margin') return marginVal;\n if (prop === 'gap') return gapVal;\n if (prop === 'translate') return formatTranslate(translateVal);\n if (prop === 'width') return widthVal;\n if (prop === 'height') return heightVal;\n if (prop === 'min-height') return `${getOneLineHugHeight(selectedRef.current) || Number.parseFloat(heightVal) || 0}px`;\n if (prop === 'max-height') return heightVal;\n if (prop === 'justify-content') return getAlignmentLabel('justify-content', justifyVal);\n if (prop === 'align-items') return getAlignmentLabel('align-items', alignItemsVal);\n return '';\n }\n\n function formatChangeRecordValue(prop: string, value: string): string {\n if (prop === 'padding' || prop === 'margin') {\n return getSpaceRecordSummary(prop, value) || '无';\n }\n if (prop === 'gap') {\n return getSpaceRecordSummary('gap', value) || '无';\n }\n if (prop === 'width' || prop === 'height' || prop === 'min-height' || prop === 'max-height') {\n return formatSizeDisplay(value);\n }\n if (prop === 'justify-content') return getAlignmentLabel('justify-content', value);\n if (prop === 'align-items') return getAlignmentLabel('align-items', value);\n return value;\n }\n\n function formatStoredChangeRecordValue(prop: string, value: string): string {\n if (prop === 'padding' || prop === 'margin' || prop === 'gap') {\n return formatStoredSpaceRecordValue(value);\n }\n return value;\n }\n\n function normalizeChangeRecordValue(prop: string, value: string): string {\n const formatted = formatChangeRecordValue(prop, value).trim();\n if (!formatted || formatted === '无' || formatted === 'none') return 'empty';\n if (isZeroLengthValue(formatted)) return '0';\n return formatted.replace(/\\s+/g, ' ');\n }\n\n function getPendingChangeRecords() {\n const records: { prop: string; from: string; val: string }[] = [];\n const add = (prop: string, from: string, val: string) => {\n if (normalizeChangeRecordValue(prop, from) === normalizeChangeRecordValue(prop, val)) return;\n records.push({\n prop,\n from: formatChangeRecordValue(prop, from),\n val: formatChangeRecordValue(prop, val),\n });\n };\n if (pendingFontSize) add('font-size', fontSizeVal, pendingFontSize);\n if (pendingFontWeight) add('font-weight', fontWeightVal, pendingFontWeight);\n if (pendingTextColor) add('color', getDisplayLabel(textColorVal, tokenMap, colorPalette, tokenLabels).label, getDisplayLabel(pendingTextColor, tokenMap, colorPalette, tokenLabels).label);\n for (const [prop, val] of Object.entries(pendingColors)) {\n add(prop, getDisplayLabel(colors[prop] ?? '', tokenMap, colorPalette, tokenLabels).label, getDisplayLabel(val, tokenMap, colorPalette, tokenLabels).label);\n }\n if (pendingBorderColor) add('border-color', getDisplayLabel(borderColorVal, tokenMap, colorPalette, tokenLabels).label, getDisplayLabel(pendingBorderColor, tokenMap, colorPalette, tokenLabels).label);\n if (pendingBorderWidth) add('border-width', borderWidthVal, pendingBorderWidth);\n if (pendingBorderStyle) add('border-style', borderStyleVal, pendingBorderStyle);\n if (pendingRadius) add('border-radius', radiusVal, pendingRadius);\n if (pendingShadow) add('box-shadow', getShadowChangeDisplay(shadowVal, shadowAuthoredVal, shadowTokens), getShadowChangeDisplay(pendingShadow, pendingShadow, shadowTokens));\n if (pendingPadding) add('padding', paddingVal, pendingPadding);\n if (pendingMargin) add('margin', marginVal, pendingMargin);\n if (pendingGap) add('gap', gapVal, pendingGap);\n if (pendingTranslate) add('translate', formatPositionRecord(getDisplayPosition(translateVal)), formatPositionRecord(getDisplayPosition(pendingTranslate)));\n if (pendingWidth) add('width', widthVal, pendingWidth);\n if (pendingHeight) add('height', heightVal, pendingHeight);\n if (pendingJustifyContent) add('justify-content', justifyVal, pendingJustifyContent);\n if (pendingAlignItems) add('align-items', alignItemsVal, pendingAlignItems);\n if (pendingComponentText !== null && pendingComponentText !== componentTextVal) {\n add('component-text', componentTextVal || '空', pendingComponentText || '空');\n }\n for (const [slotKey, nextValue] of Object.entries(pendingComponentTextSlots)) {\n const fromValue = componentTextSlotVals[slotKey] ?? '空';\n add(`component-slot:${slotKey}`, fromValue || '空', nextValue || '空');\n }\n if (pendingComponentVariant) {\n add('component-variant', componentVariantVal, pendingComponentVariant);\n }\n if (pendingComponentSize) {\n add('component-size', componentSizeVal.toUpperCase(), pendingComponentSize.toUpperCase());\n }\n if (pendingIconColor) {\n add('component-color', iconColorVal, pendingIconColor);\n }\n if (pendingBadgeStatus) {\n add('component-status', badgeStatusVal, pendingBadgeStatus);\n }\n if (pendingCardVariant) {\n const fromLabel = CARD_VARIANT_OPTIONS.find(option => option.key === cardVariantVal)?.label ?? cardVariantVal;\n const toLabel = CARD_VARIANT_OPTIONS.find(option => option.key === pendingCardVariant)?.label ?? pendingCardVariant;\n add('component-variant', fromLabel, toLabel);\n }\n if (pendingNewToken) add('token', '新增', `${pendingNewToken.cssVar}: ${pendingNewToken.value}`);\n return records;\n }\n\n useEffect(() => {\n const el = selectedRef.current;\n if (!el) return;\n const changes = getPendingChangeRecords();\n const info = getDraftTargetInfo(el);\n const hasCurrentPendingState = Object.keys(pendingColors).length > 0\n || !!pendingTextColor\n || !!pendingRadius\n || !!pendingShadow\n || !!pendingBorderColor\n || !!pendingBorderWidth\n || !!pendingBorderStyle\n || !!pendingFontSize\n || !!pendingFontWeight\n || !!pendingPadding\n || !!pendingMargin\n || !!pendingGap\n || !!pendingTranslate\n || !!pendingWidth\n || !!pendingHeight\n || !!pendingJustifyContent\n || !!pendingAlignItems\n || pendingComponentText !== null\n || Object.keys(pendingComponentTextSlots).length > 0\n || !!pendingComponentVariant\n || !!pendingComponentSize\n || !!pendingIconColor\n || !!pendingBadgeStatus\n || !!pendingCardVariant\n || !!pendingNewToken;\n if (changes.length === 0) {\n if (hasCurrentPendingState) removeLocalDraftEntry(info.key);\n return;\n }\n setLocalDrafts(prev => {\n const existing = prev[info.key];\n const existingByProp = new Map(existing?.changes.map(change => [change.prop, change]) ?? []);\n const mergedByProp = new Map<string, LocalDraftChange>();\n existing?.changes.forEach(change => mergedByProp.set(change.prop, change));\n changes.forEach(change => {\n const previous = existingByProp.get(change.prop);\n mergedByProp.set(change.prop, {\n ...change,\n from: previous?.from ?? change.from,\n });\n });\n const mergedChanges = Array.from(mergedByProp.values());\n const comparableExisting = existing\n ? {\n key: existing.key,\n selector: existing.selector,\n targetLabel: existing.targetLabel,\n scopeLabel: existing.scopeLabel,\n changes: existing.changes,\n }\n : null;\n const comparableNext = { ...info, changes: mergedChanges };\n if (JSON.stringify(comparableExisting) === JSON.stringify(comparableNext)) return prev;\n const nextEntry: LocalDraftEntry = {\n ...info,\n changes: mergedChanges,\n updatedAt: Date.now(),\n };\n return { ...prev, [info.key]: nextEntry };\n });\n });\n\n function getChangeLabel(prop: string) {\n if (prop.startsWith('annotation:')) {\n return '标注 · AI识别';\n }\n if (prop.startsWith('library-token:') || prop.startsWith('library-component:')) {\n const [resource = '', action = '', name = '未命名'] = prop.split(':');\n const resourceLabel = resource === 'library-token' ? 'Token' : '组件规格';\n const actionLabel = action === 'create' ? '新增' : action === 'update' ? '编辑' : action === 'delete' ? '删除' : '变更';\n return `${resourceLabel} · ${actionLabel} · ${name}`;\n }\n if (prop.startsWith('component-variant-group:')) {\n const [, name = '未命名组件'] = prop.split(':');\n return `创建变体组 · ${name}`;\n }\n if (prop.startsWith('component-new-variant:')) {\n const [, dimension = '自定义', name = '未命名'] = prop.split(':');\n return `创建变体 · ${dimension} · ${name}`;\n }\n const map: Record<string, string> = {\n 'font-size': '字号',\n 'font-weight': '字重',\n 'color': '文字色',\n 'background-color': '背景色',\n 'border-color': '边框色',\n 'border-width': '边框粗细',\n 'border-style': '边框样式',\n 'border-radius': '圆角',\n 'box-shadow': '阴影',\n 'padding': '内边距',\n 'margin': '外边距',\n 'gap': '元素间距',\n 'translate': '位置',\n 'width': '宽度',\n 'height': '高度',\n 'min-height': '最小高度',\n 'max-height': '最大高度',\n 'justify-content': '水平对齐',\n 'align-items': '垂直对齐',\n 'component-text': '组件文案',\n 'component-variant': componentCapability?.variantKind === 'card' ? '组件展示' : '组件变体',\n 'component-size': '组件尺寸',\n 'component-color': '组件颜色',\n 'component-status': '标签状态',\n 'component-spec': '组件规格',\n };\n if (prop.startsWith('component-slot:')) {\n const slotKey = prop.replace('component-slot:', '');\n const slotLabel = componentCapability?.textSlots?.find(slot => slot.key === slotKey)?.label ?? slotKey;\n return `组件内容 · ${slotLabel}`;\n }\n return map[prop] || prop;\n }\n\n function clearPendingForProp(prop: string) {\n if (prop === 'font-size') setPendingFontSize('');\n else if (prop === 'font-weight') setPendingFontWeight('');\n else if (prop === 'color') setPendingTextColor('');\n else if (prop === 'background-color') {\n setPendingColors(prev => {\n const next = { ...prev };\n delete next[prop];\n return next;\n });\n } else if (prop === 'border-color') setPendingBorderColor('');\n else if (prop === 'border-width') setPendingBorderWidth('');\n else if (prop === 'border-style') setPendingBorderStyle('');\n else if (prop === 'border-radius') setPendingRadius('');\n else if (prop === 'box-shadow') {\n setPendingShadow('');\n setShadowCustomMode(false);\n } else if (prop === 'padding') setPendingPadding('');\n else if (prop === 'margin') setPendingMargin('');\n else if (prop === 'gap') setPendingGap('');\n else if (prop === 'translate') setPendingTranslate(null);\n else if (prop === 'justify-content') setPendingJustifyContent('');\n else if (prop === 'align-items') setPendingAlignItems('');\n else if (prop === 'width') {\n setPendingWidth('');\n setPendingWidthMode(null);\n setSizeDraft(prev => {\n const next = { ...prev };\n delete next.width;\n return next;\n });\n } else if (prop === 'height' || prop === 'min-height' || prop === 'max-height') {\n setPendingHeight('');\n setPendingHeightMode(null);\n setSizeDraft(prev => {\n const next = { ...prev };\n delete next.height;\n return next;\n });\n } else if (prop === 'component-text') {\n setPendingComponentText(null);\n setComponentTextDraft(componentTextVal);\n getComponentContentTargets().forEach(target => { target.textContent = componentTextVal; });\n } else if (prop.startsWith('component-slot:')) {\n const slotKey = prop.replace('component-slot:', '');\n setPendingComponentTextSlots(prev => {\n const next = { ...prev };\n delete next[slotKey];\n return next;\n });\n setComponentTextSlotDrafts(prev => ({ ...prev, [slotKey]: componentTextSlotVals[slotKey] ?? '' }));\n const slot = componentCapability?.textSlots?.find(item => item.key === slotKey);\n if (slot) {\n getComponentContentTargets().forEach(target => {\n const slotEl = getComponentSlotElement(target, slot);\n if (slotEl) slotEl.textContent = componentTextSlotVals[slot.key] ?? '';\n });\n }\n } else if (prop === 'component-variant') {\n setPendingComponentVariant('');\n setPendingCardVariant('');\n } else if (prop === 'component-size') {\n setPendingComponentSize('');\n } else if (prop === 'component-color') {\n setPendingIconColor('');\n } else if (prop === 'component-status') {\n setPendingBadgeStatus('');\n }\n }\n\n function getDraftSelectorTargets(selector: string): Element[] {\n try {\n return Array.from(document.querySelectorAll(selector));\n } catch {\n return [];\n }\n }\n\n function resetDraftChangeOnPage(draft: LocalDraftEntry, change: LocalDraftChange) {\n const isCurrentDraft = selectedRef.current ? getDraftTargetInfo(selectedRef.current).key === draft.key : false;\n if (isCurrentDraft) clearPendingForProp(change.prop);\n if (change.prop.startsWith('annotation:')) return;\n if (change.prop.startsWith('library-')) return;\n if (change.prop === 'component-spec' || change.prop.startsWith('component-new-variant:')) return;\n\n const targets = getDraftSelectorTargets(draft.selector);\n if (change.prop === 'component-text') {\n targets.forEach(target => { target.textContent = change.from === '空' ? '' : change.from; });\n return;\n }\n if (change.prop.startsWith('component-slot:')) return;\n if (change.prop.startsWith('component-')) {\n if (isCurrentDraft) {\n const currentTargets = getComponentTargets();\n if (change.prop === 'component-variant') {\n setButtonVariantOnTargets(currentTargets, componentVariantVal, componentVariantClassVal);\n setCardVariantOnTargets(currentTargets, cardVariantVal, cardVariantClassVal);\n } else if (change.prop === 'component-size') {\n clearButtonSizeOnTargets(currentTargets);\n clearIconSizeOnTargets(currentTargets);\n clearBadgeSizeOnTargets(currentTargets);\n } else if (change.prop === 'component-color') {\n clearIconColorOnTargets(currentTargets);\n } else if (change.prop === 'component-status') {\n setBadgeStatusOnTargets(currentTargets, badgeStatusVal, badgeStatusClassVal);\n }\n }\n return;\n }\n\n targets.forEach(target => {\n const hEl = target as HTMLElement;\n hEl.style.removeProperty(change.prop);\n if (change.prop === 'height') {\n hEl.style.removeProperty('min-height');\n hEl.style.removeProperty('max-height');\n }\n });\n if (change.prop === 'gap' && isCurrentDraft && gapTargetRef.current) {\n gapTargetRef.current.style.removeProperty('gap');\n }\n }\n\n function handleDeleteLocalDraft(key: string) {\n const draft = localDraftsRef.current[key];\n if (draft) draft.changes.forEach(change => resetDraftChangeOnPage(draft, change));\n removeLocalDraftEntry(key);\n }\n\n function handleResetLocalDraftChange(key: string, prop: string) {\n const draft = localDraftsRef.current[key];\n const change = draft?.changes.find(item => item.prop === prop);\n if (!draft || !change) return;\n resetDraftChangeOnPage(draft, change);\n setLocalDrafts(prev => {\n const current = prev[key];\n if (!current) return prev;\n const remaining = current.changes.filter(item => item.prop !== prop);\n const next = { ...prev };\n if (remaining.length === 0) {\n delete next[key];\n } else {\n next[key] = { ...current, changes: remaining, updatedAt: Date.now() };\n }\n return next;\n });\n }\n\n function isPropPending(prop: string): boolean {\n if (prop === 'font-size') return !!pendingFontSize;\n if (prop === 'font-weight') return !!pendingFontWeight;\n if (prop === 'color') return !!pendingTextColor;\n if (prop === 'box-shadow') return !!pendingShadow;\n if (prop === 'padding') return !!pendingPadding;\n if (prop === 'margin') return !!pendingMargin;\n if (prop === 'gap') return !!pendingGap;\n if (prop === 'translate') return !!pendingTranslate;\n if (prop === 'width') return !!pendingWidth;\n if (prop === 'height' || prop === 'min-height' || prop === 'max-height') return !!pendingHeight;\n if (prop === 'justify-content') return !!pendingJustifyContent;\n if (prop === 'align-items') return !!pendingAlignItems;\n return false;\n }\n\n function refreshSectionComputedValues(section: InspectorSectionKey) {\n const el = selectedRef.current;\n if (!el) return;\n const cs = getComputedStyle(el);\n if (section === 'text') {\n setFontSizeVal(cs.fontSize.trim());\n setFontWeightVal(cs.fontWeight.trim());\n setTextColorVal(normalizeColor(cs.color.trim()));\n setFontSizeCustomDraft(cs.fontSize.trim());\n return;\n }\n if (section === 'layout') {\n const nextTranslate = parseTranslate(cs.translate);\n setTranslateVal(nextTranslate);\n setPositionBaseVal(getPositionBase(el, nextTranslate));\n setWidthVal(cs.width.trim());\n setHeightVal(cs.height.trim());\n setWidthMode(inferSizeMode(el, 'width', cs.width.trim()));\n setHeightMode(inferSizeMode(el, 'height', cs.height.trim()));\n setJustifyVal(cs.justifyContent.trim() || 'normal');\n setAlignItemsVal(cs.alignItems.trim() || 'normal');\n return;\n }\n if (section === 'shadow') {\n const shadowComputed = cs.boxShadow.trim() || 'none';\n setShadowVal(shadowComputed === 'rgba(0, 0, 0, 0) 0px 0px 0px 0px' ? 'none' : shadowComputed);\n setShadowAuthoredVal(getAuthoredStyleValue(el, 'box-shadow'));\n return;\n }\n const normSpace = (v: string) => {\n const parts = v.trim().split(' ');\n return parts.every(p => p === parts[0]) ? parts[0] : v.trim();\n };\n setPaddingVal(normSpace(`${cs.paddingTop} ${cs.paddingRight} ${cs.paddingBottom} ${cs.paddingLeft}`));\n setMarginVal(normSpace(`${cs.marginTop} ${cs.marginRight} ${cs.marginBottom} ${cs.marginLeft}`));\n const g = cs.gap.trim();\n setGapVal(g === 'normal' ? '0px' : g);\n }\n\n function handleResetSection(section: InspectorSectionKey) {\n const el = selectedRef.current;\n if (!el) return;\n const props = SECTION_RESET_PROPS[section];\n const currentKey = getDraftTargetInfo(el).key;\n const draft = localDraftsRef.current[currentKey];\n const draftChanges = draft?.changes.filter(change => props.includes(change.prop)) ?? [];\n draftChanges.forEach(change => resetDraftChangeOnPage(draft!, change));\n if (draftChanges.length > 0) {\n setLocalDrafts(prev => {\n const current = prev[currentKey];\n if (!current) return prev;\n const remaining = current.changes.filter(change => !props.includes(change.prop));\n const next = { ...prev };\n if (remaining.length === 0) {\n delete next[currentKey];\n } else {\n next[currentKey] = { ...current, changes: remaining, updatedAt: Date.now() };\n }\n return next;\n });\n }\n\n const targets = getScopeTargets(el, scope);\n props.forEach(prop => {\n if (isPropPending(prop)) {\n targets.forEach(target => {\n const hEl = target as HTMLElement;\n hEl.style.removeProperty(prop);\n if (prop === 'height') {\n hEl.style.removeProperty('min-height');\n hEl.style.removeProperty('max-height');\n }\n });\n if (prop === 'gap' && gapTargetRef.current) {\n gapTargetRef.current.style.removeProperty('gap');\n }\n }\n clearPendingForProp(prop);\n });\n\n if (section === 'text') {\n setTypographyCustomMode(false);\n setShowTypographyStyleDrop(false);\n setShowFontSizeDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(false);\n } else if (section === 'layout') {\n setSizeDraft({});\n } else if (section === 'shadow') {\n setShadowCustomMode(false);\n setShowShadowDrop(false);\n setShowShadowColorDrop(false);\n } else {\n setSpaceCustomModes({ padding: false, margin: false, gap: false });\n }\n refreshSectionComputedValues(section);\n }\n\n // ─── 取消 ────────────────────────────────────────────────────\n function handleReset() {\n const el = selectedRef.current;\n if (!el) return;\n // 还原所有 inline style 改动\n const targets = getScopeTargets(el, scope);\n if (pendingComponentText !== null) {\n getComponentContentTargets().forEach(t => { t.textContent = componentTextVal; });\n }\n const meta = getInspectorComponentMeta(el);\n const capability = getComponentCapability(meta);\n for (const slot of capability?.textSlots ?? []) {\n if (!(slot.key in pendingComponentTextSlots)) continue;\n getComponentContentTargets().forEach(t => {\n const slotEl = getComponentSlotElement(t, slot);\n if (slotEl) slotEl.textContent = componentTextSlotVals[slot.key] ?? '';\n });\n }\n if (pendingComponentVariant) {\n setButtonVariantOnTargets(targets, componentVariantVal, componentVariantClassVal);\n }\n if (pendingComponentSize) {\n clearButtonSizeOnTargets(targets);\n clearIconSizeOnTargets(targets);\n clearBadgeSizeOnTargets(targets);\n }\n if (pendingIconColor) {\n clearIconColorOnTargets(targets);\n }\n if (pendingBadgeStatus) {\n setBadgeStatusOnTargets(targets, badgeStatusVal, badgeStatusClassVal);\n }\n if (pendingCardVariant) {\n setCardVariantOnTargets(targets, cardVariantVal, cardVariantClassVal);\n }\n targets.forEach(t => {\n const hEl = t as HTMLElement;\n [...Object.keys(pendingColors)].forEach(p => hEl.style.removeProperty(p));\n if (pendingRadius) hEl.style.removeProperty('border-radius');\n if (pendingShadow) hEl.style.removeProperty('box-shadow');\n if (pendingBorderColor) hEl.style.removeProperty('border-color');\n if (pendingBorderWidth) hEl.style.removeProperty('border-width');\n if (pendingBorderStyle) hEl.style.removeProperty('border-style');\n if (pendingPadding) hEl.style.removeProperty('padding');\n if (pendingMargin) hEl.style.removeProperty('margin');\n if (pendingGap) hEl.style.removeProperty('gap');\n if (pendingTranslate) hEl.style.removeProperty('translate');\n if (pendingWidth) hEl.style.removeProperty('width');\n if (pendingHeight) hEl.style.removeProperty('height');\n if (pendingHeight) hEl.style.removeProperty('min-height');\n if (pendingHeight) hEl.style.removeProperty('max-height');\n if (pendingJustifyContent) hEl.style.removeProperty('justify-content');\n if (pendingAlignItems) hEl.style.removeProperty('align-items');\n });\n if (pendingGap && gapTargetRef.current) {\n gapTargetRef.current.style.removeProperty('gap');\n }\n setPendingColors({});\n setPendingRadius('');\n setPendingShadow('');\n setShadowCustomMode(false);\n setShowShadowColorDrop(false);\n setPendingFontSize(''); setPendingFontWeight(''); setPendingTextColor('');\n setPendingBorderColor(''); setPendingBorderWidth(''); setPendingBorderStyle('');\n setContainerCustomMode(false);\n setShowContainerStyleDrop(false);\n setShowBorderWidthDrop(false);\n setShowRadiusDrop(false);\n setPendingPadding(''); setPendingMargin(''); setPendingGap('');\n setSpaceCustomModes({ padding: false, margin: false, gap: false });\n setPendingTranslate(null); setPendingWidth(''); setPendingHeight('');\n setPendingWidthMode(null); setPendingHeightMode(null);\n setPendingJustifyContent('');\n setPendingAlignItems('');\n setSizeDraft({});\n setComponentTextDraft(componentTextVal);\n setComponentTextSlotDrafts(componentTextSlotVals);\n setPendingComponentText(null);\n setPendingComponentTextSlots({});\n setPendingComponentVariant('');\n setPendingComponentSize('');\n setPendingIconColor('');\n setPendingBadgeStatus('');\n setPendingCardVariant('');\n setCustomColorVals({});\n // 重新读取当前计算值\n setColors(Object.fromEntries(\n COLOR_PROPS.map(({ prop }) => [prop, getComputedColor(el, prop)])\n .filter(([, v]) => v && v !== 'rgba(0, 0, 0, 0)' && v !== 'transparent')\n ));\n const cs = getComputedStyle(el);\n setRadiusVal(getComputedRadius(el));\n setShadowVal(cs.boxShadow.trim() === 'rgba(0, 0, 0, 0) 0px 0px 0px 0px' ? 'none' : cs.boxShadow.trim());\n setShadowAuthoredVal(getAuthoredStyleValue(el, 'box-shadow'));\n const normSpace = (v: string) => {\n const parts = v.trim().split(' ');\n return parts.every(p => p === parts[0]) ? parts[0] : v.trim();\n };\n setPaddingVal(normSpace(`${cs.paddingTop} ${cs.paddingRight} ${cs.paddingBottom} ${cs.paddingLeft}`));\n setMarginVal(normSpace(`${cs.marginTop} ${cs.marginRight} ${cs.marginBottom} ${cs.marginLeft}`));\n const g = cs.gap.trim();\n setGapVal(g === 'normal' ? '0px' : g);\n const nextTranslate = parseTranslate(cs.translate);\n setTranslateVal(nextTranslate);\n setPositionBaseVal(getPositionBase(el, nextTranslate));\n setWidthVal(cs.width.trim());\n setHeightVal(cs.height.trim());\n setWidthMode(inferSizeMode(el, 'width', cs.width.trim()));\n setHeightMode(inferSizeMode(el, 'height', cs.height.trim()));\n setJustifyVal(cs.justifyContent.trim() || 'normal');\n setAlignItemsVal(cs.alignItems.trim() || 'normal');\n removeLocalDraftEntry(getDraftTargetInfo(el).key);\n }\n\n function handleClose() {\n onClose();\n }\n\n const componentMeta = getInspectorComponentMeta(selected);\n const componentCapability = getComponentCapability(componentMeta);\n const componentEditableSlots = componentCapability?.textSlots ?? [];\n const componentChildSlots = componentCapability?.childSlots ?? [];\n const visibleChildSlots = componentChildSlots\n .map(slot => ({ slot, value: componentChildSlotVals[slot.key] ?? '', element: getComponentSlotElement(selected, slot) }))\n .filter(item => item.element);\n const hasComponentAttrPending = pendingComponentText !== null\n || Object.keys(pendingComponentTextSlots).length > 0\n || !!pendingComponentVariant\n || !!pendingComponentSize\n || !!pendingIconColor\n || !!pendingBadgeStatus\n || !!pendingCardVariant;\n const componentSelector = componentMeta && hasComponentAttrPending && componentSelectorVal\n ? componentSelectorVal\n : getSelectorForScope(selected, 'component');\n const componentDisplayName = componentMeta ? getComponentDisplayName(componentMeta) : '';\n const showComponentVariantMeta = !!componentMeta\n && (!!componentCapability?.variantKind || componentMeta.variant !== 'default');\n const isTextOnlyTarget = isTextOnlyTargetElement(selected);\n const isPageShellTarget = isPageShellTargetElement(selected);\n const isStructuralContainerTarget = !isPageShellTarget && isStructuralContainerTargetElement(selected);\n const isSimpleTextGroupTarget = isSimpleTextGroupTargetElement(selected);\n const hideTextStyleSection = isPageShellTarget || isStructuralContainerTarget || isSimpleTextGroupTarget;\n const canAlignChildren = isFlexGridDisplay(getComputedStyle(selected).display);\n const activeButtonVariant = pendingComponentVariant || componentVariantVal;\n const activeButtonSize = pendingComponentSize || componentSizeVal;\n const activeIconColor = pendingIconColor || iconColorVal;\n const activeBadgeStatus = pendingBadgeStatus || badgeStatusVal;\n const activeCardVariant = pendingCardVariant || cardVariantVal;\n const componentSizeOptions = getComponentSizeControlOptions(componentCapability);\n const componentPrimaryText = pendingComponentText\n ?? componentTextDraft\n ?? componentTextVal\n ?? componentEditableSlots\n .map(slot => componentTextSlotDrafts[slot.key] || componentTextSlotVals[slot.key] || '')\n .find(Boolean)\n ?? textContent\n ?? '';\n const componentElementInfos: ComponentElementInfo[] = componentMeta ? (() => {\n const items: ComponentElementInfo[] = [];\n const seen = new Set<Element>();\n const pushItem = (label: string, element: Element | null) => {\n if (!element || seen.has(element)) return;\n seen.add(element);\n items.push({\n key: `${label}:${getSelectorForScope(element, 'current')}`,\n label,\n selector: getSelectorForScope(element, 'current'),\n text: (element.textContent ?? '').trim() || '空',\n style: getComponentElementStyleSummary(element),\n spacing: getComponentElementSpacingSummary(element),\n styleStatus: getComponentElementStyleStatus(element, tokenMap, colorPalette, tokenLabels, typographyTokens),\n spacingStatus: getComponentElementSpacingStatus(element, spaceSteps),\n });\n };\n pushItem('组件外层', selected);\n componentEditableSlots.forEach(slot => pushItem(slot.label, getComponentSlotElement(selected, slot)));\n componentChildSlots.forEach(slot => pushItem(slot.label, getComponentSlotElement(selected, slot)));\n return items;\n })() : [];\n const showElementStyleSections = !componentMeta;\n const localDraftEntries = Object.values(localDrafts).sort((a, b) => b.updatedAt - a.updatedAt);\n const localDraftChangeCount = localDraftEntries.reduce((sum, entry) => sum + entry.changes.length, 0);\n const currentPendingChangeCount = getPendingChangeRecords().length;\n const currentDraftEntry = localDrafts[getDraftTargetInfo(selected).key];\n const hasSectionChanges = (section: InspectorSectionKey) => {\n const props = SECTION_RESET_PROPS[section];\n return props.some(isPropPending)\n || !!currentDraftEntry?.changes.some(change => props.includes(change.prop));\n };\n const renderSectionReset = (section: InspectorSectionKey, label: string) => (\n hasSectionChanges(section) ? (\n <button\n type=\"button\"\n className=\"di-section-icon-action di-section-icon-action--reset\"\n onClick={() => handleResetSection(section)}\n title={`重置${label}`}\n aria-label={`重置${label}`}\n >\n <RotateCcw size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n ) : null\n );\n const pluginTargetContext = getPluginTargetContext(selected);\n const componentMakerComponentOptions = getComponentMakerComponentOptions(selected);\n const selectedComponentOption = componentMakerComponentOptions.find(option => option.name === componentSpecDraft.componentName);\n const componentCreateSuggestedTypeGroup = selected ? getComponentPurposeOption(componentCreateType || getSuggestedComponentCreatePurposeType(selected)).group : 'structure';\n const componentCreateContainerOption = getComponentContainerOption(componentCreateContainer);\n const componentCreateTypeQuery = normalizeComponentType(componentCreateType);\n const componentCreateClassification = getComponentTypeClassification(\n componentCreateType || (selected ? getSuggestedComponentCreatePurposeType(selected) : ''),\n componentCreateSuggestedTypeGroup,\n componentCreateContainer,\n );\n const componentCreatePurposeOptions = getPurposeOptionsForContainer(componentCreateContainer);\n const componentCreateHasExactType = componentCreatePurposeOptions\n .some(option => normalizeComponentType(option.label) === componentCreateTypeQuery);\n const componentCreateTypeOptions = componentCreatePurposeOptions\n .filter(option => {\n if (!componentCreateTypeQuery || componentCreateHasExactType) return true;\n return normalizeComponentType(option.label).includes(componentCreateTypeQuery)\n || normalizeComponentType(option.hint).includes(componentCreateTypeQuery);\n })\n .slice(0, 10);\n const componentMakerActiveComponentName = selectedComponentOption?.name || componentSpecDraft.componentName || pluginTargetContext.label;\n const componentMakerActiveComponentType = selectedComponentOption?.type || pluginTargetContext.meta?.type || '组件';\n const isComponentMakerVariantAction = componentMakerAction === 'create-current-variant' || componentMakerAction === 'create-other-variant';\n const isRecognizedComponentVariantFlow = Boolean(pluginTargetContext.meta) && isComponentMakerVariantAction;\n const componentMakerVariantSuggestions = getComponentMakerVariantSuggestions(selected);\n const multiSelectedComponentMakerVariantSuggestions = componentMakerVariantSuggestions.filter(item => !componentVariantExcludedIds.includes(item.id));\n const activeComponentMakerVariantPreview = componentMakerVariantSuggestions.find(item => item.id === componentVariantPreviewId)\n ?? multiSelectedComponentMakerVariantSuggestions[0]\n ?? componentMakerVariantSuggestions[0]\n ?? null;\n const selectedComponentMakerVariantSuggestions = isRecognizedComponentVariantFlow\n ? (activeComponentMakerVariantPreview ? [activeComponentMakerVariantPreview] : [])\n : multiSelectedComponentMakerVariantSuggestions;\n const generatedComponentMakerVariantName = getGeneratedComponentMakerVariantName(componentMakerActiveComponentName, activeComponentMakerVariantPreview);\n const componentMakerVariantCodeName = componentVariantDraft.name.trim() || generatedComponentMakerVariantName;\n const componentMakerVariantGroups = componentMakerVariantSuggestions.reduce<Array<[string, ComponentMakerVariantSuggestion[]]>>((groups, item) => {\n const existing = groups.find(([dimension]) => dimension === item.dimension);\n if (existing) {\n existing[1].push(item);\n } else {\n groups.push([item.dimension, [item]]);\n }\n return groups;\n }, []);\n const activeComponentMakerVariantDraft = isComponentMakerVariantAction\n ? {\n ...getActiveComponentMakerVariantDraft(selected),\n items: selectedComponentMakerVariantSuggestions,\n name: componentMakerVariantCodeName,\n dimension: activeComponentMakerVariantPreview?.dimension ?? componentVariantDraft.dimension,\n }\n : componentVariantDraft;\n const componentMakerContext: ComponentMakerContext = {\n pageTitle: document.title || '当前页面',\n pageUrl: window.location.href,\n targetLabel: pluginTargetContext.label,\n selector: pluginTargetContext.selector,\n scopeLabel: scope === 'current' ? '当前元素' : '相同元素',\n recognitionLines: getComponentMakerSummary(selected),\n isRecognizedComponent: Boolean(pluginTargetContext.meta),\n specDraft: componentSpecDraft,\n variantDraft: activeComponentMakerVariantDraft,\n };\n const componentMakerActions = getComponentMakerActions(componentMakerSourceMode);\n const componentMakerVariantActionOptions = COMPONENT_MAKER_ACTION_OPTIONS.filter(option =>\n option.key === 'create-current-variant' || option.key === 'create-other-variant'\n );\n const componentMakerLivePreviewHtml = getComponentMakerLivePreviewHtml(selected, activeComponentMakerVariantPreview);\n const canCreateComponent = Boolean(selected) && !componentMeta;\n const componentCreateTargetLabel = selected ? getElementDisplayName(selected, componentMeta) : '当前元素';\n const componentCreateSelector = selected ? getSelectorForScope(selected, 'current') : '';\n const componentCreateDefaultText = selected ? (getTextContent(selected) ?? '').trim() : '';\n const componentCreateRulePreview = getComponentCreateStyleRules(componentCreateType, componentCreatePurpose, componentCreateSuggestedTypeGroup, componentCreateContainer)\n .split(';')\n .filter(Boolean);\n const componentCreateEditableParts = componentSpecDraft.editableParts ?? [];\n const componentCreateExistingMatch = getExistingComponentCreateMatch(\n componentCreateClassification.path,\n componentSpecDraft.componentName || (selected\n ? getComponentNameByType(\n componentCreateType || getSuggestedComponentCreatePurposeType(selected, componentCreateContainer),\n selected,\n componentCreateContainer,\n )\n : ''),\n );\n const panelTitle = '页面样式';\n const activePaddingValue = pendingPadding || paddingVal;\n const activeMarginValue = pendingMargin || marginVal;\n const activeGapValue = pendingGap || gapVal;\n const showElementGapControl = canControlElementGap(selected);\n const shouldUseCustomSpaceControls = (variant: SpaceVariant, value: string) => (\n spaceCustomModes[variant] || isEmptySpaceValue(variant, value)\n );\n const baseLibraryTokenItems = getLibraryTokenItems(tokens, tokenMap);\n const libraryTokenItems = [\n ...baseLibraryTokenItems\n .filter(item => !libraryDeletedTokenIds[item.id])\n .map(item => libraryTokenOverrides[item.id] ? { ...item, ...libraryTokenOverrides[item.id] } : item),\n ...libraryCustomTokens,\n ];\n const normalizedLibrarySearch = librarySearch.trim().toLowerCase();\n const filteredLibraryTokenItems = libraryTokenItems.filter(item => {\n const matchesCategory = libraryTokenCategory === 'all' || item.category === libraryTokenCategory;\n if (!matchesCategory) return false;\n const usageCount = countLibraryTokenUsage(item);\n if (libraryTokenUsageFilter === 'used' && !(usageCount !== null && usageCount > 0)) return false;\n if (libraryTokenUsageFilter === 'unused' && usageCount !== 0) return false;\n if (libraryTokenUsageFilter === 'unknown' && usageCount !== null) return false;\n if (!normalizedLibrarySearch) return true;\n return [\n item.name,\n item.value,\n item.usage,\n item.status,\n item.categoryLabel,\n ].some(value => value.toLowerCase().includes(normalizedLibrarySearch));\n });\n const visibleLibraryTokenItems = filteredLibraryTokenItems.slice(0, 80);\n const libraryTokenCategoryCounts = LIBRARY_TOKEN_CATEGORIES.reduce<Record<LibraryTokenCategory, number>>((acc, category) => {\n acc[category.key] = category.key === 'all'\n ? libraryTokenItems.length\n : libraryTokenItems.filter(item => item.category === category.key).length;\n return acc;\n }, {} as Record<LibraryTokenCategory, number>);\n const selectedLibraryToken = libraryTokenItems.find(item => item.id === selectedLibraryTokenId) ?? visibleLibraryTokenItems[0] ?? null;\n const componentPreviewByType = new Map(\n componentPreviews.map(preview => [preview.type.trim().toLowerCase(), preview]),\n );\n const systemComponentTypes = new Set(Object.keys(COMPONENT_CAPABILITIES).map(type => type.toLowerCase()));\n const buildLibraryComponentItemFromPreview = (preview: DevInspectorComponentPreview): LibraryComponentItem => {\n const type = preview.type.trim() || 'Custom';\n const category = preview.category ?? getLibraryComponentCategory(type);\n return {\n id: `component-preview:${type}`,\n category,\n categoryLabel: getLibraryComponentCategoryLabel(category),\n type,\n label: preview.label || LIBRARY_COMPONENT_LABELS[type] || type,\n summary: preview.summary || '真实组件预览',\n selector: preview.selector || `真实组件 ${type}`,\n status: preview.status || '真实组件',\n preview,\n source: 'system',\n };\n };\n const componentLibraryItems: LibraryComponentItem[] = [\n ...Object.entries(COMPONENT_CAPABILITIES)\n .map(([type, capability]) => {\n const id = `component:${type}`;\n const registeredPreview = componentPreviewByType.get(type.toLowerCase());\n const category = registeredPreview?.category ?? getLibraryComponentCategory(type);\n const item: LibraryComponentItem = {\n id,\n category,\n categoryLabel: getLibraryComponentCategoryLabel(category),\n type,\n label: registeredPreview?.label || LIBRARY_COMPONENT_LABELS[type] || type,\n summary: registeredPreview?.summary || getComponentCapabilitySummary(type, capability),\n selector: registeredPreview?.selector || (type === 'Icon' ? 'svg.lucide' : `.${type.toLowerCase()}, [data-component=\"${type}\"]`),\n status: registeredPreview?.status || '已接入',\n preview: registeredPreview,\n source: 'system',\n };\n return libraryComponentOverrides[id] ? { ...item, ...libraryComponentOverrides[id] } : item;\n })\n .filter(item => !libraryDeletedComponentIds[item.id]),\n ...componentPreviews\n .filter(preview => !systemComponentTypes.has(preview.type.trim().toLowerCase()))\n .map(preview => {\n const item = buildLibraryComponentItemFromPreview(preview);\n return libraryComponentOverrides[item.id] ? { ...item, ...libraryComponentOverrides[item.id] } : item;\n })\n .filter(item => !libraryDeletedComponentIds[item.id]),\n ...libraryCustomComponents,\n ];\n const filteredLibraryComponentItems = componentLibraryItems.filter(item => {\n const matchesCategory = libraryComponentCategory === 'all' || item.category === libraryComponentCategory;\n if (!matchesCategory) return false;\n if (!normalizedLibrarySearch) return true;\n return [item.type, item.label, item.categoryLabel, item.summary, item.selector, item.status]\n .some(value => value.toLowerCase().includes(normalizedLibrarySearch));\n });\n const filteredLibraryComponentSpecCount = filteredLibraryComponentItems.reduce((count, item) =>\n count + (item.preview?.variants.length || 1),\n 0);\n const libraryComponentCategoryCounts = LIBRARY_COMPONENT_CATEGORIES.reduce<Record<LibraryComponentCategory, number>>((acc, category) => {\n acc[category.key] = category.key === 'all'\n ? componentLibraryItems.length\n : componentLibraryItems.filter(item => item.category === category.key).length;\n return acc;\n }, {} as Record<LibraryComponentCategory, number>);\n const selectedLibraryComponent = componentLibraryItems.find(item => item.id === selectedLibraryComponentId)\n ?? filteredLibraryComponentItems[0]\n ?? null;\n const selectedLibraryComponentVariant = selectedLibraryComponent?.preview?.variants.find(variant =>\n getLibraryComponentVariantKey(selectedLibraryComponent.id, variant.id) === selectedLibraryComponentVariantId,\n ) ?? selectedLibraryComponent?.preview?.variants[0] ?? null;\n const selectedLibraryComponentSpecKey = selectedLibraryComponent && selectedLibraryComponentVariant\n ? getLibraryComponentVariantKey(selectedLibraryComponent.id, selectedLibraryComponentVariant.id)\n : '';\n const getLibraryComponentSpecSelector = (component: LibraryComponentItem, variant: DevInspectorComponentPreviewVariant) =>\n variant.selector?.trim() || component.selector.trim();\n const countLibraryComponentSelectorUsage = (selector: string): number | null => {\n const normalizedSelector = selector.trim();\n if (!normalizedSelector || normalizedSelector.startsWith('真实组件') || normalizedSelector === '未登记 selector') return null;\n try {\n return Array.from(document.querySelectorAll(normalizedSelector))\n .filter(element => !element.closest('.di-panel'))\n .length;\n } catch {\n return null;\n }\n };\n const selectedLibraryComponentSpec: LibraryComponentSpecDetail | null = selectedLibraryComponent && selectedLibraryComponentVariant\n ? {\n component: selectedLibraryComponent,\n variant: selectedLibraryComponentVariant,\n key: selectedLibraryComponentSpecKey,\n selector: getLibraryComponentSpecSelector(selectedLibraryComponent, selectedLibraryComponentVariant),\n purpose: getLibraryComponentVariantPurpose(selectedLibraryComponent, selectedLibraryComponentVariant),\n capabilities: getLibraryComponentVariantCapabilities(selectedLibraryComponent, selectedLibraryComponentVariant),\n tokenRefs: getLibraryComponentVariantTokenRefs(selectedLibraryComponent, selectedLibraryComponentVariant),\n usageCount: countLibraryComponentSelectorUsage(getLibraryComponentSpecSelector(selectedLibraryComponent, selectedLibraryComponentVariant)),\n }\n : null;\n const libraryDraftChangeRows = localDraftEntries.flatMap((entry) => (\n entry.changes.map((change, index) => ({ entry, change, index }))\n ));\n const libraryUsageItems = libraryTokenItems\n .map(item => ({ item, usageCount: countLibraryTokenUsage(item) }))\n .filter(({ usageCount }) => usageCount !== null)\n .sort((a, b) => (b.usageCount ?? 0) - (a.usageCount ?? 0))\n .slice(0, 60);\n const libraryNavItems: Array<{ key: DesignLibraryTab; label: string; count: number; hint: string }> = [\n { key: 'tokens', label: 'Tokens', count: libraryTokenItems.length, hint: '设计 token' },\n { key: 'components', label: 'Components', count: componentLibraryItems.length, hint: '组件规格' },\n { key: 'changes', label: 'Changes', count: localDraftChangeCount, hint: '修改篮' },\n { key: 'usage', label: 'Usage', count: libraryUsageItems.length, hint: '使用治理' },\n ];\n\n function groupRegisteredPreviewVariants(variants: DevInspectorComponentPreviewVariant[]) {\n const groups = new Map<string, DevInspectorComponentPreviewVariant[]>();\n variants.forEach(variant => {\n const key = variant.group || '默认';\n groups.set(key, [...(groups.get(key) ?? []), variant]);\n });\n return Array.from(groups.entries()).map(([label, items]) => ({ label, items }));\n }\n\n function selectLibraryComponentSpec(component: LibraryComponentItem, variant: DevInspectorComponentPreviewVariant) {\n setSelectedLibraryComponentId(component.id);\n setSelectedLibraryComponentVariantId(getLibraryComponentVariantKey(component.id, variant.id));\n setLibraryComponentForm(null);\n }\n\n function renderRegisteredComponentPreview(component: LibraryComponentItem, preview: DevInspectorComponentPreview, mode: 'card' | 'detail') {\n const groups = groupRegisteredPreviewVariants(preview.variants);\n return (\n <div\n className={`di-library-real-preview${mode === 'detail' ? ' di-library-real-preview--detail' : ''}`}\n onClick={event => event.stopPropagation()}\n onKeyDown={event => event.stopPropagation()}\n >\n {groups.map(group => (\n <div className=\"di-library-real-preview-group\" key={group.label}>\n <div className=\"di-library-real-preview-group-title\">{group.label}</div>\n <div className=\"di-library-real-preview-grid\">\n {group.items.map(variant => {\n const specKey = getLibraryComponentVariantKey(component.id, variant.id);\n const isSelected = selectedLibraryComponentSpecKey === specKey;\n return (\n <div\n className={`di-library-real-preview-item${isSelected ? ' di-library-real-preview-item--selected' : ''}`}\n key={variant.id}\n role=\"button\"\n tabIndex={0}\n aria-pressed={isSelected}\n onMouseDownCapture={() => selectLibraryComponentSpec(component, variant)}\n onKeyDown={event => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n selectLibraryComponentSpec(component, variant);\n }}\n >\n <div className=\"di-library-real-preview-slot\">\n {variant.render()}\n </div>\n <div className=\"di-library-real-preview-meta\">\n <span>{variant.label}</span>\n {variant.propsLabel ? <small>{variant.propsLabel}</small> : null}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n function renderLibraryComponentPreview(item: LibraryComponentItem, mode: 'card' | 'detail' = 'card') {\n if (item.preview?.variants.length) {\n return renderRegisteredComponentPreview(item, item.preview, mode);\n }\n\n const normalizedType = item.type.trim().toLowerCase();\n const matrixModeClass = mode === 'detail' ? ' di-library-preview-matrix--detail' : '';\n if (normalizedType.includes('button') || item.category === 'action') {\n const gridStyle = {\n '--di-library-matrix-columns': `34px repeat(${BUTTON_VARIANT_OPTIONS.length}, minmax(76px, max-content))`,\n } as CSSProperties;\n return (\n <div className={`di-library-preview-matrix di-library-preview-matrix--button${matrixModeClass}`} aria-hidden=\"true\" style={gridStyle}>\n <div className=\"di-library-preview-matrix-head\">\n <span>尺寸</span>\n {BUTTON_VARIANT_OPTIONS.map(variant => <span key={variant.key}>{variant.label}</span>)}\n </div>\n {BUTTON_SIZE_OPTIONS.map(size => (\n <div className=\"di-library-preview-matrix-row\" key={size.key}>\n <span className=\"di-library-preview-matrix-label\">{size.label}</span>\n {BUTTON_VARIANT_OPTIONS.map(variant => (\n <span\n key={`${size.key}-${variant.key}`}\n className={`di-library-preview-button di-library-preview-button--${variant.key}`}\n style={{ minHeight: size.minHeight, padding: size.padding, fontSize: size.fontSize }}\n >\n {variant.label}\n </span>\n ))}\n </div>\n ))}\n </div>\n );\n }\n if (normalizedType.includes('badge') || normalizedType.includes('tag') || item.category === 'feedback') {\n const gridStyle = {\n '--di-library-matrix-columns': `34px repeat(${BADGE_STATUS_OPTIONS.length}, minmax(58px, max-content))`,\n } as CSSProperties;\n return (\n <div className={`di-library-preview-matrix di-library-preview-matrix--badge${matrixModeClass}`} aria-hidden=\"true\" style={gridStyle}>\n <div className=\"di-library-preview-matrix-head\">\n <span>尺寸</span>\n {BADGE_STATUS_OPTIONS.map(status => <span key={status.key}>{status.label}</span>)}\n </div>\n {BADGE_SIZE_OPTIONS.map(size => (\n <div className=\"di-library-preview-matrix-row\" key={size.key}>\n <span className=\"di-library-preview-matrix-label\">{size.label}</span>\n {BADGE_STATUS_OPTIONS.map(status => (\n <span\n key={`${size.key}-${status.key}`}\n className={`di-library-preview-badge di-library-preview-badge--${status.key}`}\n style={{ minHeight: size.minHeight, padding: size.padding, fontSize: size.fontSize }}\n >\n {status.label}\n </span>\n ))}\n </div>\n ))}\n </div>\n );\n }\n if (normalizedType.includes('card') || item.category === 'display') {\n return (\n <div className={`di-library-preview-card-gallery${mode === 'detail' ? ' di-library-preview-card-gallery--detail' : ''}`} aria-hidden=\"true\">\n {CARD_VARIANT_OPTIONS.map(variant => (\n <div className={`di-library-preview-card-sample di-library-preview-card-sample--${variant.key}`} key={variant.key}>\n <span>{variant.label}</span>\n <strong>任务标题</strong>\n <p>{variant.key === 'compact' ? '紧凑信息层级。' : '这是一段示例描述文字,用于展示卡片内容层级。'}</p>\n </div>\n ))}\n </div>\n );\n }\n if (normalizedType.includes('form') || normalizedType.includes('input') || item.category === 'form') {\n return (\n <div className=\"di-library-preview-form-sample\" aria-hidden=\"true\">\n <span>门店名称</span>\n <div>例如:西湖旗舰店</div>\n <strong>提交</strong>\n </div>\n );\n }\n if (normalizedType.includes('icon') || item.category === 'icon') {\n const gridStyle = {\n '--di-library-matrix-columns': `34px repeat(${ICON_COLOR_OPTIONS.length}, minmax(44px, 1fr))`,\n } as CSSProperties;\n return (\n <div className={`di-library-preview-matrix di-library-preview-matrix--icon${matrixModeClass}`} aria-hidden=\"true\" style={gridStyle}>\n <div className=\"di-library-preview-matrix-head\">\n <span>尺寸</span>\n {ICON_COLOR_OPTIONS.map(color => <span key={color.key}>{color.label}</span>)}\n </div>\n {ICON_SIZE_OPTIONS.map(size => (\n <div className=\"di-library-preview-matrix-row\" key={size.key}>\n <span className=\"di-library-preview-matrix-label\">{size.label}</span>\n {ICON_COLOR_OPTIONS.map(color => (\n <span className=\"di-library-preview-icon-cell\" key={`${size.key}-${color.key}`}>\n <ComponentIcon size={Number.parseFloat(size.size)} strokeWidth={2.2} style={{ color: color.value }} />\n </span>\n ))}\n </div>\n ))}\n </div>\n );\n }\n return (\n <div className=\"di-library-preview-generic\" aria-hidden=\"true\">\n <ComponentIcon size={22} strokeWidth={2.2} />\n <strong>{item.label}</strong>\n <span>{item.selector}</span>\n </div>\n );\n }\n\n function renderLibraryComponentSpecPreview(spec: LibraryComponentSpecDetail) {\n return (\n <div className=\"di-library-spec-preview\">\n <div className=\"di-library-spec-preview-slot\">\n {spec.variant.render()}\n </div>\n <div className=\"di-library-spec-preview-meta\">\n <span>{spec.variant.label}</span>\n {spec.variant.propsLabel ? <small>{spec.variant.propsLabel}</small> : null}\n </div>\n </div>\n );\n }\n\n // ─── Render ──────────────────────────────────────────────────\n return (\n <>\n {/* 添加 token 弹出框 */}\n {addTokenModal && (\n <AddTokenModal\n value={addTokenModal.value}\n cssProp={addTokenModal.cssProp}\n elementClasses={getClasses(selected)}\n colorPalette={colorPalette}\n onClose={() => setAddTokenModal(null)}\n onConfirm={handleTokenConfirm}\n />\n )}\n\n {(\n <div\n ref={panelElRef}\n className={`di-panel${componentCreateOpen || libraryOpen ? ' di-panel--drawer-open' : ''}${libraryWorkbenchOpen ? ' di-panel--workbench-open' : ''}`}\n data-di-panel-role=\"primary\"\n style={{ top: panelPos.top, left: panelPos.left, ...inspectorTypographyVars }}\n >\n\n {/* 顶部 */}\n <div className=\"di-head\" onMouseDown={onDragStart}>\n <div className=\"di-head-left\">\n <span className=\"di-title\">{panelTitle}</span>\n <span className=\"di-badge-dev\" title=\"开发环境工具\">DEV</span>\n <button\n type=\"button\"\n className={`di-library-trigger${libraryOpen ? ' di-library-trigger--on' : ''}`}\n onClick={() => {\n setLibraryOpen(v => !v);\n setComponentCreateOpen(false);\n setComponentCreateContainerMenuOpen(false);\n setComponentCreateTypeMenuOpen(false);\n }}\n title=\"打开设计库\"\n aria-label=\"打开设计库\"\n aria-expanded={libraryOpen}\n >\n <LibraryIcon size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n Library\n </button>\n <button\n className=\"di-head-icon-btn\"\n title=\"选中父层\"\n disabled={!selected.parentElement || selected.parentElement === document.body}\n onClick={() => { if (selected.parentElement && selected.parentElement !== document.body) selectEl(selected.parentElement); }}\n >\n <ArrowUp size={15} strokeWidth={2} aria-hidden=\"true\" />\n </button>\n <button\n className=\"di-head-icon-btn\"\n title=\"选中第一个子层\"\n disabled={!selected.firstElementChild}\n onClick={() => { if (selected.firstElementChild) selectEl(selected.firstElementChild); }}\n >\n <ArrowDown size={15} strokeWidth={2} aria-hidden=\"true\" />\n </button>\n </div>\n <div className=\"di-head-right\">\n <button className=\"di-head-icon-btn\" onClick={handleClose} title=\"关闭面板\" aria-label=\"关闭面板\">\n <X size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n\n {libraryOpen && (\n <div className=\"di-library-layer\" role=\"presentation\">\n <div className=\"di-library-drawer\" role=\"dialog\" aria-modal=\"true\" aria-label=\"设计库\">\n <div className=\"di-library-head\">\n <div className=\"di-library-title\">\n <LibraryIcon size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n Library\n <span>设计库</span>\n </div>\n <div className=\"di-library-head-actions\">\n <button\n type=\"button\"\n className=\"di-library-workbench-trigger\"\n onClick={() => {\n setLibraryWorkbenchOpen(true);\n setLibraryOpen(false);\n setComponentCreateOpen(false);\n }}\n >\n 完整设计库\n </button>\n <button\n type=\"button\"\n className=\"di-head-icon-btn\"\n onClick={() => setLibraryOpen(false)}\n title=\"关闭设计库\"\n aria-label=\"关闭设计库\"\n >\n <X size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n\n <div className=\"di-library-tabs\" role=\"tablist\" aria-label=\"设计库分类\">\n <button\n type=\"button\"\n className={`di-library-tab${libraryTab === 'tokens' ? ' di-library-tab--active' : ''}`}\n onClick={() => setLibraryTab('tokens')}\n role=\"tab\"\n aria-selected={libraryTab === 'tokens'}\n >\n Tokens\n </button>\n <button\n type=\"button\"\n className={`di-library-tab${libraryTab === 'components' ? ' di-library-tab--active' : ''}`}\n onClick={() => setLibraryTab('components')}\n role=\"tab\"\n aria-selected={libraryTab === 'components'}\n >\n Components\n </button>\n </div>\n\n {libraryTab === 'tokens' ? (\n <div className=\"di-library-content\" role=\"tabpanel\" aria-label=\"Tokens\">\n <div className=\"di-library-tools\">\n <label className=\"di-library-search\">\n <span>搜索</span>\n <input\n value={librarySearch}\n onChange={event => setLibrarySearch(event.currentTarget.value)}\n placeholder=\"名称、值、用途\"\n />\n </label>\n <div className=\"di-library-categories\" aria-label=\"Token 分类\">\n {LIBRARY_TOKEN_CATEGORIES.map(category => (\n <button\n type=\"button\"\n key={category.key}\n className={`di-library-category${libraryTokenCategory === category.key ? ' di-library-category--active' : ''}`}\n onClick={() => setLibraryTokenCategory(category.key)}\n >\n {category.label}\n <span className=\"di-library-category-count\">{libraryTokenCategoryCounts[category.key] ?? 0}</span>\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"di-library-summary\">\n <strong>{filteredLibraryTokenItems.length}</strong>\n <span>个 token</span>\n <small>统一查看、筛选和定位使用情况</small>\n </div>\n\n <div className=\"di-library-list\">\n {visibleLibraryTokenItems.map(item => {\n const usageCount = countLibraryTokenUsage(item);\n const previewValue = item.previewValue || item.rawValue;\n const previewStyle = previewValue\n ? ({ '--di-library-preview': previewValue } as CSSProperties)\n : undefined;\n return (\n <div className=\"di-library-token-row\" key={item.id}>\n <span\n className={`di-library-token-preview di-library-token-preview--${item.preview}`}\n style={previewStyle}\n aria-hidden=\"true\"\n />\n <div className=\"di-library-token-main\">\n <div className=\"di-library-token-name\">{item.name}</div>\n <div className=\"di-library-token-meta\">\n <span>{item.categoryLabel}</span>\n <span>{item.usage}</span>\n </div>\n </div>\n <div className=\"di-library-token-side\">\n <code>{item.value}</code>\n <span>{item.status}</span>\n </div>\n <button\n type=\"button\"\n className=\"di-library-token-usage\"\n onClick={() => focusLibraryTokenUsage(item)}\n title={usageCount === null ? '无法统计使用情况' : usageCount > 0 ? '定位第一个使用处' : '当前页面未使用'}\n >\n <strong>{usageCount === null ? '—' : usageCount}</strong>\n <span>使用</span>\n </button>\n </div>\n );\n })}\n {!visibleLibraryTokenItems.length ? (\n <div className=\"di-library-empty\">没有匹配的 token</div>\n ) : null}\n {filteredLibraryTokenItems.length > visibleLibraryTokenItems.length ? (\n <div className=\"di-library-more\">仅展示前 {visibleLibraryTokenItems.length} 个结果</div>\n ) : null}\n </div>\n </div>\n ) : (\n <div className=\"di-library-content\" role=\"tabpanel\" aria-label=\"Components\">\n <div className=\"di-library-note\">\n Components 在轻入口展示当前识别能力概览;增删改查进入完整设计库,以设计库草稿形式进入修改内容。\n </div>\n <div className=\"di-library-list\">\n {componentLibraryItems.map(item => (\n <div className=\"di-library-component-row\" key={item.id}>\n <div className=\"di-library-component-icon\" aria-hidden=\"true\">\n <ComponentIcon size={15} strokeWidth={2.2} />\n </div>\n <div className=\"di-library-component-main\">\n <div className=\"di-library-component-title\">\n {item.label}\n <span>{item.type}</span>\n </div>\n <div className=\"di-library-component-summary\">{item.summary}</div>\n </div>\n <span className=\"di-library-component-status\">{item.status}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n\n {libraryWorkbenchOpen && (\n <div className=\"di-library-workbench-layer\" role=\"presentation\">\n <div className=\"di-library-workbench\" role=\"dialog\" aria-modal=\"true\" aria-label=\"完整设计库\">\n <div className=\"di-library-workbench-head\">\n <div className=\"di-library-workbench-title\">\n <LibraryIcon size={18} strokeWidth={2.2} aria-hidden=\"true\" />\n <div>\n <strong>Library</strong>\n <span>完整设计库管理页</span>\n </div>\n </div>\n <div className=\"di-library-workbench-head-actions\">\n <button\n type=\"button\"\n className=\"di-library-workbench-soft-btn\"\n onClick={() => setLibraryOpen(true)}\n >\n 回到面板入口\n </button>\n <button\n type=\"button\"\n className=\"di-head-icon-btn\"\n onClick={() => {\n setLibraryWorkbenchOpen(false);\n setLibraryTokenForm(null);\n setLibraryComponentForm(null);\n }}\n title=\"关闭完整设计库\"\n aria-label=\"关闭完整设计库\"\n >\n <X size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n\n <div className=\"di-library-workbench-grid\">\n <aside className=\"di-library-workbench-nav\">\n <div className=\"di-library-workbench-brand\">\n <strong>Design Library</strong>\n <span>可视化资源管理</span>\n </div>\n <div className=\"di-library-workbench-tabs\" role=\"tablist\" aria-label=\"设计库资源\">\n {libraryNavItems.map(item => (\n <button\n type=\"button\"\n key={item.key}\n className={`di-library-workbench-tab${libraryTab === item.key ? ' di-library-workbench-tab--active' : ''}`}\n onClick={() => {\n setLibraryTab(item.key);\n setLibraryTokenForm(null);\n setLibraryComponentForm(null);\n }}\n role=\"tab\"\n aria-selected={libraryTab === item.key}\n >\n <span>\n {item.label}\n <small>{item.hint}</small>\n </span>\n <strong>{item.count}</strong>\n </button>\n ))}\n </div>\n\n {(libraryTab === 'tokens' || libraryTab === 'components') && (\n <label className=\"di-library-workbench-search\">\n <span>搜索</span>\n <input\n value={librarySearch}\n onChange={event => setLibrarySearch(event.currentTarget.value)}\n placeholder=\"名称、值、用途、selector\"\n />\n </label>\n )}\n\n {libraryTab === 'tokens' ? (\n <>\n <div className=\"di-library-workbench-nav-title\">分类</div>\n <div className=\"di-library-workbench-filter-list\">\n {LIBRARY_TOKEN_CATEGORIES.map(category => (\n <button\n type=\"button\"\n key={category.key}\n className={`di-library-workbench-filter${libraryTokenCategory === category.key ? ' di-library-workbench-filter--active' : ''}`}\n onClick={() => setLibraryTokenCategory(category.key)}\n >\n <span>{category.label}</span>\n <strong>{libraryTokenCategoryCounts[category.key] ?? 0}</strong>\n </button>\n ))}\n </div>\n <div className=\"di-library-workbench-nav-title\">使用情况</div>\n <div className=\"di-library-workbench-filter-list\">\n {([\n ['all', '全部'],\n ['used', '已使用'],\n ['unused', '未使用'],\n ['unknown', '无法统计'],\n ] as const).map(([key, label]) => (\n <button\n type=\"button\"\n key={key}\n className={`di-library-workbench-filter${libraryTokenUsageFilter === key ? ' di-library-workbench-filter--active' : ''}`}\n onClick={() => setLibraryTokenUsageFilter(key)}\n >\n <span>{label}</span>\n </button>\n ))}\n </div>\n </>\n ) : libraryTab === 'components' ? (\n <>\n <div className=\"di-library-workbench-nav-title\">组件分类</div>\n <div className=\"di-library-workbench-filter-list\">\n {LIBRARY_COMPONENT_CATEGORIES.map(category => (\n <button\n type=\"button\"\n key={category.key}\n className={`di-library-workbench-filter${libraryComponentCategory === category.key ? ' di-library-workbench-filter--active' : ''}`}\n onClick={() => setLibraryComponentCategory(category.key)}\n >\n <span>{category.label}</span>\n <strong>{libraryComponentCategoryCounts[category.key] ?? 0}</strong>\n </button>\n ))}\n </div>\n <div className=\"di-library-workbench-note\">\n 中间展示真实组件预览;新增、编辑、删除仍只进入设计库草稿,不直接改源码组件。\n </div>\n </>\n ) : libraryTab === 'changes' ? (\n <div className=\"di-library-workbench-note\">\n Changes 是发送给 AI 前的复核区。这里展示所有设计库和样式草稿,不直接写源码。\n </div>\n ) : (\n <div className=\"di-library-workbench-note\">\n Usage 用于删除或替换前的影响检查。点击使用次数会回到页面定位第一个命中元素。\n </div>\n )}\n </aside>\n\n <main className=\"di-library-workbench-main\">\n {libraryTab === 'tokens' ? (\n <>\n <div className=\"di-library-workbench-toolbar\">\n <div>\n <strong>{filteredLibraryTokenItems.length}</strong>\n <span>个 token</span>\n </div>\n <button type=\"button\" className=\"di-btn-save\" onClick={openLibraryTokenCreate}>\n + Token\n </button>\n </div>\n <div className=\"di-library-workbench-table\" role=\"table\" aria-label=\"Token 列表\">\n <div className=\"di-library-workbench-table-head\" role=\"row\">\n <span>Token</span>\n <span>值 / 用途</span>\n <span>状态</span>\n <span>使用</span>\n <span>操作</span>\n </div>\n {visibleLibraryTokenItems.map(item => {\n const usageCount = countLibraryTokenUsage(item);\n const isSelected = selectedLibraryToken?.id === item.id;\n return (\n <div\n className={`di-library-workbench-row${isSelected ? ' di-library-workbench-row--selected' : ''}`}\n role=\"row\"\n key={item.id}\n onClick={() => {\n setSelectedLibraryTokenId(item.id);\n setLibraryTokenForm(null);\n }}\n >\n <div className=\"di-library-workbench-token-cell\">\n <span\n className={`di-library-token-preview di-library-token-preview--${item.preview}`}\n style={item.previewValue ? ({ '--di-library-preview': item.previewValue } as CSSProperties) : undefined}\n aria-hidden=\"true\"\n />\n <div>\n <strong>{item.name}</strong>\n <small>{item.categoryLabel}</small>\n </div>\n </div>\n <div className=\"di-library-workbench-copy-cell\">\n <code>{item.value}</code>\n <span>{item.usage}</span>\n </div>\n <span className=\"di-library-workbench-status\">{libraryDeletedTokenIds[item.id] || item.status}</span>\n <button\n type=\"button\"\n className=\"di-library-workbench-count\"\n onClick={event => {\n event.stopPropagation();\n focusLibraryTokenUsage(item);\n }}\n title={usageCount === null ? '无法统计使用情况' : usageCount > 0 ? '定位第一个使用处' : '当前页面未使用'}\n >\n {usageCount === null ? '—' : usageCount}\n </button>\n <div className=\"di-library-workbench-actions\">\n <button type=\"button\" onClick={event => { event.stopPropagation(); copyTextToClipboard(item.name); }}>复制名</button>\n <button type=\"button\" onClick={event => { event.stopPropagation(); openLibraryTokenEdit(item); }}>编辑</button>\n <button type=\"button\" onClick={event => { event.stopPropagation(); deleteLibraryToken(item); }}>删除</button>\n </div>\n </div>\n );\n })}\n {!visibleLibraryTokenItems.length ? (\n <div className=\"di-library-workbench-empty\">没有匹配的 token</div>\n ) : null}\n </div>\n </>\n ) : libraryTab === 'components' ? (\n <>\n <div className=\"di-library-workbench-toolbar\">\n <div>\n <strong>{filteredLibraryComponentItems.length}</strong>\n <span>个组件 / {filteredLibraryComponentSpecCount} 个规格</span>\n </div>\n <div className=\"di-library-toolbar-actions\">\n <button\n type=\"button\"\n className=\"di-library-workbench-soft-btn\"\n onClick={() => {\n setLibraryComponentImportOpen(true);\n setLibraryComponentForm(null);\n }}\n >\n <Upload size={13} strokeWidth={2.2} aria-hidden=\"true\" />\n 导入组件库\n </button>\n <button type=\"button\" className=\"di-btn-save\" onClick={openLibraryComponentCreate}>\n + 组件规格\n </button>\n </div>\n </div>\n <div className=\"di-library-component-preview-grid\" role=\"list\" aria-label=\"组件真实预览\">\n {filteredLibraryComponentItems.map(item => {\n const isSelected = selectedLibraryComponent?.id === item.id;\n return (\n <div\n className={`di-library-component-preview-card${isSelected ? ' di-library-component-preview-card--selected' : ''}`}\n role=\"listitem\"\n tabIndex={0}\n aria-current={isSelected ? 'true' : undefined}\n key={item.id}\n onClick={() => {\n setSelectedLibraryComponentId(item.id);\n setSelectedLibraryComponentVariantId(item.preview?.variants[0]\n ? getLibraryComponentVariantKey(item.id, item.preview.variants[0].id)\n : '');\n setLibraryComponentForm(null);\n }}\n onKeyDown={event => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n setSelectedLibraryComponentId(item.id);\n setSelectedLibraryComponentVariantId(item.preview?.variants[0]\n ? getLibraryComponentVariantKey(item.id, item.preview.variants[0].id)\n : '');\n setLibraryComponentForm(null);\n }}\n >\n <div className=\"di-library-component-preview-head\">\n <div>\n <span>{item.categoryLabel}</span>\n <strong>{item.label}</strong>\n </div>\n <small>{libraryDeletedComponentIds[item.id] || item.status}</small>\n </div>\n <div className=\"di-library-component-preview-stage\">\n {renderLibraryComponentPreview(item)}\n </div>\n <div className=\"di-library-component-preview-copy\">\n <span>{item.type}</span>\n <p>{item.summary}</p>\n <code>{item.selector}</code>\n </div>\n <div className=\"di-library-component-preview-actions\">\n <button type=\"button\" onClick={event => { event.stopPropagation(); copyTextToClipboard(item.selector); }}>复制 selector</button>\n <button type=\"button\" onClick={event => { event.stopPropagation(); openLibraryComponentEdit(item); }}>编辑</button>\n <button type=\"button\" onClick={event => { event.stopPropagation(); deleteLibraryComponent(item); }}>删除</button>\n </div>\n </div>\n );\n })}\n {!filteredLibraryComponentItems.length ? (\n <div className=\"di-library-workbench-empty\">没有匹配的组件规格</div>\n ) : null}\n </div>\n </>\n ) : libraryTab === 'changes' ? (\n <>\n <div className=\"di-library-workbench-toolbar\">\n <div>\n <strong>{localDraftChangeCount}</strong>\n <span>条待处理修改</span>\n </div>\n <button\n type=\"button\"\n className=\"di-btn-save\"\n disabled={localDraftChangeCount === 0}\n onClick={handleSubmitToAi}\n >\n {renderSubmitLabel(submitMsg)}\n </button>\n </div>\n <div className=\"di-library-workbench-table\" role=\"table\" aria-label=\"修改篮列表\">\n <div className=\"di-library-workbench-table-head di-library-workbench-table-head--changes\" role=\"row\">\n <span>对象</span>\n <span>修改内容</span>\n <span>范围</span>\n <span>操作</span>\n </div>\n {libraryDraftChangeRows.map(({ entry, change, index }) => (\n <div\n className=\"di-library-workbench-row di-library-workbench-row--changes\"\n role=\"row\"\n key={`${entry.key}-${change.prop}-${index}`}\n >\n <div className=\"di-library-workbench-token-cell\">\n <span className=\"di-library-change-index\">{index + 1}</span>\n <div>\n <strong>{entry.targetLabel}</strong>\n <small>{entry.selector}</small>\n </div>\n </div>\n <div className=\"di-library-workbench-copy-cell\">\n <code>{getChangeLabel(change.prop)}</code>\n <span>{formatStoredChangeRecordValue(change.prop, change.from)} → {formatStoredChangeRecordValue(change.prop, change.val)}</span>\n </div>\n <span className=\"di-library-workbench-status\">{entry.scopeLabel}</span>\n <div className=\"di-library-workbench-actions\">\n <button type=\"button\" onClick={() => handleResetLocalDraftChange(entry.key, change.prop)}>移除</button>\n <button type=\"button\" onClick={() => handleDeleteLocalDraft(entry.key)}>删除对象</button>\n </div>\n </div>\n ))}\n {!libraryDraftChangeRows.length ? (\n <div className=\"di-library-workbench-empty\">修改篮为空</div>\n ) : null}\n </div>\n </>\n ) : (\n <>\n <div className=\"di-library-workbench-toolbar\">\n <div>\n <strong>{libraryUsageItems.length}</strong>\n <span>个可统计资源</span>\n </div>\n <button\n type=\"button\"\n className=\"di-library-workbench-soft-btn\"\n onClick={() => setLibraryTab('tokens')}\n >\n 返回 Tokens\n </button>\n </div>\n <div className=\"di-library-workbench-table\" role=\"table\" aria-label=\"使用治理列表\">\n <div className=\"di-library-workbench-table-head di-library-workbench-table-head--usage\" role=\"row\">\n <span>Token</span>\n <span>用途</span>\n <span>使用</span>\n <span>治理动作</span>\n </div>\n {libraryUsageItems.map(({ item, usageCount }) => (\n <div\n className=\"di-library-workbench-row di-library-workbench-row--usage\"\n role=\"row\"\n key={`usage-${item.id}`}\n onClick={() => {\n setSelectedLibraryTokenId(item.id);\n setLibraryTokenForm(null);\n }}\n >\n <div className=\"di-library-workbench-token-cell\">\n <span\n className={`di-library-token-preview di-library-token-preview--${item.preview}`}\n style={item.previewValue ? ({ '--di-library-preview': item.previewValue } as CSSProperties) : undefined}\n aria-hidden=\"true\"\n />\n <div>\n <strong>{item.name}</strong>\n <small>{item.categoryLabel}</small>\n </div>\n </div>\n <div className=\"di-library-workbench-copy-cell\">\n <code>{item.value}</code>\n <span>{item.usage}</span>\n </div>\n <button\n type=\"button\"\n className=\"di-library-workbench-count\"\n onClick={event => {\n event.stopPropagation();\n focusLibraryTokenUsage(item);\n }}\n >\n {usageCount}\n </button>\n <div className=\"di-library-workbench-actions\">\n <button type=\"button\" onClick={event => { event.stopPropagation(); focusLibraryTokenUsage(item); }}>定位</button>\n <button type=\"button\" onClick={event => { event.stopPropagation(); openLibraryTokenEdit(item); }}>替换草稿</button>\n <button type=\"button\" onClick={event => { event.stopPropagation(); deleteLibraryToken(item); }}>删除草稿</button>\n </div>\n </div>\n ))}\n {!libraryUsageItems.length ? (\n <div className=\"di-library-workbench-empty\">当前没有可统计使用情况的 token</div>\n ) : null}\n </div>\n </>\n )}\n </main>\n\n <aside className=\"di-library-workbench-detail\">\n {libraryTab === 'tokens' ? (\n libraryTokenForm ? (\n <div className=\"di-library-edit-panel\">\n <div className=\"di-library-edit-head\">\n <strong>{libraryTokenForm.mode === 'create' ? '新增 Token' : '编辑 Token'}</strong>\n <button type=\"button\" className=\"di-head-icon-btn\" onClick={() => setLibraryTokenForm(null)} aria-label=\"关闭 token 表单\">\n <X size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n <label>\n <span>名称</span>\n <input value={libraryTokenForm.name} onChange={event => setLibraryTokenForm(prev => prev ? { ...prev, name: event.currentTarget.value } : prev)} />\n </label>\n <label>\n <span>分类</span>\n <select value={libraryTokenForm.category} onChange={event => setLibraryTokenForm(prev => prev ? { ...prev, category: event.currentTarget.value as LibraryTokenItemCategory } : prev)}>\n {LIBRARY_TOKEN_CATEGORIES.filter(item => item.key !== 'all').map(item => (\n <option key={item.key} value={item.key}>{item.label}</option>\n ))}\n </select>\n </label>\n <label>\n <span>值</span>\n <input value={libraryTokenForm.value} onChange={event => setLibraryTokenForm(prev => prev ? { ...prev, value: event.currentTarget.value } : prev)} />\n </label>\n <label>\n <span>用途</span>\n <input value={libraryTokenForm.usage} onChange={event => setLibraryTokenForm(prev => prev ? { ...prev, usage: event.currentTarget.value } : prev)} />\n </label>\n <label>\n <span>状态</span>\n <input value={libraryTokenForm.status} onChange={event => setLibraryTokenForm(prev => prev ? { ...prev, status: event.currentTarget.value } : prev)} />\n </label>\n <button type=\"button\" className=\"di-btn-save\" onClick={submitLibraryTokenForm}>保存到修改内容</button>\n </div>\n ) : selectedLibraryToken ? (\n <div className=\"di-library-detail-card\">\n <div className=\"di-library-detail-kicker\">{selectedLibraryToken.categoryLabel}</div>\n <h3>{selectedLibraryToken.name}</h3>\n <div className=\"di-library-detail-preview\">\n <span\n className={`di-library-token-preview di-library-token-preview--${selectedLibraryToken.preview}`}\n style={selectedLibraryToken.previewValue ? ({ '--di-library-preview': selectedLibraryToken.previewValue } as CSSProperties) : undefined}\n aria-hidden=\"true\"\n />\n <code>{selectedLibraryToken.value}</code>\n </div>\n <dl>\n <div><dt>用途</dt><dd>{selectedLibraryToken.usage}</dd></div>\n <div><dt>来源</dt><dd>{selectedLibraryToken.status}</dd></div>\n <div><dt>使用</dt><dd>{countLibraryTokenUsage(selectedLibraryToken) ?? '无法统计'}</dd></div>\n <div><dt>CSS var</dt><dd>{selectedLibraryToken.name.startsWith('--') ? `var(${selectedLibraryToken.name})` : selectedLibraryToken.name}</dd></div>\n </dl>\n <div className=\"di-library-detail-actions\">\n <button type=\"button\" onClick={() => copyTextToClipboard(selectedLibraryToken.name)}>复制名称</button>\n <button type=\"button\" onClick={() => copyTextToClipboard(selectedLibraryToken.value)}>复制值</button>\n <button type=\"button\" onClick={() => copyTextToClipboard(selectedLibraryToken.name.startsWith('--') ? `var(${selectedLibraryToken.name})` : selectedLibraryToken.name)}>复制 var</button>\n <button type=\"button\" onClick={() => focusLibraryTokenUsage(selectedLibraryToken)}>定位使用</button>\n <button type=\"button\" onClick={() => openLibraryTokenEdit(selectedLibraryToken)}>编辑</button>\n </div>\n </div>\n ) : (\n <div className=\"di-library-workbench-empty\">选择一个 token 查看详情</div>\n )\n ) : libraryTab === 'components' ? (\n libraryComponentImportOpen ? (\n <div className=\"di-library-import-panel\">\n <div className=\"di-library-edit-head\">\n <strong>导入组件库</strong>\n <button type=\"button\" className=\"di-head-icon-btn\" onClick={() => setLibraryComponentImportOpen(false)} aria-label=\"关闭导入组件库\">\n <X size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n <div className=\"di-library-import-steps\">\n <span>选一种方式</span>\n <span>生成接入草稿</span>\n <span>发送给 AI 落地</span>\n </div>\n <div className=\"di-library-import-option di-library-import-option--primary\">\n <div>\n <WandSparkles size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n <strong>让 AI 帮你整理</strong>\n <span>适合第一次接入。会复制一段提示,让 AI 扫描项目并生成组件清单。</span>\n </div>\n <button type=\"button\" onClick={copyComponentLibraryImportPrompt}>复制提示</button>\n </div>\n <label className=\"di-library-import-option\">\n <div>\n <Upload size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n <strong>已有组件清单</strong>\n <span>上传 JSON 后先变成草稿,不会直接改源码。</span>\n </div>\n <input\n type=\"file\"\n accept=\"application/json,.json\"\n onChange={event => {\n void handleComponentImportFile(event.currentTarget.files?.[0] ?? null);\n event.currentTarget.value = '';\n }}\n />\n </label>\n <div className=\"di-library-import-option\">\n <div>\n <ComponentIcon size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n <strong>先加一个试试</strong>\n <span>只登记一个组件,比如 Button 或 Card。</span>\n </div>\n <button type=\"button\" onClick={openLibraryComponentCreate}>添加组件</button>\n </div>\n <details className=\"di-library-import-format\">\n <summary>查看 JSON 格式</summary>\n <pre>{`{\n \"components\": [\n {\n \"type\": \"Button\",\n \"label\": \"按钮\",\n \"category\": \"action\",\n \"selector\": \".button\",\n \"variants\": [\"primary\", \"secondary\"],\n \"tokenRefs\": [\"--color-brand-primary\"]\n }\n ]\n}`}</pre>\n </details>\n {libraryComponentImportMsg ? <div className=\"di-library-import-msg\">{libraryComponentImportMsg}</div> : null}\n </div>\n ) : libraryComponentForm ? (\n <div className=\"di-library-edit-panel\">\n <div className=\"di-library-edit-head\">\n <strong>{libraryComponentForm.mode === 'create' ? '新增组件规格' : '编辑组件规格'}</strong>\n <button type=\"button\" className=\"di-head-icon-btn\" onClick={() => setLibraryComponentForm(null)} aria-label=\"关闭组件规格表单\">\n <X size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n <label>\n <span>分类</span>\n <select value={libraryComponentForm.category} onChange={event => setLibraryComponentForm(prev => prev ? { ...prev, category: event.currentTarget.value as LibraryComponentItemCategory } : prev)}>\n {LIBRARY_COMPONENT_CATEGORIES.filter(item => item.key !== 'all').map(item => (\n <option key={item.key} value={item.key}>{item.label}</option>\n ))}\n </select>\n </label>\n <label>\n <span>类型</span>\n <input value={libraryComponentForm.type} onChange={event => setLibraryComponentForm(prev => prev ? { ...prev, type: event.currentTarget.value } : prev)} />\n </label>\n <label>\n <span>名称</span>\n <input value={libraryComponentForm.label} onChange={event => setLibraryComponentForm(prev => prev ? { ...prev, label: event.currentTarget.value } : prev)} />\n </label>\n <label>\n <span>能力</span>\n <input value={libraryComponentForm.summary} onChange={event => setLibraryComponentForm(prev => prev ? { ...prev, summary: event.currentTarget.value } : prev)} />\n </label>\n <label>\n <span>Selector</span>\n <input value={libraryComponentForm.selector} onChange={event => setLibraryComponentForm(prev => prev ? { ...prev, selector: event.currentTarget.value } : prev)} />\n </label>\n <label>\n <span>状态</span>\n <input value={libraryComponentForm.status} onChange={event => setLibraryComponentForm(prev => prev ? { ...prev, status: event.currentTarget.value } : prev)} />\n </label>\n <button type=\"button\" className=\"di-btn-save\" onClick={submitLibraryComponentForm}>保存到修改内容</button>\n </div>\n ) : selectedLibraryComponentSpec ? (\n <div className=\"di-library-detail-card\">\n <div className=\"di-library-detail-kicker\">{selectedLibraryComponentSpec.component.categoryLabel} / 具体规格</div>\n <h3>{selectedLibraryComponentSpec.component.label} / {selectedLibraryComponentSpec.variant.label}</h3>\n <div className=\"di-library-detail-preview di-library-detail-preview--component\">\n {renderLibraryComponentSpecPreview(selectedLibraryComponentSpec)}\n </div>\n <div className=\"di-library-spec-pills\" aria-label=\"组件规格能力\">\n {selectedLibraryComponentSpec.capabilities.map(capability => (\n <span key={capability}>{capability}</span>\n ))}\n </div>\n <dl>\n <div><dt>组件族</dt><dd>{selectedLibraryComponentSpec.component.type}</dd></div>\n <div><dt>用途</dt><dd>{selectedLibraryComponentSpec.purpose}</dd></div>\n <div><dt>Props</dt><dd>{selectedLibraryComponentSpec.variant.propsLabel || '默认 props'}</dd></div>\n <div><dt>使用</dt><dd>{selectedLibraryComponentSpec.usageCount === null ? '无法统计' : `${selectedLibraryComponentSpec.usageCount} 次`}</dd></div>\n <div><dt>Selector</dt><dd>{selectedLibraryComponentSpec.selector}</dd></div>\n <div><dt>Token 绑定</dt><dd>{selectedLibraryComponentSpec.tokenRefs.length ? selectedLibraryComponentSpec.tokenRefs.join(' / ') : '未登记'}</dd></div>\n <div><dt>状态</dt><dd>{selectedLibraryComponentSpec.variant.status || selectedLibraryComponentSpec.component.status}</dd></div>\n </dl>\n <div className=\"di-library-detail-actions\">\n <button type=\"button\" onClick={() => copyTextToClipboard(selectedLibraryComponentSpec.selector)}>复制 selector</button>\n <button type=\"button\" onClick={() => copyTextToClipboard(selectedLibraryComponentSpec.variant.propsLabel || '')}>复制 props</button>\n <button type=\"button\" onClick={() => openLibraryComponentEdit(selectedLibraryComponentSpec.component)}>编辑组件</button>\n <button type=\"button\" onClick={() => deleteLibraryComponent(selectedLibraryComponentSpec.component)}>删除草稿</button>\n </div>\n </div>\n ) : selectedLibraryComponent ? (\n <div className=\"di-library-detail-card\">\n <div className=\"di-library-detail-kicker\">{selectedLibraryComponent.categoryLabel}</div>\n <h3>{selectedLibraryComponent.label}</h3>\n <div className=\"di-library-detail-preview di-library-detail-preview--component\">\n <div className=\"di-library-component-preview-stage\">\n {renderLibraryComponentPreview(selectedLibraryComponent, 'detail')}\n </div>\n </div>\n <dl>\n <div><dt>类型</dt><dd>{selectedLibraryComponent.type}</dd></div>\n <div><dt>分类</dt><dd>{selectedLibraryComponent.categoryLabel}</dd></div>\n <div><dt>能力</dt><dd>{selectedLibraryComponent.summary}</dd></div>\n <div><dt>Selector</dt><dd>{selectedLibraryComponent.selector}</dd></div>\n <div><dt>状态</dt><dd>{selectedLibraryComponent.status}</dd></div>\n </dl>\n <div className=\"di-library-detail-actions\">\n <button type=\"button\" onClick={() => copyTextToClipboard(selectedLibraryComponent.selector)}>复制 selector</button>\n <button type=\"button\" onClick={() => openLibraryComponentEdit(selectedLibraryComponent)}>编辑</button>\n <button type=\"button\" onClick={() => deleteLibraryComponent(selectedLibraryComponent)}>删除</button>\n </div>\n </div>\n ) : (\n <div className=\"di-library-workbench-empty\">选择一个组件规格查看详情</div>\n )\n ) : libraryTab === 'changes' ? (\n <div className=\"di-library-detail-card\">\n <div className=\"di-library-detail-kicker\">Changes</div>\n <h3>修改篮</h3>\n <dl>\n <div><dt>对象</dt><dd>{localDraftEntries.length}</dd></div>\n <div><dt>修改</dt><dd>{localDraftChangeCount}</dd></div>\n <div><dt>链路</dt><dd>只生成 AI 任务,不直接写源码</dd></div>\n </dl>\n <div className=\"di-library-detail-actions\">\n <button type=\"button\" onClick={handleSubmitToAi} disabled={localDraftChangeCount === 0}>{renderSubmitLabel(submitMsg)}</button>\n </div>\n </div>\n ) : (\n <div className=\"di-library-detail-card\">\n <div className=\"di-library-detail-kicker\">Usage</div>\n <h3>使用治理</h3>\n <dl>\n <div><dt>可统计资源</dt><dd>{libraryUsageItems.length}</dd></div>\n <div><dt>删除规则</dt><dd>已使用 token 只能生成“先替换再删除”的任务</dd></div>\n <div><dt>定位规则</dt><dd>点击使用次数回到页面选中第一个命中元素</dd></div>\n </dl>\n </div>\n )}\n <div className=\"di-library-basket-card\">\n <div>\n <span>修改篮</span>\n <strong>{localDraftChangeCount}</strong>\n </div>\n <p>{localDraftChangeCount > 0 ? '发送给 AI 前统一复核' : '暂无设计库或样式草稿'}</p>\n <button\n type=\"button\"\n className=\"di-btn-save\"\n disabled={localDraftChangeCount === 0}\n onClick={handleSubmitToAi}\n >\n {renderSubmitLabel(submitMsg)}\n </button>\n </div>\n </aside>\n </div>\n </div>\n </div>\n )}\n\n {componentCreateOpen && (\n <div className=\"di-component-create-layer\" role=\"presentation\">\n <div className=\"di-component-create-drawer\" role=\"dialog\" aria-modal=\"true\" aria-label=\"创建组件规范\">\n <div className=\"di-component-create-head\">\n <div className=\"di-component-create-title\">\n <ComponentIcon size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n 创建组件\n </div>\n <button\n type=\"button\"\n className=\"di-head-icon-btn\"\n onClick={() => {\n setComponentCreateOpen(false);\n setComponentCreateContainerMenuOpen(false);\n setComponentCreateTypeMenuOpen(false);\n }}\n title=\"关闭创建组件\"\n aria-label=\"关闭创建组件\"\n >\n <X size={15} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n\n <div className=\"di-component-create-scroll\">\n <div className=\"di-component-create-summary\">\n <div>\n <span>当前元素</span>\n <strong>{componentCreateTargetLabel}</strong>\n </div>\n <code title={componentCreateSelector}>{componentCreateSelector}</code>\n {componentCreateDefaultText ? (\n <p title={componentCreateDefaultText}>{componentCreateDefaultText}</p>\n ) : null}\n </div>\n\n <div className=\"di-component-create-form\">\n <div className=\"di-component-create-field di-component-create-field--wide\">\n <span>容器</span>\n <div className=\"di-component-type-combobox\">\n <button\n type=\"button\"\n className=\"di-component-type-trigger\"\n onClick={() => {\n setComponentCreateContainerMenuOpen(v => !v);\n setComponentCreateTypeMenuOpen(false);\n }}\n aria-label=\"选择所属容器\"\n aria-expanded={componentCreateContainerMenuOpen}\n aria-haspopup=\"listbox\"\n >\n <span className=\"di-component-type-trigger-value\">{componentCreateContainerOption.label}</span>\n <ChevronDown size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n {componentCreateContainerMenuOpen && (\n <div className=\"di-component-type-menu\" role=\"listbox\">\n <div className=\"di-component-type-menu-head\">\n 先确定这个元素服务于哪个结构\n </div>\n {COMPONENT_CONTAINER_OPTIONS.map(option => (\n <button\n type=\"button\"\n key={option.key}\n className={`di-component-type-option${option.key === componentCreateContainer ? ' di-component-type-option--active' : ''}`}\n onMouseDown={event => event.preventDefault()}\n onClick={() => applyComponentCreateContainer(option.key)}\n role=\"option\"\n aria-selected={option.key === componentCreateContainer}\n >\n <strong>{option.label}</strong>\n <span>{option.hint}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n <div className=\"di-component-create-field di-component-create-field--wide\">\n <span>用途</span>\n <div className=\"di-component-type-combobox\">\n <button\n type=\"button\"\n className=\"di-component-type-trigger\"\n onClick={() => {\n setComponentCreateTypeMenuOpen(v => !v);\n setComponentCreateContainerMenuOpen(false);\n }}\n aria-label=\"选择元素用途\"\n aria-expanded={componentCreateTypeMenuOpen}\n aria-haspopup=\"listbox\"\n >\n <span className=\"di-component-type-trigger-value\">{componentCreateType || '选择用途'}</span>\n <ChevronDown size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n {componentCreateTypeMenuOpen && (\n <div className=\"di-component-type-menu\" role=\"listbox\">\n <div className=\"di-component-type-menu-head\">\n 再确定它在容器里的职责\n </div>\n {componentCreateTypeOptions.map(option => (\n <button\n type=\"button\"\n key={option.label}\n className={`di-component-type-option${normalizeComponentType(option.label) === componentCreateTypeQuery ? ' di-component-type-option--active' : ''}`}\n onMouseDown={event => event.preventDefault()}\n onClick={() => applyComponentCreateType(option.label)}\n role=\"option\"\n aria-selected={normalizeComponentType(option.label) === componentCreateTypeQuery}\n >\n <strong>{option.label}</strong>\n <span>{option.hint}</span>\n </button>\n ))}\n {!componentCreateTypeOptions.length ? (\n <div className=\"di-component-type-empty\">没有匹配用途</div>\n ) : null}\n </div>\n )}\n </div>\n </div>\n <label className=\"di-component-create-field di-component-create-field--wide\">\n <span>名称</span>\n <input\n value={componentSpecDraft.componentName}\n onChange={event => {\n setComponentCreateNameTouched(true);\n syncComponentSpecDraft({ componentName: event.currentTarget.value });\n }}\n placeholder=\"page-title\"\n />\n </label>\n {componentCreateExistingMatch ? (\n <div className=\"di-component-create-existing\">\n <div className=\"di-component-create-existing-copy\">\n <span>已有同类</span>\n <strong>{componentCreateExistingMatch.componentName}</strong>\n <small>{componentCreateExistingMatch.usage || componentCreateExistingMatch.targetLabel}</small>\n </div>\n <div className=\"di-component-create-existing-actions\">\n <button\n type=\"button\"\n className={componentCreateResolution === 'reuse' ? 'di-segment-pill di-segment-pill--active' : 'di-segment-pill'}\n onClick={() => {\n setComponentCreateResolution('reuse');\n setComponentCreateNameTouched(false);\n syncComponentSpecDraft({\n sourceMode: '复用已有组件',\n action: '复用组件',\n componentName: componentCreateExistingMatch.componentName,\n });\n }}\n >\n 复用已有组件\n </button>\n <button\n type=\"button\"\n className={componentCreateResolution === 'new' ? 'di-segment-pill di-segment-pill--active' : 'di-segment-pill'}\n onClick={() => {\n const nextName = getUniqueComponentName(getComponentNameByType(componentCreateType, selected, componentCreateContainer));\n setComponentCreateResolution('new');\n setComponentCreateNameTouched(false);\n syncComponentSpecDraft({\n sourceMode: '新建同类组件',\n action: '创建组件',\n componentName: nextName,\n });\n }}\n >\n 新建同类组件\n </button>\n </div>\n </div>\n ) : null}\n <label className=\"di-component-create-field di-component-create-field--wide\">\n <span>使用场景</span>\n <input\n value={componentCreatePurpose}\n onChange={event => {\n const { value } = event.currentTarget;\n setComponentCreatePurpose(value);\n syncComponentSpecDraft({ usage: value });\n }}\n placeholder=\"用于页面顶部主标题展示\"\n />\n </label>\n </div>\n\n <div className=\"di-component-create-rules\">\n <div className=\"di-component-create-rules-title\">组件规则</div>\n <ul>\n {componentCreateRulePreview.map(rule => (\n <li key={rule}>{rule}</li>\n ))}\n </ul>\n </div>\n </div>\n\n <div className=\"di-component-create-actions\">\n <button type=\"button\" className=\"di-btn-save\" onClick={handleSendComponentCreateToAi}>\n 发送给AI\n </button>\n </div>\n </div>\n </div>\n )}\n\n <div className={`di-body${activePlugin === 'component-maker' ? ' di-body--plugin-page' : ''}`}>\n\n {/* 作用范围 */}\n <div className=\"di-section\">\n <div className=\"di-section-title-row\">\n <div className=\"di-section-title\">作用范围</div>\n <button\n type=\"button\"\n className={`di-help-icon${showScopeHelp ? ' di-help-icon--on' : ''}`}\n aria-label=\"查看作用范围说明\"\n aria-expanded={showScopeHelp}\n onClick={() => setShowScopeHelp(v => !v)}\n >\n <CircleHelp size={14} strokeWidth={1.8} />\n </button>\n </div>\n {showScopeHelp && (\n <div className=\"di-help-popover\">\n 相同元素 = 与当前选中对象属于同一组件或同一基础元素的一组对象;会忽略 selected、disabled、floating 等状态或变体差异。\n </div>\n )}\n <div className=\"di-scope-row\">\n <button className={`di-scope-btn${scope === 'current' ? ' di-scope-btn--on' : ''}`} onClick={() => setScope('current')}>当前元素</button>\n <button className={`di-scope-btn${scope === 'component' ? ' di-scope-btn--on' : ''}`} onClick={() => setScope('component')}>\n 相同元素 {selected && <span className=\"di-scope-count\">{getSameComponentEls(selected).length}</span>}\n </button>\n </div>\n </div>\n\n {activePlugin === 'component-maker' && (\n <div className=\"di-section di-plugin-section di-plugin-section--page\">\n <div className=\"di-plugin-page-head\">\n <button\n type=\"button\"\n className=\"di-plugin-back\"\n onClick={() => setActivePlugin(null)}\n >\n <ArrowLeft size={14} strokeWidth={2.1} aria-hidden=\"true\" />\n 样式面板\n </button>\n <div className=\"di-plugin-page-title\">\n <ComponentIcon size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n 组件制作\n </div>\n {pluginMsg && <span className=\"di-plugin-msg\">{pluginMsg}</span>}\n </div>\n <div className=\"di-plugin-panel di-plugin-panel--maker\">\n {isRecognizedComponentVariantFlow ? (\n <div className=\"di-plugin-maker-compact di-plugin-maker-compact--variant\">\n <div className=\"di-plugin-control-row\">\n <span className=\"di-plugin-label\">组件</span>\n <div className=\"di-plugin-component-main\">\n <strong>{componentMakerActiveComponentName}</strong>\n <span>{componentMakerActiveComponentType}</span>\n </div>\n </div>\n <div className=\"di-plugin-control-row\">\n <span className=\"di-plugin-label\">新增</span>\n <div className=\"di-plugin-action-tiles\" role=\"group\" aria-label=\"新增组件变体\">\n {componentMakerVariantActionOptions.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-plugin-action-tile${componentMakerAction === option.key ? ' di-plugin-action-tile--on' : ''}`}\n onClick={() => updateComponentMakerAction(option.key)}\n title={option.hint}\n >\n {option.key === 'create-current-variant' ? '当前变体' : '其他变体'}\n </button>\n ))}\n </div>\n </div>\n </div>\n ) : (\n <div className=\"di-plugin-maker-compact\">\n <div className=\"di-plugin-control-row\">\n <span className=\"di-plugin-label\">组件</span>\n <div className=\"di-plugin-component-main\">\n <strong>{componentMakerActiveComponentName}</strong>\n <span>{componentMakerActiveComponentType}</span>\n </div>\n </div>\n <div className=\"di-plugin-control-row\">\n <span className=\"di-plugin-label\">归属</span>\n <div className=\"di-plugin-source-toggle\" role=\"group\" aria-label=\"归属组件来源\">\n <button\n type=\"button\"\n className={`di-plugin-choice${componentMakerSourceMode === 'existing' ? ' di-plugin-choice--on' : ''}`}\n disabled={componentMakerComponentOptions.length === 0}\n onClick={() => {\n const fallback = selectedComponentOption?.name ?? componentMakerComponentOptions[0]?.name ?? componentSpecDraft.componentName;\n updateComponentMakerSourceMode('existing', fallback);\n }}\n >\n 已有组件\n </button>\n <button\n type=\"button\"\n className={`di-plugin-choice${componentMakerSourceMode === 'new' ? ' di-plugin-choice--on' : ''}`}\n onClick={() => updateComponentMakerSourceMode('new', componentSpecDraft.componentName || getElementDisplayName(selected))}\n >\n 新建组件\n </button>\n </div>\n </div>\n <div className=\"di-plugin-control-row di-plugin-control-row--input\">\n <span className=\"di-plugin-label\">{componentMakerSourceMode === 'existing' ? '选择' : '命名'}</span>\n {componentMakerSourceMode === 'existing' ? (\n componentMakerComponentOptions.length > 0 ? (\n <select\n className=\"di-plugin-inline-input\"\n value={selectedComponentOption?.name ?? componentMakerComponentOptions[0]?.name ?? ''}\n onChange={event => {\n const { value } = event.currentTarget;\n syncComponentSpecDraft({\n sourceMode: '已有组件',\n componentName: value,\n });\n }}\n >\n {componentMakerComponentOptions.map(option => (\n <option key={option.name} value={option.name}>\n {option.name} · {option.type} · {option.count}\n </option>\n ))}\n </select>\n ) : (\n <span className=\"di-plugin-empty-note\">未识别到已有组件,请新建</span>\n )\n ) : (\n <input\n className=\"di-plugin-inline-input\"\n value={componentSpecDraft.componentName}\n placeholder=\"page-title / card-task\"\n onChange={event => {\n const { value } = event.currentTarget;\n syncComponentSpecDraft({\n sourceMode: '新建组件',\n componentName: value,\n });\n }}\n />\n )}\n </div>\n <div className=\"di-plugin-control-row\">\n <span className=\"di-plugin-label\">任务</span>\n <div className=\"di-plugin-action-tiles\" role=\"group\" aria-label=\"组件制作动作\">\n {componentMakerActions.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-plugin-action-tile${componentMakerAction === option.key ? ' di-plugin-action-tile--on' : ''}`}\n onClick={() => updateComponentMakerAction(option.key)}\n title={option.hint}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n </div>\n )}\n\n <div className={`di-plugin-control-card${isRecognizedComponentVariantFlow ? ' di-plugin-control-card--variant-flow' : ''}`}>\n {isRecognizedComponentVariantFlow ? (\n <div className=\"di-plugin-variant-workflow\">\n <label className=\"di-plugin-control-row di-plugin-control-row--input\">\n <span className=\"di-plugin-label\">代码名</span>\n <input\n className=\"di-plugin-inline-input di-plugin-code-name-input\"\n value={componentMakerVariantCodeName}\n onChange={event => setComponentVariantDraft(prev => ({ ...prev, name: event.currentTarget.value }))}\n />\n </label>\n\n <div className=\"di-plugin-sandbox-controls di-plugin-sandbox-controls--single\">\n {componentMakerVariantGroups.map(([dimension, items]) => (\n <div className=\"di-plugin-sandbox-row\" key={dimension}>\n <span className=\"di-plugin-label\">{getComponentMakerDimensionDisplayName(dimension)}</span>\n <div className=\"di-plugin-sandbox-options\">\n {items.map(item => {\n const isPreview = activeComponentMakerVariantPreview?.id === item.id;\n return (\n <button\n key={item.id}\n type=\"button\"\n className={`di-plugin-sandbox-option${isPreview ? ' di-plugin-sandbox-option--on di-plugin-sandbox-option--preview' : ''}`}\n aria-pressed={isPreview}\n onClick={() => setComponentVariantPreviewId(item.id)}\n onMouseEnter={() => setComponentVariantPreviewId(item.id)}\n title={item.rules}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n\n <div className={`di-plugin-live-preview di-plugin-live-preview--${activeComponentMakerVariantPreview?.visual ?? 'neutral'}`}>\n <div className=\"di-plugin-live-preview-head\">\n <span className=\"di-plugin-label\">真实预览</span>\n <span className=\"di-plugin-variant-count\">{activeComponentMakerVariantPreview?.description ?? '当前组件'}</span>\n </div>\n <div className=\"di-plugin-real-preview-frame\">\n <div\n className=\"di-plugin-real-preview-inner\"\n dangerouslySetInnerHTML={{ __html: componentMakerLivePreviewHtml }}\n />\n </div>\n <div className=\"di-plugin-preview-meta\">\n <strong>{activeComponentMakerVariantPreview?.label ?? '当前'}</strong>\n <span>{getComponentMakerDimensionDisplayName(activeComponentMakerVariantPreview?.dimension ?? '变体')}</span>\n </div>\n </div>\n </div>\n ) : (\n <>\n {!isComponentMakerVariantAction && (\n <div className=\"di-plugin-control-row\">\n <span className=\"di-plugin-label\">规格</span>\n <span className=\"di-plugin-value\">{COMPONENT_MAKER_ACTION_LABELS[componentMakerAction]}</span>\n </div>\n )}\n {isComponentMakerVariantAction ? (\n <div className=\"di-plugin-variant-sandbox\">\n {componentMakerComponentOptions.length > 0 && (\n <div className=\"di-plugin-library-row\">\n <span className=\"di-plugin-label\">组件库</span>\n <div className=\"di-plugin-library-pills\" aria-label=\"页面组件库\">\n {componentMakerComponentOptions.slice(0, 5).map(option => {\n const isCurrent = option.name === (selectedComponentOption?.name ?? componentSpecDraft.componentName);\n return (\n <button\n key={option.name}\n type=\"button\"\n className={`di-plugin-library-pill${isCurrent ? ' di-plugin-library-pill--on' : ''}`}\n onClick={() => {\n updateComponentMakerSourceMode('existing', option.name);\n setComponentVariantPreviewId('');\n }}\n title={`${option.name} · ${option.type} · ${option.count}`}\n >\n {option.name}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n <div className={`di-plugin-live-preview di-plugin-live-preview--${activeComponentMakerVariantPreview?.visual ?? 'neutral'}`}>\n <div className=\"di-plugin-live-preview-head\">\n <span className=\"di-plugin-label\">真实预览</span>\n <span className=\"di-plugin-variant-count\">\n {selectedComponentMakerVariantSuggestions.length} / {componentMakerVariantSuggestions.length}\n </span>\n </div>\n <div className=\"di-plugin-real-preview-frame\">\n <div\n className=\"di-plugin-real-preview-inner\"\n dangerouslySetInnerHTML={{ __html: componentMakerLivePreviewHtml }}\n />\n </div>\n <div className=\"di-plugin-preview-meta\">\n <strong>{activeComponentMakerVariantPreview?.label ?? '当前'}</strong>\n <span>{activeComponentMakerVariantPreview?.dimension ?? '变体'}</span>\n </div>\n </div>\n\n <div className=\"di-plugin-sandbox-controls\">\n {componentMakerVariantGroups.map(([dimension, items]) => (\n <div className=\"di-plugin-sandbox-row\" key={dimension}>\n <span className=\"di-plugin-label\">{dimension}</span>\n <div className=\"di-plugin-sandbox-options\">\n {items.map(item => {\n const isSelected = !componentVariantExcludedIds.includes(item.id);\n const isPreview = activeComponentMakerVariantPreview?.id === item.id;\n return (\n <button\n key={item.id}\n type=\"button\"\n className={`di-plugin-sandbox-option${isSelected ? ' di-plugin-sandbox-option--on' : ''}${isPreview ? ' di-plugin-sandbox-option--preview' : ''}`}\n aria-pressed={isSelected}\n onClick={() => toggleComponentMakerVariantSuggestion(item.id)}\n onMouseEnter={() => setComponentVariantPreviewId(item.id)}\n title={item.rules}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"di-plugin-selected-variants\">\n <span className=\"di-plugin-label\">已选</span>\n <div className=\"di-plugin-selected-chip-row\">\n {selectedComponentMakerVariantSuggestions.length > 0 ? (\n selectedComponentMakerVariantSuggestions.map(item => (\n <button\n key={item.id}\n type=\"button\"\n className=\"di-plugin-selected-chip\"\n onClick={() => toggleComponentMakerVariantSuggestion(item.id)}\n title=\"点击移除\"\n >\n {item.label}\n </button>\n ))\n ) : (\n <span className=\"di-plugin-empty-note\">至少选择一个变体</span>\n )}\n </div>\n <div className=\"di-plugin-variant-tools\">\n <button type=\"button\" onClick={() => setComponentVariantExcludedIds([])}>全选</button>\n <button\n type=\"button\"\n onClick={() => setComponentVariantExcludedIds(componentMakerVariantSuggestions.map(item => item.id))}\n >\n 清空\n </button>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"di-plugin-spec-grid\">\n <label className=\"di-plugin-spec-field\">\n <span>可改内容</span>\n <input\n value={componentSpecDraft.slots}\n onChange={event => {\n const { value } = event.currentTarget;\n syncComponentSpecDraft({ slots: value });\n }}\n />\n </label>\n <label className=\"di-plugin-spec-field\">\n <span>状态/变体</span>\n <input\n value={componentSpecDraft.variants}\n onChange={event => {\n const { value } = event.currentTarget;\n syncComponentSpecDraft({ variants: value });\n }}\n />\n </label>\n <label className=\"di-plugin-spec-field di-plugin-spec-field--wide\">\n <span>规则</span>\n <textarea\n value={componentSpecDraft.styleRules}\n onChange={event => {\n const { value } = event.currentTarget;\n syncComponentSpecDraft({ styleRules: value });\n }}\n />\n </label>\n </div>\n )}\n </>\n )}\n </div>\n\n <div className=\"di-plugin-actions\">\n <button\n type=\"button\"\n className=\"di-plugin-action\"\n onClick={() => {\n if (isComponentMakerVariantAction) handleRecordComponentVariantDraft();\n else handleRecordComponentSpecDraft();\n }}\n >\n {isComponentMakerVariantAction ? '记录变体组' : '记录组件规格'}\n </button>\n <button\n type=\"button\"\n className=\"di-plugin-action di-plugin-action--secondary\"\n onClick={() => copyPluginPrompt(buildComponentMakerPrompt(componentMakerContext), '组件任务已复制 ✓')}\n >\n 复制组件任务\n </button>\n </div>\n </div>\n </div>\n )}\n\n {componentMeta && (\n <div className=\"di-section\">\n <div className=\"di-section-title\">组件</div>\n <div className=\"di-component-card\">\n <div className=\"di-component-head\">\n <div className=\"di-component-main\">\n <div className=\"di-component-title-row\">\n <span className=\"di-component-name\">{componentDisplayName}</span>\n <MatchBadge\n label={componentCapability ? '已匹配' : '待补充'}\n tone={componentCapability ? 'matched' : 'pending'}\n tooltip={componentCapability\n ? '已匹配到可复用规则,可按组件方式查看和处理。'\n : '当前还没有可复用规则,先按当前样式处理,后续可补充到设计库。'}\n />\n </div>\n </div>\n <button\n type=\"button\"\n className={`di-component-meta-toggle${componentInfoOpen ? ' di-component-meta-toggle--on' : ''}`}\n onClick={() => setComponentInfoOpen(open => !open)}\n aria-expanded={componentInfoOpen}\n aria-label={componentInfoOpen ? '收起元素信息' : '查看元素信息'}\n title={componentInfoOpen ? '收起元素信息' : '查看元素信息'}\n >\n <span>元素信息</span>\n <ChevronDown size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n <div className=\"di-component-meta-block\">\n {componentInfoOpen && (\n <div className=\"di-component-info-panel\">\n {componentElementInfos.length > 0 && (\n <div className=\"di-component-info-elements\">\n <div className=\"di-component-info-element-list\">\n {componentElementInfos.map(item => (\n <section className=\"di-component-info-element-card\" key={item.key}>\n <div className=\"di-component-info-element-head\">\n <span className=\"di-component-info-element-label\">{item.label}</span>\n <span className=\"di-component-info-element-selector\" title={item.selector}>{item.selector}</span>\n </div>\n <dl className=\"di-component-info-element-meta\">\n <div className=\"di-component-info-row\">\n <dt>内容</dt>\n <dd title={item.text}>{item.text}</dd>\n </div>\n <div className=\"di-component-info-row\">\n <dt>样式</dt>\n <dd title={item.style}>\n <span className=\"di-component-info-inline\">\n <span>{item.style}</span>\n <MatchBadge\n label={item.styleStatus === 'token' ? 'Token' : '真实值'}\n tone={item.styleStatus}\n tooltip={item.styleStatus === 'token'\n ? '当前值已映射到设计 token。'\n : '当前展示的是页面实际样式值,尚未映射到设计 token 或组件规则。'}\n />\n </span>\n </dd>\n </div>\n <div className=\"di-component-info-row\">\n <dt>间距</dt>\n <dd title={item.spacing}>\n <span className=\"di-component-info-inline\">\n <span>{item.spacing}</span>\n {item.spacingStatus && (\n <MatchBadge\n label={item.spacingStatus === 'token' ? 'Token' : '真实值'}\n tone={item.spacingStatus}\n tooltip={item.spacingStatus === 'token'\n ? '当前值已映射到设计 token。'\n : '当前展示的是页面实际样式值,尚未映射到设计 token 或组件规则。'}\n />\n )}\n </span>\n </dd>\n </div>\n </dl>\n </section>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n {componentCapability && (\n <div className=\"di-component-fields\">\n {componentEditableSlots.map(slot => (\n <label className=\"di-component-field di-component-field--text\" key={slot.key}>\n <span>{slot.label}</span>\n <input\n className=\"di-component-text-input\"\n value={componentTextSlotDrafts[slot.key] ?? ''}\n onChange={event => updateComponentTextSlot(slot, event.currentTarget.value)}\n />\n </label>\n ))}\n {visibleChildSlots.length > 0 && (\n <div className=\"di-component-field di-component-field--children\">\n <span>{visibleChildSlots.length === 1 ? visibleChildSlots[0].slot.label : '可选项'}</span>\n <div className=\"di-component-child-list\">\n {visibleChildSlots.map(({ slot, value, element }) => {\n const childMeta = element ? getInspectorComponentMeta(element) : null;\n const childCapability = getComponentCapability(childMeta);\n const childName = childMeta ? getComponentDisplayName(childMeta) : slot.label;\n const childValue = value || childMeta?.variant || childName;\n const showChildLabel = visibleChildSlots.length > 1;\n const childBadgeStatus = element && childCapability?.statusKind === 'badge'\n ? inferBadgeStatus(getClasses(element))\n : null;\n return (\n <div className={`di-component-child-item${showChildLabel ? ' di-component-child-item--with-label' : ''}`} key={slot.key}>\n {showChildLabel && <span className=\"di-component-child-label\">{slot.label}</span>}\n {element && childCapability?.statusKind === 'badge' ? (\n <div className=\"di-component-child-variant-grid\" role=\"group\" aria-label={`${childName} 状态`}>\n {BADGE_STATUS_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-child-variant-tile${childBadgeStatus === option.key ? ' di-component-child-variant-tile--on' : ''}`}\n onClick={() => updateBadgeStatusOnElement(element, option.key)}\n title={`${childName} · ${option.label}`}\n >\n {option.label}\n </button>\n ))}\n </div>\n ) : (\n <>\n <span className=\"di-component-child-value\">{childValue}</span>\n <button\n type=\"button\"\n className=\"di-component-child-select\"\n onClick={() => { if (element) selectEl(element); }}\n title={`选择 ${childName}`}\n >\n 选择\n </button>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n )}\n {componentCapability.editableText && (\n <label className=\"di-component-field di-component-field--text\">\n <span>文案</span>\n <input\n className=\"di-component-text-input\"\n value={componentTextDraft}\n onChange={event => updateComponentText(event.currentTarget.value)}\n />\n </label>\n )}\n {componentCapability.variantKind === 'button' && (\n <div className=\"di-component-field\">\n <span>变体</span>\n <div className=\"di-component-segment\" role=\"group\" aria-label=\"按钮变体\">\n {BUTTON_VARIANT_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeButtonVariant === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateComponentVariant(option.key)}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n {componentCapability.variantKind === 'card' && (\n <div className=\"di-component-field\">\n <span>展示</span>\n <div className=\"di-component-segment\" role=\"group\" aria-label=\"卡片展示方式\">\n {CARD_VARIANT_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeCardVariant === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateCardVariant(option.key)}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n {componentCapability.colorKind === 'icon' && (\n <div className=\"di-component-field\">\n <span>颜色</span>\n <div className=\"di-component-segment di-component-segment--tone\" role=\"group\" aria-label=\"图标颜色\">\n {ICON_COLOR_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeIconColor === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateIconColor(option.key)}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n {componentCapability.statusKind === 'badge' && (\n <div className=\"di-component-field\">\n <span>状态</span>\n <div className=\"di-component-variant-grid\" role=\"group\" aria-label=\"标签状态\">\n {BADGE_STATUS_OPTIONS.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-variant-tile${activeBadgeStatus === option.key ? ' di-component-variant-tile--on' : ''}`}\n onClick={() => updateBadgeStatus(option.key)}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n {componentCapability.sizeKind && (\n <div className=\"di-component-field\">\n <span>尺寸</span>\n <div className=\"di-component-segment di-component-segment--size\" role=\"group\" aria-label=\"组件尺寸\">\n {componentSizeOptions.map(option => (\n <button\n key={option.key}\n type=\"button\"\n className={`di-component-segment-btn${activeButtonSize === option.key ? ' di-component-segment-btn--on' : ''}`}\n onClick={() => updateComponentSize(option.key)}\n title={option.title}\n >\n {option.label}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n\n {componentMeta && (\n <div className=\"di-section di-layout-section\">\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">外部布局</div>\n {renderSectionReset('layout', '外部布局')}\n </div>\n <div className=\"di-layout-grid\">\n <div className=\"di-layout-card di-layout-card--position\">\n <div className=\"di-layout-card-title\">位置</div>\n <div className=\"di-position-fields\" aria-label=\"移动组件\">\n {([\n { key: 'x', label: 'X', value: getDisplayPosition(pendingTranslate ?? translateVal).x },\n { key: 'y', label: 'Y', value: getDisplayPosition(pendingTranslate ?? translateVal).y },\n ] as const).map(item => (\n <div className=\"di-position-row\" key={item.key}>\n <AxisNumberInput\n label={item.label}\n value={formatLengthControlValue(`${Math.round(item.value)}px`)}\n ariaLabel={`${item.label} 位置`}\n inputClassName=\"di-position-value\"\n onChangeValue={next => setTranslateAxis(item.key, next)}\n onStep={delta => stepTranslateAxis(item.key, delta)}\n />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"di-layout-card di-layout-card--size\">\n <div className=\"di-layout-card-title\">尺寸</div>\n {([\n { key: 'width', label: 'W', current: widthVal, pending: pendingWidth, mode: widthMode, pendingMode: pendingWidthMode },\n { key: 'height', label: 'H', current: heightVal, pending: pendingHeight, mode: heightMode, pendingMode: pendingHeightMode },\n ] as const).map(item => {\n const cur = displaySizeValue(item.pending, item.current);\n const inputVal = formatLengthControlValue(sizeDraft[item.key] ?? cur);\n const activeMode = item.pendingMode ?? item.mode;\n return (\n <div className=\"di-size-row\" key={item.key}>\n <div className=\"di-size-field\">\n <AxisNumberInput\n label={item.label}\n value={inputVal}\n ariaLabel={`${item.label} 自定义尺寸`}\n inputClassName=\"di-size-value\"\n onChangeValue={next => {\n setSizeDraft(prev => ({ ...prev, [item.key]: next }));\n setSize(item.key, next, 'fixed');\n }}\n onFocusValue={() => setSizeDraft(prev => ({ ...prev, [item.key]: cur }))}\n onBlur={() => setSizeDraft(prev => {\n const next = { ...prev };\n delete next[item.key];\n return next;\n })}\n onStep={delta => stepSize(item.key, inputVal, delta)}\n onEnter={event => event.currentTarget.blur()}\n />\n <select\n className=\"di-size-mode-select\"\n value={activeMode}\n aria-label={`${item.label} 尺寸模式`}\n onChange={e => {\n const mode = e.target.value as SizeMode;\n setSize(item.key, item.current, mode);\n }}\n >\n {SIZE_OPTIONS.map(opt => (\n <option key={opt.mode} value={opt.mode}>{opt.label}</option>\n ))}\n </select>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n )}\n\n {showElementStyleSections && (\n <>\n {/* 文字区(内容 + 一行式文字工具条) */}\n {!hideTextStyleSection && (\n <div className=\"di-section di-text-section\">\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">文字</div>\n {renderSectionReset('text', '文字')}\n </div>\n <div className=\"di-text-card\">\n {/* 文字样式:组件化预设 + 单项覆盖 */}\n <div className=\"di-text-field-row di-text-field-row--style\">\n <span className=\"di-text-field-label\">样式</span>\n {(() => {\n const curSize = pendingFontSize || fontSizeVal || '—';\n const curWeight = pendingFontWeight || fontWeightVal;\n const curColor = pendingTextColor || textColorVal;\n const curStyle = getTypographyStyle(curSize, curWeight, curColor, typographyStyles, typographyTokens);\n const showTypographyCustomControls = typographyCustomMode || !curStyle;\n const sizeOptions = fontSizeOptions ?? [];\n const curSizeOpt = sizeOptions.find(opt => opt.value === curSize);\n const curWeightOpt = fontWeightOptions.find(o => o.value === curWeight) ?? fontWeightOptions[1];\n const { label: tcLabel, sub: tcSub, isHardcoded: tcHard } = getDisplayLabel(curColor, tokenMap, colorPalette, tokenLabels);\n const chevron = (\n <svg width=\"8\" height=\"5\" viewBox=\"0 0 8 5\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 1l3 3 3-3\" stroke=\"#9ca3af\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n\n return (\n <>\n <div className={`di-typography-toolbar${showTypographyCustomControls ? ' di-typography-toolbar--custom' : ''}`}>\n {!showTypographyCustomControls && (\n <div className=\"di-typography-control-wrap\">\n <button\n className=\"di-typography-control di-typography-control--style-compact\"\n type=\"button\"\n title=\"文字样式\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowFontSizeDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(false);\n setShowTypographyStyleDrop(v=>!v);\n }}\n >\n <span className=\"di-token-name\">{curStyle?.label}</span>\n {chevron}\n </button>\n </div>\n )}\n\n {showTypographyCustomControls ? (\n <>\n <div className=\"di-typography-control-wrap\">\n <button\n className={`di-typography-control di-typography-control--size${curSizeOpt ? ' di-typography-control--size-token' : ''}`}\n type=\"button\"\n title=\"字号\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowTypographyStyleDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(false);\n setShowStyleDrop(false);\n setExpandedBorderColor(false);\n setShowShadowDrop(false);\n setCustomRadius('');\n setSizeDraft({});\n setFontSizeCustomDraft(curSize === '—' ? '' : formatLengthControlValue(curSize));\n setShowFontSizeDrop(v=>!v);\n }}\n >\n {curSizeOpt && <span className=\"di-border-style-label\">{curSizeOpt.label}</span>}\n <span className=\"di-typography-control-value\">{formatFontSizeControlValue(curSize)}</span>\n {chevron}\n </button>\n {showFontSizeDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowFontSizeDrop(false)} />\n <div className=\"di-border-style-drop di-typography-size-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {sizeOptions.map(opt => (\n <button key={opt.value}\n className={`di-border-style-drop-item${curSizeOpt?.value===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setTypographyCustomMode(true);\n setPendingFontSize(opt.value);\n liveApply('font-size', opt.value);\n setShowFontSizeDrop(false);\n }}>\n <span className=\"di-border-style-label\">{opt.label}</span>\n <span className=\"di-border-style-name\">{formatLengthControlValue(opt.value)}</span>\n </button>\n ))}\n <div className=\"di-dropdown-custom\">\n <input\n className=\"di-dropdown-custom-input\"\n value={fontSizeCustomDraft}\n placeholder=\"13\"\n onChange={(e) => {\n const draft = e.target.value;\n const next = normalizeCssLengthInput(draft);\n setFontSizeCustomDraft(draft);\n if (!next || !supportsCssValue('font-size', next)) return;\n setTypographyCustomMode(true);\n setPendingFontSize(next);\n liveApply('font-size', next);\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const next = normalizeCssLengthInput(fontSizeCustomDraft);\n if (!next || !supportsCssValue('font-size', next)) return;\n setTypographyCustomMode(true);\n setPendingFontSize(next);\n liveApply('font-size', next);\n setShowFontSizeDrop(false);\n }\n }}\n />\n <button\n type=\"button\"\n className=\"di-dropdown-custom-apply\"\n onClick={(e) => {\n e.stopPropagation();\n const next = normalizeCssLengthInput(fontSizeCustomDraft);\n if (!next || !supportsCssValue('font-size', next)) return;\n setTypographyCustomMode(true);\n setPendingFontSize(next);\n liveApply('font-size', next);\n setShowFontSizeDrop(false);\n }}\n >\n 应用\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-typography-control-wrap\">\n <button\n className=\"di-typography-control di-typography-control--weight\"\n type=\"button\"\n title=\"字重\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowTypographyStyleDrop(false);\n setShowFontSizeDrop(false);\n setExpandedTextColor(false);\n setShowWeightDrop(v=>!v);\n }}\n >\n <span className=\"di-border-style-label\" style={curWeightOpt.value === 'none' ? { color: '#9ca3af' } : undefined}>{curWeightOpt.label}</span>\n <span className=\"di-typography-control-value\">{curWeight}</span>\n {chevron}\n </button>\n {showWeightDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowWeightDrop(false)} />\n <div className=\"di-border-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {fontWeightOptions.map(opt => (\n <button key={opt.value}\n className={`di-border-style-drop-item${curWeight===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => { setTypographyCustomMode(true); setPendingFontWeight(opt.value); liveApply('font-weight',opt.value); setShowWeightDrop(false); }}>\n <span className=\"di-border-style-label\" style={opt.value === 'none' ? { color: '#9ca3af' } : undefined}>{opt.label}</span>\n <span className=\"di-border-style-name\">{opt.value}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-typography-control-wrap\">\n <ColorSelectButton\n className=\"di-typography-control di-typography-control--color\"\n value={curColor}\n label={tcLabel}\n sub={tcSub}\n isHardcoded={tcHard}\n title=\"颜色\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowTypographyStyleDrop(false);\n setShowFontSizeDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(v=>!v);\n }}\n />\n {expandedTextColor && (\n <ColorDropdown value={curColor} pos={dropPos} colorPalette={colorPalette}\n onChange={c=>{ setTypographyCustomMode(true); setPendingTextColor(c); liveApply('color',c); }}\n onClose={()=>setExpandedTextColor(false)}\n onAddToken={v=>handleAddToken(v,'color')}\n />\n )}\n </div>\n {typographyStyles.length > 0 && (\n <SourcePickerButton\n className=\"di-source-action--field\"\n title=\"选择文字样式 token\"\n onClick={event => {\n const r = event.currentTarget.getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowFontSizeDrop(false);\n setShowWeightDrop(false);\n setExpandedTextColor(false);\n setShowTypographyStyleDrop(v => !v);\n }}\n />\n )}\n </>\n ) : null}\n </div>\n {showTypographyStyleDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowTypographyStyleDrop(false)} />\n <div className=\"di-border-style-drop di-typography-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {typographyStyles.map(style => (\n <button key={style.key}\n className={`di-border-style-drop-item${!showTypographyCustomControls && curStyle?.key===style.key?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n applyTypographyStyle(style);\n setShowTypographyStyleDrop(false);\n }}>\n <span className=\"di-border-style-label\">{style.label}</span>\n <span className=\"di-typography-style-drop-meta\">\n <span className=\"di-border-style-name\">{`${formatLengthControlValue(style.value)} / ${style.fontWeight}`}</span>\n <span className=\"di-shadow-drop-value\">{style.colorVar || style.color}</span>\n </span>\n </button>\n ))}\n {showTypographyCustomControls ? (\n <div className=\"di-typography-custom-note\">\n <span className=\"di-border-style-label\">自定义模式</span>\n <span className=\"di-shadow-drop-value\">当前已展开字号 / 字重 / 颜色单项调整</span>\n </div>\n ) : (\n <button\n type=\"button\"\n className=\"di-typography-custom-action\"\n onClick={() => {\n setTypographyCustomMode(true);\n setShowTypographyStyleDrop(false);\n }}\n >\n <span className=\"di-border-style-label\">基于当前样式自定义</span>\n <span className=\"di-shadow-drop-value\">进入字号 / 字重 / 颜色单项调整</span>\n </button>\n )}\n </div>\n </>\n )}\n </>\n );\n })()}\n </div>\n {/* 文字内容 */}\n {textContent !== null && (\n <div className=\"di-text-field-row\">\n <span className=\"di-text-field-label\">内容</span>\n <textarea className=\"di-note di-note--sm\" defaultValue={textContent}\n ref={(el) => { if (el) resizeTextareaToContent(el); }}\n placeholder=\"修改文字内容...\"\n onChange={e => {\n resizeTextareaToContent(e.currentTarget);\n const el = selectedRef.current;\n if (!el) return;\n const ts = getScopeTargets(el, scope);\n ts.forEach(t => { t.textContent = e.currentTarget.value; });\n }}\n />\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* 外观区 */}\n {!isTextOnlyTarget && (\n <div className=\"di-section di-appearance-section\">\n {(() => {\n const curBackgroundColor = pendingColors['background-color'] ?? colors['background-color'] ?? 'transparent';\n const curBorderWidth = pendingBorderWidth || borderWidthVal || '0px';\n const curBorderStyleValue = pendingBorderStyle || borderStyleVal || 'none';\n const curBorderColor = pendingBorderColor || borderColorVal || 'transparent';\n const curBorderRadius = pendingRadius || radiusVal || '0px';\n const curContainerPreset = getContainerStyle(curBackgroundColor, curBorderWidth, curBorderStyleValue, curBorderColor, curBorderRadius, containerStyles);\n const showContainerCustomControls = containerCustomMode || !curContainerPreset;\n const curLineOpt = BORDER_STYLE_OPTIONS.find(o => o.value === curBorderStyleValue) ?? BORDER_STYLE_OPTIONS[0];\n const curRadiusPreset = matchPreset(radiusPresets, curBorderRadius);\n const { label: backgroundLabel, sub: backgroundSub, isHardcoded: backgroundHard } = getDisplayLabel(curBackgroundColor, tokenMap, colorPalette, tokenLabels);\n const { label: borderColorLabel, sub: borderColorSub, isHardcoded: borderColorHard } = getDisplayLabel(curBorderColor, tokenMap, colorPalette, tokenLabels);\n const backgroundIsEmpty = isTransparentColor(curBackgroundColor);\n const borderColorIsEmpty = isTransparentColor(curBorderColor);\n const hasVisibleBorder = !isZeroLengthValue(curBorderWidth)\n && curBorderStyleValue !== 'none'\n && !borderColorIsEmpty;\n const isAppearanceEmpty = backgroundIsEmpty\n && !hasVisibleBorder\n && isZeroLengthValue(curBorderRadius);\n const borderSummary = `${formatLengthControlValue(curBorderWidth)} / ${curLineOpt.title} / ${formatLengthControlValue(curBorderRadius)}`;\n const containerSummary = `${backgroundLabel} / ${borderSummary}`;\n const chevron = (\n <svg width=\"8\" height=\"5\" viewBox=\"0 0 8 5\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 1l3 3 3-3\" stroke=\"#9ca3af\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n const ensureVisibleBorder = () => {\n if (curBorderWidth === '0px') {\n setPendingBorderWidth('1px');\n liveApply('border-width', '1px');\n }\n if (curBorderStyleValue === 'none') {\n setPendingBorderStyle('solid');\n liveApply('border-style', 'solid');\n }\n };\n\n if (isAppearanceEmpty && !containerCustomMode) {\n return (\n <div className=\"di-section-title-row di-section-title-row--action di-section-title-row--empty\">\n <div className=\"di-section-title\">外观</div>\n <button\n type=\"button\"\n className=\"di-section-icon-action\"\n onClick={() => setContainerCustomMode(true)}\n title=\"添加外观\"\n aria-label=\"添加外观\"\n >\n <Plus size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n );\n }\n\n return (\n <>\n <div className=\"di-section-title\">外观</div>\n <div className={`di-container-toolbar di-appearance-toolbar${showContainerCustomControls ? ' di-container-toolbar--custom di-appearance-toolbar--custom' : ''}`}>\n <div className=\"di-typography-control-wrap di-appearance-field\">\n {showContainerCustomControls && <span className=\"di-appearance-field-label\">样式</span>}\n {showContainerCustomControls ? (\n <CustomSelectButton\n title=\"自定义容器样式\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setShowContainerStyleDrop(v=>!v);\n }}\n />\n ) : (\n <button\n className=\"di-typography-control di-typography-control--style-compact\"\n type=\"button\"\n title=\"容器样式\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setShowContainerStyleDrop(v=>!v);\n }}\n >\n <span className=\"di-token-name\">{curContainerPreset?.label}</span>\n {chevron}\n </button>\n )}\n {showContainerStyleDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowContainerStyleDrop(false)} />\n <div className=\"di-border-style-drop di-container-preset-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {containerStyles.map(style => (\n <button key={style.key}\n className={`di-border-style-drop-item${!showContainerCustomControls && curContainerPreset?.key===style.key?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n applyContainerStyle(style);\n setShowContainerStyleDrop(false);\n }}>\n <span className=\"di-border-style-label\">{style.label}</span>\n <span className=\"di-typography-style-drop-meta\">\n <span className=\"di-border-style-name\">{`${style.backgroundVar || style.backgroundColor} / ${formatLengthControlValue(style.borderWidth)} ${BORDER_STYLE_OPTIONS.find(o => o.value === style.borderStyle)?.title ?? style.borderStyle} / ${formatLengthControlValue(style.borderRadius)}`}</span>\n <span className=\"di-shadow-drop-value\">{style.colorVar || style.borderColor}</span>\n </span>\n </button>\n ))}\n <button\n type=\"button\"\n className={`di-border-style-drop-item${showContainerCustomControls ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n setContainerCustomMode(true);\n setShowContainerStyleDrop(false);\n }}\n >\n <span className=\"di-border-style-label\">自定义</span>\n <span className=\"di-typography-style-drop-meta\">\n <span className=\"di-border-style-name\">{containerSummary}</span>\n <span className=\"di-shadow-drop-value\">使用右侧单项调整</span>\n </span>\n </button>\n </div>\n </>\n )}\n </div>\n\n {showContainerCustomControls ? (\n <>\n <div className=\"di-typography-control-wrap di-appearance-field\">\n <span className=\"di-appearance-field-label\">背景</span>\n <ColorSelectButton\n className=\"di-typography-control di-typography-control--color\"\n value={backgroundIsEmpty ? 'transparent' : curBackgroundColor}\n label={backgroundIsEmpty ? '无' : backgroundLabel}\n sub={backgroundSub}\n isHardcoded={backgroundHard || backgroundIsEmpty}\n title=\"背景色\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setExpandedColor(expandedColor === 'background-color' ? null : 'background-color');\n }}\n />\n {expandedColor === 'background-color' && (\n <ColorDropdown value={backgroundIsEmpty ? '' : curBackgroundColor} pos={dropPos} colorPalette={colorPalette}\n onChange={c => {\n setContainerCustomMode(true);\n setPendingColors(prev => ({ ...prev, 'background-color': c }));\n liveApply('background-color', c);\n }}\n onClose={() => setExpandedColor(null)}\n onAddToken={v=>handleAddToken(v,'background-color')}\n />\n )}\n </div>\n\n <div className=\"di-typography-control-wrap di-appearance-field\">\n <span className=\"di-appearance-field-label\">边框</span>\n <ColorSelectButton\n className=\"di-typography-control di-typography-control--color\"\n value={borderColorIsEmpty ? 'transparent' : curBorderColor}\n label={borderColorIsEmpty ? '无' : borderColorLabel}\n sub={borderColorSub}\n isHardcoded={borderColorHard || borderColorIsEmpty}\n title=\"边框颜色\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedColor(null);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setExpandedBorderColor(v=>!v);\n }}\n />\n {expandedBorderColor && (\n <ColorDropdown value={borderColorIsEmpty ? '' : curBorderColor} pos={dropPos} colorPalette={colorPalette}\n onChange={c => {\n setContainerCustomMode(true);\n setPendingBorderColor(c);\n liveApply('border-color', c);\n ensureVisibleBorder();\n }}\n onClose={() => setExpandedBorderColor(false)}\n onAddToken={v=>handleAddToken(v,'border-color')}\n />\n )}\n </div>\n\n <div className=\"di-typography-control-wrap di-appearance-field\">\n <span className=\"di-appearance-field-label\">粗细</span>\n <button\n className=\"di-typography-control di-border-control--width\"\n type=\"button\"\n title=\"边框粗细\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedBorderColor(false);\n setShowStyleDrop(false);\n setShowRadiusDrop(false);\n setShowBorderWidthDrop(v=>!v);\n }}\n >\n <span className=\"di-typography-control-value\">{formatLengthControlValue(curBorderWidth)}</span>\n {chevron}\n </button>\n {showBorderWidthDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowBorderWidthDrop(false)} />\n <div className=\"di-border-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {borderWidthSteps.map(step => (\n <button key={step}\n className={`di-border-style-drop-item${curBorderWidth===step?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setContainerCustomMode(true);\n setPendingBorderWidth(step);\n liveApply('border-width', step);\n if (step === '0px') {\n setPendingBorderStyle('none');\n liveApply('border-style', 'none');\n } else if (curBorderStyleValue === 'none') {\n setPendingBorderStyle('solid');\n liveApply('border-style', 'solid');\n }\n setShowBorderWidthDrop(false);\n }}>\n <span className=\"di-border-style-name\">{formatLengthControlValue(step)}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-typography-control-wrap di-appearance-field\">\n <span className=\"di-appearance-field-label\">线条</span>\n <button\n className=\"di-typography-control di-border-control--line\"\n type=\"button\"\n title=\"边框线型\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowRadiusDrop(false);\n setShowStyleDrop(v=>!v);\n }}\n >\n <span className=\"di-border-style-label\" style={curLineOpt.value === 'none' ? { color: '#9ca3af' } : undefined}>{curLineOpt.label}</span>\n <span className=\"di-typography-control-value\">{curLineOpt.title}</span>\n {chevron}\n </button>\n {showStyleDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={() => setShowStyleDrop(false)} />\n <div className=\"di-border-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {BORDER_STYLE_OPTIONS.map(opt => (\n <button key={opt.value}\n className={`di-border-style-drop-item${curBorderStyleValue===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setContainerCustomMode(true);\n setPendingBorderStyle(opt.value);\n liveApply('border-style', opt.value);\n if (opt.value === 'none') {\n setPendingBorderWidth('0px');\n liveApply('border-width', '0px');\n } else if (curBorderWidth === '0px') {\n setPendingBorderWidth('1px');\n liveApply('border-width', '1px');\n }\n setShowStyleDrop(false);\n }}>\n <span className=\"di-border-style-label\" style={opt.value === 'none' ? { color: '#9ca3af' } : undefined}>{opt.label}</span>\n <span className=\"di-border-style-name\">{opt.title}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-typography-control-wrap di-appearance-field\">\n <span className=\"di-appearance-field-label\">圆角</span>\n <button\n className=\"di-typography-control di-border-control--radius\"\n type=\"button\"\n title=\"圆角\"\n onClick={e => {\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowContainerStyleDrop(false);\n setExpandedBorderColor(false);\n setShowBorderWidthDrop(false);\n setShowStyleDrop(false);\n setCustomRadius(curBorderRadius === '0px' ? '' : formatLengthControlValue(curBorderRadius));\n setShowRadiusDrop(v=>!v);\n }}\n >\n {curRadiusPreset && <span className=\"di-border-style-label\">{curRadiusPreset.label}</span>}\n <span className=\"di-typography-control-value\">{formatLengthControlValue(curBorderRadius)}</span>\n {chevron}\n </button>\n {showRadiusDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={() => setShowRadiusDrop(false)} />\n <div className=\"di-border-style-drop di-radius-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {radiusPresets.map(opt => (\n <button key={opt.label}\n className={`di-border-style-drop-item${curRadiusPreset?.value===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setContainerCustomMode(true);\n setPendingRadius(opt.value);\n setCustomRadius('');\n liveApply('border-radius', opt.value);\n setShowRadiusDrop(false);\n }}>\n <span className=\"di-border-style-label\">{opt.label}</span>\n {opt.sub && <span className=\"di-border-style-name\">{formatLengthControlValue(opt.sub)}</span>}\n </button>\n ))}\n <div className=\"di-dropdown-custom\">\n <input\n className=\"di-dropdown-custom-input\"\n value={customRadius}\n placeholder=\"12\"\n onChange={(e) => {\n const draft = e.target.value;\n const next = normalizeCssLengthInput(draft);\n setCustomRadius(draft);\n if (!next || !supportsCssValue('border-radius', next)) return;\n setContainerCustomMode(true);\n setPendingRadius(next);\n liveApply('border-radius', next);\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const next = normalizeCssLengthInput(customRadius);\n if (!next || !supportsCssValue('border-radius', next)) return;\n setContainerCustomMode(true);\n setPendingRadius(next);\n liveApply('border-radius', next);\n setShowRadiusDrop(false);\n }\n }}\n />\n <button\n type=\"button\"\n className=\"di-dropdown-custom-apply\"\n onClick={(e) => {\n e.stopPropagation();\n const next = normalizeCssLengthInput(customRadius);\n if (!next || !supportsCssValue('border-radius', next)) return;\n setContainerCustomMode(true);\n setPendingRadius(next);\n liveApply('border-radius', next);\n setShowRadiusDrop(false);\n }}\n >\n 应用\n </button>\n </div>\n </div>\n </>\n )}\n </div>\n </>\n ) : (\n <div className=\"di-typography-readout\" aria-label=\"当前容器样式参数\">\n <span className=\"di-typography-readout-line\">{containerSummary}</span>\n <span className=\"di-typography-readout-token\">\n {`${curContainerPreset?.backgroundVar || curBackgroundColor} / ${curContainerPreset?.colorVar || curBorderColor}`}\n </span>\n </div>\n )}\n </div>\n </>\n );\n })()}\n </div>\n )}\n\n {/* 布局区 */}\n {!componentMeta && (\n <div className=\"di-section di-layout-section\">\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">布局</div>\n {renderSectionReset('layout', '布局')}\n </div>\n <div className=\"di-layout-grid\">\n <div className=\"di-layout-card di-layout-card--position\">\n <div className=\"di-layout-card-title\">位置</div>\n <div className=\"di-position-fields\" aria-label=\"移动元素\">\n {([\n { key: 'x', label: 'X', value: getDisplayPosition(pendingTranslate ?? translateVal).x },\n { key: 'y', label: 'Y', value: getDisplayPosition(pendingTranslate ?? translateVal).y },\n ] as const).map(item => (\n <div className=\"di-position-row\" key={item.key}>\n <AxisNumberInput\n label={item.label}\n value={formatLengthControlValue(`${Math.round(item.value)}px`)}\n ariaLabel={`${item.label} 位置`}\n inputClassName=\"di-position-value\"\n onChangeValue={next => setTranslateAxis(item.key, next)}\n onStep={delta => stepTranslateAxis(item.key, delta)}\n />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"di-layout-card di-layout-card--size\">\n <div className=\"di-layout-card-title\">尺寸</div>\n {([\n { key: 'width', label: 'W', current: widthVal, pending: pendingWidth, mode: widthMode, pendingMode: pendingWidthMode },\n { key: 'height', label: 'H', current: heightVal, pending: pendingHeight, mode: heightMode, pendingMode: pendingHeightMode },\n ] as const).map(item => {\n const cur = displaySizeValue(item.pending, item.current);\n const inputVal = formatLengthControlValue(sizeDraft[item.key] ?? cur);\n const activeMode = item.pendingMode ?? item.mode;\n return (\n <div className=\"di-size-row\" key={item.key}>\n <div className=\"di-size-field\">\n <AxisNumberInput\n label={item.label}\n value={inputVal}\n ariaLabel={`${item.label} 自定义尺寸`}\n inputClassName=\"di-size-value\"\n onChangeValue={next => {\n setSizeDraft(prev => ({ ...prev, [item.key]: next }));\n setSize(item.key, next, 'fixed');\n }}\n onFocusValue={() => setSizeDraft(prev => ({ ...prev, [item.key]: cur }))}\n onBlur={() => setSizeDraft(prev => {\n const next = { ...prev };\n delete next[item.key];\n return next;\n })}\n onStep={delta => stepSize(item.key, inputVal, delta)}\n onEnter={event => event.currentTarget.blur()}\n />\n <select\n className=\"di-size-mode-select\"\n value={activeMode}\n aria-label={`${item.label} 尺寸模式`}\n onChange={e => {\n const mode = e.target.value as SizeMode;\n setSize(item.key, item.current, mode);\n }}\n >\n {SIZE_OPTIONS.map(opt => (\n <option key={opt.mode} value={opt.mode}>{opt.label}</option>\n ))}\n </select>\n </div>\n </div>\n );\n })}\n </div>\n\n {canAlignChildren && (\n <div className=\"di-layout-card di-layout-card--alignment\">\n <div className=\"di-layout-card-title\">对齐</div>\n <div className=\"di-alignment-fields\">\n {([\n {\n prop: 'justify-content',\n label: '水平',\n value: pendingJustifyContent || justifyVal || 'normal',\n options: JUSTIFY_OPTIONS,\n },\n {\n prop: 'align-items',\n label: '垂直',\n value: pendingAlignItems || alignItemsVal || 'normal',\n options: ALIGN_ITEMS_OPTIONS,\n },\n ] as const).map(item => {\n const selectValue = item.options.some(option => option.value === item.value) ? item.value : 'normal';\n return (\n <label className=\"di-alignment-field\" key={item.prop}>\n <span className=\"di-alignment-label\">{item.label}</span>\n <select\n className=\"di-alignment-select\"\n value={selectValue}\n aria-label={`${item.label}对齐`}\n onChange={event => setAlignment(item.prop, event.currentTarget.value)}\n >\n {item.options.map(option => (\n <option key={option.value} value={option.value}>{option.label}</option>\n ))}\n </select>\n </label>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* 阴影区 */}\n <div className=\"di-section di-shadow-section\">\n <div className=\"di-shadow-panel\">\n {(() => {\n const activeShadow = pendingShadow || shadowVal;\n const activeShadowAuthored = pendingShadow ? pendingShadow : shadowAuthoredVal;\n const matchedOption = shadowOptions.find(option => canonicalizeShadowValue(option.value) === canonicalizeShadowValue(activeShadow)) ?? null;\n const activeOption = matchedOption ?? shadowOptions[0];\n const isShadowCustom = shadowCustomMode || (!matchedOption && activeShadow !== 'none');\n const shadowDisplay = isShadowCustom\n ? { label: '自定义', sub: formatShadowDisplay(activeShadow), isHardcoded: true }\n : getShadowDisplay(activeShadow, activeShadowAuthored, shadowTokens);\n const shadowParts = parseShadowParts(activeShadow);\n const { label: shadowColorLabel, sub: shadowColorSub, isHardcoded: shadowColorHard } = getDisplayLabel(shadowParts.color, tokenMap, colorPalette, tokenLabels);\n const shadowControlLabel = isShadowCustom ? '自定义' : activeOption.label;\n const isShadowEmpty = !isShadowCustom && activeShadow === 'none';\n const hasShadowSourceOptions = shadowOptions.some(option => Boolean(option.cssVar));\n const openShadowMenu = (trigger: HTMLElement) => {\n const r = trigger.getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowShadowDrop(v => !v);\n };\n const addCustomShadow = () => {\n const value = buildShadowValue(EMPTY_CUSTOM_SHADOW_PARTS);\n setPendingShadow(value);\n setShadowCustomMode(true);\n liveApply('box-shadow', value);\n setShowShadowDrop(false);\n };\n const shadowDrop = showShadowDrop ? (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={() => setShowShadowDrop(false)} />\n <div className=\"di-border-style-drop di-shadow-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {shadowOptions.map(option => {\n const isOn = !isShadowCustom && canonicalizeShadowValue(option.value) === canonicalizeShadowValue(activeShadow);\n return (\n <button\n key={option.cssVar || option.label}\n className={`di-border-style-drop-item${isOn ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n setPendingShadow(option.value);\n setShadowCustomMode(false);\n liveApply('box-shadow', option.value);\n setShowShadowDrop(false);\n }}\n >\n <span className=\"di-border-style-label\" style={option.cssVar ? undefined : { color: '#9ca3af' }}>{option.label}</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">{option.cssVar || option.usage}</span>\n {option.cssVar && <span className=\"di-shadow-drop-value\">{option.value}</span>}\n </span>\n </button>\n );\n })}\n <button\n className={`di-border-style-drop-item${isShadowCustom ? ' di-border-style-drop-item--on' : ''}`}\n onClick={() => {\n const value = buildShadowValue(EMPTY_CUSTOM_SHADOW_PARTS);\n setPendingShadow(value);\n setShadowCustomMode(true);\n liveApply('box-shadow', value);\n setShowShadowDrop(false);\n }}\n >\n <span className=\"di-custom-option-label\">自定义</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">手动调整参数</span>\n <span className=\"di-shadow-drop-value\">X / Y / 模糊 / 扩散 / 颜色</span>\n </span>\n </button>\n </div>\n </>\n ) : null;\n return (\n <>\n {isShadowEmpty ? (\n <div className=\"di-section-title-row di-section-title-row--action di-section-title-row--empty\">\n <div className=\"di-section-title\">阴影</div>\n <button\n type=\"button\"\n className=\"di-section-icon-action\"\n onClick={addCustomShadow}\n title=\"添加阴影\"\n aria-label=\"添加阴影\"\n >\n <Plus size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n ) : (\n <>\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">阴影</div>\n {renderSectionReset('shadow', '阴影')}\n </div>\n <div className={`di-shadow-card${hasSectionChanges('shadow') ? ' di-shadow-card--with-reset' : ''}`}>\n <div className=\"di-shadow-field-row\">\n <span className=\"di-text-field-label\">样式</span>\n {isShadowCustom ? (\n <div className=\"di-shadow-custom-toolbar\">\n <ColorSelectButton\n className=\"di-color-select--fill\"\n value={shadowParts.color}\n label={shadowColorLabel}\n sub={shadowColorSub}\n isHardcoded={shadowColorHard}\n title=\"阴影颜色\"\n onClick={event => {\n const r = (event.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowShadowColorDrop(v => !v);\n }}\n />\n {hasShadowSourceOptions && (\n <SourcePickerButton\n className=\"di-source-action--field\"\n title=\"选择阴影 token\"\n onClick={event => openShadowMenu(event.currentTarget)}\n />\n )}\n </div>\n ) : (\n <div className=\"di-shadow-toolbar\">\n <ColorSelectButton\n className=\"di-color-select--fill di-color-select--shadow\"\n value=\"#ffffff\"\n label={shadowControlLabel}\n sub={shadowDisplay.sub}\n isHardcoded={!activeOption.cssVar}\n title=\"阴影\"\n swatchClassName=\"di-color-select-swatch--shadow\"\n swatchStyle={{ boxShadow: activeShadow }}\n onClick={event => openShadowMenu(event.currentTarget)}\n />\n </div>\n )}\n </div>\n {isShadowCustom && (\n <div className=\"di-shadow-field-row di-shadow-field-row--params\">\n <span className=\"di-text-field-label\">参数</span>\n <div className=\"di-shadow-custom-grid\">\n {([\n { key: 'x', label: 'X', value: shadowParts.x },\n { key: 'y', label: 'Y', value: shadowParts.y },\n { key: 'blur', label: '模糊', value: shadowParts.blur },\n { key: 'spread', label: '扩散', value: shadowParts.spread },\n ] as const).map(item => (\n <div className=\"di-shadow-custom-row\" key={item.key}>\n <AxisNumberInput\n label={item.label}\n value={formatLengthControlValue(item.value)}\n ariaLabel={`阴影${item.label}`}\n inputClassName=\"di-shadow-custom-input\"\n wideLabel={item.key === 'blur' || item.key === 'spread'}\n onChangeValue={next => setCustomShadowPart(item.key, next)}\n onStep={delta => stepCustomShadowPart(item.key, delta)}\n />\n </div>\n ))}\n {showShadowColorDrop && (\n <ColorDropdown\n value={shadowParts.color}\n pos={dropPos}\n colorPalette={colorPalette}\n onChange={color => setCustomShadowPart('color', color)}\n onClose={() => setShowShadowColorDrop(false)}\n />\n )}\n </div>\n </div>\n )}\n </div>\n </>\n )}\n {shadowDrop}\n </>\n );\n })()}\n </div>\n </div>\n\n {/* 间距区 */}\n <div className=\"di-section di-space-section\">\n <div className=\"di-section-title-row di-section-title-row--action\">\n <div className=\"di-section-title\">间距</div>\n {renderSectionReset('space', '间距')}\n </div>\n <div className=\"di-space-row\">\n <SpaceCard\n title=\"内边距\" variant=\"padding\"\n value={activePaddingValue}\n spaceSteps={spaceSteps}\n custom={shouldUseCustomSpaceControls('padding', activePaddingValue)}\n onCustomChange={v => {\n setSpaceCustomModes(prev => ({ ...prev, padding: v }));\n }}\n onChange={v => { setPendingPadding(v); liveApply('padding', v); }}\n />\n <SpaceCard\n title=\"外边距\" variant=\"margin\"\n value={activeMarginValue}\n spaceSteps={spaceSteps}\n custom={shouldUseCustomSpaceControls('margin', activeMarginValue)}\n onCustomChange={v => {\n setSpaceCustomModes(prev => ({ ...prev, margin: v }));\n }}\n onChange={v => { setPendingMargin(v); liveApply('margin', v); }}\n />\n {showElementGapControl && (\n <SpaceCard\n title=\"元素间距\" variant=\"gap\"\n value={activeGapValue}\n spaceSteps={spaceSteps}\n custom={shouldUseCustomSpaceControls('gap', activeGapValue)}\n onCustomChange={v => {\n setSpaceCustomModes(prev => ({ ...prev, gap: v }));\n }}\n onChange={v => { setPendingGap(v); liveApply('gap', v); }}\n />\n )}\n </div>\n </div>\n </>\n )}\n\n <div className=\"di-section di-annotation-section\">\n <div className={`di-section-title-row di-section-title-row--action${annotationOpen ? '' : ' di-section-title-row--empty'}`}>\n <div className=\"di-section-title-group\">\n <div className=\"di-section-title\">标注</div>\n {localDraftEntries.some(entry => entry.changes.some(change => change.prop.startsWith('annotation:'))) && (\n <span className=\"di-annotation-count\">已记录</span>\n )}\n </div>\n <button\n type=\"button\"\n className=\"di-section-icon-action\"\n onClick={() => setAnnotationOpen(open => !open)}\n title={annotationOpen ? '收起标注' : '添加标注'}\n aria-label={annotationOpen ? '收起标注' : '添加标注'}\n >\n {annotationOpen ? <Minus size={14} strokeWidth={2.4} aria-hidden=\"true\" /> : <Plus size={14} strokeWidth={2.4} aria-hidden=\"true\" />}\n </button>\n </div>\n {annotationOpen && (\n <div className=\"di-annotation-card\">\n <label className=\"di-annotation-row di-annotation-row--text\">\n <textarea\n className=\"di-annotation-textarea\"\n value={annotationText}\n placeholder=\"直接写你的想法,例如:这里要保持高亮但不要用实底主按钮样式。AI 会判断这是设计说明、产品规则还是开发备注。\"\n rows={2}\n onChange={event => {\n const nextText = event.currentTarget.value;\n setAnnotationText(nextText);\n updateAnnotationDraft(nextText);\n resizeTextareaToContent(event.currentTarget);\n }}\n ref={(node) => { if (node) resizeTextareaToContent(node); }}\n />\n </label>\n </div>\n )}\n </div>\n\n <div className=\"di-section\">\n <div className=\"di-section-title\">本次修改内容 {localDraftChangeCount}</div>\n <div className=\"di-inbox-summary\">\n {localDraftEntries.length > 0 ? (\n <div className=\"di-inbox-list\">\n {localDraftEntries.map((entry) => (\n <div className=\"di-inbox-card di-inbox-card--draft\" key={entry.key}>\n <div className=\"di-inbox-card-head\">\n <div>\n <div className=\"di-inbox-target\">{entry.targetLabel}</div>\n <div className=\"di-inbox-meta\">{entry.scopeLabel} · {entry.selector}</div>\n </div>\n <button\n className=\"di-inbox-icon-btn\"\n onClick={() => handleDeleteLocalDraft(entry.key)}\n title=\"删除这个对象的全部修改\"\n aria-label=\"删除这个对象的全部修改\"\n >\n <Trash2 size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n <ol className=\"di-inbox-change-list\">\n {entry.changes.map((change, idx) => (\n <li className=\"di-inbox-change-item\" key={`${entry.key}-${change.prop}-${idx}`}>\n <span className=\"di-inbox-change-text\">\n {idx + 1}. {getChangeLabel(change.prop)}:{formatStoredChangeRecordValue(change.prop, change.from)} → {formatStoredChangeRecordValue(change.prop, change.val)}\n </span>\n <button\n className=\"di-inbox-icon-btn di-inbox-icon-btn--mini\"\n onClick={() => handleResetLocalDraftChange(entry.key, change.prop)}\n title=\"移除并重置这条修改\"\n aria-label=\"移除并重置这条修改\"\n >\n <Minus size={14} strokeWidth={2.4} aria-hidden=\"true\" />\n </button>\n </li>\n ))}\n </ol>\n </div>\n ))}\n </div>\n ) : styleIntentSummary.pendingEntries.length === 0 ? (\n <div className=\"di-empty\">还没有记录的修改</div>\n ) : null}\n {styleIntentSummary.pendingEntries.length > 0 ? (\n <div className=\"di-inbox-list di-inbox-list--stored\">\n {styleIntentSummary.pendingEntries.map((entry) => (\n <div className=\"di-inbox-card\" key={entry.id}>\n <div className=\"di-inbox-card-head\">\n <div className=\"di-inbox-target\">{entry.targetLabel || entry.selector || '未命名对象'}</div>\n <button\n className=\"di-inbox-icon-btn\"\n onClick={() => handleDeleteStyleIntent(entry.id)}\n title=\"删除这条已记录对象\"\n aria-label=\"删除这条已记录对象\"\n >\n <Trash2 size={14} strokeWidth={2.2} aria-hidden=\"true\" />\n </button>\n </div>\n {entry.note ? <div className=\"di-inbox-note\">{entry.note}</div> : null}\n <ol className=\"di-inbox-change-list\">\n {entry.entries.flatMap((group) => group.changes.map((change) => ({ selector: group.selector, ...change }))).map((change, idx) => (\n <li className=\"di-inbox-change-item\" key={`${entry.id}-${change.selector}-${change.prop}-${idx}`}>\n <span className=\"di-inbox-change-text\">\n {idx + 1}. {getChangeLabel(change.prop)}:{change.from ? `${formatStoredChangeRecordValue(change.prop, change.from)} → ` : ''}{formatStoredChangeRecordValue(change.prop, change.val)}\n </span>\n <button\n className=\"di-inbox-icon-btn di-inbox-icon-btn--mini\"\n onClick={() => handleDeleteStyleIntent(entry.id, change.selector, change.prop)}\n title=\"删除这条已记录属性\"\n aria-label=\"删除这条已记录属性\"\n >\n <Minus size={14} strokeWidth={2.4} aria-hidden=\"true\" />\n </button>\n </li>\n ))}\n </ol>\n </div>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n\n </div>\n\n {/* 底部操作 */}\n {(() => {\n const hasPending = localDraftChangeCount > 0 || currentPendingChangeCount > 0 || !!note;\n return (\n <div className={`di-foot${canCreateComponent ? ' di-foot--with-maker' : ' di-foot--without-maker'}`}>\n <div className=\"di-foot-secondary-actions\">\n <button className=\"di-btn-cancel\" onClick={handleReset}>重置</button>\n <button className=\"di-btn-cancel\" onClick={() => {\n const el = selectedRef.current;\n if (!el) return;\n // 合并实际值 + pending 改动,pending 优先\n const effectiveColors = { ...colors, ...pendingColors };\n const pending: [string, string][] = [\n ...Object.entries(effectiveColors).filter(([, v]) => v && v !== 'transparent'),\n [(pendingTextColor || textColorVal) ? 'color' : '', pendingTextColor || textColorVal],\n [(pendingRadius || radiusVal) ? 'border-radius' : '', pendingRadius || radiusVal],\n [(pendingShadow || (shadowVal !== 'none' ? shadowVal : '')) ? 'box-shadow' : '', pendingShadow || (shadowVal !== 'none' ? shadowVal : '')],\n [(pendingBorderColor || borderColorVal) ? 'border-color' : '', pendingBorderColor || borderColorVal],\n [(pendingBorderWidth || (borderWidthVal !== '0px' ? borderWidthVal : '')) ? 'border-width' : '', pendingBorderWidth || borderWidthVal],\n [(pendingBorderStyle || (borderStyleVal !== 'none' ? borderStyleVal : '')) ? 'border-style' : '', pendingBorderStyle || borderStyleVal],\n [(pendingFontSize || fontSizeVal) ? 'font-size' : '', pendingFontSize || fontSizeVal],\n [(pendingFontWeight || fontWeightVal) ? 'font-weight' : '', pendingFontWeight || fontWeightVal],\n [(pendingPadding || (paddingVal !== '0px' ? paddingVal : '')) ? 'padding' : '', pendingPadding || paddingVal],\n [(pendingMargin || (marginVal !== '0px' ? marginVal : '')) ? 'margin' : '', pendingMargin || marginVal],\n [(pendingGap || (gapVal !== '0px' ? gapVal : '')) ? 'gap' : '', pendingGap || gapVal],\n [(pendingWidth || widthVal) ? 'width' : '', pendingWidth || widthVal],\n [(pendingHeight || heightVal) ? 'height' : '', pendingHeight || heightVal],\n [pendingJustifyContent ? 'justify-content' : '', pendingJustifyContent],\n [pendingAlignItems ? 'align-items' : '', pendingAlignItems],\n ].filter(([k, v]) => k && v) as [string, string][];\n const selector = getSelectorForScope(el, scope);\n const css = pending.length > 0\n ? `${selector} {\\n${pending.map(([p, v]) => ` ${p}: ${v};`).join('\\n')}\\n}`\n : `/* ${selector} — 暂无改动 */`;\n const ta = document.createElement('textarea');\n ta.value = css;\n ta.style.cssText = 'position:fixed;opacity:0;top:0;left:0';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n _copiedStyles = pending.map(([p, v]) => ({ prop: p, val: v }));\n setHasCopied(true);\n setCopyMsg('已复制 ✓');\n setTimeout(() => setCopyMsg(''), 1500);\n }}>{copyMsg || '复制样式'}</button>\n {canCreateComponent && (\n <button\n className=\"di-btn-cancel di-btn-maker\"\n onClick={openComponentCreateDrawer}\n title=\"把当前普通元素沉淀为新组件规范\"\n >\n 创建组件\n </button>\n )}\n </div>\n <button\n className=\"di-btn-save\"\n onClick={handleSubmitToAi}\n disabled={!hasPending}\n style={!hasPending ? { opacity: 0.4, cursor: 'not-allowed' } : {}}\n title=\"复制一段可直接发给 AI 的任务文本\"\n >{renderSubmitLabel(submitMsg)}</button>\n </div>\n );\n })()}\n {hasCopied && (\n <div className=\"di-paste-bar\">\n <button className=\"di-btn-paste\" onClick={() => {\n _copiedStyles.forEach(({ prop, val }) => {\n if (prop === 'background-color' || prop === 'background')\n setPendingColors(prev => ({ ...prev, [prop]: val }));\n else if (prop === 'color') setPendingTextColor(val);\n else if (prop === 'border-radius') setPendingRadius(val);\n else if (prop === 'box-shadow') setPendingShadow(val);\n else if (prop === 'border-color') setPendingBorderColor(val);\n else if (prop === 'border-width') setPendingBorderWidth(val);\n else if (prop === 'border-style') setPendingBorderStyle(val);\n else if (prop === 'font-size') setPendingFontSize(val);\n else if (prop === 'font-weight') setPendingFontWeight(val);\n else if (prop === 'padding') setPendingPadding(val);\n else if (prop === 'margin') setPendingMargin(val);\n else if (prop === 'gap') setPendingGap(val);\n else if (prop === 'width') setPendingWidth(val);\n else if (prop === 'height') setPendingHeight(val);\n else if (prop === 'justify-content') setPendingJustifyContent(val);\n else if (prop === 'align-items') setPendingAlignItems(val);\n });\n applyToDOM(_copiedStyles);\n }}>\n 粘贴样式({_copiedStyles.length} 个属性)\n </button>\n </div>\n )}\n\n </div>\n )}\n </>\n );\n}\n\n// ─── 主组件:管理 active + panels 数组 ───────────────────────────\nexport default function DevInspector() {\n const [active, setActive] = useState(false);\n const [tokenMap, setTokenMap] = useState<Record<string, string>>({});\n const [panels, setPanels] = useState<{ id: string; el: Element }[]>([]);\n const [viewportTick, setViewportTick] = useState(0);\n const modalOpenRef = useRef(false);\n\n useEffect(() => { setTokenMap(scanTokenMap()); }, []);\n\n useEffect(() => {\n const fn = (e: KeyboardEvent) => {\n if (!e.defaultPrevented && e.altKey && e.code === 'KeyI' && !isTextEntryTarget(e.target)) {\n e.preventDefault();\n setActive(v => {\n if (v) setPanels([]);\n return !v;\n });\n }\n if (e.key === 'Escape') { setActive(false); setPanels([]); }\n };\n window.addEventListener('keydown', fn);\n return () => window.removeEventListener('keydown', fn);\n }, []);\n\n useEffect(() => {\n const onOver = (e: MouseEvent) => {\n if (!active || modalOpenRef.current) return;\n const raw = e.target as Element;\n if (!raw?.classList) return;\n if (isInsidePanel(raw)) { raw.classList.remove('di-hover'); return; }\n document.querySelectorAll('.di-hover').forEach(item => item.classList.remove('di-hover'));\n resolveSelectionTarget(raw).classList.add('di-hover');\n };\n const onOut = () => {\n document.querySelectorAll('.di-hover').forEach(item => item.classList.remove('di-hover'));\n };\n const onClick = (e: MouseEvent) => {\n if (!active || modalOpenRef.current) return;\n const raw = e.target as Element;\n if (!raw?.classList) return;\n if (isInsidePanel(raw)) return;\n e.preventDefault(); e.stopPropagation();\n const target = resolveSelectionTarget(raw);\n document.querySelectorAll('.di-hover').forEach(item => item.classList.remove('di-hover'));\n setPanels(prev =>\n prev.length === 0\n ? [{ id: 'main', el: target }]\n : prev.map((p, i) => i === 0 ? { ...p, el: target } : p)\n );\n };\n document.addEventListener('mouseover', onOver, true);\n document.addEventListener('mouseout', onOut, true);\n document.addEventListener('click', onClick, true);\n return () => {\n document.removeEventListener('mouseover', onOver, true);\n document.removeEventListener('mouseout', onOut, true);\n document.removeEventListener('click', onClick, true);\n };\n }, [active]);\n\n useEffect(() => {\n if (!active) {\n document.querySelectorAll('.di-selected,.di-hover').forEach(e => e.classList.remove('di-selected','di-hover'));\n }\n }, [active]);\n\n useEffect(() => {\n document.body.style.cursor = active ? 'crosshair' : '';\n return () => { document.body.style.cursor = ''; };\n }, [active]);\n\n useEffect(() => {\n if (!active) return undefined;\n let frame = 0;\n const update = () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => setViewportTick(tick => tick + 1));\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n return () => {\n cancelAnimationFrame(frame);\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }, [active]);\n\n const primaryEl = panels[0]?.el;\n const triggerTooltip = active\n ? `退出编辑(${EXIT_SHORTCUT_LABEL})`\n : `进入编辑(${EDIT_SHORTCUT_LABEL})`;\n\n return (\n <>\n <button\n className={`di-trigger${active ? ' di-trigger--on' : ''}`}\n onClick={() => { setActive(v => !v); if (active) setPanels([]); }}\n title={triggerTooltip}\n aria-label={triggerTooltip}\n data-tooltip={triggerTooltip}\n >\n {active ? '退出' : '编辑'}\n </button>\n\n {/* 已选中标签 */}\n {active && primaryEl && (() => {\n void viewportTick;\n const rect = primaryEl.getBoundingClientRect();\n const labelText = `已选中 ${getElementDisplayName(primaryEl)}`;\n const labelPos = calcSelectionLabelPos(rect, labelText);\n return (\n <div\n className={`di-label di-label--${labelPos.placement}`}\n style={{ top: labelPos.top, left: labelPos.left }}\n >\n {labelText}\n </div>\n );\n })()}\n\n {panels.map((p) => (\n <InspectorPanel\n key={p.id}\n targetEl={p.el}\n tokenMap={tokenMap}\n onTokenMapUpdate={updates => setTokenMap(prev => ({ ...prev, ...updates }))}\n onTargetChange={el => setPanels(prev => prev.map(item => item.id === p.id ? { ...item, el } : item))}\n onClose={() => setPanels(prev => prev.filter(x => x.id !== p.id))}\n />\n ))}\n </>\n );\n}\n","import { createContext, useContext, type ReactNode } from 'react';\nimport { type DevInspectorConfig, defaultDevInspectorConfig, mergeDevInspectorConfig } from './config';\n\nconst DevInspectorConfigContext = createContext<DevInspectorConfig>(defaultDevInspectorConfig);\n\nexport function DevInspectorProvider({\n children,\n config,\n}: {\n children: ReactNode;\n config?: Partial<DevInspectorConfig> & {\n endpoints?: Partial<DevInspectorConfig['endpoints']>;\n tokens?: Partial<DevInspectorConfig['tokens']>;\n };\n}) {\n return (\n <DevInspectorConfigContext.Provider value={mergeDevInspectorConfig(config)}>\n {children}\n </DevInspectorConfigContext.Provider>\n );\n}\n\nexport function useDevInspectorConfig() {\n return useContext(DevInspectorConfigContext);\n}\n","{\n \"title\": {\n \"fontSize\": \"15px\",\n \"fontWeight\": \"700\",\n \"lineHeight\": \"1.4\",\n \"color\": \"#111827\"\n },\n \"sectionLabel\": {\n \"fontSize\": \"12px\",\n \"fontWeight\": \"700\",\n \"lineHeight\": \"1.4\",\n \"color\": \"#374151\"\n },\n \"body\": {\n \"fontSize\": \"12px\",\n \"fontWeight\": \"400\",\n \"lineHeight\": \"1.5\",\n \"color\": \"#6b7280\"\n },\n \"meta\": {\n \"fontSize\": \"11px\",\n \"fontWeight\": \"600\",\n \"lineHeight\": \"1.35\",\n \"color\": \"#94a3b8\"\n },\n \"tinyBadge\": {\n \"fontSize\": \"10px\",\n \"fontWeight\": \"700\",\n \"lineHeight\": \"1.2\",\n \"color\": \"#64748b\"\n }\n}\n","// ─── 类型 ────────────────────────────────────────────────────\nimport type { ReactNode } from 'react';\nimport inspectorTypography from './tokens/typography.json';\n\nexport type PaletteColor = { label: string; val: string; token: string };\nexport type PaletteGroup = { group: string; colors: PaletteColor[] };\n\nexport type DevInspectorComponentPreviewCategory = 'action' | 'display' | 'feedback' | 'container' | 'form' | 'icon' | 'custom';\n\nexport type DevInspectorComponentPreviewVariant = {\n id: string;\n label: string;\n group?: string;\n propsLabel?: string;\n selector?: string;\n usage?: string;\n capabilities?: string[];\n tokenRefs?: string[];\n status?: string;\n render: () => ReactNode;\n};\n\nexport type DevInspectorComponentPreview = {\n type: string;\n label: string;\n category?: DevInspectorComponentPreviewCategory;\n summary?: string;\n selector?: string;\n status?: string;\n variants: DevInspectorComponentPreviewVariant[];\n};\n\nexport type ShadowToken = {\n cssVar: string;\n value: string;\n label: string;\n usage: string;\n};\n\nexport type TypographyToken = {\n key: string;\n label: string;\n fontSizeVar: string;\n fontWeightVar: string;\n colorVar: string;\n fontSize: string;\n fontWeight: string;\n color: string;\n usage: string;\n};\n\nexport type InspectorTypographyLevel = {\n fontSize: string;\n fontWeight: string;\n lineHeight: string;\n color: string;\n};\n\nexport type InspectorTypographyTokens = {\n title: InspectorTypographyLevel;\n sectionLabel: InspectorTypographyLevel;\n body: InspectorTypographyLevel;\n meta: InspectorTypographyLevel;\n tinyBadge: InspectorTypographyLevel;\n};\n\nexport type RadiusPreset = {\n label: string;\n sub: string;\n value: string;\n token: string;\n};\n\nexport type SpaceStep = {\n label: string;\n size: string;\n val: string;\n};\n\nexport type TypographyStyleOption = {\n key: string;\n label: string;\n value: string;\n fontWeight: string;\n color: string;\n colorVar: string;\n usage: string;\n};\n\nexport type FontSizeOption = {\n label: string;\n value: string;\n token?: string;\n};\n\nexport type FontWeightOption = { label: string; value: string };\n\nexport type ContainerStyleOption = {\n key: string;\n label: string;\n backgroundColor: string;\n backgroundVar: string;\n borderColor: string;\n colorVar: string;\n borderWidth: string;\n borderStyle: string;\n borderRadius: string;\n radiusVar?: string;\n usage: string;\n};\n\nexport type BorderStyleOption = ContainerStyleOption;\n\nexport type DevInspectorEndpoints = {\n applyCss: string;\n submitStyleIntent: string;\n styleIntents: string;\n deleteStyleIntent: string;\n handoff: string;\n reveal: string;\n};\n\nexport type DevInspectorTokenConfig = {\n colorPalette: PaletteGroup[];\n tokenLabels: Record<string, string>;\n inspectorTypography: InspectorTypographyTokens;\n radiusPresets: RadiusPreset[];\n spaceSteps: SpaceStep[];\n borderWidthSteps: string[];\n containerStyles?: ContainerStyleOption[];\n borderStyles?: BorderStyleOption[];\n typographyStyles?: TypographyStyleOption[];\n fontSizeOptions?: FontSizeOption[];\n fontWeightOptions: FontWeightOption[];\n shadowTokens: ShadowToken[];\n typographyTokens: TypographyToken[];\n};\n\nexport type DevInspectorConfig = {\n rootId: string;\n endpoints: DevInspectorEndpoints;\n tokens: DevInspectorTokenConfig;\n componentPreviews: DevInspectorComponentPreview[];\n};\n\nexport type DevInspectorConfigOverrides = Omit<Partial<DevInspectorConfig>, 'endpoints' | 'tokens'> & {\n endpoints?: Partial<DevInspectorEndpoints>;\n tokens?: Partial<DevInspectorTokenConfig>;\n};\n\n// ─── 内置最小默认值(项目侧可通过 Provider 覆盖) ───────────────\n\nconst FALLBACK_TYPOGRAPHY_STYLES: TypographyStyleOption[] = [\n {\n key: 'card-title',\n label: '卡片标题',\n value: '14px',\n fontWeight: '700',\n color: '#111827',\n colorVar: '--color-text-strong',\n usage: '卡片、模块、表单区块标题',\n },\n {\n key: 'card-body',\n label: '卡片正文',\n value: '13px',\n fontWeight: '400',\n color: '#374151',\n colorVar: '--color-text-default',\n usage: '卡片描述、正文说明',\n },\n {\n key: 'helper-text',\n label: '辅助文字',\n value: '12px',\n fontWeight: '400',\n color: '#64748b',\n colorVar: '--color-text-muted',\n usage: '提示、说明、次要信息',\n },\n];\n\nconst FALLBACK_FONT_SIZE_OPTIONS: FontSizeOption[] = [\n { label: 'XS', value: '11px', token: '--font-size-xs' },\n { label: 'S', value: '12px', token: '--font-size-s' },\n { label: 'M', value: '14px', token: '--font-size-m' },\n { label: 'L', value: '16px', token: '--font-size-l' },\n { label: 'XL', value: '20px', token: '--font-size-xl' },\n { label: 'XXL', value: '24px', token: '--font-size-xxl' },\n];\n\nconst FALLBACK_CONTAINER_STYLES: ContainerStyleOption[] = [\n {\n key: 'plain-surface',\n label: '纯色容器',\n backgroundColor: '#ffffff',\n backgroundVar: '--color-surface',\n borderColor: 'transparent',\n colorVar: 'transparent',\n borderWidth: '0px',\n borderStyle: 'none',\n borderRadius: '0px',\n usage: '无描边普通容器',\n },\n {\n key: 'surface-card',\n label: '容器边框',\n backgroundColor: '#ffffff',\n backgroundVar: '--color-surface',\n borderColor: '#e5e7eb',\n colorVar: '--color-border-default',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: '8px',\n usage: '普通卡片、表单容器',\n },\n {\n key: 'focus-card',\n label: '强调边框',\n backgroundColor: '#ffffff',\n backgroundVar: '--color-surface',\n borderColor: '#7c3aed',\n colorVar: '--color-brand-primary',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderRadius: '8px',\n usage: '选中态、强调容器',\n },\n];\n\nconst FALLBACK_SHADOW_TOKENS: ShadowToken[] = [\n {\n cssVar: '--shadow-soft',\n value: '0 14px 42px rgba(15,23,42,0.08)',\n label: '柔和',\n usage: '普通卡片、表单容器',\n },\n {\n cssVar: '--shadow-floating',\n value: '0 22px 56px rgba(15,23,42,0.14)',\n label: '浮起',\n usage: '浮层、Popover、悬浮卡片',\n },\n {\n cssVar: '--shadow-emphasis',\n value: '0 24px 72px rgba(109,93,252,0.18)',\n label: '强调',\n usage: '品牌强调、选中态',\n },\n];\n\nconst FALLBACK_TOKENS: DevInspectorTokenConfig = {\n colorPalette: [],\n tokenLabels: {},\n inspectorTypography: inspectorTypography as InspectorTypographyTokens,\n radiusPresets: [\n { label: '无', sub: '', value: '0px', token: '' },\n { label: 'S', sub: '4px', value: '4px', token: '' },\n { label: 'M', sub: '8px', value: '8px', token: '' },\n { label: 'L', sub: '12px', value: '12px', token: '' },\n { label: 'XL', sub: '16px', value: '16px', token: '' },\n { label: 'XXL', sub: '24px', value: '24px', token: '' },\n ],\n spaceSteps: [\n { label: '无', size: '', val: '0px' },\n { label: 'S', size: '4px', val: '4px' },\n { label: 'M', size: '8px', val: '8px' },\n { label: 'L', size: '12px', val: '12px' },\n { label: 'XL', size: '16px', val: '16px' },\n { label: 'XXL', size: '24px', val: '24px' },\n ],\n borderWidthSteps: ['0px', '1px', '2px', '4px'],\n containerStyles: FALLBACK_CONTAINER_STYLES,\n typographyStyles: FALLBACK_TYPOGRAPHY_STYLES,\n fontSizeOptions: FALLBACK_FONT_SIZE_OPTIONS,\n fontWeightOptions: [\n { label: '常', value: '400' },\n { label: '中', value: '500' },\n { label: '粗', value: '600' },\n { label: '黑', value: '700' },\n ],\n shadowTokens: FALLBACK_SHADOW_TOKENS,\n typographyTokens: [],\n};\n\nexport const defaultDevInspectorConfig: DevInspectorConfig = {\n rootId: 'dev-inspector-root',\n endpoints: {\n applyCss: '/__dev/apply-css',\n submitStyleIntent: '/__dev/submit-style-intent',\n styleIntents: '/__dev/style-intents',\n deleteStyleIntent: '/__dev/style-intents/delete',\n handoff: '/__dev/handoff',\n reveal: '/__dev/reveal',\n },\n tokens: FALLBACK_TOKENS,\n componentPreviews: [],\n};\n\nexport function mergeDevInspectorConfig(\n overrides?: DevInspectorConfigOverrides,\n): DevInspectorConfig {\n return {\n ...defaultDevInspectorConfig,\n ...overrides,\n endpoints: {\n ...defaultDevInspectorConfig.endpoints,\n ...overrides?.endpoints,\n },\n tokens: {\n ...defaultDevInspectorConfig.tokens,\n ...overrides?.tokens,\n },\n };\n}\n","export type ComponentMakerVariantItem = {\n id?: string;\n dimension: string;\n name: string;\n label?: string;\n base: string;\n rules: string;\n description?: string;\n};\n\nexport type ComponentMakerEditablePart = {\n id: string;\n label: string;\n value: string;\n fieldName: string;\n editable: boolean;\n readonlyReason?: string;\n};\n\nexport type ComponentMakerSpecDraft = {\n sourceMode: string;\n action: string;\n classification?: string;\n componentName: string;\n usage?: string;\n editableParts?: ComponentMakerEditablePart[];\n variants: string;\n slots: string;\n styleRules: string;\n};\n\nexport type ComponentMakerVariantDraft = {\n dimension: string;\n name: string;\n base: string;\n rules: string;\n items?: ComponentMakerVariantItem[];\n};\n\nexport type ComponentMakerContext = {\n pageTitle: string;\n pageUrl: string;\n targetLabel: string;\n selector: string;\n scopeLabel: string;\n recognitionLines: string[];\n isRecognizedComponent: boolean;\n specDraft?: ComponentMakerSpecDraft;\n variantDraft?: ComponentMakerVariantDraft;\n};\n\nexport function getComponentMakerPreview(context: ComponentMakerContext): string[] {\n if (context.recognitionLines.length) return context.recognitionLines;\n return ['当前是普通元素:请判断是否应沉淀为组件、primitive 或保持局部元素。'];\n}\n\nexport function getComponentMakerSpecLines(draft: ComponentMakerSpecDraft): string[] {\n const editableParts = draft.editableParts ?? [];\n const editablePartLines = editableParts\n .filter(part => part.editable)\n .map(part => `${part.label}=${part.value || '空'}(字段名 ${part.fieldName || part.id})`);\n const readonlyPartLines = editableParts\n .filter(part => !part.editable)\n .map(part => `${part.label}=${part.value || '空'}(只读${part.readonlyReason ? ` / ${part.readonlyReason}` : ''})`);\n\n return [\n ['归属方式', draft.sourceMode],\n ['动作', draft.action],\n ['归类', draft.classification ?? ''],\n ['组件名', draft.componentName],\n ['使用场景', draft.usage ?? ''],\n ['变体 / 状态', draft.variants],\n ['可改内容', editablePartLines.length ? editablePartLines.join(';') : draft.slots],\n ['只读内容', readonlyPartLines.join(';')],\n ['样式规则', draft.styleRules],\n ].flatMap(([label, value]) => {\n const normalized = value.trim();\n return normalized ? [`${label}:${normalized}`] : [];\n });\n}\n\nexport function formatComponentMakerSpecDraft(draft: ComponentMakerSpecDraft): string {\n const lines = getComponentMakerSpecLines(draft);\n return lines.length ? lines.join(';') : '未填写组件规格';\n}\n\nexport function getComponentMakerVariantLines(draft: ComponentMakerVariantDraft): string[] {\n const items = (draft.items ?? []).filter(item => item.name.trim());\n if (items.length) {\n return [\n `变体组:${items.length} 个`,\n ...(draft.name.trim() ? [`代码名:${draft.name.trim()}`] : []),\n ...items.map(item => {\n const label = item.label?.trim() || item.name.trim();\n const desc = item.description?.trim();\n return [\n `${label}(${item.dimension.trim() || '自定义'} / ${item.name.trim()})`,\n `基于:${item.base.trim() || draft.base.trim() || '当前样式'}`,\n `规则:${item.rules.trim()}`,\n ...(desc ? [`说明:${desc}`] : []),\n ].join(';');\n }),\n ];\n }\n\n return [\n ['维度', draft.dimension],\n ['新变体名', draft.name],\n ['基于', draft.base],\n ['变化规则', draft.rules],\n ].flatMap(([label, value]) => {\n const normalized = value.trim();\n return normalized ? [`${label}:${normalized}`] : [];\n });\n}\n\nexport function formatComponentMakerVariantDraft(draft: ComponentMakerVariantDraft): string {\n const lines = getComponentMakerVariantLines(draft);\n return lines.length ? lines.join(';') : '未填写新变体规格';\n}\n\nexport function buildComponentMakerPrompt(context: ComponentMakerContext): string {\n const recognition = getComponentMakerPreview(context).map(line => `- ${line}`).join('\\n');\n const specLines = context.specDraft ? getComponentMakerSpecLines(context.specDraft) : [];\n const variantLines = context.variantDraft ? getComponentMakerVariantLines(context.variantDraft) : [];\n const target = context.isRecognizedComponent\n ? '请基于当前对象补齐组件定义、props、variant/status、可改内容规则和示例用法;只开放组件允许修改的参数。'\n : '请判断是否需要新增组件;如果需要,提炼组件名称、可配置参数、可改内容、variant 和默认样式。若不适合组件化,请说明原因。';\n\n return [\n 'DevInspector 组件制作任务',\n `页面:${context.pageTitle}(${context.pageUrl})`,\n `选中对象:${context.targetLabel}`,\n `定位选择器:${context.selector}`,\n `作用范围:${context.scopeLabel}`,\n '当前识别:',\n recognition,\n ...(specLines.length ? ['用户确认规格:', specLines.map(line => `- ${line}`).join('\\n')] : []),\n ...(variantLines.length ? ['用户要创建的新变体:', variantLines.map(line => `- ${line}`).join('\\n')] : []),\n '目标:',\n target,\n '组件规格原则:',\n '用户在 Inspector 中确认的变体、状态、可改内容、只读内容、token、自定义样式和本次修改内容是组件规格草稿;不要黑盒猜测,优先按这些结构化信息落代码。',\n '约束:',\n '不要手改 dist;优先定位源码组件、tokens 和样式文件;保留业务逻辑,只沉淀组件结构和样式契约。',\n ].join('\\n');\n}\n","import { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport DevInspector from './DevInspector';\nimport { DevInspectorProvider } from './DevInspectorProvider';\nimport { mergeDevInspectorConfig, type DevInspectorConfigOverrides } from './config';\n\nexport function mountDevInspector(\n config?: DevInspectorConfigOverrides,\n) {\n const resolved = mergeDevInspectorConfig(config);\n const existingRoot = document.getElementById(resolved.rootId);\n if (existingRoot) return existingRoot;\n\n const devRoot = document.createElement('div');\n devRoot.id = resolved.rootId;\n document.body.appendChild(devRoot);\n\n createRoot(devRoot).render(\n <StrictMode>\n <DevInspectorProvider config={resolved}>\n <DevInspector />\n </DevInspectorProvider>\n </StrictMode>,\n );\n\n return devRoot;\n}\n"],"mappings":"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","names":["jsx","jsx","componentMeta","change","jsx"]}