@lijinmei-810/dev-inspector 0.1.0 → 0.1.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/dev-inspector.css +1809 -220
- package/dist/index.cjs +3365 -772
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1813 -352
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +30 -9
- package/dist/index.d.ts +30 -9
- package/dist/index.js +3366 -773
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/DevInspector.tsx","../src/DevInspectorProvider.tsx","../src/config.ts","../src/mount.tsx"],"sourcesContent":["export { default as DevInspector, InspectorPanel } from './DevInspector';\nexport { DevInspectorProvider, useDevInspectorConfig } from './DevInspectorProvider';\nexport { mountDevInspector } from './mount';\nexport { defaultDevInspectorConfig, mergeDevInspectorConfig } from './config';\nexport type { DevInspectorConfig, DevInspectorEndpoints, DevInspectorTokenConfig } from './config';\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { CircleHelp } from 'lucide-react';\nimport './dev-inspector.css';\nimport { useDevInspectorConfig } from './DevInspectorProvider';\nimport type { DevInspectorTokenConfig } from './config';\nimport type { PaletteColor, PaletteGroup } from './config';\n\nfunction calcDropPos(rect: DOMRect, dropHeight = 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 return { top: Math.max(8, top), left: rect.left };\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\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 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};\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\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 normalizeColor(val: string): string {\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 val.trim();\n}\n\nfunction formatColorDisplay(val: string): string {\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\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(/\\s+/g, ' ');\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 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 getComponentClasses(el: Element): string[] {\n const componentClasses = getClasses(el).filter(c =>\n !isStateClass(c)\n && !/^lucide(-|$)/.test(c)\n );\n return componentClasses.length ? componentClasses : getClasses(el);\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\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\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 formatTranslate(pos: { x: number; y: number }): string {\n return `${Math.round(pos.x)}px ${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 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 displaySizeValue(cssValue: string, current: string): string {\n if (!cssValue || cssValue === '100%' || cssValue === 'fit-content') return current || '0px';\n return 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 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\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' : value;\n const displaySub = step && step.label !== '无' ? 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 const s = spaceSteps.find(s => s.label.toLowerCase() === draft.toLowerCase());\n onChange(s ? s.val : draft || '0px');\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\">{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\n// SpaceCard 子组件\nfunction SpaceCard({ title, variant, value, onChange, spaceSteps }: {\n title: string;\n variant: 'padding' | 'margin' | 'gap';\n value: string;\n onChange: (v: string) => void;\n spaceSteps: DevInspectorTokenConfig['spaceSteps'];\n}) {\n // gap:宽版 SideInput,图示放 input 左右两侧\n if (variant === 'gap') {\n return (\n <div className=\"di-space-card\">\n <div className=\"di-space-head\">\n <span className=\"di-space-title\">{title}</span>\n </div>\n <div className=\"di-gap-input-row\">\n <div className=\"di-gap-block\" />\n <SideInput value={value} onChange={onChange} spaceSteps={spaceSteps} wide />\n <div className=\"di-gap-block\" />\n </div>\n </div>\n );\n }\n\n // padding / margin:4方向 SideInput\n const sides = parseFourSides(value);\n function updateSide(side: keyof FourSides, v: string) {\n const next = { ...sides, [side]: v };\n onChange(joinFourSides(next));\n }\n\n return (\n <div className=\"di-space-card\">\n <div className=\"di-space-head\">\n <span className=\"di-space-title\">{title}</span>\n </div>\n <div className={`di-boxing di-boxing--${variant}`}>\n <div className=\"di-box-top\"> <SideInput value={sides.top} onChange={v => updateSide('top', v)} spaceSteps={spaceSteps} compact /></div>\n <div className=\"di-box-left\"> <SideInput value={sides.left} onChange={v => updateSide('left', v)} spaceSteps={spaceSteps} compact /></div>\n <div className=\"di-box-center\"><div className=\"di-boxing-block\" /></div>\n <div className=\"di-box-right\"> <SideInput value={sides.right} onChange={v => updateSide('right', v)} spaceSteps={spaceSteps} compact /></div>\n <div className=\"di-box-bottom\"><SideInput value={sides.bottom} onChange={v => updateSide('bottom', v)} spaceSteps={spaceSteps} compact /></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  {componentObj.label} → <code>{componentObj.code}</code>\n  {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 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\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 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 [widthVal, setWidthVal] = useState('');\n const [heightVal, setHeightVal] = useState('');\n const [widthMode, setWidthMode] = useState<SizeMode>('fixed');\n const [heightMode, setHeightMode] = useState<SizeMode>('hug');\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 [showShadowDrop, setShowShadowDrop] = useState(false);\n const [showStyleDrop, setShowStyleDrop] = useState(false);\n const [showWeightDrop, setShowWeightDrop] = useState(false);\n const [showFontSizeDrop, setShowFontSizeDrop] = 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 [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 [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 [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 gapTargetRef = useRef<HTMLElement | null>(null); // gap 实际作用的元素(可能是父容器)\n\n useEffect(() => { modalOpenRef.current = addTokenModal !== null; }, [addTokenModal]);\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 // 选中逻辑\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 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 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\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 setShowShadowDrop(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 const isFlexGrid = (d: string) => d.includes('flex') || d.includes('grid');\n if (isFlexGrid(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 (isFlexGrid(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\n setTranslateVal(parseTranslate(cs.translate));\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 setPendingTranslate(null); setPendingWidth(''); setPendingHeight('');\n setPendingWidthMode(null); setPendingHeightMode(null);\n setSizeDraft({});\n\n setNote('');\n setTextContent(getTextContent(el));\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 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 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 ];\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 nudgeSelected(dx: number, dy: number) {\n const base = pendingTranslate ?? translateVal;\n const next = { x: base.x + dx, y: base.y + dy };\n setPendingTranslate(next);\n liveApply('translate', formatTranslate(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 // ─── 保存并修改 ───────────────────────────────────────────────\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 targetLabel: string;\n selector: string;\n scopeLabel: string;\n changes: { prop: string; from: string; val: string }[];\n }) {\n const inboxJson = '/Users/heqiao/Desktop/Claude练习/项目3-快消AI中台/docs/style-inbox.json';\n const inboxMd = '/Users/heqiao/Desktop/Claude练习/项目3-快消AI中台/docs/STYLE_INBOX.md';\n const changes = params.changes\n .map((change, index) => `${index + 1}. ${getChangeLabel(change.prop)}:${change.from} → ${change.val}`)\n .join('\\n');\n const latestHint = params.entryId\n ? `优先处理 id = ${params.entryId} 这条记录。`\n : '这条任务文本来自当前选中元素的本轮修改。';\n return [\n '请处理这条 DevInspector 样式任务:',\n '',\n latestHint,\n `如需查看累计记录,读取:${inboxJson}`,\n `必要时对照:${inboxMd}`,\n '',\n `对象:${params.targetLabel}`,\n `作用范围:${params.scopeLabel}`,\n `选择器:${params.selector}`,\n '改动:',\n changes,\n '',\n '请先判断是否适合固化进正式组件样式,再修改代码,并在处理后把这条任务标记为已处理。',\n ].join('\\n');\n }\n\n function handleSubmitToAi() {\n const payload = getPendingEntries();\n if (!payload) return;\n const { el, pending, selector } = payload;\n const changes = getPendingChangeRecords();\n if (pending.length === 0 && !note) {\n setSubmitMsg('先改点样式或写备注');\n setTimeout(() => setSubmitMsg(''), 1800);\n return;\n }\n\n const scopeLabel = scope === 'current' ? '当前元素' : '同组件';\n const targetClasses = getClasses(el);\n const targetLabel = targetClasses.length\n ? `${el.tagName.toLowerCase()}.${targetClasses.join('.')}`\n : el.tagName.toLowerCase();\n\n const prompt = buildAiTaskPrompt({\n targetLabel,\n selector,\n scopeLabel,\n changes,\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 getShadowDisplay(shadowVal, shadowAuthoredVal, shadowTokens).label;\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 return '';\n }\n\n function getPendingChangeRecords() {\n const records: { prop: string; from: string; val: string }[] = [];\n const add = (prop: string, from: string, val: string) => records.push({ prop, from, val });\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', getShadowDisplay(shadowVal, shadowAuthoredVal, shadowTokens).label, getShadowDisplay(pendingShadow, pendingShadow, shadowTokens).label);\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', formatTranslate(translateVal), formatTranslate(pendingTranslate));\n if (pendingWidth) add('width', widthVal, pendingWidth);\n if (pendingHeight) add('height', heightVal, pendingHeight);\n if (pendingNewToken) add('token', '新增', `${pendingNewToken.cssVar}: ${pendingNewToken.value}`);\n return records;\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 };\n return map[prop] || prop;\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 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 });\n setPendingColors({});\n setPendingRadius('');\n setPendingShadow('');\n setPendingFontSize(''); setPendingFontWeight(''); setPendingTextColor('');\n setPendingBorderColor(''); setPendingBorderWidth(''); setPendingBorderStyle('');\n setPendingPadding(''); setPendingMargin(''); setPendingGap('');\n setPendingTranslate(null); setPendingWidth(''); setPendingHeight('');\n setPendingWidthMode(null); setPendingHeightMode(null);\n setSizeDraft({});\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 setTranslateVal(parseTranslate(cs.translate));\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 }\n\n function handleClose() {\n onClose();\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-layer-btn\"\n title=\"选中父层\"\n disabled={!selected.parentElement || selected.parentElement === document.body}\n onClick={() => { if (selected.parentElement && selected.parentElement !== document.body) selectEl(selected.parentElement); }}\n >↑</button>\n <button\n className=\"di-layer-btn\"\n title=\"选中第一个子层\"\n disabled={!selected.firstElementChild}\n onClick={() => { if (selected.firstElementChild) selectEl(selected.firstElementChild); }}\n >↓</button>\n </div>\n <div className=\"di-head-right\">\n <button className=\"di-close\" onClick={handleClose}>×</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 同组件 = 忽略激活 / 当前 / 展开等状态类后,共享同一业务类名的元素。\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 {/* 文字区(内容+字号+字重+颜色) */}\n <div className=\"di-section\">\n <div className=\"di-section-title\">文字</div>\n {/* 文字内容 */}\n {textContent !== null && (\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 )}\n {/* 字号 + 字重 + 颜色 三列卡片 */}\n <div className=\"di-border-row\">\n {/* 字号 */}\n <div className=\"di-border-card\">\n <div className=\"di-border-card-title\">字号</div>\n {(() => {\n const curSize = pendingFontSize || fontSizeVal || '—';\n const curWeight = pendingFontWeight || fontWeightVal;\n const curColor = pendingTextColor || textColorVal;\n const matchedToken = getTypographyToken(curSize, curWeight, curColor, typographyTokens);\n const curOpt = matchedToken\n ? fontSizeOptions.find(opt => opt.key === matchedToken.key)\n : null;\n return (\n <>\n <div\n className=\"di-border-style-single di-font-token-trigger\"\n role=\"button\"\n tabIndex={0}\n onClick={e => { const r=(e.currentTarget as HTMLElement).getBoundingClientRect(); setDropPos(calcDropPos(r)); setShowWeightDrop(false); setShowStyleDrop(false); setExpandedTextColor(false); setExpandedBorderColor(false); setShowShadowDrop(false); setCustomRadius(''); setSizeDraft({}); setFontSizeCustomDraft(curSize); setShowFontSizeDrop(v=>!v); }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const r=(e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setFontSizeCustomDraft(curSize);\n setShowFontSizeDrop(v=>!v);\n }\n }}\n >\n {curOpt && <span className=\"di-border-style-label\">{curOpt.label}</span>}\n <span className={`di-border-style-name${curOpt ? '' : ' di-border-style-name--custom'}`}>{curSize}</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 </div>\n {showFontSizeDrop && (\n <>\n <div style={{position:'fixed',inset:0,zIndex:99997}} onClick={()=>setShowFontSizeDrop(false)} />\n <div className=\"di-border-style-drop\" style={{position:'fixed',top:dropPos.top,left:dropPos.left,zIndex:99998}}>\n {fontSizeOptions.map(opt => (\n <button key={opt.key}\n className={`di-border-style-drop-item${curOpt?.key===opt.key?' di-border-style-drop-item--on':''}`}\n onClick={() => {\n setPendingFontSize(opt.value);\n setPendingFontWeight(opt.fontWeight);\n setPendingTextColor(opt.color);\n liveApplyMany([\n { prop: 'font-size', val: opt.value },\n { prop: 'font-weight', val: opt.fontWeight },\n { prop: 'color', val: opt.color },\n ]);\n setShowFontSizeDrop(false);\n }}>\n <span className=\"di-border-style-label\">{opt.label}</span>\n <span className=\"di-border-style-name\">{`${opt.value} / ${opt.fontWeight}`}</span>\n </button>\n ))}\n <div className=\"di-dropdown-custom\">\n <span className=\"di-dropdown-custom-label\">自定义</span>\n <input\n className=\"di-dropdown-custom-input\"\n value={fontSizeCustomDraft}\n placeholder=\"13px\"\n onChange={(e) => setFontSizeCustomDraft(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n />\n <button\n type=\"button\"\n className=\"di-dropdown-custom-apply\"\n onClick={(e) => {\n e.stopPropagation();\n if (!fontSizeCustomDraft.trim()) return;\n setPendingFontSize(fontSizeCustomDraft.trim());\n liveApply('font-size', fontSizeCustomDraft.trim());\n setShowFontSizeDrop(false);\n }}\n >\n 应用\n </button>\n </div>\n </div>\n </>\n )}\n </>\n );\n })()}\n </div>\n\n {/* 字重:单值 + 下拉 */}\n <div className=\"di-border-card\" style={{ position: 'relative' }}>\n <div className=\"di-border-card-title\">字重</div>\n {(() => {\n const cur = pendingFontWeight || fontWeightVal;\n const curOpt = fontWeightOptions.find(o => o.value === cur) ?? fontWeightOptions[1];\n return (\n <>\n <button className=\"di-border-style-single\" style={{ marginTop: 4 }}\n onClick={e => { const r=(e.currentTarget as HTMLElement).getBoundingClientRect(); setDropPos(calcDropPos(r)); setShowWeightDrop(v=>!v); }}>\n <span className=\"di-border-style-label\" style={curOpt.value === 'none' ? { color: '#9ca3af' } : undefined}>{curOpt.label}</span>\n <span className=\"di-border-style-name\">{cur}</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 {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${cur===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => { 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 </>\n );\n })()}\n </div>\n\n {/* 颜色:卡片式 */}\n {(() => {\n const tcVal = pendingTextColor || textColorVal;\n const { label: tcLabel, sub: tcSub, isHardcoded: tcHard } = getDisplayLabel(tcVal, tokenMap, colorPalette, tokenLabels);\n const tcDark = (() => { const m=tcVal.match(/^#([0-9a-f]{6})$/i); if(!m) return true; 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); return (r*299+g*587+b*114)/1000<128; })();\n return (\n <div className=\"di-border-card\" style={{ position: 'relative' }}>\n <div className=\"di-border-card-title\">颜色</div>\n <div className=\"di-border-color-body\" style={{ marginTop: 4 }}>\n <button className={`di-swatch-btn${tcDark?' di-swatch-btn--dark':''}`}\n style={{ background: tcVal||'#1d293d' }}\n onClick={e => { const r=(e.currentTarget as HTMLElement).getBoundingClientRect(); setDropPos(calcDropPos(r)); setExpandedTextColor(v=>!v); }}>\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\"><path d=\"M1 1l4 4 4-4\" stroke={tcDark?'#fff':'#374151'} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>\n </button>\n <div className=\"di-border-color-info\">\n <span className={tcHard?'di-token-name--plain':'di-token-name'}>{tcLabel}</span>\n {tcSub && <span className=\"di-hex\">{tcSub}</span>}\n </div>\n </div>\n {expandedTextColor && (\n <ColorDropdown value={tcVal} pos={dropPos} colorPalette={colorPalette}\n onChange={c=>{ setPendingTextColor(c); liveApply('color',c); }}\n onClose={()=>setExpandedTextColor(false)}\n onAddToken={v=>handleAddToken(v,'color')}\n />\n )}\n </div>\n );\n })()}\n </div>\n </div>\n\n {/* 颜色区 */}\n {Object.keys(colors).length > 0 && (\n <div className=\"di-section\">\n <div className=\"di-section-title\">颜色</div>\n {COLOR_PROPS.filter(({ prop }) => colors[prop]).map(({ label, prop }) => {\n const val = pendingColors[prop] ?? colors[prop];\n const token = tokenMap[val];\n const isDark = (() => {\n const m = val.match(/^#([0-9a-f]{6})$/i);\n if (!m) return false;\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 (r*299 + g*587 + b*114) / 1000 < 128;\n })();\n const isExpanded = expandedColor === prop;\n // 所有颜色 token 列表(从 tokenMap 反转)\n const tokenList = Object.entries(tokenMap)\n .filter(([v]) => v.startsWith('#') && v !== val)\n .map(([v, t]) => ({ val: v, token: t }));\n const { label: dispLabel, sub: dispSub, isHardcoded: dispHard } = getDisplayLabel(val, tokenMap, colorPalette, tokenLabels);\n return (\n <div key={prop} className=\"di-color-row\">\n <span className=\"di-attr-label\">{label}</span>\n <button\n className={`di-swatch-btn${isDark ? ' di-swatch-btn--dark' : ''}`}\n style={{ background: val }}\n onClick={e => { const r = (e.currentTarget as HTMLElement).getBoundingClientRect(); setDropPos(calcDropPos(r)); setExpandedColor(isExpanded ? null : prop); }}\n >\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1l4 4 4-4\" stroke={isDark ? '#fff' : '#374151'} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </button>\n <div className=\"di-color-info\">\n <span className={dispHard ? 'di-token-name--plain' : 'di-token-name'}>{dispLabel}</span>\n {dispSub && <span className=\"di-hex\">{dispSub}</span>}\n </div>\n {isExpanded && (\n <ColorDropdown value={val} pos={dropPos} colorPalette={colorPalette}\n onChange={(c, _tk) => { setPendingColors(prev => ({ ...prev, [prop]: c })); liveApply(prop, c); }}\n onClose={() => setExpandedColor(null)}\n onAddToken={v=>handleAddToken(v, prop)}\n />\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* 布局区 */}\n <div className=\"di-section\">\n <div className=\"di-section-title\">布局</div>\n <div className=\"di-layout-grid\">\n <div className=\"di-layout-card\">\n <div className=\"di-layout-card-title\">位置</div>\n <div className=\"di-nudge-pad\" aria-label=\"移动元素\">\n <button className=\"di-nudge-btn di-nudge-btn--up\" onClick={() => nudgeSelected(0, -1)} title=\"上移 1px\">↑</button>\n <button className=\"di-nudge-btn di-nudge-btn--left\" onClick={() => nudgeSelected(-1, 0)} title=\"左移 1px\">←</button>\n <div className=\"di-nudge-readout\">\n <span>X {Math.round((pendingTranslate ?? translateVal).x)}</span>\n <span>Y {Math.round((pendingTranslate ?? translateVal).y)}</span>\n </div>\n <button className=\"di-nudge-btn di-nudge-btn--right\" onClick={() => nudgeSelected(1, 0)} title=\"右移 1px\">→</button>\n <button className=\"di-nudge-btn di-nudge-btn--down\" onClick={() => nudgeSelected(0, 1)} title=\"下移 1px\">↓</button>\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 = sizeDraft[item.key] ?? cur;\n const activeMode = item.pendingMode ?? item.mode;\n return (\n <div className=\"di-size-row\" key={item.key}>\n <span className=\"di-size-axis\">{item.label}</span>\n <input\n className=\"di-size-value\"\n value={inputVal}\n aria-label={`${item.label} 自定义尺寸`}\n onChange={e => {\n setSizeDraft(prev => ({ ...prev, [item.key]: e.target.value }));\n setSize(item.key, e.target.value, 'fixed');\n }}\n onFocus={e => {\n setSizeDraft(prev => ({ ...prev, [item.key]: cur }));\n e.currentTarget.select();\n }}\n onClick={e => e.currentTarget.select()}\n onMouseUp={e => e.preventDefault()}\n onBlur={() => setSizeDraft(prev => {\n const next = { ...prev };\n delete next[item.key];\n return next;\n })}\n onKeyDown={e => {\n if (e.key === 'Enter') e.currentTarget.blur();\n }}\n />\n <select\n className=\"di-size-mode-select\"\n value={activeMode}\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 );\n })}\n </div>\n </div>\n </div>\n\n {/* 阴影区 */}\n <div className=\"di-section\">\n <div className=\"di-section-title\">阴影</div>\n <div className=\"di-shadow-grid\">\n {(() => {\n const activeShadow = pendingShadow || shadowVal;\n const shadowDisplay = getShadowDisplay(activeShadow, shadowAuthoredVal, shadowTokens);\n const matchedOption = shadowOptions.find(option => canonicalizeShadowValue(option.value) === canonicalizeShadowValue(activeShadow)) ?? null;\n const activeOption = matchedOption ?? shadowOptions[0];\n return (\n <>\n <div className=\"di-shadow-card\" style={{ position: 'relative' }}>\n <div className=\"di-shadow-card-title\">Token</div>\n <button\n className=\"di-border-style-single\"\n onClick={e => {\n const r = (e.currentTarget as HTMLElement).getBoundingClientRect();\n setDropPos(calcDropPos(r));\n setShowShadowDrop(v => !v);\n }}\n >\n <span className=\"di-border-style-label\" style={activeOption.cssVar ? undefined : { color: '#9ca3af' }}>{activeOption.label}</span>\n <span className=\"di-border-style-name\">{activeOption.cssVar || 'none'}</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 {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 = 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 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${matchedOption ? '' : ' di-border-style-drop-item--on'}`}\n onClick={() => {\n const next = prompt('自定义阴影(如 0 12px 30px rgba(15,23,42,0.08))', activeShadow === 'none' ? '' : activeShadow);\n if (next === null) return;\n const value = next.trim() || 'none';\n setPendingShadow(value);\n liveApply('box-shadow', value);\n setShowShadowDrop(false);\n }}\n >\n <span className=\"di-border-style-label\">自定义</span>\n <span className=\"di-shadow-drop-meta\">\n <span className=\"di-border-style-name\">{shadowDisplay.label}</span>\n <span className=\"di-shadow-drop-value\">{formatShadowDisplay(activeShadow)}</span>\n </span>\n </button>\n </div>\n </>\n )}\n </div>\n\n <div className=\"di-shadow-card\">\n <div className=\"di-shadow-card-title\">预览</div>\n <div className=\"di-shadow-preview-row\">\n <div className=\"di-shadow-preview-chip\" style={{ boxShadow: activeShadow === 'none' ? 'none' : activeShadow }} />\n <div className=\"di-shadow-preview-copy\">\n <span className={shadowDisplay.isHardcoded ? 'di-token-name--plain' : 'di-token-name'}>{shadowDisplay.label}</span>\n <span className=\"di-hex di-hex--wrap\">{shadowDisplay.sub}</span>\n </div>\n </div>\n </div>\n </>\n );\n })()}\n </div>\n </div>\n\n {/* 边框区 */}\n <div className=\"di-section\">\n <div className=\"di-section-title\">边框</div>\n <div className=\"di-border-row\">\n\n {/* 边框颜色 */}\n {(() => {\n const bcVal = pendingBorderColor || borderColorVal;\n const { label: bcLabel, sub: bcSub, isHardcoded: bcHard } = getDisplayLabel(bcVal || '', tokenMap, colorPalette, tokenLabels);\n const bcDark = (() => { const m = bcVal?.match(/^#([0-9a-f]{6})$/i); if (!m) return false; 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); return (r*299+g*587+b*114)/1000 < 128; })();\n return (\n <div className=\"di-border-card\">\n <div className=\"di-border-card-title\">颜色</div>\n <div className=\"di-border-color-body\">\n <button\n className={`di-swatch-btn${bcDark ? ' di-swatch-btn--dark' : ''}${!bcVal ? ' di-swatch-btn--empty' : ''}`}\n style={{ background: bcVal || undefined }}\n onClick={e => { const r=(e.currentTarget as HTMLElement).getBoundingClientRect(); setDropPos(calcDropPos(r)); setExpandedBorderColor(v=>!v); }}\n >\n <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n <path d=\"M1 1l4 4 4-4\" stroke={!bcVal ? '#9ca3af' : bcDark ? '#fff' : '#374151'} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </button>\n <div className=\"di-border-color-info\">\n <span className={bcHard ? 'di-token-name--plain' : 'di-token-name'}>{bcVal ? bcLabel : '未设置'}</span>\n {bcSub && <span className=\"di-hex\">{bcSub}</span>}\n </div>\n </div>\n {expandedBorderColor && (\n <ColorDropdown value={bcVal || ''} pos={dropPos} colorPalette={colorPalette}\n onChange={c => {\n setPendingBorderColor(c); liveApply('border-color', c);\n if ((pendingBorderWidth || borderWidthVal) === '0px') { liveApply('border-width', '1px'); liveApply('border-style', 'solid'); setPendingBorderWidth('1px'); setPendingBorderStyle('solid'); }\n }}\n onClose={() => setExpandedBorderColor(false)}\n onAddToken={v=>handleAddToken(v,'border-color')}\n />\n )}\n </div>\n );\n })()}\n\n {/* 粗细:合并到颜色卡片下方(已在上面的卡片里),单独卡片 */}\n <div className=\"di-border-card\" style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n <div className=\"di-border-card-title\">粗细</div>\n {(() => {\n const cur = pendingBorderWidth || borderWidthVal || '0px';\n const idx = borderWidthSteps.indexOf(cur);\n return (\n <div className=\"di-spinner\">\n <span className=\"di-spinner-val\">{cur}</span>\n <div className=\"di-spinner-btns\">\n <button className=\"di-spinner-up\" disabled={idx <= 0}\n onClick={() => { const nv=borderWidthSteps[Math.max(0,idx-1)]; setPendingBorderWidth(nv); liveApply('border-width',nv); }}>\n <svg width=\"8\" height=\"5\" viewBox=\"0 0 8 5\"><path d=\"M1 4l3-3 3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" fill=\"none\"/></svg>\n </button>\n <button className=\"di-spinner-dn\" disabled={idx >= borderWidthSteps.length - 1}\n onClick={() => { const nv=borderWidthSteps[Math.min(borderWidthSteps.length-1,idx<0?1:idx+1)]; setPendingBorderWidth(nv); liveApply('border-width',nv); }}>\n <svg width=\"8\" height=\"5\" viewBox=\"0 0 8 5\"><path d=\"M1 1l3 3 3-3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" fill=\"none\"/></svg>\n </button>\n </div>\n </div>\n );\n })()}\n </div>\n\n {/* 样式:单值展示 + 下拉 */}\n <div className=\"di-border-card\" style={{ position: 'relative' }}>\n <div className=\"di-border-card-title\">样式</div>\n {(() => {\n const cur = pendingBorderStyle || borderStyleVal;\n const curOpt = BORDER_STYLE_OPTIONS.find(o => o.value === cur) ?? BORDER_STYLE_OPTIONS[0];\n return (\n <>\n <button className=\"di-border-style-single\"\n onClick={e => { const r=(e.currentTarget as HTMLElement).getBoundingClientRect(); setDropPos(calcDropPos(r)); setShowStyleDrop(v=>!v); }}>\n <span className=\"di-border-style-label\" style={curOpt.value === 'none' ? { color: '#9ca3af' } : undefined}>{curOpt.label}</span>\n <span className=\"di-border-style-name\">{curOpt.title}</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 {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${cur===opt.value?' di-border-style-drop-item--on':''}`}\n onClick={() => { setPendingBorderStyle(opt.value); liveApply('border-style',opt.value); setShowStyleDrop(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.title}</span>\n </button>\n ))}\n </div>\n </>\n )}\n </>\n );\n })()}\n </div>\n\n </div>\n </div>\n\n {/* 圆角区 */}\n <div className=\"di-section\">\n <div className=\"di-section-title\">圆角</div>\n <div className=\"di-preset-row\">\n {radiusPresets.map(opt => {\n const current = pendingRadius || radiusVal;\n const isOn = matchPreset(radiusPresets, current)?.value === opt.value;\n return (\n <button\n key={opt.label}\n className={`di-preset${isOn ? ' di-preset--on' : ''}`}\n onClick={() => { setPendingRadius(opt.value); setCustomRadius(''); liveApply('border-radius', opt.value); }}\n >\n <span className=\"di-preset-label\">{opt.label}</span>\n {opt.sub && <span className=\"di-preset-sub\">{opt.sub}</span>}\n </button>\n );\n })}\n {(() => {\n const cur = pendingRadius || radiusVal;\n const isCustom = !!cur && cur !== '0px' && !matchPreset(radiusPresets, cur);\n return (\n <button\n className={`di-preset${isCustom ? ' di-preset--on' : ''}`}\n onClick={() => { const v = prompt('自定义圆角(如 12px)', cur || ''); if (v) { setPendingRadius(v); setCustomRadius(v); liveApply('border-radius', v); } }}\n >\n <span className=\"di-preset-label\">自定义</span>\n {isCustom && <span className=\"di-preset-sub\">{cur}</span>}\n </button>\n );\n })()}\n </div>\n </div>\n\n {/* 间距区 */}\n <div className=\"di-section\">\n <div className=\"di-section-title\">间距</div>\n <div className=\"di-space-row\">\n <SpaceCard\n title=\"内边距\" variant=\"padding\"\n value={pendingPadding || paddingVal}\n spaceSteps={spaceSteps}\n onChange={v => { setPendingPadding(v); liveApply('padding', v); }}\n />\n <SpaceCard\n title=\"外边距\" variant=\"margin\"\n value={pendingMargin || marginVal}\n spaceSteps={spaceSteps}\n onChange={v => { setPendingMargin(v); liveApply('margin', v); }}\n />\n <SpaceCard\n title=\"元素间距\" variant=\"gap\"\n value={pendingGap || gapVal}\n spaceSteps={spaceSteps}\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\">本次修改内容</div>\n <div className=\"di-inbox-summary\">\n <div className=\"di-inbox-pill\">已记录 {styleIntentSummary.pendingCount}</div>\n {(() => {\n const currentChanges = getPendingChangeRecords();\n if (currentChanges.length === 0) return null;\n const el = selectedRef.current;\n const targetClasses = el ? getClasses(el) : [];\n const targetLabel = el\n ? targetClasses.length\n ? `${el.tagName.toLowerCase()}.${targetClasses.join('.')}`\n : el.tagName.toLowerCase()\n : '当前对象';\n return (\n <div className=\"di-inbox-list\">\n <div className=\"di-inbox-card di-inbox-card--draft\">\n <div className=\"di-inbox-card-head\">\n <div className=\"di-inbox-target\">{targetLabel}</div>\n </div>\n <ol className=\"di-inbox-change-list\">\n {currentChanges.map((change, idx) => (\n <li className=\"di-inbox-change-item\" key={`current-${change.prop}-${idx}`}>\n <span className=\"di-inbox-change-text\">\n {idx + 1}. {getChangeLabel(change.prop)}:{change.from} → {change.val}\n </span>\n </li>\n ))}\n </ol>\n </div>\n </div>\n );\n })()}\n {styleIntentSummary.pendingEntries.length > 0 ? (\n <div className=\"di-inbox-list\">\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 className=\"di-inbox-delete\" onClick={() => handleDeleteStyleIntent(entry.id)}>删除对象</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 ? `${change.from} → ` : ''}{change.val}\n </span>\n <button\n className=\"di-inbox-delete di-inbox-delete--mini\"\n onClick={() => handleDeleteStyleIntent(entry.id, change.selector, change.prop)}\n >\n 删除\n </button>\n </li>\n ))}\n </ol>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"di-empty\">还没有记录的修改</div>\n )}\n </div>\n </div>\n\n </div>\n\n {/* 底部操作 */}\n {(() => {\n const hasPending = Object.keys(pendingColors).length > 0 ||\n !!pendingTextColor || !!pendingRadius || !!pendingShadow ||\n !!pendingBorderColor || !!pendingBorderWidth || !!pendingBorderStyle ||\n !!pendingFontSize || !!pendingFontWeight || !!pendingPadding ||\n !!pendingMargin || !!pendingGap || !!pendingTranslate ||\n !!pendingWidth || !!pendingHeight || !!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 ].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 });\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 modalOpenRef = useRef(false);\n\n useEffect(() => { setTokenMap(scanTokenMap()); }, []);\n\n useEffect(() => {\n const fn = (e: KeyboardEvent) => {\n if (e.altKey && e.key === 'i') setActive(v => !v);\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 const primaryEl = panels[0]?.el;\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=\"Dev Inspector (Alt+I)\"\n >\n {active ? '退出' : '编辑'}\n </button>\n\n {/* 已选中标签 */}\n {active && primaryEl && (() => {\n const rect = primaryEl.getBoundingClientRect();\n const classes = getClasses(primaryEl);\n return (\n <div className=\"di-label\" style={{ top: rect.top - 34, left: rect.left + rect.width / 2 }}>\n 已选中 {classes[0] ?? primaryEl.tagName.toLowerCase()}\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 FontSizeOption = {\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 FontWeightOption = { label: string; value: string };\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 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\n// ─── 内置最小默认值(项目侧可通过 Provider 覆盖) ───────────────\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 fontSizeOptions: [],\n fontWeightOptions: [\n { label: '常', value: '400' },\n { label: '中', value: '500' },\n { label: '粗', value: '600' },\n { label: '黑', value: '700' },\n ],\n shadowTokens: [],\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?: Partial<DevInspectorConfig> & {\n endpoints?: Partial<DevInspectorEndpoints>;\n tokens?: Partial<DevInspectorTokenConfig>;\n },\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 DevInspectorConfig } from './config';\n\nexport function mountDevInspector(\n config?: Partial<DevInspectorConfig> & { endpoints?: Partial<DevInspectorConfig['endpoints']> },\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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAAyD;AACzD,0BAA2B;;;ACD3B,mBAA0D;;;AC8E1D,IAAM,kBAA2C;AAAA,EAC/C,cAAc,CAAC;AAAA,EACf,aAAa,CAAC;AAAA,EACd,eAAe;AAAA,IACb,EAAE,OAAO,UAAM,KAAK,IAAQ,OAAO,OAAQ,OAAO,GAAG;AAAA,IACrD,EAAE,OAAO,KAAO,KAAK,OAAQ,OAAO,OAAQ,OAAO,GAAG;AAAA,IACtD,EAAE,OAAO,KAAO,KAAK,OAAQ,OAAO,OAAQ,OAAO,GAAG;AAAA,IACtD,EAAE,OAAO,KAAO,KAAK,QAAQ,OAAO,QAAQ,OAAO,GAAG;AAAA,IACtD,EAAE,OAAO,MAAO,KAAK,QAAQ,OAAO,QAAQ,OAAO,GAAG;AAAA,IACtD,EAAE,OAAO,OAAO,KAAK,QAAQ,OAAO,QAAQ,OAAO,GAAG;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACV,EAAE,OAAO,UAAM,MAAM,IAAQ,KAAK,MAAO;AAAA,IACzC,EAAE,OAAO,KAAO,MAAM,OAAQ,KAAK,MAAO;AAAA,IAC1C,EAAE,OAAO,KAAO,MAAM,OAAQ,KAAK,MAAO;AAAA,IAC1C,EAAE,OAAO,KAAO,MAAM,QAAQ,KAAK,OAAO;AAAA,IAC1C,EAAE,OAAO,MAAO,MAAM,QAAQ,KAAK,OAAO;AAAA,IAC1C,EAAE,OAAO,OAAO,MAAM,QAAQ,KAAK,OAAO;AAAA,EAC5C;AAAA,EACA,kBAAkB,CAAC,OAAO,OAAO,OAAO,KAAK;AAAA,EAC7C,iBAAiB,CAAC;AAAA,EAClB,mBAAmB;AAAA,IACjB,EAAE,OAAO,UAAK,OAAO,MAAM;AAAA,IAC3B,EAAE,OAAO,UAAK,OAAO,MAAM;AAAA,IAC3B,EAAE,OAAO,UAAK,OAAO,MAAM;AAAA,IAC3B,EAAE,OAAO,UAAK,OAAO,MAAM;AAAA,EAC7B;AAAA,EACA,cAAc,CAAC;AAAA,EACf,kBAAkB,CAAC;AACrB;AAEO,IAAM,4BAAgD;AAAA,EAC3D,QAAQ;AAAA,EACR,WAAW;AAAA,IACT,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AACV;AAEO,SAAS,wBACd,WAIoB;AACpB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,WAAW;AAAA,MACT,GAAG,0BAA0B;AAAA,MAC7B,GAAG,WAAW;AAAA,IAChB;AAAA,IACA,QAAQ;AAAA,MACN,GAAG,0BAA0B;AAAA,MAC7B,GAAG,WAAW;AAAA,IAChB;AAAA,EACF;AACF;;;AD5HI;AAbJ,IAAM,gCAA4B,4BAAkC,yBAAyB;AAEtF,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AACF,GAMG;AACD,SACE,4CAAC,0BAA0B,UAA1B,EAAmC,OAAO,wBAAwB,MAAM,GACtE,UACH;AAEJ;AAEO,SAAS,wBAAwB;AACtC,aAAO,yBAAW,yBAAyB;AAC7C;;;AD8bM,IAAAC,sBAAA;AA/cN,SAAS,YAAY,MAAe,aAAa,KAAoC;AACnF,QAAM,aAAa,OAAO,cAAc,KAAK;AAC7C,QAAM,MAAM,cAAc,aAAa,IAAI,KAAK,SAAS,IAAI,KAAK,MAAM,aAAa;AACrF,SAAO,EAAE,KAAK,KAAK,IAAI,GAAG,GAAG,GAAG,MAAM,KAAK,KAAK;AAClD;AAGA,IAAM,cAAc;AAAA,EAClB,EAAE,OAAO,sBAAO,MAAM,mBAAmB;AAC3C;AAGA,SAAS,cAAc,KAAa,cAAsE;AACxG,aAAW,KAAK,cAAc;AAC5B,UAAM,QAAQ,EAAE,OAAO,KAAK,CAAC,MAAoB,EAAE,QAAQ,GAAG;AAC9D,QAAI,MAAO,QAAO,GAAG,EAAE,KAAK,OAAI,MAAM,KAAK;AAAA,EAC7C;AACA,SAAO;AACT;AAEA,SAAS,mBACP,UACA,YACA,OACA,kBACA;AACA,QAAM,kBAAkB,eAAe,KAAK;AAC5C,SAAO,iBAAiB;AAAA,IAAK,WAC3B,MAAM,aAAa,SAAS,KAAK,KAC9B,MAAM,eAAe,WAAW,KAAK,KACrC,eAAe,MAAM,KAAK,MAAM;AAAA,EACrC,KAAK;AACP;AAEA,IAAM,uBAAuB;AAAA,EAC3B,EAAE,OAAO,UAAK,OAAO,SAAU,OAAO,eAAK;AAAA,EAC3C,EAAE,OAAO,UAAK,OAAO,UAAU,OAAO,eAAK;AAAA,EAC3C,EAAE,OAAO,UAAK,OAAO,UAAU,OAAO,eAAK;AAAA,EAC3C,EAAE,OAAO,UAAK,OAAO,QAAU,OAAO,SAAI;AAC5C;AAqBA,IAAM,eAAoE;AAAA,EACxE,EAAE,OAAO,QAAQ,MAAM,QAAQ,OAAO,OAAO;AAAA,EAC7C,EAAE,OAAO,OAAO,MAAM,OAAO,OAAO,cAAc;AAAA,EAClD,EAAE,OAAO,SAAS,MAAM,QAAQ;AAClC;AAGA,SAAS,SAAS,KAAqB;AACrC,QAAM,IAAI,IAAI,MAAM,kCAAkC;AACtD,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,OAAK,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC7F;AAEA,SAAS,eAAe,KAAqB;AAC3C,QAAM,IAAI,IAAI,MAAM,kCAAkC;AACtD,MAAI,EAAG,QAAO,MAAM,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,EAAE,IAAI,OAAG,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAE,GAAG,CAAC,EAAE,KAAK,EAAE;AAC7F,SAAO,IAAI,KAAK;AAClB;AAEA,SAAS,mBAAmB,KAAqB;AAE/C,QAAM,IAAI,IAAI,MAAM,+CAA+C;AACnE,MAAI,GAAG;AACL,UAAM,MAAM,MAAM,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,EAAE,IAAI,OAAG,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAE,GAAG,CAAC,EAAE,KAAK,EAAE;AAC3F,UAAM,QAAQ,KAAK,MAAM,WAAW,EAAE,CAAC,CAAC,IAAI,GAAG;AAC/C,WAAO,QAAQ,MAAM,GAAG,GAAG,MAAM,KAAK,MAAM;AAAA,EAC9C;AACA,SAAO;AACT;AAEA,IAAM,mBAAmB,oBAAI,IAAoB;AAGjD,IAAI,gBAAiD,CAAC;AAEtD,SAAS,wBAAwB,KAAqB;AACpD,QAAM,OAAO,OAAO,QAAQ,KAAK,KAAK;AACtC,MAAI,iBAAiB,IAAI,GAAG,EAAG,QAAO,iBAAiB,IAAI,GAAG;AAC9D,MAAI,OAAO,aAAa,eAAe,CAAC,SAAS,KAAM,QAAO;AAC9D,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,MAAM,YAAY;AACxB,QAAM,MAAM,WAAW;AACvB,QAAM,MAAM,UAAU;AACtB,QAAM,MAAM,gBAAgB;AAC5B,WAAS,KAAK,YAAY,KAAK;AAC/B,QAAM,aAAa,iBAAiB,KAAK,EAAE,UAAU,KAAK,KAAK;AAC/D,QAAM,OAAO;AACb,mBAAiB,IAAI,KAAK,UAAU;AACpC,SAAO;AACT;AAEA,SAAS,oBAAoB,KAAqB;AAChD,MAAI,CAAC,OAAO,QAAQ,OAAQ,QAAO;AACnC,SAAO,IAAI,QAAQ,QAAQ,GAAG;AAChC;AAEA,SAAS,iBACP,KACA,aACA,cACsD;AACtD,QAAM,cAAc,YAAY,MAAM,mBAAmB,IAAI,CAAC;AAC9D,QAAM,aAAa,wBAAwB,GAAG;AAC9C,QAAM,UAAU,aAAa,KAAK,WAAS,MAAM,WAAW,WAAW,KAClE,aAAa,KAAK,WAAS,wBAAwB,MAAM,KAAK,MAAM,UAAU;AAEnF,MAAI,SAAS;AACX,WAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,KAAK,QAAQ;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,QAAQ,SAAS,WAAM;AAAA,IAC9B,KAAK,oBAAoB,GAAG;AAAA,IAC5B,aAAa,QAAQ;AAAA,EACvB;AACF;AAEA,SAAS,WAAW,IAAuB;AACzC,SAAO,MAAM,KAAK,GAAG,SAAS,EAAE,OAAO,OAAK,CAAC,EAAE,WAAW,KAAK,CAAC;AAClE;AAEA,IAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EAAU;AAAA,EAAY;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAY;AAAA,EACrD;AAAA,EAAY;AAAA,EAAW;AAAA,EAAW;AAAA,EAAS;AAAA,EAAW;AAAA,EAAS;AAAA,EAC/D;AAAA,EAAW;AAAA,EAAS;AAAA,EAAW;AACjC,CAAC;AAED,SAAS,aAAa,WAA4B;AAChD,SAAO,kBAAkB,IAAI,SAAS,KACjC,UAAU,WAAW,KAAK,KAC1B,UAAU,WAAW,MAAM,KAC3B,UAAU,WAAW,QAAQ,KAC7B,UAAU,SAAS,UAAU,KAC7B,UAAU,SAAS,YAAY,KAC/B,UAAU,SAAS,WAAW,KAC9B,UAAU,SAAS,QAAQ,KAC3B,UAAU,SAAS,YAAY;AACtC;AAEA,SAAS,oBAAoB,IAAuB;AAClD,QAAM,mBAAmB,WAAW,EAAE,EAAE;AAAA,IAAO,OAC7C,CAAC,aAAa,CAAC,KACZ,CAAC,eAAe,KAAK,CAAC;AAAA,EAC3B;AACA,SAAO,iBAAiB,SAAS,mBAAmB,WAAW,EAAE;AACnE;AAEA,SAAS,gBAAgB,IAAuB;AAC9C,SAAO,WAAW,EAAE,EAAE,OAAO,OAAK,CAAC,eAAe,KAAK,CAAC,CAAC;AAC3D;AAEA,IAAM,qBAAqB,oBAAI,IAAI;AAAA,EACjC;AAAA,EAAK;AAAA,EAAS;AAAA,EAAU;AAAA,EAAO;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EACnE;AAAA,EAAO;AAAA,EAAS;AAAA,EAAS;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAK;AAAA,EAAQ;AAAA,EAC1D;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAO;AAAA,EAAY;AACvC,CAAC;AAED,SAAS,cAAc,SAA2B;AAChD,QAAM,cAAc,CAAC,UAAkB;AACrC,QAAI;AAAE,aAAO,IAAI,OAAO,KAAK;AAAA,IAAG,QAAQ;AAAE,aAAO,MAAM,QAAQ,mBAAmB,MAAM;AAAA,IAAG;AAAA,EAC7F;AACA,SAAO,QAAQ,SAAS,MAAM,QAAQ,IAAI,WAAW,EAAE,KAAK,GAAG,IAAI;AACrE;AAEA,SAAS,eAAe,IAAa,SAA8B;AACjE,MAAI,CAAC,QAAQ,OAAQ,QAAO,CAAC,EAAE;AAC/B,QAAM,gBAAgB,CAAC,CAAC,GAAG,QAAQ,WAAW;AAC9C,MAAI;AACF,WAAO,MAAM,KAAK,SAAS,iBAAiB,cAAc,OAAO,CAAC,CAAC,EAChE,OAAO,OAAK,iBAAiB,CAAC,EAAE,QAAQ,WAAW,CAAC;AAAA,EACzD,QAAQ;AAAE,WAAO,CAAC,EAAE;AAAA,EAAG;AACzB;AAEA,SAAS,oBAAoB,IAAwB;AACnD,SAAO,eAAe,IAAI,oBAAoB,EAAE,CAAC;AACnD;AAMA,SAAS,gBAAgB,IAAa,OAA6B;AACjE,MAAI,UAAU,YAAa,QAAO,oBAAoB,EAAE;AACxD,SAAO,CAAC,EAAE;AACZ;AAEA,SAAS,yBAAyB,IAAa,OAA0B;AACvE,QAAM,UAAU,UAAU,cAAc,oBAAoB,EAAE,IAAI,gBAAgB,EAAE;AACpF,SAAO,cAAc,OAAO,KAAK,GAAG,QAAQ,YAAY;AAC1D;AAEA,SAAS,kBAAkB,IAAqB;AAC9C,QAAM,MAAM,GAAG,QAAQ,YAAY;AACnC,QAAM,SAAS,GAAG;AAClB,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,kBAAkB,MAAM,KAAK,OAAO,QAAQ,EAAE,OAAO,WAAS,MAAM,YAAY,GAAG,OAAO;AAChG,MAAI,gBAAgB,UAAU,EAAG,QAAO;AACxC,SAAO,GAAG,GAAG,gBAAgB,gBAAgB,QAAQ,EAAE,IAAI,CAAC;AAC9D;AAEA,SAAS,8BAA8B,IAAa,OAA0B;AAC5E,MAAI,SAAS,GAAG;AAChB,SAAO,UAAU,CAAC,WAAW,MAAM,EAAE,OAAQ,UAAS,OAAO;AAC7D,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,iBAAiB,yBAAyB,QAAQ,KAAK;AAC7D,QAAM,OAAiB,CAAC;AACxB,MAAI,SAAyB;AAE7B,SAAO,UAAU,WAAW,QAAQ;AAClC,SAAK,QAAQ,kBAAkB,MAAM,CAAC;AACtC,aAAS,OAAO;AAAA,EAClB;AAEA,SAAO,KAAK,SAAS,GAAG,cAAc,MAAM,KAAK,KAAK,KAAK,CAAC,KAAK;AACnE;AAEA,SAAS,oBAAoB,IAAa,OAA0B;AAClE,QAAM,UAAU,UAAU,cAAc,oBAAoB,EAAE,IAAI,gBAAgB,EAAE;AACpF,MAAI,QAAQ,OAAQ,QAAO,cAAc,OAAO;AAChD,QAAM,MAAM,GAAG,QAAQ,YAAY;AACnC,MAAI,CAAC,mBAAmB,IAAI,GAAG,EAAG,QAAO;AACzC,QAAM,qBAAqB,8BAA8B,IAAI,KAAK;AAClE,SAAO,sBAAsB;AAC/B;AAEA,SAAS,mBAAmB,IAAa,OAA2B;AAClE,QAAM,UAAU,UAAU,cAAc,oBAAoB,EAAE,IAAI,gBAAgB,EAAE;AACpF,MAAI,QAAQ,OAAQ,QAAO;AAC3B,MAAI,GAAG,UAAU,SAAS,QAAQ,KAAK,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,OAAK,WAAW,KAAK,CAAC,CAAC,GAAG;AAC7F,WAAO,8BAA8B,IAAI,KAAK,EAAE,SAAS;AAAA,EAC3D;AACA,QAAM,MAAM,GAAG,QAAQ,YAAY;AACnC,MAAI,CAAC,mBAAmB,IAAI,GAAG,EAAG,QAAO;AACzC,SAAO,8BAA8B,IAAI,KAAK,EAAE,SAAS;AAC3D;AAEA,SAAS,cAAc,IAAsB;AAC3C,SAAO,GAAG,QAAQ,WAAW,MAAM,QAAQ,GAAG,QAAQ,aAAa,MAAM,QAAQ,GAAG,QAAQ,WAAW,MAAM;AAC/G;AAYA,SAAS,eAAuC;AAC9C,QAAM,MAA8B,CAAC;AACrC,MAAI;AACF,eAAW,SAAS,MAAM,KAAK,SAAS,WAAW,GAAG;AACpD,UAAI;AACF,mBAAW,QAAQ,MAAM,KAAK,MAAM,QAAQ,GAAG;AAC7C,cAAI,gBAAgB,gBAAgB,KAAK,iBAAiB,SAAS;AACjE,qBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC1C,oBAAM,OAAO,KAAK,MAAM,CAAC;AACzB,kBAAI,CAAC,KAAK,WAAW,IAAI,EAAG;AAC5B,oBAAM,MAAM,KAAK,MAAM,iBAAiB,IAAI,EAAE,KAAK;AACnD,oBAAM,MAAM,IAAI,WAAW,KAAK,IAAI,SAAS,GAAG,IAAI;AACpD,kBAAI,GAAG,IAAI;AACX,kBAAI,QAAQ,IAAK,KAAI,GAAG,IAAI;AAAA,YAC9B;AAAA,UACF;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAAqB;AAAA,IAC/B;AAAA,EACF,QAAQ;AAAA,EAAC;AACT,SAAO;AACT;AAEA,SAAS,iBAAiB,IAAa,MAAsB;AAC3D,SAAO,eAAe,iBAAiB,EAAE,EAAE,iBAAiB,IAAI,EAAE,KAAK,CAAC;AAC1E;AAEA,SAAS,kBAAkB,IAAqB;AAC9C,SAAO,iBAAiB,EAAE,EAAE,iBAAiB,eAAe,EAAE,KAAK;AACrE;AASA,SAAS,eAAe,KAAuC;AAC7D,QAAM,OAAO,OAAO,QAAQ,KAAK;AACjC,MAAI,CAAC,OAAO,QAAQ,OAAQ,QAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AAChD,QAAM,QAAQ,IAAI,MAAM,KAAK;AAC7B,QAAM,QAAQ,CAAC,MAAe,IAAI,OAAO,WAAW,CAAC,KAAK,IAAI;AAC9D,SAAO,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC,GAAG,GAAG,MAAM,MAAM,CAAC,CAAC,EAAE;AAClD;AAEA,SAAS,gBAAgB,KAAuC;AAC9D,SAAO,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;AACpD;AAEA,SAAS,iBAAiB,GAAmB;AAC3C,QAAM,MAAM,EAAE,KAAK;AACnB,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,kBAAkB,KAAK,GAAG,EAAG,QAAO,GAAG,GAAG;AAC9C,QAAM,mBAAmB,IAAI,MAAM,uBAAuB;AAC1D,MAAI,iBAAkB,QAAO,GAAG,iBAAiB,CAAC,CAAC;AACnD,SAAO;AACT;AAEA,SAAS,sBAAsB,IAAa,MAAsB;AAChE,QAAM,SAAU,GAAmB,MAAM,iBAAiB,IAAI,EAAE,KAAK;AACrE,MAAI,OAAQ,QAAO;AACnB,MAAI,QAAQ;AACZ,MAAI;AACF,eAAW,SAAS,MAAM,KAAK,SAAS,WAAW,GAAG;AACpD,UAAI;AACF,mBAAW,QAAQ,MAAM,KAAK,MAAM,QAAQ,GAAG;AAC7C,cAAI,EAAE,gBAAgB,cAAe;AACrC,cAAI,CAAC,KAAK,MAAM,iBAAiB,IAAI,EAAG;AACxC,cAAI,GAAG,QAAQ,KAAK,YAAY,EAAG,SAAQ,KAAK,MAAM,iBAAiB,IAAI,EAAE,KAAK;AAAA,QACpF;AAAA,MACF,QAAQ;AAAA,MAAe;AAAA,IACzB;AAAA,EACF,QAAQ;AAAA,EAAC;AACT,SAAO;AACT;AAEA,SAAS,cAAc,IAAa,MAAgB,cAAgC;AAClF,QAAM,KAAK,iBAAiB,EAAE;AAC9B,QAAM,WAAW,sBAAsB,IAAI,IAAI,EAAE,YAAY;AAC7D,QAAM,UAAU,GAAG,QAAQ,KAAK;AAChC,QAAM,WAAW,OAAO,WAAW,GAAG,QAAQ,KAAK;AAEnD,MAAI,UAAU;AACZ,QAAI,aAAa,OAAQ,QAAO,SAAS,WAAW,QAAQ;AAC5D,QAAI,SAAS,SAAS,aAAa,KAAK,SAAS,SAAS,aAAa,KAAK,SAAS,SAAS,aAAa,EAAG,QAAO;AACrH,QAAI,SAAS,SAAS,GAAG,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,SAAS,IAAI,KAAK,WAAW,EAAG,QAAO;AACzG,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,SAAS;AACpB,QAAI,WAAW,EAAG,QAAO;AACzB,QAAI,YAAY,WAAW,GAAG,eAAe;AAC3C,YAAM,cAAc,GAAG,cAAc,sBAAsB,EAAE;AAC7D,YAAM,YAAY,GAAG,sBAAsB,EAAE;AAC7C,UAAI,cAAc,KAAK,YAAY,cAAc,KAAM,QAAO;AAAA,IAChE;AACA,QAAI,QAAQ,WAAW,QAAQ,EAAG,QAAO;AAAA,EAC3C;AAEA,MAAI,SAAS,YAAY,CAAC,sBAAsB,IAAI,YAAY,KAAK,iBAAiB,OAAO;AAC3F,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,MAAgB,SAAyB;AACjE,MAAI,SAAS,OAAQ,QAAO;AAC5B,MAAI,SAAS,MAAO,QAAO;AAC3B,SAAO,WAAW;AACpB;AAEA,SAAS,iBAAiB,UAAkB,SAAyB;AACnE,MAAI,CAAC,YAAY,aAAa,UAAU,aAAa,cAAe,QAAO,WAAW;AACtF,SAAO;AACT;AAEA,SAAS,oBAAoB,IAA4B;AACvD,MAAI,EAAE,cAAc,aAAc,QAAO;AACzC,QAAM,WAAW,GAAG,eAAe,IAAI,KAAK,EAAE,SAAS;AACvD,QAAM,gBAAgB,cAAc,oBAAoB,cAAc,uBAAuB,cAAc;AAC3G,MAAI,CAAC,WAAW,CAAC,cAAe,QAAO;AAEvC,QAAM,KAAK,iBAAiB,EAAE;AAC9B,QAAM,WAAW,OAAO,WAAW,GAAG,QAAQ,KAAK;AACnD,QAAM,aAAa,GAAG,eAAe,WACjC,WAAW,MACX,OAAO,WAAW,GAAG,UAAU,KAAK,WAAW;AACnD,QAAM,YAAY,OAAO,WAAW,GAAG,UAAU,KAAK,MAAM,OAAO,WAAW,GAAG,aAAa,KAAK;AACnG,QAAM,WAAW,OAAO,WAAW,GAAG,cAAc,KAAK,MAAM,OAAO,WAAW,GAAG,iBAAiB,KAAK;AAC1G,SAAO,KAAK,KAAK,aAAa,WAAW,OAAO;AAClD;AAEA,SAAS,qBAAqB,UAAkB,IAA4B;AAC1E,QAAM,KAAK,SAAS,MAAM,wBAAwB;AAClD,MAAI,CAAC,GAAI,QAAO;AAChB,QAAM,OAAO,oBAAoB,EAAE;AACnC,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,GAAG,KAAK,IAAI,OAAO,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AACpD;AAEA,SAAS,aAAa,MAA8C;AAClE,QAAM,IAAI;AACV,QAAM,OAAO,OAAO,cAAc;AAClC,MAAI,OAAO,KAAK,QAAQ;AACxB,MAAI,MAAM,KAAK;AACf,MAAI,OAAO,IAAI,OAAO,aAAa,EAAG,QAAO,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,EAAE;AAE3E,QAAM,KAAK,IAAI,KAAK,OAAO,cAAc,OAAO,CAAC;AACjD,QAAM,KAAK,IAAI,GAAG,GAAG;AACrB,SAAO,EAAE,KAAK,KAAK;AACrB;AAEA,SAAS,YAAyC,SAAc,KAAuB;AACrF,QAAM,KAAK,IAAI,QAAQ,OAAO,EAAE;AAChC,SAAO,QAAQ,KAAK,OAAK,EAAE,UAAU,MAAM,EAAE,UAAU,GAAG,KAAK;AACjE;AAEA,SAAS,wBAAwB,IAAyB;AACxD,KAAG,MAAM,SAAS;AAClB,KAAG,MAAM,SAAS,GAAG,GAAG,YAAY;AACtC;AAGA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAS,EAAE;AACrC,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;AAC5D,QAAM,iBAAa,sBAAuB,IAAI;AAC9C,QAAM,OAAO,WAAW,KAAK,OAAK,EAAE,QAAQ,KAAK;AACjD,QAAM,eAAe,QAAQ,KAAK,UAAU,WAAM,KAAK,QAAQ,UAAU,QAAQ,MAAM;AACvF,QAAM,aAAa,QAAQ,KAAK,UAAU,WAAM,QAAQ;AAExD,SACE,8CAAC,SAAI,WAAW,gBAAgB,OAAO,yBAAyB,EAAE,GAAG,UAAU,4BAA4B,EAAE,IAC3G;AAAA,kDAAC,SAAI,WAAU,mBAAkB,KAAK,YAAY,SAAS,MAAM;AAC/D,UAAI,WAAW,SAAS;AACtB,cAAM,IAAI,WAAW,QAAQ,sBAAsB;AAEnD,oBAAY,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAAA,MAC/E;AACA,iBAAW,IAAI;AAAG,eAAS,KAAK;AAAA,IAClC,GACE;AAAA,mDAAC,UAAK,WAAU,yBAAyB,wBAAa;AAAA,MACrD,cAAc,6CAAC,UAAK,WAAU,uBAAuB,sBAAW;AAAA,OACnE;AAAA,IACC,WACC,8EACE;AAAA,mDAAC,SAAI,WAAU,mBAAkB,SAAS,MAAM,WAAW,KAAK,GAAG;AAAA,MACnE,8CAAC,SAAI,WAAU,iBAAgB,OAAO,EAAE,KAAK,SAAS,KAAK,MAAM,SAAS,MAAM,WAAW,OAAO,SAAS,mBAAmB,GAC5H;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAS;AAAA,YACT,UAAU,OAAK,SAAS,EAAE,OAAO,KAAK;AAAA,YACtC,WAAW,OAAK;AACd,kBAAI,EAAE,QAAQ,SAAS;AACrB,sBAAM,IAAI,WAAW,KAAK,CAAAC,OAAKA,GAAE,MAAM,YAAY,MAAM,MAAM,YAAY,CAAC;AAC5E,yBAAS,IAAI,EAAE,MAAM,SAAS,KAAK;AACnC,2BAAW,KAAK;AAAA,cAClB;AACA,kBAAI,EAAE,QAAQ,SAAU,YAAW,KAAK;AAAA,YAC1C;AAAA,YACA,aAAY;AAAA;AAAA,QACd;AAAA,QACA,6CAAC,SAAI,WAAU,iBACZ,qBAAW,IAAI,OACd;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,oBAAoB,UAAU,EAAE,MAAM,2BAA2B,EAAE;AAAA,YAC9E,aAAa,OAAK;AAAE,gBAAE,eAAe;AAAG,uBAAS,EAAE,GAAG;AAAG,yBAAW,KAAK;AAAA,YAAG;AAAA,YAC5E;AAAA,2DAAC,UAAM,YAAE,OAAM;AAAA,cACd,EAAE,QAAQ,SAAS,6CAAC,UAAK,WAAU,oBAAoB,YAAE,KAAI;AAAA;AAAA;AAAA,UAJnD,EAAE;AAAA,QAKf,CACD,GACH;AAAA,SACF;AAAA,OACF;AAAA,KAEJ;AAEJ;AAGA,SAAS,eAAe,KAAwB;AAC9C,QAAM,KAAK,OAAO,OAAO,KAAK,EAAE,MAAM,KAAK;AAC3C,MAAI,EAAE,WAAW,EAAG,QAAO,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;AAC9E,MAAI,EAAE,WAAW,EAAG,QAAO,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;AAC9E,MAAI,EAAE,WAAW,EAAG,QAAO,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;AAC9E,SAAO,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;AAC5D;AACA,SAAS,cAAc,GAAsB;AAC3C,MAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,KAAM,QAAO,EAAE;AAC/E,MAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAO,QAAO,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK;AACxE,SAAO,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI,EAAE,IAAI;AAClD;AAGA,SAAS,UAAU,EAAE,OAAO,SAAS,OAAO,UAAU,WAAW,GAM9D;AAED,MAAI,YAAY,OAAO;AACrB,WACE,8CAAC,SAAI,WAAU,iBACb;AAAA,mDAAC,SAAI,WAAU,iBACb,uDAAC,UAAK,WAAU,kBAAkB,iBAAM,GAC1C;AAAA,MACA,8CAAC,SAAI,WAAU,oBACb;AAAA,qDAAC,SAAI,WAAU,gBAAe;AAAA,QAC9B,6CAAC,aAAU,OAAc,UAAoB,YAAwB,MAAI,MAAC;AAAA,QAC1E,6CAAC,SAAI,WAAU,gBAAe;AAAA,SAChC;AAAA,OACF;AAAA,EAEJ;AAGA,QAAM,QAAQ,eAAe,KAAK;AAClC,WAAS,WAAW,MAAuB,GAAW;AACpD,UAAM,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,GAAG,EAAE;AACnC,aAAS,cAAc,IAAI,CAAC;AAAA,EAC9B;AAEA,SACE,8CAAC,SAAI,WAAU,iBACb;AAAA,iDAAC,SAAI,WAAU,iBACb,uDAAC,UAAK,WAAU,kBAAkB,iBAAM,GAC1C;AAAA,IACA,8CAAC,SAAI,WAAW,wBAAwB,OAAO,IAC7C;AAAA,oDAAC,SAAI,WAAU,cAAa;AAAA;AAAA,QAAG,6CAAC,aAAU,OAAO,MAAM,KAAQ,UAAU,OAAK,WAAW,OAAO,CAAC,GAAG,YAAwB,SAAO,MAAC;AAAA,SAAE;AAAA,MACtI,8CAAC,SAAI,WAAU,eAAc;AAAA;AAAA,QAAE,6CAAC,aAAU,OAAO,MAAM,MAAQ,UAAU,OAAK,WAAW,QAAQ,CAAC,GAAG,YAAwB,SAAO,MAAC;AAAA,SAAE;AAAA,MACvI,6CAAC,SAAI,WAAU,iBAAgB,uDAAC,SAAI,WAAU,mBAAkB,GAAE;AAAA,MAClE,8CAAC,SAAI,WAAU,gBAAe;AAAA;AAAA,QAAC,6CAAC,aAAU,OAAO,MAAM,OAAQ,UAAU,OAAK,WAAW,SAAS,CAAC,GAAG,YAAwB,SAAO,MAAC;AAAA,SAAE;AAAA,MACxI,6CAAC,SAAI,WAAU,iBAAgB,uDAAC,aAAU,OAAO,MAAM,QAAQ,UAAU,OAAK,WAAW,UAAU,CAAC,GAAG,YAAwB,SAAO,MAAC,GAAE;AAAA,OAC3I;AAAA,KACF;AAEJ;AAGA,SAAS,eAAe,IAA4B;AAClD,QAAM,OAAO,MAAM,KAAK,GAAG,UAAU,EAClC,OAAO,OAAK,EAAE,aAAa,KAAK,SAAS,EACzC,IAAI,OAAK,EAAE,eAAe,EAAE,EAC5B,KAAK,EAAE,EACP,KAAK;AAER,SAAO,KAAK,SAAS,IAAI,GAAG,aAAa,KAAK,KAAK,OAAO;AAC5D;AAEA,IAAM,cAAc;AAAA,EAClB,EAAE,KAAK,MAAU,OAAO,sBAAO,MAAM,KAAK;AAAA,EAC1C,EAAE,KAAK,QAAU,OAAO,sBAAO,MAAM,OAAO;AAAA,EAC5C,EAAE,KAAK,UAAU,OAAO,sBAAO,MAAM,SAAS;AAAA,EAC9C,EAAE,KAAK,UAAU,OAAO,sBAAO,MAAM,SAAS;AAChD;AACA,IAAM,mBAAmB;AAAA,EACvB,EAAE,KAAK,UAAW,OAAO,gBAAQ,MAAM,SAAS;AAAA,EAChD,EAAE,KAAK,WAAW,OAAO,sBAAO,MAAM,UAAU;AAAA,EAChD,EAAE,KAAK,UAAW,OAAO,gBAAQ,MAAM,SAAS;AAAA,EAChD,EAAE,KAAK,QAAW,OAAO,gBAAQ,MAAM,OAAO;AAAA,EAC9C,EAAE,KAAK,OAAW,OAAO,gBAAQ,MAAM,MAAM;AAAA,EAC7C,EAAE,KAAK,SAAW,OAAO,sBAAO,MAAM,QAAQ;AAChD;AACA,IAAM,eAAe;AAAA,EACnB,EAAE,KAAK,WAAY,OAAO,sBAAO,MAAM,UAAU;AAAA,EACjD,EAAE,KAAK,SAAY,OAAO,sBAAO,MAAM,QAAQ;AAAA,EAC/C,EAAE,KAAK,UAAY,OAAO,sBAAO,MAAM,SAAS;AAAA,EAChD,EAAE,KAAK,YAAY,OAAO,sBAAO,MAAM,WAAW;AAAA,EAClD,EAAE,KAAK,WAAY,OAAO,sBAAO,MAAM,UAAU;AAAA,EACjD,EAAE,KAAK,WAAY,OAAO,sBAAO,MAAM,UAAU;AACnD;AAGA,SAAS,cAAc,EAAE,OAAO,UAAU,SAAS,YAAY,KAAK,aAAa,GAO9E;AACD,QAAM,UAAU,MAAM,WAAW,GAAG,IAAI,QAAQ;AAChD,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,OAAO;AAChD,QAAM,CAAC,OAAO,QAAQ,QAAU,wBAAS,GAAG;AAE5C,WAAS,WAAW,KAAa,GAAmB;AAClD,UAAM,IAAI,IAAI,MAAM,mBAAmB;AACvC,QAAI,CAAC,KAAK,KAAK,IAAK,QAAO;AAC3B,UAAM,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,GAAG,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,GAAG,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE;AACnG,WAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAE,KAAK,QAAQ,CAAC,CAAC;AAAA,EAClD;AAEA,WAAS,WAAW,KAAa,GAAW;AAC1C,aAAS,WAAW,KAAK,CAAC,GAAG,EAAE;AAAA,EACjC;AAEA,QAAM,QAAQ,MAAM,EAAE,UAAU,SAAkB,KAAK,IAAI,KAAK,MAAM,IAAI,MAAM,QAAQ,MAAM,IAAI,CAAC;AACnG,SACE,8EACE;AAAA,iDAAC,SAAI,OAAO,EAAE,UAAU,SAAS,OAAO,GAAG,QAAQ,MAAM,GAAG,SAAS,SAAS;AAAA,IAC9E,8CAAC,SAAI,WAAU,uBAAsB,OAEnC;AAAA,oDAAC,SAAI,WAAU,oBACb;AAAA,qDAAC,SAAI,WAAU,0BAAyB,oBAAC;AAAA,QACzC,6CAAC,SAAI,WAAU,uBACb;AAAA,UAAC;AAAA;AAAA,YAAO,WAAU;AAAA,YAAkB,OAAM;AAAA,YACxC,SAAS,MAAM;AAAE,uBAAS,eAAe,EAAE;AAAG,sBAAQ;AAAA,YAAG;AAAA;AAAA,QAAG,GAChE;AAAA,SACF;AAAA,MAGC,aAAa,IAAI,OAChB,8CAAC,SAAkB,WAAU,oBAC3B;AAAA,qDAAC,SAAI,WAAU,0BAA0B,YAAE,OAAM;AAAA,QACjD,8CAAC,SAAI,WAAU,uBACZ;AAAA,YAAE,OAAO,IAAI,OACZ;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,oBAAoB,UAAU,EAAE,MAAM,2BAA2B,EAAE;AAAA,cAC9E,OAAO,EAAE,YAAY,EAAE,IAAI;AAAA,cAC3B,OAAO,GAAG,EAAE,KAAK,OAAI,EAAE,KAAK,KAAK,EAAE,GAAG;AAAA,cACtC,SAAS,MAAM;AAAE,yBAAS,EAAE,KAAK,EAAE,KAAK;AAAG,wBAAQ;AAAA,cAAG;AAAA;AAAA,YAJ3C,EAAE;AAAA,UAKf,CACD;AAAA,UACA,cACC;AAAA,YAAC;AAAA;AAAA,cAAO,WAAU;AAAA,cAAqB,OAAO,qBAAM,EAAE,KAAK;AAAA,cACzD,SAAS,MAAM;AAAE,2BAAW,WAAW,UAAU,KAAK,CAAC;AAAG,wBAAQ;AAAA,cAAG;AAAA,cAAG;AAAA;AAAA,UAE1E;AAAA,WAEJ;AAAA,WAjBQ,EAAE,KAkBZ,CACD;AAAA,MAGD,8CAAC,SAAI,WAAU,oBACb;AAAA;AAAA,UAAC;AAAA;AAAA,YAAO,WAAU;AAAA,YAA0B,OAAO,EAAE,YAAY,WAAW,UAAU,KAAK,GAAG,YAAY,EAAE;AAAA,YAC1G,SAAS,MAAM;AAAA,YAAC;AAAA;AAAA,QAAG;AAAA,QAErB,8CAAC,SAAI,WAAU,iBACb;AAAA,uDAAC,UAAK,WAAU,mBAAkB,eAAC;AAAA,UACnC;AAAA,YAAC;AAAA;AAAA,cAAM,WAAU;AAAA,cAAiB,OAAO,SAAS,QAAQ,MAAM,EAAE;AAAA,cAAG,aAAY;AAAA,cAC/E,UAAU,OAAK;AAAE,sBAAM,IAAE,MAAI,EAAE,OAAO;AAAO,4BAAY,CAAC;AAAG,2BAAW,GAAG,KAAK;AAAA,cAAG;AAAA,cACnF,QAAQ,OAAK;AAAE,oBAAI,CAAC,iBAAiB,KAAK,EAAE,OAAO,KAAK,EAAG,aAAY,OAAO;AAAA,cAAG;AAAA;AAAA,UACnF;AAAA,WACF;AAAA,QAEA,8CAAC,SAAI,WAAU,sCACb;AAAA;AAAA,YAAC;AAAA;AAAA,cAAM,WAAU;AAAA,cAAqC,MAAK;AAAA,cAAS,KAAI;AAAA,cAAI,KAAI;AAAA,cAAM,OAAO;AAAA,cAC3F,UAAU,OAAK;AAAE,sBAAM,IAAE,KAAK,IAAI,KAAI,KAAK,IAAI,GAAE,CAAC,EAAE,OAAO,SAAO,CAAC,CAAC;AAAG,yBAAS,CAAC;AAAG,2BAAW,UAAU,CAAC;AAAA,cAAG;AAAA;AAAA,UAC/G;AAAA,UACA,6CAAC,UAAK,WAAU,mBAAkB,eAAC;AAAA,WACrC;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEJ;AAGA,SAAS,UAAU,SAA0B;AAC3C,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,YAAY,QAAS,QAAO;AAChC,MAAI,QAAQ,SAAS,QAAQ,EAAG,QAAO;AACvC,MAAI,QAAQ,SAAS,YAAY,EAAG,QAAO;AAC3C,SAAO;AACT;AAGA,SAAS,eAAe,SAA2B;AACjD,QAAM,SAAS,QAAQ,KAAK,GAAG,EAAE,YAAY;AAC7C,MAAI,uBAAuB,KAAK,MAAM,EAAG,QAAO;AAChD,MAAI,mBAAmB,KAAK,MAAM,EAAG,QAAO;AAC5C,MAAI,OAAO,KAAK,MAAM,EAAG,QAAO;AAChC,MAAI,iBAAiB,KAAK,MAAM,EAAG,QAAO;AAC1C,MAAI,mBAAmB,KAAK,MAAM,EAAG,QAAO;AAC5C,SAAO;AACT;AAGA,SAAS,WAAW,SAA2B;AAC7C,QAAM,SAAS,QAAQ,KAAK,GAAG,EAAE,YAAY;AAC7C,MAAI,sCAAsC,KAAK,MAAM,EAAG,QAAO;AAC/D,MAAI,WAAW,KAAK,MAAM,EAAG,QAAO;AACpC,MAAI,QAAQ,KAAK,MAAM,EAAG,QAAO;AACjC,MAAI,UAAU,KAAK,MAAM,EAAG,QAAO;AACnC,MAAI,UAAU,KAAK,MAAM,EAAG,QAAO;AACnC,SAAO;AACT;AAGA,SAAS,cAAc,EAAE,OAAO,SAAS,gBAAgB,SAAS,WAAW,aAAa,GAOvF;AACD,QAAM,CAAC,MAAM,OAAO,QAAY,wBAA4B,KAAK;AACjE,QAAM,CAAC,MAAM,OAAO,QAAY,wBAAS,MAAM,UAAU,OAAO,CAAC;AACjE,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,MAAM,eAAe,kBAAkB,CAAC,CAAC,CAAC;AACrF,QAAM,CAAC,OAAO,QAAQ,QAAU,wBAAS,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAC;AAC/E,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,EAAE;AAErD,QAAM,YAAY,aAAa,QAAQ,OAAK,EAAE,MAAM;AACpD,QAAM,UAAe,YAAY,KAAK,OAAK,EAAE,QAAQ,IAAI;AACzD,QAAM,eAAe,iBAAiB,KAAK,OAAK,EAAE,QAAQ,SAAS;AACnE,QAAM,WAAe,aAAa,KAAK,OAAK,EAAE,QAAQ,KAAK;AAE3D,QAAM,eAAe,SAAS,QAC1B,WAAW,QAAQ,IAAI,IAAI,aAAa,IAAI,IAAI,SAAS,IAAI,KAC7D;AAEJ,QAAM,WAAW,CAAC,EAAE,OAAO,QAAQ,SAAS,MAC1C,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,EAAE,GACrD,gBAAM,IAAI,OACT;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,mBAAmB,WAAW,EAAE,MAAM,UAAU,EAAE;AAAA,MAC7D,SAAS,MAAM,SAAS,EAAE,GAAG;AAAA,MAC5B,YAAE;AAAA;AAAA,IAHQ,EAAE;AAAA,EAIf,CACD,GACH;AAGF,SACE,6CAAC,SAAI,WAAU,oBAAmB,SAAS,SACzC,wDAAC,SAAI,WAAU,YAAW,SAAS,OAAK,EAAE,gBAAgB,GAExD;AAAA,kDAAC,SAAI,WAAU,mBACb;AAAA,mDAAC,UAAK,WAAU,mBAAkB,OAAO,EAAE,YAAY,MAAM,GAAG;AAAA,MAChE,6CAAC,UAAK,WAAU,gBAAgB,iBAAM;AAAA,MACtC,6CAAC,SAAI,OAAO,EAAE,MAAM,EAAE,GAAG;AAAA,MACzB,6CAAC,UAAK,OAAO,EAAE,UAAU,IAAI,OAAO,UAAU,GAAG,sCAAS;AAAA,OAC5D;AAAA,IAEA,8CAAC,SAAI,WAAU,iBAEb;AAAA,mDAAC,SAAI,WAAU,iBACZ,WAAC,EAAC,GAAE,OAAM,GAAE,qBAAU,GAAE,EAAC,GAAE,WAAU,GAAE,iCAAY,CAAC,EAAE,IAAI,OACzD;AAAA,QAAC;AAAA;AAAA,UAAiB,WAAW,eAAe,SAAO,EAAE,IAAE,UAAQ,EAAE;AAAA,UAC/D,SAAS,MAAM,QAAQ,EAAE,CAAoB;AAAA,UAAI,YAAE;AAAA;AAAA,QADxC,EAAE;AAAA,MACwC,CACxD,GACH;AAAA,MAEC,SAAS,QACR,8EACE;AAAA,sDAAC,SAAI,WAAU,kBACb;AAAA,wDAAC,SAAI,WAAU,wBAAuB;AAAA;AAAA,YAAK,6CAAC,UAAK,WAAU,qBAAoB,sCAAI;AAAA,aAAO;AAAA,UAC1F,6CAAC,YAAS,OAAO,aAAa,QAAQ,MAAM,UAAU,SAAS;AAAA,WACjE;AAAA,QACA,8CAAC,SAAI,WAAU,kBACb;AAAA,wDAAC,SAAI,WAAU,wBAAuB;AAAA;AAAA,YAAG,6CAAC,UAAK,WAAU,qBAAoB,sCAAI;AAAA,aAAO;AAAA,UACxF,6CAAC,YAAS,OAAO,kBAAkB,QAAQ,WAAW,UAAU,cAAc;AAAA,WAChF;AAAA,QACA,8CAAC,SAAI,WAAU,kBACb;AAAA,wDAAC,SAAI,WAAU,wBAAuB;AAAA;AAAA,YAAQ,6CAAC,UAAK,WAAU,qBAAoB,wDAAO;AAAA,aAAO;AAAA,UAChG,6CAAC,YAAS,OAAO,cAAc,QAAQ,OAAO,UAAU,UAAU;AAAA,WACpE;AAAA,SACF,IAEA,8CAAC,SAAI,WAAU,kBACb;AAAA,qDAAC,SAAI,WAAU,wBAAuB,wDAAY;AAAA,QAClD;AAAA,UAAC;AAAA;AAAA,YAAO,WAAU;AAAA,YAChB,OAAO;AAAA,YAAe,UAAU,OAAK,iBAAiB,EAAE,OAAO,KAAK;AAAA,YACpE;AAAA,2DAAC,YAAO,OAAM,IAAG,sCAAI;AAAA,cACpB,UAAU,IAAI,OACb,8CAAC,YAAqB,OAAO,EAAE,OAAQ;AAAA,kBAAE;AAAA,gBAAM;AAAA,gBAAE,EAAE;AAAA,gBAAI;AAAA,mBAA1C,EAAE,KAAyC,CACzD;AAAA;AAAA;AAAA,QACH;AAAA,SACF;AAAA,MAID,gBACC,8CAAC,SAAI,WAAU,mBACb;AAAA,qDAAC,SAAI,WAAU,yBAAwB,yDAAa;AAAA,QACpD,6CAAC,SAAI,WAAU,uBAAuB,wBAAa;AAAA,QAClD,SAAS,SACR,8CAAC,SAAI,WAAU,yBACZ;AAAA,kBAAQ;AAAA,UAAM;AAAA,UAAG,6CAAC,UAAM,kBAAQ,MAAK;AAAA,UAAO;AAAA,UACtC,aAAa;AAAA,UAAM;AAAA,UAAG,6CAAC,UAAM,uBAAa,MAAK;AAAA,UAAO;AAAA,UACtD,SAAS;AAAA,UAAM;AAAA,UAAG,6CAAC,UAAM,mBAAS,MAAK;AAAA,WAChD;AAAA,SAEJ;AAAA,OAEJ;AAAA,IAGA,8CAAC,SAAI,WAAU,iBACb;AAAA,mDAAC,YAAO,WAAU,mBAAkB,SAAS,SAAS,0BAAE;AAAA,MACxD;AAAA,QAAC;AAAA;AAAA,UAAO,WAAU;AAAA,UAAc,UAAU,CAAC;AAAA,UACzC,SAAS,MAAM;AAAE,gBAAI,cAAc;AAAE,wBAAU,cAAc,OAAO,IAAI;AAAG,sBAAQ;AAAA,YAAG;AAAA,UAAE;AAAA,UAAG;AAAA;AAAA,MAE7F;AAAA,OACF;AAAA,KACF,GACF;AAEJ;AAGA,SAAS,gBACP,KACA,UACA,cACA,aACsD;AACtD,QAAM,aAAa,mBAAmB,GAAG;AACzC,QAAM,eAAe,cAAc,KAAK,YAAY;AACpD,MAAI,aAAc,QAAO,EAAE,OAAO,cAAc,KAAK,YAAY,aAAa,MAAM;AACpF,QAAM,QAAQ,SAAS,GAAG;AAC1B,MAAI,MAAO,QAAO,EAAE,OAAO,YAAY,KAAK,KAAK,MAAM,QAAQ,MAAM,EAAE,GAAG,KAAK,YAAY,aAAa,MAAM;AAC9G,SAAO,EAAE,OAAO,YAAY,KAAK,IAAI,aAAa,KAAK;AACzD;AAGO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,cAAc;AACpB,QAAM,EAAE,WAAW,OAAO,IAAI,sBAAsB;AACpD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM,gBAAgB;AAAA,IACpB,EAAE,QAAQ,IAAI,OAAO,QAAQ,OAAO,UAAK,OAAO,iCAAQ;AAAA,IACxD,GAAG;AAAA,EACL;AACA,QAAM,CAAC,WAAW,YAAY,QAAM,wBAAS,KAAK;AAClD,QAAM,iBAAa,sBAAuB,IAAI;AAC9C,QAAM,CAAC,UAAU,WAAW,QAAQ,wBAAkB,QAAQ;AAC9D,QAAM,CAAC,UAAU,WAAW,QAAQ,wBAAS,MAAM,aAAa,SAAS,sBAAsB,CAAC,CAAC;AACjG,QAAM,cAAU,sBAAkE,IAAI;AACtF,QAAM,mBAAe,sBAAO,KAAK;AACjC,QAAM,CAAC,QAAQ,SAAS,QAAY,wBAAiC,CAAC,CAAC;AACvE,QAAM,CAAC,WAAW,YAAY,QAAM,wBAAS,EAAE;AAC/C,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAClD,QAAM,CAAC,WAAW,YAAY,QAAM,wBAAS,KAAK;AAClD,QAAM,CAAC,QAAQ,SAAS,QAAY,wBAAS,KAAK;AAClD,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAC/D,QAAM,CAAC,UAAU,WAAW,QAAQ,wBAAS,EAAE;AAC/C,QAAM,CAAC,WAAW,YAAY,QAAM,wBAAS,EAAE;AAC/C,QAAM,CAAC,WAAW,YAAY,QAAM,wBAAmB,OAAO;AAC9D,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAmB,KAAK;AAC5D,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,EAAE;AACnD,QAAM,CAAC,OAAO,QAAQ,QAAc,wBAAoB,SAAS;AACjE,QAAM,CAAC,MAAM,OAAO,QAAgB,wBAAS,EAAE;AAC/C,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAwB,IAAI;AAClE,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAiC,CAAC,CAAC;AAC7E,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,EAAE;AACrD,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,MAAM;AACjD,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAAS,EAAE;AAC7D,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,EAAE;AACrD,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,EAAE;AACvD,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,KAAK;AAC1D,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,MAAM;AAC3D,QAAM,CAAC,oBAAoB,qBAAqB,QAAI,wBAAS,EAAE;AAC/D,QAAM,CAAC,oBAAoB,qBAAqB,QAAI,wBAAS,EAAE;AAC/D,QAAM,CAAC,oBAAoB,qBAAqB,QAAI,wBAAS,EAAE;AAC/D,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,wBAAS,KAAK;AACpE,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,KAAK;AAC1D,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,KAAK;AACxD,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,KAAK;AAC1D,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,KAAK;AAC9D,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,KAAK;AACxD,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;AAC1D,QAAM,CAAC,aAAa,cAAc,QAAM,wBAAS,EAAE;AACnD,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,EAAE;AACrD,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,EAAE;AACnD,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,wBAAS,EAAE;AACjE,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAAS,KAAK;AAChE,QAAM,CAAC,iBAAiB,kBAAkB,QAAM,wBAAS,EAAE;AAC3D,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAAS,EAAE;AAC7D,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,EAAE;AAC3D,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,EAAE;AACvD,QAAM,CAAC,eAAe,gBAAgB,QAAM,wBAAS,EAAE;AACvD,QAAM,CAAC,YAAY,aAAa,QAAY,wBAAS,EAAE;AACvD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAA0C,IAAI;AAC9F,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,EAAE;AACnD,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,EAAE;AACrD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAA0B,IAAI;AAC9E,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAA0B,IAAI;AAChF,QAAM,CAAC,WAAW,YAAY,QAAI,wBAA4C,CAAC,CAAC;AAChF,QAAM,CAAC,cAAc,eAAe,QAAM,wBAAwB,IAAI;AACtE,QAAM,CAAC,cAAc,eAAe,QAAM,wBAAS,EAAE;AACrD,QAAM,CAAC,SAAS,UAAU,QAAgB,wBAAS,EAAE;AACrD,QAAM,CAAC,SAAS,UAAU,QAAgB,wBAAS,EAAE;AACrD,QAAM,CAAC,WAAW,YAAY,QAAY,wBAAS,EAAE;AACrD,QAAM,CAAC,oBAAoB,qBAAqB,QAAI,wBAA6B,EAAE,cAAc,GAAG,eAAe,MAAM,gBAAgB,CAAC,EAAE,CAAC;AAC7I,QAAM,CAAC,WAAW,YAAY,QAAY,wBAAS,MAAM,cAAc,SAAS,CAAC;AACjF,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAwB,IAAI;AACtE,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAkE,IAAI;AACpH,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAqD,IAAI;AACnG,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,wBAAiC,CAAC,CAAC;AACjF,QAAM,kBAAc,sBAAgB,QAAQ;AAC5C,QAAM,mBAAe,sBAA2B,IAAI;AAEpD,+BAAU,MAAM;AAAE,iBAAa,UAAU,kBAAkB;AAAA,EAAM,GAAG,CAAC,aAAa,CAAC;AAEnF,QAAM,+BAA2B,2BAAY,CAAC,OAAgC;AAAA,IAC5E,cAAc,EAAE,gBAAgB;AAAA,IAChC,eAAe,EAAE,gBACb;AAAA,MACE,IAAI,EAAE,cAAc;AAAA,MACpB,aAAa,EAAE,cAAc;AAAA,MAC7B,UAAU,EAAE,cAAc;AAAA,MAC1B,WAAW,EAAE,cAAc;AAAA,MAC3B,MAAM,EAAE,cAAc;AAAA,MACtB,SAAS,EAAE,cAAc,WAAW,CAAC;AAAA,IACvC,IACA;AAAA,IACJ,gBAAgB,MAAM,QAAQ,EAAE,cAAc,IAC1C,EAAE,eAAe,IAAI,CAAC,WAAgB;AAAA,MACpC,IAAI,MAAM;AAAA,MACV,aAAa,MAAM;AAAA,MACnB,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM,WAAW,CAAC;AAAA,IAC7B,EAAE,IACF,CAAC;AAAA,EACP,IAAI,CAAC,CAAC;AAEN,QAAM,gCAA4B,2BAAY,MAAM;AAClD,UAAM,UAAU,YAAY,EACzB,KAAK,OAAK,EAAE,KAAK,CAAC,EAClB,KAAK,OAAK;AACT,UAAI,EAAE,IAAI;AACR,8BAAsB,yBAAyB,CAAC,CAAC;AAAA,MACnD;AAAA,IACF,CAAC,EACA,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACnB,GAAG,CAAC,UAAU,cAAc,wBAAwB,CAAC;AAErD,+BAAU,MAAM;AACd,8BAA0B;AAAA,EAC5B,GAAG,CAAC,yBAAyB,CAAC;AAG9B,QAAM,eAAW,2BAAY,CAAC,OAAgB;AAC5C,gBAAY,UAAU;AACtB,UAAM,OAAO,GAAG,sBAAsB;AACtC,gBAAY,aAAa,IAAI,CAAC;AAG9B,UAAM,OAAO,iBAAiB,EAAE;AAChC,UAAM,IAA4B,CAAC;AACnC,eAAW,EAAE,KAAK,KAAK,aAAa;AAClC,YAAM,MAAM,iBAAiB,IAAI,IAAI;AACrC,UAAI,CAAC,OAAO,QAAQ,sBAAsB,QAAQ,cAAe;AAEjE,UAAI,SAAS,kBAAkB,KAAK,YAAY,KAAK,MAAM,MAAO;AAClE,QAAE,IAAI,IAAI;AAAA,IACZ;AACA,cAAU,CAAC;AACX,qBAAiB,CAAC,CAAC;AAGnB,mBAAe,KAAK,SAAS,KAAK,CAAC;AACnC,qBAAiB,KAAK,WAAW,KAAK,CAAC;AACvC,oBAAgB,eAAe,KAAK,MAAM,KAAK,CAAC,CAAC;AACjD,2BAAuB,KAAK,SAAS,KAAK,CAAC;AAC3C,uBAAmB,EAAE;AAAG,yBAAqB,EAAE;AAAG,wBAAoB,EAAE;AACxE,yBAAqB,KAAK;AAG1B,UAAM,KAAK,KAAK,eAAe,KAAK;AACpC,UAAM,KAAK,KAAK,eAAe,KAAK;AACpC,UAAM,KAAK,eAAe,KAAK,eAAe,KAAK,CAAC;AACpD,sBAAkB,EAAE;AACpB,sBAAkB,EAAE;AACpB,sBAAkB,OAAO,QAAQ,KAAK,EAAE;AACxC,0BAAsB,EAAE;AAAG,0BAAsB,EAAE;AAAG,0BAAsB,EAAE;AAC9E,2BAAuB,KAAK;AAG5B,UAAM,IAAI,kBAAkB,EAAE;AAC9B,iBAAa,CAAC;AACd,qBAAiB,EAAE;AAGnB,UAAM,iBAAiB,KAAK,UAAU,KAAK,KAAK;AAChD,iBAAa,mBAAmB,qCAAqC,SAAS,cAAc;AAC5F,yBAAqB,sBAAsB,IAAI,YAAY,CAAC;AAC5D,qBAAiB,EAAE;AACnB,sBAAkB,KAAK;AAGvB,UAAM,KAAK,iBAAiB,EAAE;AAC9B,UAAM,UAAU,CAAC,MAAc;AAC7B,YAAM,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG;AAChC,aAAO,MAAM,MAAM,OAAK,MAAM,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK;AAAA,IAC9D;AACA,kBAAc,QAAQ,GAAG,GAAG,UAAU,IAAI,GAAG,YAAY,IAAI,GAAG,aAAa,IAAI,GAAG,WAAW,EAAE,CAAC;AAClG,iBAAa,QAAQ,GAAG,GAAG,SAAS,IAAI,GAAG,WAAW,IAAI,GAAG,YAAY,IAAI,GAAG,UAAU,EAAE,CAAC;AAC7F,UAAM,aAAa,CAAC,MAAc,EAAE,SAAS,MAAM,KAAK,EAAE,SAAS,MAAM;AACzE,QAAI,WAAW,GAAG,OAAO,GAAG;AAC1B,YAAM,IAAI,GAAG,IAAI,KAAK;AACtB,gBAAU,MAAM,WAAW,QAAQ,CAAC;AACpC,mBAAa,UAAU;AAAA,IACzB,WAAW,GAAG,eAAe;AAC3B,YAAM,MAAM,iBAAiB,GAAG,aAAa;AAC7C,UAAI,WAAW,IAAI,OAAO,GAAG;AAC3B,cAAM,IAAI,IAAI,IAAI,KAAK;AACvB,kBAAU,MAAM,WAAW,QAAQ,CAAC;AACpC,qBAAa,UAAU,GAAG;AAAA,MAC5B,OAAO;AACL,kBAAU,KAAK;AACf,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF;AACA,sBAAkB,EAAE;AAAG,qBAAiB,EAAE;AAAG,kBAAc,EAAE;AAE7D,oBAAgB,eAAe,GAAG,SAAS,CAAC;AAC5C,gBAAY,GAAG,MAAM,KAAK,CAAC;AAC3B,iBAAa,GAAG,OAAO,KAAK,CAAC;AAC7B,iBAAa,cAAc,IAAI,SAAS,GAAG,MAAM,KAAK,CAAC,CAAC;AACxD,kBAAc,cAAc,IAAI,UAAU,GAAG,OAAO,KAAK,CAAC,CAAC;AAC3D,wBAAoB,IAAI;AAAG,oBAAgB,EAAE;AAAG,qBAAiB,EAAE;AACnE,wBAAoB,IAAI;AAAG,yBAAqB,IAAI;AACpD,iBAAa,CAAC,CAAC;AAEf,YAAQ,EAAE;AACV,mBAAe,eAAe,EAAE,CAAC;AACjC,oBAAgB,IAAI;AACpB,qBAAiB,IAAI;AACrB,qBAAiB,KAAK;AACtB,iBAAa,KAAK;AAClB,gBAAY,EAAE;AAAA,EAChB,GAAG,CAAC,CAAC;AAGL,+BAAU,MAAM;AAAE,aAAS,QAAQ;AAAA,EAAG,GAAG,CAAC,QAAQ,CAAC;AAGnD,+BAAU,MAAM;AACd,aAAS,iBAAiB,cAAc,EAAE,QAAQ,OAAK,EAAE,UAAU,OAAO,aAAa,CAAC;AACxF,QAAI,UAAU,WAAW;AACvB,sBAAgB,UAAU,KAAK,EAAE,QAAQ,OAAK,EAAE,UAAU,IAAI,aAAa,CAAC;AAAA,IAC9E,OAAO;AACL,eAAS,UAAU,IAAI,aAAa;AAAA,IACtC;AACA,WAAO,MAAM;AACX,eAAS,iBAAiB,cAAc,EAAE,QAAQ,OAAK,EAAE,UAAU,OAAO,aAAa,CAAC;AAAA,IAC1F;AAAA,EACF,GAAG,CAAC,UAAU,KAAK,CAAC;AAGpB,WAAS,WAAW,SAA0C;AAC5D,UAAM,KAAK,YAAY;AACvB,QAAI,CAAC,GAAI;AACT,UAAM,UAAU,gBAAgB,IAAI,KAAK;AACzC,YAAQ,QAAQ,CAAC,EAAE,MAAM,IAAI,MAAM;AACjC,cAAQ,QAAQ,OAAM,EAAkB,MAAM,YAAY,MAAM,GAAG,CAAC;AAAA,IACtE,CAAC;AAAA,EACH;AAEA,WAAS,YAAY,GAAqB;AACxC,QAAK,EAAE,OAAmB,QAAQ,yBAAyB,EAAG;AAC9D,MAAE,eAAe;AACjB,YAAQ,UAAU,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE,SAAS,IAAI,SAAS,MAAM,IAAI,SAAS,IAAI;AACtF,UAAM,SAAS,CAAC,OAAmB;AACjC,UAAI,CAAC,QAAQ,QAAS;AACtB,YAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,aAAa,KAAK,QAAQ,QAAQ,KAAK,GAAG,UAAU,QAAQ,QAAQ,EAAE,CAAC;AAChH,YAAM,MAAO,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,cAAc,IAAK,QAAQ,QAAQ,KAAK,GAAG,UAAU,QAAQ,QAAQ,EAAE,CAAC;AACjH,kBAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IAC3B;AACA,UAAM,OAAO,MAAM;AACjB,cAAQ,UAAU;AAClB,eAAS,oBAAoB,aAAa,MAAM;AAChD,eAAS,oBAAoB,WAAW,IAAI;AAAA,IAC9C;AACA,aAAS,iBAAiB,aAAa,MAAM;AAC7C,aAAS,iBAAiB,WAAW,IAAI;AAAA,EAC3C;AAEA,WAAS,eAAe,KAAa,SAAkB;AACrD,qBAAiB,EAAE,OAAO,KAAK,QAAQ,CAAC;AAAA,EAC1C;AAEA,WAAS,mBAAmB,QAAgB,KAAa,OAAe;AACtE,uBAAmB,EAAE,QAAQ,OAAO,KAAK,MAAM,CAAC;AAChD,qBAAiB,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC;AAClC,IAAC,YAAuC,MAAM,IAAI,OAAO,QAAQ,YAAY,EAAE,EAAE,QAAQ,MAAM,MAAG;AAAA,EACpG;AAEA,WAAS,UAAU,MAAc,KAAa;AAC5C,QAAI,SAAS,SAAS,aAAa,SAAS;AAC1C,mBAAa,QAAQ,MAAM,YAAY,OAAO,GAAG;AAAA,IACnD,OAAO;AACL,iBAAW,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AAEA,WAAS,cAAc,SAA0C;AAC/D,eAAW,OAAO;AAAA,EACpB;AAEA,WAAS,oBAAoB;AAC3B,UAAM,KAAK,YAAY;AACvB,QAAI,CAAC,GAAI,QAAO;AAChB,UAAM,iBAAiB,iBAAiB,sBAAsB,UAC1D,GAAG,oBAAoB,EAAE,KAAK,OAAO,WAAW,aAAa,KAAK,CAAC,OACnE;AAEJ,UAAM,UAA8B;AAAA,MAClC,GAAG,OAAO,QAAQ,aAAa;AAAA,MAC/B,GAAI,mBAAmB,CAAC,CAAC,SAAS,gBAAgB,CAAqB,IAAI,CAAC;AAAA,MAC5E,GAAI,gBAAgB,CAAC,CAAC,iBAAiB,aAAa,CAAqB,IAAI,CAAC;AAAA,MAC9E,GAAI,gBAAgB,CAAC,CAAC,cAAc,aAAa,CAAqB,IAAI,CAAC;AAAA,MAC3E,GAAI,qBAAqB,CAAC,CAAC,gBAAgB,kBAAkB,CAAqB,IAAI,CAAC;AAAA,MACvF,GAAI,qBAAqB,CAAC,CAAC,gBAAgB,kBAAkB,CAAqB,IAAI,CAAC;AAAA,MACvF,GAAI,qBAAqB,CAAC,CAAC,gBAAgB,kBAAkB,CAAqB,IAAI,CAAC;AAAA,MACvF,GAAI,kBAAkB,CAAC,CAAC,aAAa,eAAe,CAAqB,IAAI,CAAC;AAAA,MAC9E,GAAI,oBAAoB,CAAC,CAAC,eAAe,iBAAiB,CAAqB,IAAI,CAAC;AAAA,MACpF,GAAI,iBAAiB,CAAC,CAAC,WAAW,cAAc,CAAqB,IAAI,CAAC;AAAA,MAC1E,GAAI,gBAAgB,CAAC,CAAC,UAAU,aAAa,CAAqB,IAAI,CAAC;AAAA,MACvE,GAAI,aAAa,CAAC,CAAC,OAAO,UAAU,CAAqB,IAAI,CAAC;AAAA,MAC9D,GAAI,mBAAmB,CAAC,CAAC,aAAa,gBAAgB,gBAAgB,CAAC,CAAqB,IAAI,CAAC;AAAA,MACjG,GAAI,eAAe,CAAC,CAAC,SAAS,YAAY,CAAqB,IAAI,CAAC;AAAA,MACpE,GAAI,gBAAgB,CAAC,CAAC,UAAU,aAAa,CAAqB,IAAI,CAAC;AAAA,MACvE,GAAI,iBAAiB,CAAC,CAAC,cAAc,cAAc,CAAqB,IAAI,CAAC;AAAA,MAC7E,GAAI,iBAAiB,sBAAsB,UAAU,CAAC,CAAC,cAAc,aAAa,CAAqB,IAAI,CAAC;AAAA,IAC9G;AAEA,UAAM,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC,MAAM,MAAM,KAAK;AAClD,UAAM,gBAAgB,QAAQ,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,KAAK;AACzD,UAAM,WAAW,oBAAoB,IAAI,KAAK;AAC9C,UAAM,UAA0G,CAAC;AAEjH,QAAI,YAAY,aAAa,WAAW,aAAa,YAAY,IAAI;AACnE,cAAQ,KAAK;AAAA,QACX,UAAU,oBAAoB,aAAa,SAAS,SAAS;AAAA,QAC7D,SAAS,CAAC,EAAE,MAAM,OAAO,MAAM,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MAC3D,CAAC;AAAA,IACH;AAEA,YAAQ,KAAK;AAAA,MACX;AAAA,MACA,UAAU,YAAY,aAAa,YAAY,KAAK,gBAAgB,SACjE,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,MAAM,wBAAwB,IAAI,GAAG,IAAI,EAAE;AAAA,MAC5E,MAAM,QAAQ;AAAA,IAChB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,WAAS,cAAc,IAAY,IAAY;AAC7C,UAAM,OAAO,oBAAoB;AACjC,UAAM,OAAO,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,GAAG;AAC9C,wBAAoB,IAAI;AACxB,cAAU,aAAa,gBAAgB,IAAI,CAAC;AAAA,EAC9C;AAEA,WAAS,QAAQ,MAAgB,KAAa,OAAiB,SAAS;AACtE,UAAM,UAAU,SAAS,UAAU,WAAW;AAC9C,UAAM,OAAO,iBAAiB,GAAG;AACjC,UAAM,aAAa,YAAY;AAC/B,UAAM,WAAW,SAAS,YAAY,SAAS,UAC3C,qBAAqB,MAAM,UAAU,IACrC,SAAS,UAAU,OAAO,iBAAiB,MAAM,OAAO;AAC5D,QAAI,SAAS,SAAS;AACpB,sBAAgB,QAAQ;AACxB,0BAAoB,IAAI;AAAA,IAC1B,OAAO;AACL,uBAAiB,QAAQ;AACzB,2BAAqB,IAAI;AAAA,IAC3B;AACA,QAAI,SAAS,YAAY,SAAS,SAAS;AACzC,YAAM,YAAY,GAAG,oBAAoB,UAAU,KAAK,OAAO,WAAW,QAAQ,KAAK,CAAC;AACxF,oBAAc;AAAA,QACZ,EAAE,MAAM,UAAU,KAAK,SAAS;AAAA,QAChC,EAAE,MAAM,cAAc,KAAK,UAAU;AAAA,QACrC,EAAE,MAAM,cAAc,KAAK,SAAS;AAAA,MACtC,CAAC;AACD;AAAA,IACF;AACA,QAAI,SAAS,UAAU;AACrB,YAAM,KAAK,YAAY;AACvB,UAAI,IAAI;AACN,cAAM,UAAU,gBAAgB,IAAI,KAAK;AACzC,gBAAQ,QAAQ,OAAM,EAAkB,MAAM,eAAe,YAAY,CAAC;AAC1E,gBAAQ,QAAQ,OAAM,EAAkB,MAAM,eAAe,YAAY,CAAC;AAAA,MAC5E;AAAA,IACF;AACA,cAAU,MAAM,QAAQ;AAAA,EAC1B;AAGA,WAAS,aAAa;AACpB,UAAM,UAAU,kBAAkB;AAClC,QAAI,CAAC,QAAS;AACd,UAAM,EAAE,IAAI,SAAS,QAAQ,IAAI;AAEjC,QAAI,QAAQ,WAAW,KAAK,CAAC,QAAQ,CAAC,cAAc;AAClD,iBAAW,oBAAK;AAChB,iBAAW,MAAM,WAAW,EAAE,GAAG,IAAI;AACrC;AAAA,IACF;AAEA,eAAW,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;AAExD,QAAI,CAAC,mBAAmB,IAAI,KAAK,GAAG;AAClC,iBAAW,4CAAS;AACpB,iBAAW,MAAM,WAAW,EAAE,GAAG,GAAI;AACrC;AAAA,IACF;AAEA,UAAM,UAAU,UAAU;AAAA,MACxB,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,QAAQ,CAAC;AAAA,IAClC,CAAC,EACE,KAAK,OAAK,EAAE,KAAK,CAAC,EAClB,KAAK,OAAK;AACT,iBAAW,EAAE,KAAK,8BAAU,0BAAM;AAClC,iBAAW,MAAM,WAAW,EAAE,GAAG,GAAI;AAAA,IACvC,CAAC,EACA,MAAM,MAAM;AAAE,iBAAW,0BAAM;AAAG,iBAAW,MAAM,WAAW,EAAE,GAAG,GAAI;AAAA,IAAG,CAAC;AAAA,EAChF;AAEA,iBAAe,oBAAoB,MAAgC;AACjE,QAAI,UAAU,WAAW,WAAW;AAClC,UAAI;AACF,cAAM,UAAU,UAAU,UAAU,IAAI;AACxC,eAAO;AAAA,MACT,QAAQ;AAAA,MAER;AAAA,IACF;AACA,UAAM,KAAK,SAAS,cAAc,UAAU;AAC5C,OAAG,QAAQ;AACX,OAAG,MAAM,UAAU;AACnB,aAAS,KAAK,YAAY,EAAE;AAC5B,OAAG,OAAO;AACV,UAAM,SAAS,SAAS,YAAY,MAAM;AAC1C,aAAS,KAAK,YAAY,EAAE;AAC5B,WAAO;AAAA,EACT;AAEA,WAAS,kBAAkB,QAMxB;AACD,UAAM,YAAY;AAClB,UAAM,UAAU;AAChB,UAAM,UAAU,OAAO,QACpB,IAAI,CAAC,QAAQ,UAAU,GAAG,QAAQ,CAAC,KAAK,eAAe,OAAO,IAAI,CAAC,SAAI,OAAO,IAAI,WAAM,OAAO,GAAG,EAAE,EACpG,KAAK,IAAI;AACZ,UAAM,aAAa,OAAO,UACtB,iCAAa,OAAO,OAAO,oCAC3B;AACJ,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,2EAAe,SAAS;AAAA,MACxB,uCAAS,OAAO;AAAA,MAChB;AAAA,MACA,qBAAM,OAAO,WAAW;AAAA,MACxB,iCAAQ,OAAO,UAAU;AAAA,MACzB,2BAAO,OAAO,QAAQ;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AAEA,WAAS,mBAAmB;AAC1B,UAAM,UAAU,kBAAkB;AAClC,QAAI,CAAC,QAAS;AACd,UAAM,EAAE,IAAI,SAAS,SAAS,IAAI;AAClC,UAAM,UAAU,wBAAwB;AACxC,QAAI,QAAQ,WAAW,KAAK,CAAC,MAAM;AACjC,mBAAa,wDAAW;AACxB,iBAAW,MAAM,aAAa,EAAE,GAAG,IAAI;AACvC;AAAA,IACF;AAEA,UAAM,aAAa,UAAU,YAAY,6BAAS;AAClD,UAAM,gBAAgB,WAAW,EAAE;AACnC,UAAM,cAAc,cAAc,SAC9B,GAAG,GAAG,QAAQ,YAAY,CAAC,IAAI,cAAc,KAAK,GAAG,CAAC,KACtD,GAAG,QAAQ,YAAY;AAE3B,UAAMC,UAAS,kBAAkB;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,wBAAoBA,OAAM,EACvB,KAAK,CAAC,WAAW;AAChB,mBAAa,SAAS,sDAAc,0BAAM;AAC1C,iBAAW,MAAM,aAAa,EAAE,GAAG,SAAS,OAAO,IAAI;AAAA,IACzD,CAAC,EACA,MAAM,MAAM;AACX,mBAAa,0BAAM;AACnB,iBAAW,MAAM,aAAa,EAAE,GAAG,IAAI;AAAA,IACzC,CAAC;AAAA,EACL;AAEA,WAAS,wBAAwB,UAAkB,UAAmB,MAAe;AACnF,UAAM,UAAU,mBAAmB;AAAA,MACjC,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,IAAI,UAAU,UAAU,KAAK,CAAC;AAAA,IACvD,CAAC,EACE,KAAK,OAAM,aAAY;AACtB,UAAI,OAAY;AAChB,UAAI;AACF,eAAO,MAAM,SAAS,KAAK;AAAA,MAC7B,QAAQ;AACN,eAAO;AAAA,MACT;AACA,aAAO;AAAA,QACL,QAAQ,SAAS;AAAA,QACjB,GAAI,QAAQ,CAAC;AAAA,MACf;AAAA,IACF,CAAC,EACA,KAAK,OAAK;AACT,UAAI,EAAE,IAAI;AACR,8BAAsB,yBAAyB,CAAC,CAAC;AACjD,qBAAa,OAAO,mCAAU,gCAAO;AAAA,MACvC,OAAO;AACL,cAAM,WAAW,CAAC,EAAE,SAChB,uEACA,2BAAO,EAAE,QAAQ,SAAI,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE;AAC/C,qBAAa,QAAQ;AAAA,MACvB;AACA,iBAAW,MAAM,aAAa,EAAE,GAAG,IAAI;AAAA,IACzC,CAAC,EACA,MAAM,MAAM;AACX,mBAAa,gGAAqB;AAClC,iBAAW,MAAM,aAAa,EAAE,GAAG,IAAI;AAAA,IACzC,CAAC;AAAA,EACL;AAEA,WAAS,wBAAwB,MAAc;AAC7C,QAAI,SAAS,YAAa,QAAO;AACjC,QAAI,SAAS,cAAe,QAAO;AACnC,QAAI,SAAS,QAAS,QAAO,gBAAgB,cAAc,UAAU,cAAc,WAAW,EAAE;AAChG,QAAI,SAAS,mBAAoB,QAAO,gBAAgB,OAAO,IAAI,KAAK,IAAI,UAAU,cAAc,WAAW,EAAE;AACjH,QAAI,SAAS,eAAgB,QAAO,gBAAgB,gBAAgB,UAAU,cAAc,WAAW,EAAE;AACzG,QAAI,SAAS,eAAgB,QAAO;AACpC,QAAI,SAAS,eAAgB,QAAO;AACpC,QAAI,SAAS,gBAAiB,QAAO;AACrC,QAAI,SAAS,aAAc,QAAO,iBAAiB,WAAW,mBAAmB,YAAY,EAAE;AAC/F,QAAI,SAAS,UAAW,QAAO;AAC/B,QAAI,SAAS,SAAU,QAAO;AAC9B,QAAI,SAAS,MAAO,QAAO;AAC3B,QAAI,SAAS,YAAa,QAAO,gBAAgB,YAAY;AAC7D,QAAI,SAAS,QAAS,QAAO;AAC7B,QAAI,SAAS,SAAU,QAAO;AAC9B,QAAI,SAAS,aAAc,QAAO,GAAG,oBAAoB,YAAY,OAAO,KAAK,OAAO,WAAW,SAAS,KAAK,CAAC;AAClH,QAAI,SAAS,aAAc,QAAO;AAClC,WAAO;AAAA,EACT;AAEA,WAAS,0BAA0B;AACjC,UAAM,UAAyD,CAAC;AAChE,UAAM,MAAM,CAAC,MAAc,MAAc,QAAgB,QAAQ,KAAK,EAAE,MAAM,MAAM,IAAI,CAAC;AACzF,QAAI,gBAAmB,KAAI,aAAa,aAAa,eAAe;AACpE,QAAI,kBAAmB,KAAI,eAAe,eAAe,iBAAiB;AAC1E,QAAI,iBAAmB,KAAI,SAAS,gBAAgB,cAAc,UAAU,cAAc,WAAW,EAAE,OAAO,gBAAgB,kBAAkB,UAAU,cAAc,WAAW,EAAE,KAAK;AAC1L,eAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,aAAa,GAAG;AACvD,UAAI,MAAM,gBAAgB,OAAO,IAAI,KAAK,IAAI,UAAU,cAAc,WAAW,EAAE,OAAO,gBAAgB,KAAK,UAAU,cAAc,WAAW,EAAE,KAAK;AAAA,IAC3J;AACA,QAAI,mBAAoB,KAAI,gBAAgB,gBAAgB,gBAAgB,UAAU,cAAc,WAAW,EAAE,OAAO,gBAAgB,oBAAoB,UAAU,cAAc,WAAW,EAAE,KAAK;AACtM,QAAI,mBAAoB,KAAI,gBAAgB,gBAAgB,kBAAkB;AAC9E,QAAI,mBAAoB,KAAI,gBAAgB,gBAAgB,kBAAkB;AAC9E,QAAI,cAAoB,KAAI,iBAAiB,WAAW,aAAa;AACrE,QAAI,cAAoB,KAAI,cAAc,iBAAiB,WAAW,mBAAmB,YAAY,EAAE,OAAO,iBAAiB,eAAe,eAAe,YAAY,EAAE,KAAK;AAChL,QAAI,eAAoB,KAAI,WAAW,YAAY,cAAc;AACjE,QAAI,cAAoB,KAAI,UAAU,WAAW,aAAa;AAC9D,QAAI,WAAoB,KAAI,OAAO,QAAQ,UAAU;AACrD,QAAI,iBAAoB,KAAI,aAAa,gBAAgB,YAAY,GAAG,gBAAgB,gBAAgB,CAAC;AACzG,QAAI,aAAoB,KAAI,SAAS,UAAU,YAAY;AAC3D,QAAI,cAAoB,KAAI,UAAU,WAAW,aAAa;AAC9D,QAAI,gBAAoB,KAAI,SAAS,gBAAM,GAAG,gBAAgB,MAAM,KAAK,gBAAgB,KAAK,EAAE;AAChG,WAAO;AAAA,EACT;AAEA,WAAS,eAAe,MAAc;AACpC,UAAM,MAA8B;AAAA,MAClC,aAAa;AAAA,MACb,eAAe;AAAA,MACf,SAAS;AAAA,MACT,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,WAAW;AAAA,MACX,UAAU;AAAA,MACV,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA,MACV,cAAc;AAAA,MACd,cAAc;AAAA,IAChB;AACA,WAAO,IAAI,IAAI,KAAK;AAAA,EACtB;AAGA,WAAS,cAAc;AACrB,UAAM,KAAK,YAAY;AACvB,QAAI,CAAC,GAAI;AAET,UAAM,UAAU,gBAAgB,IAAI,KAAK;AACzC,YAAQ,QAAQ,OAAK;AACnB,YAAM,MAAM;AACZ,OAAC,GAAG,OAAO,KAAK,aAAa,CAAC,EAAE,QAAQ,OAAK,IAAI,MAAM,eAAe,CAAC,CAAC;AACxE,UAAI,cAAoB,KAAI,MAAM,eAAe,eAAe;AAChE,UAAI,cAAoB,KAAI,MAAM,eAAe,YAAY;AAC7D,UAAI,mBAAoB,KAAI,MAAM,eAAe,cAAc;AAC/D,UAAI,mBAAoB,KAAI,MAAM,eAAe,cAAc;AAC/D,UAAI,mBAAoB,KAAI,MAAM,eAAe,cAAc;AAC/D,UAAI,eAAgB,KAAI,MAAM,eAAe,SAAS;AACtD,UAAI,cAAgB,KAAI,MAAM,eAAe,QAAQ;AACrD,UAAI,WAAgB,KAAI,MAAM,eAAe,KAAK;AAClD,UAAI,iBAAkB,KAAI,MAAM,eAAe,WAAW;AAC1D,UAAI,aAAc,KAAI,MAAM,eAAe,OAAO;AAClD,UAAI,cAAe,KAAI,MAAM,eAAe,QAAQ;AACpD,UAAI,cAAe,KAAI,MAAM,eAAe,YAAY;AACxD,UAAI,cAAe,KAAI,MAAM,eAAe,YAAY;AAAA,IAC1D,CAAC;AACD,qBAAiB,CAAC,CAAC;AACnB,qBAAiB,EAAE;AACnB,qBAAiB,EAAE;AACnB,uBAAmB,EAAE;AAAG,yBAAqB,EAAE;AAAG,wBAAoB,EAAE;AACxE,0BAAsB,EAAE;AAAG,0BAAsB,EAAE;AAAG,0BAAsB,EAAE;AAC9E,sBAAkB,EAAE;AAAG,qBAAiB,EAAE;AAAG,kBAAc,EAAE;AAC7D,wBAAoB,IAAI;AAAG,oBAAgB,EAAE;AAAG,qBAAiB,EAAE;AACnE,wBAAoB,IAAI;AAAG,yBAAqB,IAAI;AACpD,iBAAa,CAAC,CAAC;AACf,uBAAmB,CAAC,CAAC;AAErB,cAAU,OAAO;AAAA,MACf,YAAY,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,iBAAiB,IAAI,IAAI,CAAC,CAAC,EAC7D,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,sBAAsB,MAAM,aAAa;AAAA,IAC3E,CAAC;AACD,UAAM,KAAK,iBAAiB,EAAE;AAC9B,iBAAa,kBAAkB,EAAE,CAAC;AAClC,iBAAa,GAAG,UAAU,KAAK,MAAM,qCAAqC,SAAS,GAAG,UAAU,KAAK,CAAC;AACtG,yBAAqB,sBAAsB,IAAI,YAAY,CAAC;AAC5D,UAAM,YAAY,CAAC,MAAc;AAC/B,YAAM,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG;AAChC,aAAO,MAAM,MAAM,OAAK,MAAM,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK;AAAA,IAC9D;AACA,kBAAc,UAAU,GAAG,GAAG,UAAU,IAAI,GAAG,YAAY,IAAI,GAAG,aAAa,IAAI,GAAG,WAAW,EAAE,CAAC;AACpG,iBAAa,UAAU,GAAG,GAAG,SAAS,IAAI,GAAG,WAAW,IAAI,GAAG,YAAY,IAAI,GAAG,UAAU,EAAE,CAAC;AAC/F,UAAM,IAAI,GAAG,IAAI,KAAK;AACtB,cAAU,MAAM,WAAW,QAAQ,CAAC;AACpC,oBAAgB,eAAe,GAAG,SAAS,CAAC;AAC5C,gBAAY,GAAG,MAAM,KAAK,CAAC;AAC3B,iBAAa,GAAG,OAAO,KAAK,CAAC;AAC7B,iBAAa,cAAc,IAAI,SAAS,GAAG,MAAM,KAAK,CAAC,CAAC;AACxD,kBAAc,cAAc,IAAI,UAAU,GAAG,OAAO,KAAK,CAAC,CAAC;AAAA,EAC7D;AAEA,WAAS,cAAc;AACrB,YAAQ;AAAA,EACV;AAGA,SACE,8EAEG;AAAA,qBACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,cAAc;AAAA,QACrB,SAAS,cAAc;AAAA,QACvB,gBAAgB,WAAW,QAAQ;AAAA,QACnC;AAAA,QACA,SAAS,MAAM,iBAAiB,IAAI;AAAA,QACpC,WAAW;AAAA;AAAA,IACb;AAAA,IAIA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAU;AAAA,QACV,sBAAmB;AAAA,QACnB,OAAO,EAAE,KAAK,SAAS,KAAK,MAAM,SAAS,KAAK;AAAA,QAIhD;AAAA,wDAAC,SAAI,WAAU,WAAU,aAAa,aACpC;AAAA,0DAAC,SAAI,WAAU,gBACb;AAAA,2DAAC,UAAK,WAAU,YAAW,sCAAI;AAAA,cAC/B,6CAAC,UAAK,WAAU,gBAAe,sBAAQ;AAAA,cACvC;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAM;AAAA,kBACN,UAAU,CAAC,SAAS,iBAAiB,SAAS,kBAAkB,SAAS;AAAA,kBACzE,SAAS,MAAM;AAAE,wBAAI,SAAS,iBAAiB,SAAS,kBAAkB,SAAS,KAAM,UAAS,SAAS,aAAa;AAAA,kBAAG;AAAA,kBAC5H;AAAA;AAAA,cAAC;AAAA,cACF;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAM;AAAA,kBACN,UAAU,CAAC,SAAS;AAAA,kBACpB,SAAS,MAAM;AAAE,wBAAI,SAAS,kBAAmB,UAAS,SAAS,iBAAiB;AAAA,kBAAG;AAAA,kBACxF;AAAA;AAAA,cAAC;AAAA,eACJ;AAAA,YACA,6CAAC,SAAI,WAAU,iBACb,uDAAC,YAAO,WAAU,YAAW,SAAS,aAAa,kBAAC,GACtD;AAAA,aACF;AAAA,UAEA,8CAAC,SAAI,WAAU,WAGb;AAAA,0DAAC,SAAI,WAAU,cACb;AAAA,4DAAC,SAAI,WAAU,wBACb;AAAA,6DAAC,SAAI,WAAU,oBAAmB,sCAAI;AAAA,gBACtC;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAW,eAAe,gBAAgB,sBAAsB,EAAE;AAAA,oBAClE,cAAW;AAAA,oBACX,iBAAe;AAAA,oBACf,SAAS,MAAM,iBAAiB,OAAK,CAAC,CAAC;AAAA,oBAEvC,uDAAC,kCAAW,MAAM,IAAI,aAAa,KAAK;AAAA;AAAA,gBAC1C;AAAA,iBACF;AAAA,cACC,iBACC,6CAAC,SAAI,WAAU,mBAAkB,qMAEjC;AAAA,cAEF,8CAAC,SAAI,WAAU,gBACb;AAAA,6DAAC,YAAO,WAAW,eAAe,UAAU,YAAY,sBAAsB,EAAE,IAAI,SAAS,MAAM,SAAS,SAAS,GAAG,sCAAI;AAAA,gBAC5H,8CAAC,YAAO,WAAW,eAAe,UAAU,cAAc,sBAAsB,EAAE,IAAI,SAAS,MAAM,SAAS,WAAW,GAAG;AAAA;AAAA,kBACrH,YAAY,6CAAC,UAAK,WAAU,kBAAkB,8BAAoB,QAAQ,EAAE,QAAO;AAAA,mBAC1F;AAAA,iBACF;AAAA,eACF;AAAA,YAGA,8CAAC,SAAI,WAAU,cACb;AAAA,2DAAC,SAAI,WAAU,oBAAmB,0BAAE;AAAA,cAEnC,gBAAgB,QACf;AAAA,gBAAC;AAAA;AAAA,kBAAS,WAAU;AAAA,kBAAsB,cAAc;AAAA,kBACtD,KAAK,CAAC,OAAO;AAAE,wBAAI,GAAI,yBAAwB,EAAE;AAAA,kBAAG;AAAA,kBACpD,aAAY;AAAA,kBACZ,UAAU,OAAK;AACb,4CAAwB,EAAE,aAAa;AACvC,0BAAM,KAAK,YAAY;AACvB,wBAAI,CAAC,GAAI;AACT,0BAAM,KAAK,gBAAgB,IAAI,KAAK;AACpC,uBAAG,QAAQ,OAAK;AAAE,wBAAE,cAAc,EAAE,cAAc;AAAA,oBAAO,CAAC;AAAA,kBAC5D;AAAA;AAAA,cACF;AAAA,cAGF,8CAAC,SAAI,WAAU,iBAEb;AAAA,8DAAC,SAAI,WAAU,kBACb;AAAA,+DAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,mBACtC,MAAM;AACN,0BAAM,UAAU,mBAAmB,eAAe;AAClD,0BAAM,YAAY,qBAAqB;AACvC,0BAAM,WAAW,oBAAoB;AACrC,0BAAM,eAAe,mBAAmB,SAAS,WAAW,UAAU,gBAAgB;AACtF,0BAAM,SAAS,eACX,gBAAgB,KAAK,SAAO,IAAI,QAAQ,aAAa,GAAG,IACxD;AACJ,2BACE,8EACE;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,MAAK;AAAA,0BACL,UAAU;AAAA,0BACV,SAAS,OAAK;AAAE,kCAAM,IAAG,EAAE,cAA8B,sBAAsB;AAAG,uCAAW,YAAY,CAAC,CAAC;AAAG,8CAAkB,KAAK;AAAG,6CAAiB,KAAK;AAAG,iDAAqB,KAAK;AAAG,mDAAuB,KAAK;AAAG,8CAAkB,KAAK;AAAG,4CAAgB,EAAE;AAAG,yCAAa,CAAC,CAAC;AAAG,mDAAuB,OAAO;AAAG,gDAAoB,OAAG,CAAC,CAAC;AAAA,0BAAG;AAAA,0BAC3V,WAAW,CAAC,MAAM;AAChB,gCAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,gCAAE,eAAe;AACjB,oCAAM,IAAG,EAAE,cAA8B,sBAAsB;AAC/D,yCAAW,YAAY,CAAC,CAAC;AACzB,qDAAuB,OAAO;AAC9B,kDAAoB,OAAG,CAAC,CAAC;AAAA,4BAC3B;AAAA,0BACF;AAAA,0BAEC;AAAA,sCAAU,6CAAC,UAAK,WAAU,yBAAyB,iBAAO,OAAM;AAAA,4BACjE,6CAAC,UAAK,WAAW,uBAAuB,SAAS,KAAK,+BAA+B,IAAK,mBAAQ;AAAA,4BAClG,6CAAC,SAAI,OAAM,KAAI,QAAO,KAAI,SAAQ,WAAU,MAAK,QAAO,OAAO,EAAC,YAAW,QAAO,YAAW,EAAC,GAAG,uDAAC,UAAK,GAAE,gBAAe,QAAO,WAAU,aAAY,OAAM,eAAc,SAAO,GAAE;AAAA;AAAA;AAAA,sBACpL;AAAA,sBACC,oBACC,8EACE;AAAA,qEAAC,SAAI,OAAO,EAAC,UAAS,SAAQ,OAAM,GAAE,QAAO,MAAK,GAAG,SAAS,MAAI,oBAAoB,KAAK,GAAG;AAAA,wBAC9F,8CAAC,SAAI,WAAU,wBAAuB,OAAO,EAAC,UAAS,SAAQ,KAAI,QAAQ,KAAI,MAAK,QAAQ,MAAK,QAAO,MAAK,GAC1G;AAAA,0CAAgB,IAAI,SACnB;AAAA,4BAAC;AAAA;AAAA,8BACC,WAAW,4BAA4B,QAAQ,QAAM,IAAI,MAAI,mCAAiC,EAAE;AAAA,8BAChG,SAAS,MAAM;AACb,mDAAmB,IAAI,KAAK;AAC5B,qDAAqB,IAAI,UAAU;AACnC,oDAAoB,IAAI,KAAK;AAC7B,8CAAc;AAAA,kCACZ,EAAE,MAAM,aAAa,KAAK,IAAI,MAAM;AAAA,kCACpC,EAAE,MAAM,eAAe,KAAK,IAAI,WAAW;AAAA,kCAC3C,EAAE,MAAM,SAAS,KAAK,IAAI,MAAM;AAAA,gCAClC,CAAC;AACD,oDAAoB,KAAK;AAAA,8BAC3B;AAAA,8BACA;AAAA,6EAAC,UAAK,WAAU,yBAAyB,cAAI,OAAM;AAAA,gCACnD,6CAAC,UAAK,WAAU,wBAAwB,aAAG,IAAI,KAAK,MAAM,IAAI,UAAU,IAAG;AAAA;AAAA;AAAA,4BAdhE,IAAI;AAAA,0BAejB,CACD;AAAA,0BACD,8CAAC,SAAI,WAAU,sBACb;AAAA,yEAAC,UAAK,WAAU,4BAA2B,gCAAG;AAAA,4BAC9C;AAAA,8BAAC;AAAA;AAAA,gCACC,WAAU;AAAA,gCACV,OAAO;AAAA,gCACP,aAAY;AAAA,gCACZ,UAAU,CAAC,MAAM,uBAAuB,EAAE,OAAO,KAAK;AAAA,gCACtD,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA;AAAA,4BACpC;AAAA,4BACA;AAAA,8BAAC;AAAA;AAAA,gCACC,MAAK;AAAA,gCACL,WAAU;AAAA,gCACV,SAAS,CAAC,MAAM;AACd,oCAAE,gBAAgB;AAClB,sCAAI,CAAC,oBAAoB,KAAK,EAAG;AACjC,qDAAmB,oBAAoB,KAAK,CAAC;AAC7C,4CAAU,aAAa,oBAAoB,KAAK,CAAC;AACjD,sDAAoB,KAAK;AAAA,gCAC3B;AAAA,gCACD;AAAA;AAAA,4BAED;AAAA,6BACF;AAAA,2BACF;AAAA,yBACF;AAAA,uBAEJ;AAAA,kBAEJ,GAAG;AAAA,mBACL;AAAA,gBAGA,8CAAC,SAAI,WAAU,kBAAiB,OAAO,EAAE,UAAU,WAAW,GAC5D;AAAA,+DAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,mBACtC,MAAM;AACN,0BAAM,MAAM,qBAAqB;AACjC,0BAAM,SAAS,kBAAkB,KAAK,OAAK,EAAE,UAAU,GAAG,KAAK,kBAAkB,CAAC;AAClF,2BACE,8EACE;AAAA;AAAA,wBAAC;AAAA;AAAA,0BAAO,WAAU;AAAA,0BAAyB,OAAO,EAAE,WAAW,EAAE;AAAA,0BAC/D,SAAS,OAAK;AAAE,kCAAM,IAAG,EAAE,cAA8B,sBAAsB;AAAG,uCAAW,YAAY,CAAC,CAAC;AAAG,8CAAkB,OAAG,CAAC,CAAC;AAAA,0BAAG;AAAA,0BACxI;AAAA,yEAAC,UAAK,WAAU,yBAAwB,OAAO,OAAO,UAAU,SAAS,EAAE,OAAO,UAAU,IAAI,QAAY,iBAAO,OAAM;AAAA,4BACzH,6CAAC,UAAK,WAAU,wBAAwB,eAAI;AAAA,4BAC5C,6CAAC,SAAI,OAAM,KAAI,QAAO,KAAI,SAAQ,WAAU,MAAK,QAAO,OAAO,EAAC,YAAW,QAAO,YAAW,EAAC,GAAG,uDAAC,UAAK,GAAE,gBAAe,QAAO,WAAU,aAAY,OAAM,eAAc,SAAO,GAAE;AAAA;AAAA;AAAA,sBACpL;AAAA,sBACC,kBACC,8EACE;AAAA,qEAAC,SAAI,OAAO,EAAC,UAAS,SAAQ,OAAM,GAAE,QAAO,MAAK,GAAG,SAAS,MAAI,kBAAkB,KAAK,GAAG;AAAA,wBAC5F,6CAAC,SAAI,WAAU,wBAAuB,OAAO,EAAC,UAAS,SAAQ,KAAI,QAAQ,KAAI,MAAK,QAAQ,MAAK,QAAO,MAAK,GAC1G,4BAAkB,IAAI,SACrB;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAW,4BAA4B,QAAM,IAAI,QAAM,mCAAiC,EAAE;AAAA,4BAC1F,SAAS,MAAM;AAAE,mDAAqB,IAAI,KAAK;AAAG,wCAAU,eAAc,IAAI,KAAK;AAAG,gDAAkB,KAAK;AAAA,4BAAG;AAAA,4BAChH;AAAA,2EAAC,UAAK,WAAU,yBAAwB,OAAO,IAAI,UAAU,SAAS,EAAE,OAAO,UAAU,IAAI,QAAY,cAAI,OAAM;AAAA,8BACnH,6CAAC,UAAK,WAAU,wBAAwB,cAAI,OAAM;AAAA;AAAA;AAAA,0BAJvC,IAAI;AAAA,wBAKjB,CACD,GACH;AAAA,yBACF;AAAA,uBAEJ;AAAA,kBAEJ,GAAG;AAAA,mBACL;AAAA,iBAGE,MAAM;AACN,wBAAM,QAAQ,oBAAoB;AAClC,wBAAM,EAAE,OAAO,SAAS,KAAK,OAAO,aAAa,OAAO,IAAI,gBAAgB,OAAO,UAAU,cAAc,WAAW;AACtH,wBAAM,UAAU,MAAM;AAAE,0BAAM,IAAE,MAAM,MAAM,mBAAmB;AAAG,wBAAG,CAAC,EAAG,QAAO;AAAM,0BAAM,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,GAAE,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,GAAE,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE;AAAG,4BAAQ,IAAE,MAAI,IAAE,MAAI,IAAE,OAAK,MAAK;AAAA,kBAAK,GAAG;AAClO,yBACE,8CAAC,SAAI,WAAU,kBAAiB,OAAO,EAAE,UAAU,WAAW,GAC5D;AAAA,iEAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,oBACxC,8CAAC,SAAI,WAAU,wBAAuB,OAAO,EAAE,WAAW,EAAE,GAC1D;AAAA;AAAA,wBAAC;AAAA;AAAA,0BAAO,WAAW,gBAAgB,SAAO,yBAAuB,EAAE;AAAA,0BACjE,OAAO,EAAE,YAAY,SAAO,UAAU;AAAA,0BACtC,SAAS,OAAK;AAAE,kCAAM,IAAG,EAAE,cAA8B,sBAAsB;AAAG,uCAAW,YAAY,CAAC,CAAC;AAAG,iDAAqB,OAAG,CAAC,CAAC;AAAA,0BAAG;AAAA,0BAC3I,uDAAC,SAAI,OAAM,MAAK,QAAO,KAAI,SAAQ,YAAW,MAAK,QAAO,uDAAC,UAAK,GAAE,gBAAe,QAAQ,SAAO,SAAO,WAAW,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAO,GAAE;AAAA;AAAA,sBACpL;AAAA,sBACA,8CAAC,SAAI,WAAU,wBACb;AAAA,qEAAC,UAAK,WAAW,SAAO,yBAAuB,iBAAkB,mBAAQ;AAAA,wBACxE,SAAS,6CAAC,UAAK,WAAU,UAAU,iBAAM;AAAA,yBAC5C;AAAA,uBACF;AAAA,oBACC,qBACC;AAAA,sBAAC;AAAA;AAAA,wBAAc,OAAO;AAAA,wBAAO,KAAK;AAAA,wBAAS;AAAA,wBACzC,UAAU,OAAG;AAAE,8CAAoB,CAAC;AAAG,oCAAU,SAAQ,CAAC;AAAA,wBAAG;AAAA,wBAC7D,SAAS,MAAI,qBAAqB,KAAK;AAAA,wBACvC,YAAY,OAAG,eAAe,GAAE,OAAO;AAAA;AAAA,oBACzC;AAAA,qBAEJ;AAAA,gBAEJ,GAAG;AAAA,iBACL;AAAA,eACF;AAAA,YAGC,OAAO,KAAK,MAAM,EAAE,SAAS,KAC5B,8CAAC,SAAI,WAAU,cACb;AAAA,2DAAC,SAAI,WAAU,oBAAmB,0BAAE;AAAA,cACnC,YAAY,OAAO,CAAC,EAAE,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,MAAM;AACvE,sBAAM,MAAM,cAAc,IAAI,KAAK,OAAO,IAAI;AAC9C,sBAAM,QAAQ,SAAS,GAAG;AAC1B,sBAAM,UAAU,MAAM;AACpB,wBAAM,IAAI,IAAI,MAAM,mBAAmB;AACvC,sBAAI,CAAC,EAAG,QAAO;AACf,wBAAM,IAAI,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE;AACzG,0BAAQ,IAAE,MAAM,IAAE,MAAM,IAAE,OAAO,MAAO;AAAA,gBAC1C,GAAG;AACH,sBAAM,aAAa,kBAAkB;AAErC,sBAAM,YAAY,OAAO,QAAQ,QAAQ,EACtC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,MAAM,GAAG,EAC9C,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,EAAE,EAAE;AACzC,sBAAM,EAAE,OAAO,WAAW,KAAK,SAAS,aAAa,SAAS,IAAI,gBAAgB,KAAK,UAAU,cAAc,WAAW;AAC1H,uBACE,8CAAC,SAAe,WAAU,gBACxB;AAAA,+DAAC,UAAK,WAAU,iBAAiB,iBAAM;AAAA,kBACvC;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW,gBAAgB,SAAS,yBAAyB,EAAE;AAAA,sBAC/D,OAAO,EAAE,YAAY,IAAI;AAAA,sBACzB,SAAS,OAAK;AAAE,8BAAM,IAAK,EAAE,cAA8B,sBAAsB;AAAG,mCAAW,YAAY,CAAC,CAAC;AAAG,yCAAiB,aAAa,OAAO,IAAI;AAAA,sBAAG;AAAA,sBAE5J,uDAAC,SAAI,OAAM,MAAK,QAAO,KAAI,SAAQ,YAAW,MAAK,QACjD,uDAAC,UAAK,GAAE,gBAAe,QAAQ,SAAS,SAAS,WAAW,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAO,GAC5H;AAAA;AAAA,kBACF;AAAA,kBACA,8CAAC,SAAI,WAAU,iBACb;AAAA,iEAAC,UAAK,WAAW,WAAW,yBAAyB,iBAAkB,qBAAU;AAAA,oBAChF,WAAW,6CAAC,UAAK,WAAU,UAAU,mBAAQ;AAAA,qBAChD;AAAA,kBACC,cACC;AAAA,oBAAC;AAAA;AAAA,sBAAc,OAAO;AAAA,sBAAK,KAAK;AAAA,sBAAS;AAAA,sBACvC,UAAU,CAAC,GAAG,QAAQ;AAAE,yCAAiB,WAAS,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE;AAAG,kCAAU,MAAM,CAAC;AAAA,sBAAG;AAAA,sBAChG,SAAS,MAAM,iBAAiB,IAAI;AAAA,sBACpC,YAAY,OAAG,eAAe,GAAG,IAAI;AAAA;AAAA,kBACvC;AAAA,qBApBM,IAsBV;AAAA,cAEJ,CAAC;AAAA,eACH;AAAA,YAIF,8CAAC,SAAI,WAAU,cACb;AAAA,2DAAC,SAAI,WAAU,oBAAmB,0BAAE;AAAA,cACpC,8CAAC,SAAI,WAAU,kBACb;AAAA,8DAAC,SAAI,WAAU,kBACb;AAAA,+DAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,kBACxC,8CAAC,SAAI,WAAU,gBAAe,cAAW,4BACvC;AAAA,iEAAC,YAAO,WAAU,iCAAgC,SAAS,MAAM,cAAc,GAAG,EAAE,GAAG,OAAM,oBAAS,oBAAC;AAAA,oBACvG,6CAAC,YAAO,WAAU,mCAAkC,SAAS,MAAM,cAAc,IAAI,CAAC,GAAG,OAAM,oBAAS,oBAAC;AAAA,oBACzG,8CAAC,SAAI,WAAU,oBACb;AAAA,oEAAC,UAAK;AAAA;AAAA,wBAAG,KAAK,OAAO,oBAAoB,cAAc,CAAC;AAAA,yBAAE;AAAA,sBAC1D,8CAAC,UAAK;AAAA;AAAA,wBAAG,KAAK,OAAO,oBAAoB,cAAc,CAAC;AAAA,yBAAE;AAAA,uBAC5D;AAAA,oBACA,6CAAC,YAAO,WAAU,oCAAmC,SAAS,MAAM,cAAc,GAAG,CAAC,GAAG,OAAM,oBAAS,oBAAC;AAAA,oBACzG,6CAAC,YAAO,WAAU,mCAAkC,SAAS,MAAM,cAAc,GAAG,CAAC,GAAG,OAAM,oBAAS,oBAAC;AAAA,qBAC1G;AAAA,mBACF;AAAA,gBAEA,8CAAC,SAAI,WAAU,uCACb;AAAA,+DAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,kBACtC;AAAA,oBACA,EAAE,KAAK,SAAS,OAAO,KAAK,SAAS,UAAU,SAAS,cAAc,MAAM,WAAW,aAAa,iBAAiB;AAAA,oBACrH,EAAE,KAAK,UAAU,OAAO,KAAK,SAAS,WAAW,SAAS,eAAe,MAAM,YAAY,aAAa,kBAAkB;AAAA,kBAC5H,EAAY,IAAI,UAAQ;AACtB,0BAAM,MAAM,iBAAiB,KAAK,SAAS,KAAK,OAAO;AACvD,0BAAM,WAAW,UAAU,KAAK,GAAG,KAAK;AACxC,0BAAM,aAAa,KAAK,eAAe,KAAK;AAC5C,2BACE,8CAAC,SAAI,WAAU,eACb;AAAA,mEAAC,UAAK,WAAU,gBAAgB,eAAK,OAAM;AAAA,sBAC3C;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO;AAAA,0BACP,cAAY,GAAG,KAAK,KAAK;AAAA,0BACzB,UAAU,OAAK;AACb,yCAAa,WAAS,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,MAAM,EAAE;AAC9D,oCAAQ,KAAK,KAAK,EAAE,OAAO,OAAO,OAAO;AAAA,0BAC3C;AAAA,0BACA,SAAS,OAAK;AACZ,yCAAa,WAAS,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,IAAI,EAAE;AACnD,8BAAE,cAAc,OAAO;AAAA,0BACzB;AAAA,0BACA,SAAS,OAAK,EAAE,cAAc,OAAO;AAAA,0BACrC,WAAW,OAAK,EAAE,eAAe;AAAA,0BACjC,QAAQ,MAAM,aAAa,UAAQ;AACjC,kCAAM,OAAO,EAAE,GAAG,KAAK;AACvB,mCAAO,KAAK,KAAK,GAAG;AACpB,mCAAO;AAAA,0BACT,CAAC;AAAA,0BACD,WAAW,OAAK;AACd,gCAAI,EAAE,QAAQ,QAAS,GAAE,cAAc,KAAK;AAAA,0BAC9C;AAAA;AAAA,sBACF;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO;AAAA,0BACP,UAAU,OAAK;AACb,kCAAM,OAAO,EAAE,OAAO;AACtB,oCAAQ,KAAK,KAAK,KAAK,SAAS,IAAI;AAAA,0BACtC;AAAA,0BAEC,uBAAa,IAAI,SAChB,6CAAC,YAAsB,OAAO,IAAI,MAAO,cAAI,SAAhC,IAAI,IAAkC,CACpD;AAAA;AAAA,sBACH;AAAA,yBApCgC,KAAK,GAqCvC;AAAA,kBAEJ,CAAC;AAAA,mBACH;AAAA,iBACF;AAAA,eACF;AAAA,YAGA,8CAAC,SAAI,WAAU,cACb;AAAA,2DAAC,SAAI,WAAU,oBAAmB,0BAAE;AAAA,cACpC,6CAAC,SAAI,WAAU,kBACX,iBAAM;AACN,sBAAM,eAAe,iBAAiB;AACtC,sBAAM,gBAAgB,iBAAiB,cAAc,mBAAmB,YAAY;AACpF,sBAAM,gBAAgB,cAAc,KAAK,YAAU,wBAAwB,OAAO,KAAK,MAAM,wBAAwB,YAAY,CAAC,KAAK;AACvI,sBAAM,eAAe,iBAAiB,cAAc,CAAC;AACrD,uBACE,8EACE;AAAA,gEAAC,SAAI,WAAU,kBAAiB,OAAO,EAAE,UAAU,WAAW,GAC5D;AAAA,iEAAC,SAAI,WAAU,wBAAuB,mBAAK;AAAA,oBAC3C;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAS,OAAK;AACZ,gCAAM,IAAK,EAAE,cAA8B,sBAAsB;AACjE,qCAAW,YAAY,CAAC,CAAC;AACzB,4CAAkB,OAAK,CAAC,CAAC;AAAA,wBAC3B;AAAA,wBAEA;AAAA,uEAAC,UAAK,WAAU,yBAAwB,OAAO,aAAa,SAAS,SAAY,EAAE,OAAO,UAAU,GAAI,uBAAa,OAAM;AAAA,0BAC3H,6CAAC,UAAK,WAAU,wBAAwB,uBAAa,UAAU,QAAO;AAAA,0BACtE,6CAAC,SAAI,OAAM,KAAI,QAAO,KAAI,SAAQ,WAAU,MAAK,QAAO,OAAO,EAAC,YAAW,QAAO,YAAW,EAAC,GAAG,uDAAC,UAAK,GAAE,gBAAe,QAAO,WAAU,aAAY,OAAM,eAAc,SAAO,GAAE;AAAA;AAAA;AAAA,oBACpL;AAAA,oBACC,kBACC,8EACE;AAAA,mEAAC,SAAI,OAAO,EAAC,UAAS,SAAQ,OAAM,GAAE,QAAO,MAAK,GAAG,SAAS,MAAM,kBAAkB,KAAK,GAAG;AAAA,sBAC9F,8CAAC,SAAI,WAAU,uCAAsC,OAAO,EAAC,UAAS,SAAQ,KAAI,QAAQ,KAAI,MAAK,QAAQ,MAAK,QAAO,MAAK,GACzH;AAAA,sCAAc,IAAI,YAAU;AAC3B,gCAAM,OAAO,wBAAwB,OAAO,KAAK,MAAM,wBAAwB,YAAY;AAC3F,iCACE;AAAA,4BAAC;AAAA;AAAA,8BAEC,WAAW,4BAA4B,OAAO,mCAAmC,EAAE;AAAA,8BACnF,SAAS,MAAM;AACb,iDAAiB,OAAO,KAAK;AAC7B,0CAAU,cAAc,OAAO,KAAK;AACpC,kDAAkB,KAAK;AAAA,8BACzB;AAAA,8BAEA;AAAA,6EAAC,UAAK,WAAU,yBAAwB,OAAO,OAAO,SAAS,SAAY,EAAE,OAAO,UAAU,GAAI,iBAAO,OAAM;AAAA,gCAC/G,8CAAC,UAAK,WAAU,uBACd;AAAA,+EAAC,UAAK,WAAU,wBAAwB,iBAAO,UAAU,OAAO,OAAM;AAAA,kCACrE,OAAO,UAAU,6CAAC,UAAK,WAAU,wBAAwB,iBAAO,OAAM;AAAA,mCACzE;AAAA;AAAA;AAAA,4BAZK,OAAO,UAAU,OAAO;AAAA,0BAa/B;AAAA,wBAEJ,CAAC;AAAA,wBACD;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAW,4BAA4B,gBAAgB,KAAK,gCAAgC;AAAA,4BAC5F,SAAS,MAAM;AACb,oCAAM,OAAO,OAAO,oFAA4C,iBAAiB,SAAS,KAAK,YAAY;AAC3G,kCAAI,SAAS,KAAM;AACnB,oCAAM,QAAQ,KAAK,KAAK,KAAK;AAC7B,+CAAiB,KAAK;AACtB,wCAAU,cAAc,KAAK;AAC7B,gDAAkB,KAAK;AAAA,4BACzB;AAAA,4BAEA;AAAA,2EAAC,UAAK,WAAU,yBAAwB,gCAAG;AAAA,8BAC3C,8CAAC,UAAK,WAAU,uBACd;AAAA,6EAAC,UAAK,WAAU,wBAAwB,wBAAc,OAAM;AAAA,gCAC5D,6CAAC,UAAK,WAAU,wBAAwB,8BAAoB,YAAY,GAAE;AAAA,iCAC5E;AAAA;AAAA;AAAA,wBACF;AAAA,yBACF;AAAA,uBACF;AAAA,qBAEJ;AAAA,kBAEA,8CAAC,SAAI,WAAU,kBACb;AAAA,iEAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,oBACxC,8CAAC,SAAI,WAAU,yBACb;AAAA,mEAAC,SAAI,WAAU,0BAAyB,OAAO,EAAE,WAAW,iBAAiB,SAAS,SAAS,aAAa,GAAG;AAAA,sBAC/G,8CAAC,SAAI,WAAU,0BACb;AAAA,qEAAC,UAAK,WAAW,cAAc,cAAc,yBAAyB,iBAAkB,wBAAc,OAAM;AAAA,wBAC5G,6CAAC,UAAK,WAAU,uBAAuB,wBAAc,KAAI;AAAA,yBAC3D;AAAA,uBACF;AAAA,qBACF;AAAA,mBACF;AAAA,cAEJ,GAAG,GACL;AAAA,eACF;AAAA,YAGA,8CAAC,SAAI,WAAU,cACb;AAAA,2DAAC,SAAI,WAAU,oBAAmB,0BAAE;AAAA,cACpC,8CAAC,SAAI,WAAU,iBAGX;AAAA,uBAAM;AACN,wBAAM,QAAQ,sBAAsB;AACpC,wBAAM,EAAE,OAAO,SAAS,KAAK,OAAO,aAAa,OAAO,IAAI,gBAAgB,SAAS,IAAI,UAAU,cAAc,WAAW;AAC5H,wBAAM,UAAU,MAAM;AAAE,0BAAM,IAAI,OAAO,MAAM,mBAAmB;AAAG,wBAAI,CAAC,EAAG,QAAO;AAAO,0BAAM,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,GAAE,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,GAAE,IAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE;AAAG,4BAAQ,IAAE,MAAI,IAAE,MAAI,IAAE,OAAK,MAAO;AAAA,kBAAK,GAAG;AACzO,yBACE,8CAAC,SAAI,WAAU,kBACb;AAAA,iEAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,oBACxC,8CAAC,SAAI,WAAU,wBACb;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAW,gBAAgB,SAAS,yBAAyB,EAAE,GAAG,CAAC,QAAQ,0BAA0B,EAAE;AAAA,0BACvG,OAAO,EAAE,YAAY,SAAS,OAAU;AAAA,0BACxC,SAAS,OAAK;AAAE,kCAAM,IAAG,EAAE,cAA8B,sBAAsB;AAAG,uCAAW,YAAY,CAAC,CAAC;AAAG,mDAAuB,OAAG,CAAC,CAAC;AAAA,0BAAG;AAAA,0BAE7I,uDAAC,SAAI,OAAM,MAAK,QAAO,KAAI,SAAQ,YAAW,MAAK,QACjD,uDAAC,UAAK,GAAE,gBAAe,QAAQ,CAAC,QAAQ,YAAY,SAAS,SAAS,WAAW,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAO,GACjJ;AAAA;AAAA,sBACF;AAAA,sBACA,8CAAC,SAAI,WAAU,wBACb;AAAA,qEAAC,UAAK,WAAW,SAAS,yBAAyB,iBAAkB,kBAAQ,UAAU,sBAAM;AAAA,wBAC5F,SAAS,6CAAC,UAAK,WAAU,UAAU,iBAAM;AAAA,yBAC5C;AAAA,uBACF;AAAA,oBACC,uBACC;AAAA,sBAAC;AAAA;AAAA,wBAAc,OAAO,SAAS;AAAA,wBAAI,KAAK;AAAA,wBAAS;AAAA,wBAC/C,UAAU,OAAK;AACb,gDAAsB,CAAC;AAAG,oCAAU,gBAAgB,CAAC;AACrD,+BAAK,sBAAsB,oBAAoB,OAAO;AAAE,sCAAU,gBAAgB,KAAK;AAAG,sCAAU,gBAAgB,OAAO;AAAG,kDAAsB,KAAK;AAAG,kDAAsB,OAAO;AAAA,0BAAG;AAAA,wBAC9L;AAAA,wBACA,SAAS,MAAM,uBAAuB,KAAK;AAAA,wBAC3C,YAAY,OAAG,eAAe,GAAE,cAAc;AAAA;AAAA,oBAChD;AAAA,qBAEJ;AAAA,gBAEJ,GAAG;AAAA,gBAGH,8CAAC,SAAI,WAAU,kBAAiB,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAE,GACxF;AAAA,+DAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,mBACtC,MAAM;AACN,0BAAM,MAAM,sBAAsB,kBAAkB;AACpD,0BAAM,MAAM,iBAAiB,QAAQ,GAAG;AACxC,2BACE,8CAAC,SAAI,WAAU,cACb;AAAA,mEAAC,UAAK,WAAU,kBAAkB,eAAI;AAAA,sBACtC,8CAAC,SAAI,WAAU,mBACb;AAAA;AAAA,0BAAC;AAAA;AAAA,4BAAO,WAAU;AAAA,4BAAgB,UAAU,OAAO;AAAA,4BACjD,SAAS,MAAM;AAAE,oCAAM,KAAG,iBAAiB,KAAK,IAAI,GAAE,MAAI,CAAC,CAAC;AAAG,oDAAsB,EAAE;AAAG,wCAAU,gBAAe,EAAE;AAAA,4BAAG;AAAA,4BACxH,uDAAC,SAAI,OAAM,KAAI,QAAO,KAAI,SAAQ,WAAU,uDAAC,UAAK,GAAE,gBAAe,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,MAAK,QAAM,GAAE;AAAA;AAAA,wBAChJ;AAAA,wBACA;AAAA,0BAAC;AAAA;AAAA,4BAAO,WAAU;AAAA,4BAAgB,UAAU,OAAO,iBAAiB,SAAS;AAAA,4BAC3E,SAAS,MAAM;AAAE,oCAAM,KAAG,iBAAiB,KAAK,IAAI,iBAAiB,SAAO,GAAE,MAAI,IAAE,IAAE,MAAI,CAAC,CAAC;AAAG,oDAAsB,EAAE;AAAG,wCAAU,gBAAe,EAAE;AAAA,4BAAG;AAAA,4BACxJ,uDAAC,SAAI,OAAM,KAAI,QAAO,KAAI,SAAQ,WAAU,uDAAC,UAAK,GAAE,gBAAe,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,MAAK,QAAM,GAAE;AAAA;AAAA,wBAChJ;AAAA,yBACF;AAAA,uBACF;AAAA,kBAEJ,GAAG;AAAA,mBACL;AAAA,gBAGA,8CAAC,SAAI,WAAU,kBAAiB,OAAO,EAAE,UAAU,WAAW,GAC5D;AAAA,+DAAC,SAAI,WAAU,wBAAuB,0BAAE;AAAA,mBACtC,MAAM;AACN,0BAAM,MAAM,sBAAsB;AAClC,0BAAM,SAAS,qBAAqB,KAAK,OAAK,EAAE,UAAU,GAAG,KAAK,qBAAqB,CAAC;AACxF,2BACE,8EACE;AAAA;AAAA,wBAAC;AAAA;AAAA,0BAAO,WAAU;AAAA,0BAChB,SAAS,OAAK;AAAE,kCAAM,IAAG,EAAE,cAA8B,sBAAsB;AAAG,uCAAW,YAAY,CAAC,CAAC;AAAG,6CAAiB,OAAG,CAAC,CAAC;AAAA,0BAAG;AAAA,0BACvI;AAAA,yEAAC,UAAK,WAAU,yBAAwB,OAAO,OAAO,UAAU,SAAS,EAAE,OAAO,UAAU,IAAI,QAAY,iBAAO,OAAM;AAAA,4BACzH,6CAAC,UAAK,WAAU,wBAAwB,iBAAO,OAAM;AAAA,4BACrD,6CAAC,SAAI,OAAM,KAAI,QAAO,KAAI,SAAQ,WAAU,MAAK,QAAO,OAAO,EAAC,YAAW,QAAO,YAAW,EAAC,GAAG,uDAAC,UAAK,GAAE,gBAAe,QAAO,WAAU,aAAY,OAAM,eAAc,SAAO,GAAE;AAAA;AAAA;AAAA,sBACpL;AAAA,sBACC,iBACC,8EACE;AAAA,qEAAC,SAAI,OAAO,EAAC,UAAS,SAAQ,OAAM,GAAE,QAAO,MAAK,GAAG,SAAS,MAAM,iBAAiB,KAAK,GAAG;AAAA,wBAC7F,6CAAC,SAAI,WAAU,wBAAuB,OAAO,EAAC,UAAS,SAAQ,KAAI,QAAQ,KAAI,MAAK,QAAQ,MAAK,QAAO,MAAK,GAC1G,+BAAqB,IAAI,SACxB;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAW,4BAA4B,QAAM,IAAI,QAAM,mCAAiC,EAAE;AAAA,4BAC1F,SAAS,MAAM;AAAE,oDAAsB,IAAI,KAAK;AAAG,wCAAU,gBAAe,IAAI,KAAK;AAAG,+CAAiB,KAAK;AAAA,4BAAG;AAAA,4BACjH;AAAA,2EAAC,UAAK,WAAU,yBAAwB,OAAO,IAAI,UAAU,SAAS,EAAE,OAAO,UAAU,IAAI,QAAY,cAAI,OAAM;AAAA,8BACnH,6CAAC,UAAK,WAAU,wBAAwB,cAAI,OAAM;AAAA;AAAA;AAAA,0BAJvC,IAAI;AAAA,wBAKjB,CACD,GACH;AAAA,yBACF;AAAA,uBAEJ;AAAA,kBAEJ,GAAG;AAAA,mBACL;AAAA,iBAEF;AAAA,eACF;AAAA,YAGA,8CAAC,SAAI,WAAU,cACb;AAAA,2DAAC,SAAI,WAAU,oBAAmB,0BAAE;AAAA,cACpC,8CAAC,SAAI,WAAU,iBACZ;AAAA,8BAAc,IAAI,SAAO;AACxB,wBAAM,UAAU,iBAAiB;AACjC,wBAAM,OAAO,YAAY,eAAe,OAAO,GAAG,UAAU,IAAI;AAChE,yBACE;AAAA,oBAAC;AAAA;AAAA,sBAEC,WAAW,YAAY,OAAO,mBAAmB,EAAE;AAAA,sBACnD,SAAS,MAAM;AAAE,yCAAiB,IAAI,KAAK;AAAG,wCAAgB,EAAE;AAAG,kCAAU,iBAAiB,IAAI,KAAK;AAAA,sBAAG;AAAA,sBAE1G;AAAA,qEAAC,UAAK,WAAU,mBAAmB,cAAI,OAAM;AAAA,wBAC5C,IAAI,OAAO,6CAAC,UAAK,WAAU,iBAAiB,cAAI,KAAI;AAAA;AAAA;AAAA,oBALhD,IAAI;AAAA,kBAMX;AAAA,gBAEJ,CAAC;AAAA,iBACC,MAAM;AACN,wBAAM,MAAM,iBAAiB;AAC7B,wBAAM,WAAW,CAAC,CAAC,OAAO,QAAQ,SAAS,CAAC,YAAY,eAAe,GAAG;AAC1E,yBACE;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAW,YAAY,WAAW,mBAAmB,EAAE;AAAA,sBACvD,SAAS,MAAM;AAAE,8BAAM,IAAI,OAAO,yDAAiB,OAAO,EAAE;AAAG,4BAAI,GAAG;AAAE,2CAAiB,CAAC;AAAG,0CAAgB,CAAC;AAAG,oCAAU,iBAAiB,CAAC;AAAA,wBAAG;AAAA,sBAAE;AAAA,sBAElJ;AAAA,qEAAC,UAAK,WAAU,mBAAkB,gCAAG;AAAA,wBACpC,YAAY,6CAAC,UAAK,WAAU,iBAAiB,eAAI;AAAA;AAAA;AAAA,kBACpD;AAAA,gBAEJ,GAAG;AAAA,iBACL;AAAA,eACF;AAAA,YAGA,8CAAC,SAAI,WAAU,cACb;AAAA,2DAAC,SAAI,WAAU,oBAAmB,0BAAE;AAAA,cACpC,8CAAC,SAAI,WAAU,gBACb;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBAAM,SAAQ;AAAA,oBACpB,OAAO,kBAAkB;AAAA,oBACzB;AAAA,oBACA,UAAU,OAAK;AAAE,wCAAkB,CAAC;AAAG,gCAAU,WAAW,CAAC;AAAA,oBAAG;AAAA;AAAA,gBAClE;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBAAM,SAAQ;AAAA,oBACpB,OAAO,iBAAiB;AAAA,oBACxB;AAAA,oBACA,UAAU,OAAK;AAAE,uCAAiB,CAAC;AAAG,gCAAU,UAAU,CAAC;AAAA,oBAAG;AAAA;AAAA,gBAChE;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBAAO,SAAQ;AAAA,oBACrB,OAAO,cAAc;AAAA,oBACrB;AAAA,oBACA,UAAU,OAAK;AAAE,oCAAc,CAAC;AAAG,gCAAU,OAAO,CAAC;AAAA,oBAAG;AAAA;AAAA,gBAC1D;AAAA,iBACF;AAAA,eACF;AAAA,YAEA,8CAAC,SAAI,WAAU,cACb;AAAA,2DAAC,SAAI,WAAU,oBAAmB,kDAAM;AAAA,cACxC,8CAAC,SAAI,WAAU,oBACb;AAAA,8DAAC,SAAI,WAAU,iBAAgB;AAAA;AAAA,kBAAK,mBAAmB;AAAA,mBAAa;AAAA,iBAClE,MAAM;AACN,wBAAM,iBAAiB,wBAAwB;AAC/C,sBAAI,eAAe,WAAW,EAAG,QAAO;AACxC,wBAAM,KAAK,YAAY;AACvB,wBAAM,gBAAgB,KAAK,WAAW,EAAE,IAAI,CAAC;AAC7C,wBAAM,cAAc,KAChB,cAAc,SACZ,GAAG,GAAG,QAAQ,YAAY,CAAC,IAAI,cAAc,KAAK,GAAG,CAAC,KACtD,GAAG,QAAQ,YAAY,IACzB;AACJ,yBACE,6CAAC,SAAI,WAAU,iBACb,wDAAC,SAAI,WAAU,sCACb;AAAA,iEAAC,SAAI,WAAU,sBACb,uDAAC,SAAI,WAAU,mBAAmB,uBAAY,GAChD;AAAA,oBACA,6CAAC,QAAG,WAAU,wBACX,yBAAe,IAAI,CAAC,QAAQ,QAC3B,6CAAC,QAAG,WAAU,wBACZ,wDAAC,UAAK,WAAU,wBACb;AAAA,4BAAM;AAAA,sBAAE;AAAA,sBAAG,eAAe,OAAO,IAAI;AAAA,sBAAE;AAAA,sBAAE,OAAO;AAAA,sBAAK;AAAA,sBAAI,OAAO;AAAA,uBACnE,KAHwC,WAAW,OAAO,IAAI,IAAI,GAAG,EAIvE,CACD,GACH;AAAA,qBACF,GACF;AAAA,gBAEJ,GAAG;AAAA,gBACF,mBAAmB,eAAe,SAAS,IAC1C,6CAAC,SAAI,WAAU,iBACZ,6BAAmB,eAAe,IAAI,CAAC,UACtC,8CAAC,SAAI,WAAU,iBACb;AAAA,gEAAC,SAAI,WAAU,sBACb;AAAA,iEAAC,SAAI,WAAU,mBAAmB,gBAAM,eAAe,MAAM,YAAY,kCAAQ;AAAA,oBACjF,6CAAC,YAAO,WAAU,mBAAkB,SAAS,MAAM,wBAAwB,MAAM,EAAE,GAAG,sCAAI;AAAA,qBAC5F;AAAA,kBACC,MAAM,OAAO,6CAAC,SAAI,WAAU,iBAAiB,gBAAM,MAAK,IAAS;AAAA,kBAClE,6CAAC,QAAG,WAAU,wBACX,gBAAM,QAAQ,QAAQ,CAAC,UAAU,MAAM,QAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,MAAM,UAAU,GAAG,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,QACvH,8CAAC,QAAG,WAAU,wBACZ;AAAA,kEAAC,UAAK,WAAU,wBACb;AAAA,4BAAM;AAAA,sBAAE;AAAA,sBAAG,eAAe,OAAO,IAAI;AAAA,sBAAE;AAAA,sBAAE,OAAO,OAAO,GAAG,OAAO,IAAI,aAAQ;AAAA,sBAAI,OAAO;AAAA,uBAC3F;AAAA,oBACA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAS,MAAM,wBAAwB,MAAM,IAAI,OAAO,UAAU,OAAO,IAAI;AAAA,wBAC9E;AAAA;AAAA,oBAED;AAAA,uBATwC,GAAG,MAAM,EAAE,IAAI,OAAO,QAAQ,IAAI,OAAO,IAAI,IAAI,GAAG,EAU9F,CACD,GACH;AAAA,qBApBkC,MAAM,EAqB1C,CACD,GACH,IAEA,6CAAC,SAAI,WAAU,YAAW,8DAAQ;AAAA,iBAEtC;AAAA,eACF;AAAA,aAEF;AAAA,WAGE,MAAM;AACN,kBAAM,aAAa,OAAO,KAAK,aAAa,EAAE,SAAS,KACrD,CAAC,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,CAAC,iBAC3C,CAAC,CAAC,sBAAsB,CAAC,CAAC,sBAAsB,CAAC,CAAC,sBAClD,CAAC,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,kBAC9C,CAAC,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC,oBACrC,CAAC,CAAC,gBAAgB,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACzC,mBACF,8CAAC,SAAI,WAAU,WACb;AAAA,2DAAC,YAAO,WAAU,iBAAgB,SAAS,aAAa,0BAAE;AAAA,cAC1D,6CAAC,YAAO,WAAU,iBAAgB,SAAS,MAAM;AAC/C,sBAAM,KAAK,YAAY;AACvB,oBAAI,CAAC,GAAI;AAET,sBAAM,kBAAkB,EAAE,GAAG,QAAQ,GAAG,cAAc;AACtD,sBAAM,UAA8B;AAAA,kBAClC,GAAG,OAAO,QAAQ,eAAe,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,aAAa;AAAA,kBAC7E,CAAE,oBAAoB,eAAgB,UAAU,IAAI,oBAAoB,YAAY;AAAA,kBACpF,CAAE,iBAAiB,YAAa,kBAAkB,IAAI,iBAAiB,SAAS;AAAA,kBAChF,CAAE,kBAAkB,cAAc,SAAS,YAAY,MAAO,eAAe,IAAI,kBAAkB,cAAc,SAAS,YAAY,GAAG;AAAA,kBACzI,CAAE,sBAAsB,iBAAkB,iBAAiB,IAAI,sBAAsB,cAAc;AAAA,kBACnG,CAAE,uBAAuB,mBAAmB,QAAQ,iBAAiB,MAAO,iBAAiB,IAAI,sBAAsB,cAAc;AAAA,kBACrI,CAAE,uBAAuB,mBAAmB,SAAS,iBAAiB,MAAO,iBAAiB,IAAI,sBAAsB,cAAc;AAAA,kBACtI,CAAE,mBAAmB,cAAe,cAAc,IAAI,mBAAmB,WAAW;AAAA,kBACpF,CAAE,qBAAqB,gBAAiB,gBAAgB,IAAI,qBAAqB,aAAa;AAAA,kBAC9F,CAAE,mBAAmB,eAAe,QAAQ,aAAa,MAAO,YAAY,IAAI,kBAAkB,UAAU;AAAA,kBAC5G,CAAE,kBAAkB,cAAc,QAAQ,YAAY,MAAO,WAAW,IAAI,iBAAiB,SAAS;AAAA,kBACtG,CAAE,eAAe,WAAW,QAAQ,SAAS,MAAO,QAAQ,IAAI,cAAc,MAAM;AAAA,kBACpF,CAAE,gBAAgB,WAAY,UAAU,IAAI,gBAAgB,QAAQ;AAAA,kBACpE,CAAE,iBAAiB,YAAa,WAAW,IAAI,iBAAiB,SAAS;AAAA,gBAC3E,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;AAC3B,sBAAM,WAAW,oBAAoB,IAAI,KAAK;AAC9C,sBAAM,MAAM,QAAQ,SAAS,IACzB,GAAG,QAAQ;AAAA,EAAO,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,KACrE,MAAM,QAAQ;AAClB,sBAAM,KAAK,SAAS,cAAc,UAAU;AAC5C,mBAAG,QAAQ;AACX,mBAAG,MAAM,UAAU;AACnB,yBAAS,KAAK,YAAY,EAAE;AAC5B,mBAAG,OAAO;AACV,yBAAS,YAAY,MAAM;AAC3B,yBAAS,KAAK,YAAY,EAAE;AAC5B,gCAAgB,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE;AAC7D,6BAAa,IAAI;AACjB,2BAAW,2BAAO;AAClB,2BAAW,MAAM,WAAW,EAAE,GAAG,IAAI;AAAA,cACvC,GAAI,qBAAW,4BAAO;AAAA,cACtB;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,SAAS;AAAA,kBACT,UAAU,CAAC;AAAA,kBACX,OAAO,CAAC,aAAa,EAAE,SAAS,KAAK,QAAQ,cAAc,IAAI,CAAC;AAAA,kBAChE,OAAM;AAAA,kBACN,uBAAa;AAAA;AAAA,cAAQ;AAAA,eACzB;AAAA,UAEA,GAAG;AAAA,UACF,aACC,6CAAC,SAAI,WAAU,gBACb,wDAAC,YAAO,WAAU,gBAAe,SAAS,MAAM;AAC9C,0BAAc,QAAQ,CAAC,EAAE,MAAM,IAAI,MAAM;AACvC,kBAAI,SAAS,sBAAsB,SAAS;AAC1C,iCAAiB,WAAS,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE;AAAA,uBAC5C,SAAS,QAAiB,qBAAoB,GAAG;AAAA,uBACjD,SAAS,gBAAiB,kBAAiB,GAAG;AAAA,uBAC9C,SAAS,aAAiB,kBAAiB,GAAG;AAAA,uBAC9C,SAAS,eAAiB,uBAAsB,GAAG;AAAA,uBACnD,SAAS,eAAiB,uBAAsB,GAAG;AAAA,uBACnD,SAAS,eAAiB,uBAAsB,GAAG;AAAA,uBACnD,SAAS,YAAiB,oBAAmB,GAAG;AAAA,uBAChD,SAAS,cAAiB,sBAAqB,GAAG;AAAA,uBAClD,SAAS,UAAiB,mBAAkB,GAAG;AAAA,uBAC/C,SAAS,SAAiB,kBAAiB,GAAG;AAAA,uBAC9C,SAAS,MAAiB,eAAc,GAAG;AAAA,uBAC3C,SAAS,QAAiB,iBAAgB,GAAG;AAAA,uBAC7C,SAAS,SAAiB,kBAAiB,GAAG;AAAA,YACzD,CAAC;AACD,uBAAW,aAAa;AAAA,UAC1B,GAAG;AAAA;AAAA,YACK,cAAc;AAAA,YAAO;AAAA,aAC7B,GACF;AAAA;AAAA;AAAA,IAGJ;AAAA,KAEJ;AAEJ;AAKA,IAAM,aAA0B;AAAA,EAC9B,EAAE,MAAM,QAAkB,MAAM,qHAA2B;AAAA,EAC3D,EAAE,MAAM,cAAkB,MAAM,gCAAY;AAAA,EAC5C,EAAE,MAAM,gBAAkB,MAAM,mDAAW;AAAA,EAC3C,EAAE,MAAM,iBAAkB,MAAM,sCAAkB;AAAA,EAClD,EAAE,MAAM,kBAAkB,MAAM,uCAAS;AAC3C;AAEA,IAAM,gBAA6B;AAAA,EACjC,EAAE,MAAM,wBAA4B,MAAM,mDAAW;AAAA,EACrD,EAAE,MAAM,mBAA4B,MAAM,yDAAY;AAAA,EACtD,EAAE,MAAM,qBAA4B,MAAM,mDAAW;AAAA,EACrD,EAAE,MAAM,qBAA4B,MAAM,mDAAW;AAAA,EACrD,EAAE,MAAM,0BAA4B,MAAM,mDAAW;AAAA,EACrD,EAAE,MAAM,4BAA4B,MAAM,uCAAS;AACrD;AAEA,IAAM,eAA4B;AAAA,EAChC,EAAE,MAAM,2BAAsC,MAAM,uCAAS;AAAA,EAC7D,EAAE,MAAM,yBAAsC,MAAM,wCAAoB;AAAA,EACxE,EAAE,MAAM,yBAAsC,MAAM,uCAAS;AAAA,EAC7D,EAAE,MAAM,kCAAsC,MAAM,uCAAS;AAAA,EAC7D,EAAE,MAAM,sCAAsC,MAAM,uCAAS;AAC/D;AAEA,SAAS,SAAS,EAAE,MAAM,GAA2B;AACnD,SACE,6CAAC,QAAG,WAAU,mBACX,gBAAM,IAAI,OACT,8CAAC,QACC;AAAA,iDAAC,UAAK,WAAU,mBAAmB,YAAE,MAAK;AAAA,IAC1C,6CAAC,UAAK,WAAU,mBAAmB,YAAE,MAAK;AAAA,OAFnC,EAAE,IAGX,CACD,GACH;AAEJ;AAIA,SAAS,iBAAiB;AACxB,QAAM,EAAE,UAAU,IAAI,sBAAsB;AAC5C,QAAM,CAAC,MAAM,OAAO,QAAU,wBAAS,KAAK;AAC5C,QAAM,CAAC,QAAQ,SAAS,QAAM,wBAAmB,MAAM;AACvD,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,EAAE;AAC3C,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,EAAE,MAAM,OAAO,SAAS,OAAO,QAAQ,MAAM,CAAC;AACrF,QAAM,CAAC,MAAM,OAAO,QAAU,wBAAS,EAAE,MAAM,MAAM,SAAS,OAAO,QAAQ,MAAM,CAAC;AAEpF,WAAS,OAAO,GAAsB;AACpC,YAAQ,WAAS,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;AAAA,EAC9C;AACA,WAAS,aAAa,GAAyB;AAC7C,eAAW,WAAS,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;AAAA,EACjD;AACA,WAAS,aAAa;AACpB,YAAQ,OAAK,CAAC,CAAC;AACf,QAAI,KAAM,WAAU,MAAM;AAAA,EAC5B;AAEA,iBAAe,WAAW;AACxB,QAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,WAAW,CAAC,KAAK,OAAQ;AACjD,cAAU,SAAS;AACnB,QAAI;AACF,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,MAAS,KAAK,OAAU,MAAM;AAAA,QAC9B,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9B,QAAS,KAAK,SAAU,MAAM;AAAA,MAChC,CAAC;AACD,YAAM,MAAO,MAAM,MAAM,GAAG,UAAU,OAAO,IAAI,MAAM,EAAE;AACzD,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,CAAC,KAAK,GAAI,OAAM,IAAI,MAAM,KAAK,KAAK;AACxC,kBAAY,KAAK,IAAI;AACrB,gBAAU,MAAM;AAAA,IAClB,QAAQ;AACN,gBAAU,OAAO;AAAA,IACnB;AAAA,EACF;AAEA,iBAAe,iBAAiB;AAC9B,UAAM,MAAM,GAAG,UAAU,MAAM,SAAS,mBAAmB,QAAQ,CAAC,EAAE;AAAA,EACxE;AAEA,QAAM,WAAW;AAAA,IACf,EAAE,KAAK,QAAoB,OAAO,4BAAQ,OAAO,WAAW;AAAA,IAC5D,EAAE,KAAK,WAAoB,OAAO,4BAAQ,OAAO,cAAc;AAAA,IAC/D,EAAE,KAAK,UAAoB,OAAO,4BAAQ,OAAO,aAAa;AAAA,EAChE;AAEA,SACE,8EACE;AAAA,iDAAC,YAAO,WAAU,aAAY,SAAS,YAAY,0BAAE;AAAA,IAEpD,QACC,8CAAC,SAAI,WAAU,eACb;AAAA,mDAAC,SAAI,WAAU,eAAc,kDAAM;AAAA,MAElC,WAAW,aACV,8CAAC,SAAI,WAAU,gBACb;AAAA,qDAAC,UAAK,WAAU,iBAAgB;AAAA,QAAE;AAAA,SAEpC;AAAA,MAGD,WAAW,UACV,8CAAC,SAAI,WAAU,cACb;AAAA,qDAAC,SAAI,WAAU,oBAAmB,yDAAQ;AAAA,QAC1C,6CAAC,SAAI,WAAU,mBAAmB,mBAAS,QAAQ,QAAQ,EAAE,GAAE;AAAA,QAC/D,6CAAC,YAAO,WAAU,oBAAmB,SAAS,gBAAgB,8CAE9D;AAAA,SACF;AAAA,MAGD,WAAW,WACV,6CAAC,SAAI,WAAU,oCAAmC,gFAAW;AAAA,OAG7D,WAAW,UAAU,WAAW,YAAa,8EAC5C;AAAA,iBAAS,IAAI,CAAC,EAAE,KAAK,OAAO,MAAM,MACjC,8CAAC,SACC;AAAA,wDAAC,SAAI,WAAU,aACb;AAAA,0DAAC,WAAM,WAAU,qBACf;AAAA,2DAAC,WAAM,MAAK,YAAW,SAAS,KAAK,GAAG,GAAG,UAAU,MAAM,OAAO,GAAG,GAAG;AAAA,cACvE;AAAA,eACH;AAAA,YACA,6CAAC,YAAO,WAAU,oBAAmB,SAAS,MAAM,aAAa,GAAG,GACjE,kBAAQ,GAAG,IAAI,iBAAO,gBACzB;AAAA,aACF;AAAA,UACC,QAAQ,GAAG,KAAK,6CAAC,YAAS,OAAc;AAAA,aAVjC,GAWV,CACD;AAAA,QAED;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS;AAAA,YACT,UAAU,CAAC,KAAK,QAAQ,CAAC,KAAK,WAAW,CAAC,KAAK;AAAA,YAChD;AAAA;AAAA,QAED;AAAA,SACF;AAAA,OACF;AAAA,KAEJ;AAEJ;AAEe,SAAR,eAAgC;AACrC,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAC1C,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAiC,CAAC,CAAC;AACnE,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAwC,CAAC,CAAC;AACtE,QAAM,mBAAe,sBAAO,KAAK;AAEjC,+BAAU,MAAM;AAAE,gBAAY,aAAa,CAAC;AAAA,EAAG,GAAG,CAAC,CAAC;AAEpD,+BAAU,MAAM;AACd,UAAM,KAAK,CAAC,MAAqB;AAC/B,UAAI,EAAE,UAAU,EAAE,QAAQ,IAAK,WAAU,OAAK,CAAC,CAAC;AAChD,UAAI,EAAE,QAAQ,UAAU;AAAE,kBAAU,KAAK;AAAG,kBAAU,CAAC,CAAC;AAAA,MAAG;AAAA,IAC7D;AACA,WAAO,iBAAiB,WAAW,EAAE;AACrC,WAAO,MAAM,OAAO,oBAAoB,WAAW,EAAE;AAAA,EACvD,GAAG,CAAC,CAAC;AAEL,+BAAU,MAAM;AACd,UAAM,SAAS,CAAC,MAAkB;AAChC,UAAI,CAAC,UAAU,aAAa,QAAS;AACrC,YAAM,KAAK,EAAE;AACb,UAAI,CAAC,IAAI,UAAW;AACpB,UAAI,cAAc,EAAE,GAAG;AAAE,WAAG,UAAU,OAAO,UAAU;AAAG;AAAA,MAAQ;AAClE,SAAG,UAAU,IAAI,UAAU;AAAA,IAC7B;AACA,UAAM,QAAQ,CAAC,MAAkB;AAAE,MAAC,EAAE,QAAoB,WAAW,OAAO,UAAU;AAAA,IAAG;AACzF,UAAM,UAAU,CAAC,MAAkB;AACjC,UAAI,CAAC,UAAU,aAAa,QAAS;AACrC,YAAM,KAAK,EAAE;AACb,UAAI,cAAc,EAAE,EAAG;AACvB,QAAE,eAAe;AAAG,QAAE,gBAAgB;AACtC,SAAG,UAAU,OAAO,UAAU;AAC9B;AAAA,QAAU,UACR,KAAK,WAAW,IACZ,CAAC,EAAE,IAAI,QAAQ,GAAG,CAAC,IACnB,KAAK,IAAI,CAAC,GAAG,MAAM,MAAM,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;AAAA,MACnD;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,QAAQ,IAAI;AACnD,aAAS,iBAAiB,YAAY,OAAO,IAAI;AACjD,aAAS,iBAAiB,SAAS,SAAS,IAAI;AAChD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,QAAQ,IAAI;AACtD,eAAS,oBAAoB,YAAY,OAAO,IAAI;AACpD,eAAS,oBAAoB,SAAS,SAAS,IAAI;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,+BAAU,MAAM;AACd,QAAI,CAAC,QAAQ;AACX,eAAS,iBAAiB,wBAAwB,EAAE,QAAQ,OAAK,EAAE,UAAU,OAAO,eAAc,UAAU,CAAC;AAAA,IAC/G;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,+BAAU,MAAM;AACd,aAAS,KAAK,MAAM,SAAS,SAAS,cAAc;AACpD,WAAO,MAAM;AAAE,eAAS,KAAK,MAAM,SAAS;AAAA,IAAI;AAAA,EAClD,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,YAAY,OAAO,CAAC,GAAG;AAE7B,SACE,8EACE;AAAA,iDAAC,kBAAe;AAAA,IAEhB;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,aAAa,SAAS,oBAAoB,EAAE;AAAA,QACvD,SAAS,MAAM;AAAE,oBAAU,OAAK,CAAC,CAAC;AAAG,cAAI,OAAQ,WAAU,CAAC,CAAC;AAAA,QAAG;AAAA,QAChE,OAAM;AAAA,QAEL,mBAAS,iBAAO;AAAA;AAAA,IACnB;AAAA,IAGC,UAAU,cAAc,MAAM;AAC7B,YAAM,OAAO,UAAU,sBAAsB;AAC7C,YAAM,UAAU,WAAW,SAAS;AACpC,aACE,8CAAC,SAAI,WAAU,YAAW,OAAO,EAAE,KAAK,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,EAAE,GAAG;AAAA;AAAA,QACpF,QAAQ,CAAC,KAAK,UAAU,QAAQ,YAAY;AAAA,SACnD;AAAA,IAEJ,GAAG;AAAA,IAEF,OAAO,IAAI,CAAC,MACX;AAAA,MAAC;AAAA;AAAA,QAEC,UAAU,EAAE;AAAA,QACZ;AAAA,QACA,kBAAkB,aAAW,YAAY,WAAS,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;AAAA,QAC1E,SAAS,MAAM,UAAU,UAAQ,KAAK,OAAO,OAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAAA;AAAA,MAJ3D,EAAE;AAAA,IAKT,CACD;AAAA,KACH;AAEJ;;;AGx/EA,IAAAC,gBAA2B;AAC3B,oBAA2B;AAmBnB,IAAAC,sBAAA;AAdD,SAAS,kBACd,QACA;AACA,QAAM,WAAW,wBAAwB,MAAM;AAC/C,QAAM,eAAe,SAAS,eAAe,SAAS,MAAM;AAC5D,MAAI,aAAc,QAAO;AAEzB,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,UAAQ,KAAK,SAAS;AACtB,WAAS,KAAK,YAAY,OAAO;AAEjC,gCAAW,OAAO,EAAE;AAAA,IAClB,6CAAC,4BACC,uDAAC,wBAAqB,QAAQ,UAC5B,uDAAC,gBAAa,GAChB,GACF;AAAA,EACF;AAEA,SAAO;AACT;","names":["import_react","import_jsx_runtime","s","prompt","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/DevInspector.tsx","../src/DevInspectorProvider.tsx","../src/config.ts","../src/mount.tsx"],"sourcesContent":["export { default as DevInspector, InspectorPanel } from './DevInspector';\nexport { DevInspectorProvider, useDevInspectorConfig } from './DevInspectorProvider';\nexport { mountDevInspector } from './mount';\nexport { defaultDevInspectorConfig, mergeDevInspectorConfig } from './config';\nexport type {\n DevInspectorConfig,\n DevInspectorConfigOverrides,\n DevInspectorEndpoints,\n DevInspectorTokenConfig,\n BorderStyleOption,\n ContainerStyleOption,\n FontSizeOption,\n TypographyStyleOption,\n TypographyToken,\n} from './config';\n","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  {componentObj.label} → <code>{componentObj.code}</code>\n  {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":["import_react","import_jsx_runtime","ComponentIcon","componentMeta","prompt","import_react","import_jsx_runtime"]}
|