@sanmid/flux 0.1.7 → 0.1.9

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/design-editor-toggle-icon.tsx","../src/viewport-layout-sync.ts","../src/box-model-overlay.tsx","../src/use-prefers-reduced-motion.ts","../src/copy-success-overlay.tsx","../src/cn.ts","../src/color-alpha.ts","../src/corner-radius-icon.tsx","../src/element-capabilities.ts","../src/copy-pending-badge.tsx","../src/font-options.ts","../src/layout-flow.ts","../src/position-alignment.ts","../src/floating-menu-position.ts","../src/panel-tooltip.tsx","../src/menu-portal-context.tsx","../src/scrub-session-context.tsx","../src/use-scrub.ts","../src/panel-chrome.tsx","../src/variable-usage-index.ts","../src/token-scanner.ts","../src/variable-token-icon.tsx","../src/panel-variable-affix.tsx","../src/properties-empty-state.tsx","../src/shadow-parse.ts","../src/sizing.ts","../src/preview-persistence.ts","../src/preview-engine.ts","../src/use-selection.ts","../src/properties-panel.tsx","../src/drag-reorder-selector.ts","../src/drag-reorder-fiber.ts","../src/drag-reorder-controller.ts","../src/drag-reorder-detect.ts","../src/drag-reposition-controller.ts","../src/canvas-drag-handles.tsx","../src/format-selection-dimensions.ts","../src/selection-overlay.tsx","../src/install-flux-radix-mint.ts","../src/floating-menu-styles.ts","../src/editor-styles.ts","../src/shadow-mount.ts","../src/toolbar.tsx","../src/style-source.ts","../src/change-enrichment.ts","../src/react-info.ts","../src/use-copy-prompt.ts","../src/host-styles.ts","../src/design-editor.tsx"],"names":["jsx","useRef","useEffect","jsxs","Fragment","useState","useCallback","useLayoutEffect","createPortal","twMerge","clsx","useMemo","TooltipPrimitive","createContext","useContext","AlignLeft","AlignCenter","AlignRight","Square","MoveDown","MoveRight","ChevronDown","cachedSheetCount","Link2","finder","Plus","CornerUpLeft","Check","Copy","AlignHorizontalJustifyStart","AlignHorizontalJustifyCenter","AlignHorizontalJustifyEnd","AlignVerticalJustifyStart","AlignVerticalJustifyCenter","AlignVerticalJustifyEnd","Rows3","SquareSquare","AlignVerticalSpaceAround","AlignHorizontalSpaceAround","ArrowUpDown","ArrowLeftRight","ArrowUpToLine","FoldVertical","ArrowDownToLine","SunDim","Minus","Eye","Ruler","SquareDashed","buildFallbackSelector","updatePosition","scheduleUpdate","mint","STYLE_ID","X","camelToKebab","walkRules","dot","flushSync"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Inspect / design-tool mark — stroke icon (host-safe `fill=\"none\"`). */\nexport function DesignEditorToggleIcon({\n className,\n /** Pixel size; prefer this over Tailwind `size-*` inside the shadow panel (editor CSS may omit those utilities). */\n size = 24,\n}: {\n className?: string;\n size?: number;\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className={className}\n aria-hidden\n >\n <path\n d=\"M15 7L8.83447 8.76158C8.52956 8.8487 8.37711 8.89226 8.25117 8.97414C8.13969 9.04662 8.04379 9.1406 7.96907 9.2506C7.88466 9.37485 7.83803 9.5264 7.74477 9.82948L4 22M4 22L16.1705 18.2552C16.4736 18.162 16.6251 18.1153 16.7494 18.0309C16.8594 17.9562 16.9534 17.8603 17.0259 17.7488C17.1077 17.6229 17.1513 17.4704 17.2384 17.1655L19 11M4 22L10.586 15.4139M5 8V2M2 5H8M21.8686 7.86863L18.1314 4.13137C17.7354 3.73535 17.5373 3.53735 17.309 3.46316C17.1082 3.3979 16.8918 3.3979 16.691 3.46316C16.4627 3.53735 16.2646 3.73535 15.8686 4.13137L15.1314 4.86863C14.7354 5.26465 14.5373 5.46265 14.4632 5.69098C14.3979 5.89183 14.3979 6.10817 14.4632 6.30902C14.5373 6.53735 14.7354 6.73535 15.1314 7.13137L18.8686 10.8686C19.2646 11.2646 19.4627 11.4627 19.691 11.5368C19.8918 11.6021 20.1082 11.6021 20.309 11.5368C20.5373 11.4627 20.7354 11.2646 21.1314 10.8686L21.8686 10.1314C22.2646 9.73535 22.4627 9.53735 22.5368 9.30902C22.6021 9.10817 22.6021 8.89183 22.5368 8.69098C22.4627 8.46265 22.2646 8.26465 21.8686 7.86863ZM12 12C13.1046 12 14 12.8954 14 14C14 15.1046 13.1046 16 12 16C10.8954 16 10 15.1046 10 14C10 12.8954 10.8954 12 12 12Z\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","/**\n * Re-run `update` when `target`'s viewport box may change: window resize/scroll and\n * scroll on overflow ancestors (nested scroll containers). Scroll events do not bubble,\n * so inner `overflow: auto` regions need their own listeners.\n */\nexport function subscribeViewportLayoutSync(target: Element, update: () => void): () => void {\n update();\n const cleanups: (() => void)[] = [];\n\n const run = () => update();\n\n window.addEventListener(\"scroll\", run, true);\n window.addEventListener(\"resize\", run);\n cleanups.push(() => window.removeEventListener(\"scroll\", run, true));\n cleanups.push(() => window.removeEventListener(\"resize\", run));\n\n const scrollRoots = new Set<Element>();\n let n: Element | null = target;\n while (n && n !== document.documentElement) {\n const st = getComputedStyle(n);\n const oy = st.overflowY;\n const ox = st.overflowX;\n const scrollY = /(auto|scroll|overlay)/.test(oy) && n.scrollHeight > n.clientHeight;\n const scrollX = /(auto|scroll|overlay)/.test(ox) && n.scrollWidth > n.clientWidth;\n if (scrollY || scrollX) scrollRoots.add(n);\n n = n.parentElement;\n }\n\n for (const el of scrollRoots) {\n el.addEventListener(\"scroll\", run, { passive: true });\n cleanups.push(() => el.removeEventListener(\"scroll\", run));\n }\n\n return () => {\n for (const c of cleanups) c();\n };\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport type { DesignEditorElement } from \"./use-selection\";\nimport { subscribeViewportLayoutSync } from \"./viewport-layout-sync\";\n\nconst MARGIN_COLOR = \"rgba(246, 178, 107, 0.35)\";\nconst BORDER_COLOR = \"rgba(255, 229, 153, 0.45)\";\nconst PADDING_COLOR = \"rgba(147, 196, 125, 0.4)\";\nconst CONTENT_COLOR = \"rgba(111, 168, 220, 0.2)\";\n\nfunction safeRect(el: Element): DOMRect | null {\n if (!el.isConnected) return null;\n try {\n return el.getBoundingClientRect();\n } catch {\n return null;\n }\n}\n\n/**\n * Margin / border / padding bands for the selected element.\n */\nexport function BoxModelOverlay({ enabled, target }: { enabled: boolean; target: DesignEditorElement | null }) {\n const marginRef = useRef<HTMLDivElement>(null);\n const borderRef = useRef<HTMLDivElement>(null);\n const paddingRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!enabled || !target) return;\n\n const update = () => {\n const rect = safeRect(target);\n const s = window.getComputedStyle(target);\n if (!rect) return;\n\n const mt = Number.parseFloat(s.marginTop) || 0;\n const mr = Number.parseFloat(s.marginRight) || 0;\n const mb = Number.parseFloat(s.marginBottom) || 0;\n const ml = Number.parseFloat(s.marginLeft) || 0;\n const bt = Number.parseFloat(s.borderTopWidth) || 0;\n const br = Number.parseFloat(s.borderRightWidth) || 0;\n const bBottom = Number.parseFloat(s.borderBottomWidth) || 0;\n const bl = Number.parseFloat(s.borderLeftWidth) || 0;\n const pt = Number.parseFloat(s.paddingTop) || 0;\n const pr = Number.parseFloat(s.paddingRight) || 0;\n const pb = Number.parseFloat(s.paddingBottom) || 0;\n const pl = Number.parseFloat(s.paddingLeft) || 0;\n\n const borderBox = rect;\n const outerTop = borderBox.top - mt;\n const outerLeft = borderBox.left - ml;\n const outerW = borderBox.width + ml + mr;\n const outerH = borderBox.height + mt + mb;\n\n const setBox = (node: HTMLDivElement | null, top: number, left: number, w: number, h: number, bg: string) => {\n if (!node) return;\n node.style.top = `${top}px`;\n node.style.left = `${left}px`;\n node.style.width = `${Math.max(0, w)}px`;\n node.style.height = `${Math.max(0, h)}px`;\n node.style.backgroundColor = bg;\n node.style.display = w > 0 && h > 0 ? \"block\" : \"none\";\n };\n\n setBox(marginRef.current, outerTop, outerLeft, outerW, outerH, MARGIN_COLOR);\n setBox(borderRef.current, borderBox.top, borderBox.left, borderBox.width, borderBox.height, BORDER_COLOR);\n\n const padTop = borderBox.top + bt;\n const padLeft = borderBox.left + bl;\n const padW = borderBox.width - bl - br;\n const padH = borderBox.height - bt - bBottom;\n setBox(paddingRef.current, padTop, padLeft, padW, padH, PADDING_COLOR);\n\n const contentTop = padTop + pt;\n const contentLeft = padLeft + pl;\n const contentW = Math.max(0, padW - pl - pr);\n const contentH = Math.max(0, padH - pt - pb);\n setBox(contentRef.current, contentTop, contentLeft, contentW, contentH, CONTENT_COLOR);\n };\n\n const ro = new ResizeObserver(update);\n try {\n ro.observe(target);\n } catch {\n /* ignore */\n }\n const unsubLayout = subscribeViewportLayoutSync(target, update);\n return () => {\n ro.disconnect();\n unsubLayout();\n };\n }, [enabled, target]);\n\n if (!enabled || !target) return null;\n\n const band = \"pointer-events-none fixed z-[9997] box-border\";\n\n return (\n <>\n <div ref={marginRef} className={band} aria-hidden />\n <div ref={borderRef} className={band} aria-hidden />\n <div ref={paddingRef} className={band} aria-hidden />\n <div ref={contentRef} className={band} aria-hidden />\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/** Mirrors Framer Motion's `useReducedMotion` — prefers `matchMedia` over hooking into FM. */\nexport function usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const sync = () => setReduced(mq.matches);\n sync();\n mq.addEventListener(\"change\", sync);\n return () => mq.removeEventListener(\"change\", sync);\n }, []);\n return reduced;\n}\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type TransitionEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePrefersReducedMotion } from \"./use-prefers-reduced-motion\";\n\nconst MONO = \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace\";\n\nconst PROMPT_MS = 22;\nconst LINE_GAP_MS = 300;\nconst AFTER_LAST_MS = 450;\n\nconst EASE_OUT = \"cubic-bezier(0.4, 0, 0.2, 1)\";\nconst DIALOG_EASE = \"cubic-bezier(0.34, 1.3, 0.64, 1)\";\n\nfunction TrafficLightsSvg() {\n return (\n <svg width=\"52\" height=\"12\" viewBox=\"0 0 52 12\" aria-hidden className=\"shrink-0\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill=\"#FF5F57\" />\n <circle cx=\"26\" cy=\"6\" r=\"5\" fill=\"#FEBC2E\" />\n <circle cx=\"46\" cy=\"6\" r=\"5\" fill=\"#28C840\" />\n </svg>\n );\n}\n\nfunction PixelMascotSvg({ running }: { running: boolean }) {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 16 16\"\n aria-hidden\n className={`mx-auto text-[#b45309] transition-opacity duration-300 ${running ? \"animate-pulse\" : \"\"}`}\n >\n <rect x=\"4\" y=\"3\" width=\"8\" height=\"8\" rx=\"1\" fill=\"currentColor\" opacity={0.25} />\n <rect x=\"5\" y=\"4\" width=\"2\" height=\"2\" fill=\"#171717\" />\n <rect x=\"9\" y=\"4\" width=\"2\" height=\"2\" fill=\"#171717\" />\n <rect x=\"6\" y=\"9\" width=\"4\" height=\"1\" fill=\"currentColor\" opacity={0.6} />\n <rect x=\"5\" y=\"11\" width=\"2\" height=\"2\" fill=\"currentColor\" opacity={0.45} />\n <rect x=\"9\" y=\"11\" width=\"2\" height=\"2\" fill=\"currentColor\" opacity={0.45} />\n </svg>\n );\n}\n\nconst SAMPLE_LINES: { cmd: string }[] = [\n { cmd: \"Make the button rounded\" },\n { cmd: \"Make the button playful\" },\n { cmd: \"Make the button not rounded\" },\n { cmd: \"Make the button more playful\" },\n { cmd: \"Revert back to the original\" },\n];\n\nfunction TerminalTyping({\n lines,\n reduceMotion,\n onTypingComplete,\n}: {\n lines: readonly { cmd: string }[];\n reduceMotion: boolean;\n onTypingComplete: () => void;\n}) {\n const [lineIdx, setLineIdx] = useState(0);\n const [charIdx, setCharIdx] = useState(0);\n const completeRef = useRef(false);\n const onDoneRef = useRef(onTypingComplete);\n onDoneRef.current = onTypingComplete;\n\n useEffect(() => {\n if (!reduceMotion) return;\n completeRef.current = true;\n onDoneRef.current();\n }, [reduceMotion]);\n\n useEffect(() => {\n if (reduceMotion) return;\n\n const cmd = lines[lineIdx]?.cmd;\n if (cmd === undefined) return;\n\n if (completeRef.current && lineIdx === lines.length - 1 && charIdx >= cmd.length) {\n return;\n }\n\n if (charIdx < cmd.length) {\n const id = window.setTimeout(() => setCharIdx((c) => c + 1), PROMPT_MS);\n return () => window.clearTimeout(id);\n }\n\n if (lineIdx < lines.length - 1) {\n const id = window.setTimeout(() => {\n setLineIdx((l) => l + 1);\n setCharIdx(0);\n }, LINE_GAP_MS);\n return () => window.clearTimeout(id);\n }\n\n if (!completeRef.current) {\n completeRef.current = true;\n const id = window.setTimeout(() => onDoneRef.current(), AFTER_LAST_MS);\n return () => window.clearTimeout(id);\n }\n }, [reduceMotion, lines, lineIdx, charIdx]);\n\n const promptClass = \"text-[#c2410c]\";\n\n if (reduceMotion) {\n return (\n <div className=\"space-y-3 text-[12px] leading-relaxed text-zinc-900\">\n {lines.map(({ cmd }) => (\n <div key={cmd}>\n <p>\n <span className={promptClass}>&gt;</span> {cmd}\n </p>\n <p className=\"mt-1 pl-0.5 text-[11px] text-zinc-500\">\n <span className=\"text-emerald-600\">✓</span> Done\n </p>\n </div>\n ))}\n <p className=\"pt-1\">\n <span className={promptClass}>&gt;</span>{\" \"}\n <span className=\"inline-block h-3 w-1 rounded-sm bg-zinc-300 align-middle\" />\n </p>\n </div>\n );\n }\n\n return (\n <div\n className=\"space-y-3 text-[12px] leading-relaxed text-zinc-900\"\n aria-live=\"polite\"\n aria-busy={Boolean(lines[lineIdx] && charIdx < lines[lineIdx].cmd.length)}\n >\n {lines.map(({ cmd }, i) => {\n if (i > lineIdx) return null;\n if (i < lineIdx) {\n return (\n <div key={cmd}>\n <p>\n <span className={promptClass}>&gt;</span> {cmd}\n </p>\n <p className=\"mt-1 pl-0.5 text-[11px] text-zinc-500\">\n <span className=\"text-emerald-600\">✓</span> Done\n </p>\n </div>\n );\n }\n const partial = cmd.slice(0, charIdx);\n const typing = charIdx < cmd.length;\n return (\n <div key={cmd}>\n <p>\n <span className={promptClass}>&gt;</span> {partial}\n {typing ? (\n <span className=\"ml-px inline-block h-3 w-0.5 animate-pulse rounded-sm bg-zinc-400 align-middle\" />\n ) : null}\n </p>\n {!typing ? (\n <p className=\"mt-1 pl-0.5 text-[11px] text-zinc-500\">\n <span className=\"text-emerald-600\">✓</span> Done\n </p>\n ) : null}\n </div>\n );\n })}\n {lineIdx >= lines.length - 1 && charIdx >= (lines[lineIdx]?.cmd.length ?? 0) ? (\n <p className=\"pt-1\">\n <span className={promptClass}>&gt;</span>{\" \"}\n <span className=\"inline-block h-3 w-1 animate-pulse rounded-sm bg-zinc-300 align-middle\" />\n </p>\n ) : null}\n </div>\n );\n}\n\nconst DISMISS_AFTER_TYPING_MS = 5200;\n\nexport function CopySuccessOverlay({ open, onClose }: { open: boolean; onClose: () => void }) {\n const reduceMotion = usePrefersReducedMotion();\n const [typingComplete, setTypingComplete] = useState(false);\n const [mounted, setMounted] = useState(false);\n /** Drives opacity / transform — CSS transitions replace Framer Motion. */\n const [animIn, setAnimIn] = useState(false);\n\n const handleTypingComplete = useCallback(() => setTypingComplete(true), []);\n\n useEffect(() => {\n if (!open) {\n setTypingComplete(false);\n return;\n }\n if (reduceMotion) setTypingComplete(true);\n else setTypingComplete(false);\n }, [open, reduceMotion]);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, onClose]);\n\n useEffect(() => {\n if (!open || !typingComplete) return;\n const t = window.setTimeout(onClose, DISMISS_AFTER_TYPING_MS);\n return () => window.clearTimeout(t);\n }, [open, typingComplete, onClose]);\n\n useLayoutEffect(() => {\n if (open) setMounted(true);\n }, [open]);\n\n useEffect(() => {\n if (!open) {\n setAnimIn(false);\n return;\n }\n setAnimIn(false);\n const id = requestAnimationFrame(() => {\n requestAnimationFrame(() => setAnimIn(true));\n });\n return () => cancelAnimationFrame(id);\n }, [open]);\n\n const onBackdropTransitionEnd = useCallback((e: TransitionEvent<HTMLDivElement>) => {\n if (e.target !== e.currentTarget) return;\n if (e.propertyName !== \"opacity\") return;\n if (!open) setMounted(false);\n }, [open]);\n\n if (typeof document === \"undefined\") return null;\n\n const running = open && !typingComplete && !reduceMotion;\n\n const backdropStyle: CSSProperties = {\n opacity: animIn ? 1 : 0,\n transition: reduceMotion ? \"none\" : `opacity 220ms ${EASE_OUT}`,\n };\n\n const dialogStyle: CSSProperties = reduceMotion\n ? {\n opacity: animIn ? 1 : 0,\n transition: `opacity 180ms ${EASE_OUT}`,\n }\n : {\n opacity: animIn ? 1 : 0,\n transform: animIn ? \"scale(1) translateY(0)\" : \"scale(0.94) translateY(14px)\",\n transition: `opacity 240ms ${EASE_OUT}, transform 450ms ${DIALOG_EASE}`,\n };\n\n return createPortal(\n <>\n {mounted && (\n <div\n className=\"fixed inset-0 z-[10020] flex items-center justify-center bg-black/50 p-4 backdrop-blur-[3px]\"\n style={{ ...backdropStyle, fontFamily: MONO }}\n onClick={onClose}\n onTransitionEnd={onBackdropTransitionEnd}\n role=\"presentation\"\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"flux-copy-success-title\"\n className=\"max-h-[min(90vh,640px)] w-full max-w-[520px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-[0_24px_80px_rgba(0,0,0,0.2)]\"\n style={dialogStyle}\n onClick={(ev) => ev.stopPropagation()}\n >\n <div className=\"flex items-center gap-3 border-b border-zinc-200/90 bg-zinc-50/90 px-3 py-2\">\n <TrafficLightsSvg />\n <span className=\"flex-1 text-center text-[11px] text-zinc-500\">Flux · Design session</span>\n <span className=\"w-[52px] shrink-0\" aria-hidden />\n </div>\n\n <div className=\"px-4 pb-4 pt-3 sm:px-5 sm:pt-4\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between sm:gap-6\">\n <div className=\"w-full shrink-0 rounded-lg border border-amber-800/35 bg-white p-3 sm:max-w-[200px]\">\n <p className=\"mb-2 text-center text-[11px] font-medium text-zinc-700\">Welcome to Flux!</p>\n <PixelMascotSvg running={running} />\n <p className=\"mt-2 text-center text-[10px] text-zinc-500\">Style inspector · ~/design</p>\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <h2 id=\"flux-copy-success-title\" className=\"text-[15px] font-semibold tracking-tight text-zinc-800\">\n Flux\n </h2>\n <p className=\"text-[11px] text-zinc-500\">Prompt copied</p>\n </div>\n </div>\n\n <div className=\"mt-4 rounded-lg border border-zinc-100 bg-white px-3 py-3 sm:px-4\">\n <TerminalTyping lines={SAMPLE_LINES} reduceMotion={Boolean(reduceMotion)} onTypingComplete={handleTypingComplete} />\n </div>\n\n <p className=\"mt-3 text-center text-[10px] text-zinc-400\">Copied to clipboard · click anywhere to dismiss</p>\n </div>\n </div>\n </div>\n )}\n </>,\n document.body,\n );\n}\n","import type { ClassValue } from \"clsx\";\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** `clsx` + `tailwind-merge` are bundled as dependencies of `@sanmid/flux`. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/** Split / merge colors for Paper-style rows (hex + opacity %). */\n\nfunction clampPct(n: number): number {\n return Math.min(100, Math.max(0, n));\n}\n\n/** Parse CSS color to 6-char hex (no #) and 0–100 opacity. */\nexport function parseCssColorToHexOpacity(css: string): { hex: string; opacityPct: number } {\n const raw = css.trim();\n if (!raw || raw === \"transparent\") return { hex: \"808080\", opacityPct: 0 };\n\n const hex8 = raw.match(/^#([0-9a-fA-F]{8})$/);\n if (hex8) {\n const h = hex8[1];\n const a = Number.parseInt(h.slice(6, 8), 16) / 255;\n return { hex: h.slice(0, 6).toUpperCase(), opacityPct: Math.round(a * 100) };\n }\n\n const hex6 = raw.match(/^#([0-9a-fA-F]{6})$/);\n if (hex6) return { hex: hex6[1].toUpperCase(), opacityPct: 100 };\n\n const hex3 = raw.match(/^#([0-9a-fA-F]{3})$/);\n if (hex3) {\n const [r, g, b] = hex3[1].split(\"\");\n return { hex: `${r}${r}${g}${g}${b}${b}`.toUpperCase(), opacityPct: 100 };\n }\n\n const rgba = raw.match(/^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i);\n if (rgba) {\n const r = Math.round(Number.parseFloat(rgba[1]));\n const g = Math.round(Number.parseFloat(rgba[2]));\n const b = Math.round(Number.parseFloat(rgba[3]));\n const a = rgba[4] !== undefined ? Number.parseFloat(rgba[4]) : 1;\n const toH = (n: number) => n.toString(16).padStart(2, \"0\");\n return { hex: `${toH(r)}${toH(g)}${toH(b)}`.toUpperCase(), opacityPct: Math.round(clampPct(a * 100)) };\n }\n\n /** CSS Color 4: `rgb(r g b / a)` — browsers often return transparent fills in this form. */\n const rgbSlash = raw.match(/^rgba?\\(\\s*([\\d.]+%?)\\s+([\\d.]+%?)\\s+([\\d.]+%?)\\s*\\/\\s*([\\d.]+%?)\\s*\\)$/i);\n if (rgbSlash) {\n const ch = (s: string) => {\n const t = s.trim();\n if (t.endsWith(\"%\")) return Math.round((Number.parseFloat(t) / 100) * 255);\n return Math.round(Number.parseFloat(t));\n };\n const r = ch(rgbSlash[1]);\n const g = ch(rgbSlash[2]);\n const b = ch(rgbSlash[3]);\n const aStr = rgbSlash[4].trim();\n const a = aStr.endsWith(\"%\") ? Number.parseFloat(aStr) / 100 : Number.parseFloat(aStr);\n const toH = (n: number) => n.toString(16).padStart(2, \"0\");\n return { hex: `${toH(r)}${toH(g)}${toH(b)}`.toUpperCase(), opacityPct: Math.round(clampPct(a * 100)) };\n }\n\n return { hex: \"808080\", opacityPct: 100 };\n}\n\n/**\n * Stable string for diffing `background-color` so `transparent`, `rgba(0,0,0,0)`,\n * and `rgb(0 0 0 / 0)` don’t register as different when they’re visually the same.\n */\nexport function canonicalBackgroundColorForDiff(css: string): string {\n const raw = (css ?? \"\").trim();\n if (!raw || raw === \"transparent\") return \"transparent\";\n const { opacityPct } = parseCssColorToHexOpacity(raw);\n if (opacityPct === 0) return \"transparent\";\n return raw;\n}\n\nexport function buildCssFromHexOpacity(hexNoHash: string, opacityPct: number): string {\n let h = hexNoHash\n .replace(/^#/, \"\")\n .replace(/[^0-9a-fA-F]/g, \"\")\n .toUpperCase();\n if (h.length === 0) h = \"000000\";\n else if (h.length < 6) h = h.padEnd(6, \"0\");\n else if (h.length > 6) h = h.slice(0, 6);\n const r = Number.parseInt(h.slice(0, 2), 16);\n const g = Number.parseInt(h.slice(2, 4), 16);\n const b = Number.parseInt(h.slice(4, 6), 16);\n const a = clampPct(opacityPct) / 100;\n if (a >= 1) return `#${h}`;\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n","/** Lucide `square-round-corner` paths — playground uses lucide-react 0.452, which has no `SquareRoundCorner` export. */\nexport function CornerRadiusIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <path d=\"M21 11a8 8 0 0 0-8-8\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n </svg>\n );\n}\n","import { parseCssColorToHexOpacity } from \"./color-alpha\";\n\n/** Minimal shape for fill detection (PropertyPanel-style `hasFill`). */\nexport type FillSnapshot = {\n backgroundColor: string;\n backgroundImage: string;\n};\n\n/**\n * Logic: any non-`none` background-image counts as fill; solid fill only if\n * `background-color` is not empty/transparent and has opacity &gt; 0 (we parse CSS Color 4).\n * Optional `fillHasVariable`: linked `var()` on background-color counts as having fill.\n */\nexport function snapshotHasFill(\n snapshot: FillSnapshot,\n options?: { fillHasVariable?: boolean },\n): boolean {\n if (options?.fillHasVariable) return true;\n const bgImg = snapshot.backgroundImage?.trim();\n if (bgImg && bgImg !== \"none\") return true;\n const raw = snapshot.backgroundColor?.trim();\n if (!raw || raw === \"transparent\") return false;\n const { opacityPct } = parseCssColorToHexOpacity(raw);\n return opacityPct > 0;\n}\n\n/**\n * Which property groups make sense for the selected DOM node (hide\n * typography on replaced / non-text controls).\n */\n\nconst NO_TYPOGRAPHY_TAGS = new Set([\n \"IMG\",\n \"VIDEO\",\n \"CANVAS\",\n \"IFRAME\",\n \"EMBED\",\n \"OBJECT\",\n \"BR\",\n \"HR\",\n \"COL\",\n \"COLGROUP\",\n \"SOURCE\",\n \"TRACK\",\n \"WBR\",\n]);\n\n/** Input types where font/color UI is misleading or inapplicable. */\nconst INPUT_TYPES_NO_TYPOGRAPHY = new Set([\n \"hidden\",\n \"checkbox\",\n \"radio\",\n \"file\",\n \"range\",\n \"color\",\n \"image\",\n \"button\",\n \"submit\",\n \"reset\",\n]);\n\n/** Font / text / alignment controls apply to normal flow content, not replaced media or most form widgets. */\nexport function elementSupportsTypography(el: Element | null): boolean {\n if (!el) return true;\n const t = el.tagName;\n if (NO_TYPOGRAPHY_TAGS.has(t)) return false;\n if (t === \"INPUT\") {\n const type = (el as HTMLInputElement).type?.toLowerCase() ?? \"text\";\n if (INPUT_TYPES_NO_TYPOGRAPHY.has(type)) return false;\n }\n if (t === \"SELECT\") return false;\n if (el.namespaceURI === \"http://www.w3.org/2000/svg\") return false;\n return true;\n}\n\n/** Same as {@link snapshotHasFill} on computed styles. */\nexport function elementHasVisibleBackgroundLayer(el: Element | null): boolean {\n if (!el || typeof window === \"undefined\") return false;\n const s = window.getComputedStyle(el);\n return snapshotHasFill({\n backgroundColor: s.backgroundColor,\n backgroundImage: s.backgroundImage,\n });\n}\n\n/** Read live text for inline edit commit / snapshot. */\nexport function getElementEditableText(el: Element): string {\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) return el.value;\n return el.textContent ?? \"\";\n}\n\n/** Apply text from inline edit (must match {@link getElementEditableText}). */\nexport function setElementEditableText(el: Element, text: string): void {\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n el.value = text;\n return;\n }\n el.textContent = text;\n}\n\n/**\n * Inline text editing (Retune-style): text-like inputs, or elements with no element children\n * (single text flow — avoids breaking rich markup with contenteditable).\n */\nexport function elementSupportsInlineTextEdit(el: Element | null): boolean {\n if (!el) return false;\n if (el.namespaceURI === \"http://www.w3.org/2000/svg\") return false;\n const t = el.tagName;\n if (t === \"TEXTAREA\") return true;\n if (t === \"INPUT\") {\n const type = (el as HTMLInputElement).type?.toLowerCase() ?? \"text\";\n return [\"text\", \"search\", \"url\", \"email\", \"tel\", \"number\"].includes(type);\n }\n if (!elementSupportsTypography(el)) return false;\n return el.children.length === 0;\n}\n","/** Pending change count — hex halo scaled to 14px to match Lucide Copy / Check in the row. */\nexport function CopyPendingBadge({ count }: { count: number }) {\n const label = count > 99 ? \"99+\" : String(count);\n return (\n <span className=\"pointer-events-none relative inline-flex size-[14px] shrink-0 items-center justify-center\" aria-hidden>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className=\"absolute inset-0 text-[#333333]\"\n aria-hidden\n >\n <path\n d=\"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z\"\n fill=\"#333333\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span className=\"relative z-[1] font-['Inter',system-ui,sans-serif] text-[7px] font-semibold leading-none text-[#D9D9D9]\">{label}</span>\n </span>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\n\n/** First resolved font family from a computed `font-family` stack (handles quoted names). */\nexport function firstFontFamilyFromStack(fontFamily: string): string {\n const s = fontFamily.trim();\n if (!s) return \"\";\n let i = 0;\n let start = 0;\n let q: string | null = null;\n while (i < s.length) {\n const c = s[i];\n if (q) {\n if (c === \"\\\\\") {\n i += 2;\n continue;\n }\n if (c === q) q = null;\n i++;\n continue;\n }\n if (c === '\"' || c === \"'\") {\n q = c;\n if (start === 0) start = i;\n i++;\n continue;\n }\n if (c === \",\") {\n return s\n .slice(start, i)\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n }\n i++;\n }\n return s\n .slice(start)\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n}\n\n/** Display / select key for the primary face (fallback if stack parsing fails). */\nexport function primaryFontLabel(computedStack: string): string {\n const s = computedStack.trim();\n if (!s) return \"\";\n const a = firstFontFamilyFromStack(s);\n if (a) return a;\n return (\n s\n .split(\",\")[0]\n ?.trim()\n .replace(/^[\"']|[\"']$/g, \"\") ?? \"\"\n );\n}\n\nfunction cssFamilyToken(name: string): string {\n const t = name.trim();\n if (!t) return \"\";\n if (/^[\"'].*[\"']$/.test(t)) return t;\n if (t.includes(\" \") || /[^a-zA-Z0-9_-]/.test(t)) return `\"${t.replace(/\"/g, '\\\\\"')}\"`;\n return t;\n}\n\n/** Minimal valid `font-family` for a primary face (generic fallback only). */\nexport function fontFamilyApplyCss(primaryName: string): string {\n const token = cssFamilyToken(primaryName);\n if (!token) return \"sans-serif\";\n return `${token}, sans-serif`;\n}\n\nexport type FontFamilyOption = {\n /** Select `value` — single family name, matches {@link firstFontFamilyFromStack}. */\n value: string;\n label: string;\n /** Written to `element.style.fontFamily`. */\n applyCss: string;\n};\n\nconst FONT_FAMILY_RE = /font-family\\s*:\\s*([^;}+]+)/gi;\n\n/** Collect `font-family` values from parsed stylesheets (best-effort; skips cross-origin). */\nexport function scanStylesheetFontFamilies(): string[] {\n if (typeof document === \"undefined\") return [];\n const seen = new Set<string>();\n const out: string[] = [];\n for (const sheet of document.styleSheets) {\n let rules: CSSRuleList;\n try {\n rules = sheet.cssRules;\n } catch {\n continue;\n }\n collectFontFamiliesFromRules(rules, seen, out);\n }\n return out;\n}\n\nfunction collectFontFamiliesFromRules(rules: CSSRuleList, seen: Set<string>, out: string[]): void {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSGroupingRule) {\n collectFontFamiliesFromRules(rule.cssRules, seen, out);\n continue;\n }\n if (rule instanceof CSSFontFaceRule) {\n const fam = rule.style.getPropertyValue(\"font-family\").trim().replace(/^[\"']|[\"']$/g, \"\");\n if (fam && !seen.has(fam.toLowerCase())) {\n seen.add(fam.toLowerCase());\n out.push(fam);\n }\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n const cssText = rule.cssText;\n FONT_FAMILY_RE.lastIndex = 0;\n for (const m of cssText.matchAll(FONT_FAMILY_RE)) {\n const raw = m[1].trim();\n const first = firstFontFamilyFromStack(raw);\n if (first && !/^(inherit|initial|unset|revert)$/i.test(first) && !seen.has(first.toLowerCase())) {\n seen.add(first.toLowerCase());\n out.push(first);\n }\n }\n }\n}\n\nfunction readLoadedFontOptions(): FontFamilyOption[] {\n if (typeof document === \"undefined\") return [];\n const out: FontFamilyOption[] = [];\n const seen = new Set<string>();\n try {\n for (const face of document.fonts.values()) {\n const label = face.family.trim().replace(/^[\"']|[\"']$/g, \"\");\n if (!label) continue;\n const key = label.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n out.push({\n value: label,\n label,\n applyCss: fontFamilyApplyCss(label),\n });\n }\n } catch {\n return [];\n }\n return out.sort((a, b) => a.label.localeCompare(b.label));\n}\n\n/**\n * Match computed stack to a select value (case-insensitive); falls back to parsed first name.\n */\nexport function matchFontSelectValue(computedStack: string, options: FontFamilyOption[]): string {\n const first = primaryFontLabel(computedStack);\n if (!first) return options[0]?.value ?? \"\";\n const lower = first.toLowerCase();\n const hit = options.find((o) => o.value.toLowerCase() === lower);\n return hit?.value ?? first;\n}\n\n/**\n * Fonts actually loaded on the page (`document.fonts`), plus the current computed primary if missing.\n * Dropdown shows one name per face — not full CSS stacks.\n */\nexport function useFontFamilyOptions(computedStack: string | undefined): FontFamilyOption[] {\n const [loaded, setLoaded] = useState<FontFamilyOption[]>([]);\n const [authored, setAuthored] = useState<string[]>([]);\n\n useEffect(() => {\n const refresh = () => {\n setLoaded(readLoadedFontOptions());\n setAuthored(scanStylesheetFontFamilies());\n };\n refresh();\n document.fonts?.addEventListener?.(\"loadingdone\", refresh);\n return () => document.fonts?.removeEventListener?.(\"loadingdone\", refresh);\n }, []);\n\n return useMemo(() => {\n const merged: FontFamilyOption[] = [];\n const byLower = new Set<string>();\n\n for (const name of authored) {\n const key = name.toLowerCase();\n if (byLower.has(key)) continue;\n byLower.add(key);\n merged.push({ value: name, label: name, applyCss: fontFamilyApplyCss(name) });\n }\n\n for (const o of loaded) {\n if (!byLower.has(o.value.toLowerCase())) {\n byLower.add(o.value.toLowerCase());\n merged.push(o);\n }\n }\n\n const generics: FontFamilyOption[] = [\n { value: \"system-ui\", label: \"system-ui\", applyCss: \"system-ui, sans-serif\" },\n { value: \"ui-sans-serif\", label: \"ui-sans-serif\", applyCss: \"ui-sans-serif, system-ui, sans-serif\" },\n { value: \"ui-serif\", label: \"ui-serif\", applyCss: \"ui-serif, serif\" },\n { value: \"ui-monospace\", label: \"ui-monospace\", applyCss: \"ui-monospace, monospace\" },\n ];\n for (const g of generics) {\n if (!byLower.has(g.value.toLowerCase())) {\n byLower.add(g.value.toLowerCase());\n merged.push(g);\n }\n }\n\n const v = computedStack?.trim();\n if (v) {\n const primary = primaryFontLabel(v);\n if (primary && !byLower.has(primary.toLowerCase())) {\n merged.unshift({\n value: primary,\n label: `${primary} (current)`,\n applyCss: v,\n });\n }\n }\n\n if (merged.length === 0 && v) {\n const p = primaryFontLabel(v) || \"Font\";\n merged.push({ value: p, label: p, applyCss: v });\n }\n\n return merged;\n }, [computedStack, loaded, authored]);\n}\n","import type { StyleSnapshot } from \"./use-selection\";\n\n/** Visual “Flow” presets mapped to CSS display + flex-direction. */\nexport type FlowMode = \"block\" | \"flex-column\" | \"flex-row\" | \"grid\";\n\nexport function detectFlowMode(s: StyleSnapshot): FlowMode {\n const d = s.display.toLowerCase();\n if (d === \"grid\" || d === \"inline-grid\") return \"grid\";\n if (d === \"flex\" || d === \"inline-flex\") {\n const fd = s.flexDirection.toLowerCase();\n if (fd.includes(\"column\")) return \"flex-column\";\n return \"flex-row\";\n }\n return \"block\";\n}\n\n/** Applies flow; may call onChange multiple times (separate undo steps). */\nexport function applyFlowMode(mode: FlowMode, onChange: (key: keyof StyleSnapshot, value: string) => void): void {\n switch (mode) {\n case \"block\":\n onChange(\"display\", \"block\");\n break;\n case \"flex-column\":\n onChange(\"display\", \"flex\");\n onChange(\"flexDirection\", \"column\");\n break;\n case \"flex-row\":\n onChange(\"display\", \"flex\");\n onChange(\"flexDirection\", \"row\");\n break;\n case \"grid\":\n onChange(\"display\", \"grid\");\n break;\n default:\n break;\n }\n}\n","/** Parent layout for mapping alignment controls to the right CSS (grid vs flex). */\n\nexport type ParentLayoutKind = \"grid\" | \"flex-row\" | \"flex-col\" | \"other\";\n\nexport function getParentLayoutKind(el: Element | null): ParentLayoutKind {\n if (!el?.parentElement) return \"other\";\n const p = el.parentElement;\n const s = getComputedStyle(p);\n const d = s.display;\n if (d === \"grid\" || d === \"inline-grid\") return \"grid\";\n if (d === \"flex\" || d === \"inline-flex\") {\n const fd = s.flexDirection;\n if (fd === \"row\" || fd === \"row-reverse\") return \"flex-row\";\n if (fd === \"column\" || fd === \"column-reverse\") return \"flex-col\";\n }\n return \"other\";\n}\n\nexport type SelfAlignToken = \"start\" | \"center\" | \"end\";\n\n/** Map computed align-self / justify-self to start | center | end | auto. */\nexport function normalizeSelfAlign(v: string): SelfAlignToken | \"auto\" | \"stretch\" {\n const t = v.trim().toLowerCase();\n if (t === \"\" || t === \"auto\") return \"auto\";\n if (t === \"flex-start\" || t === \"start\" || t === \"self-start\") return \"start\";\n if (t === \"center\") return \"center\";\n if (t === \"flex-end\" || t === \"end\" || t === \"self-end\") return \"end\";\n if (t === \"stretch\") return \"stretch\";\n return \"auto\";\n}\n\n/** CSS value for align-self / justify-self (modern `start`/`end`). */\nexport function selfTokenToCss(v: SelfAlignToken): string {\n return v;\n}\n\nexport function inferFlexMainAxisFromHorizontalMargins(ml: string, mr: string): SelfAlignToken | \"auto\" {\n const m = ml.trim().toLowerCase();\n const r = mr.trim().toLowerCase();\n const mlAuto = m === \"auto\";\n const mrAuto = r === \"auto\";\n if (mlAuto && mrAuto) return \"center\";\n if (mlAuto && !mrAuto) return \"end\";\n if (mrAuto && !mlAuto) return \"start\";\n return \"auto\";\n}\n\nexport function inferFlexMainAxisFromVerticalMargins(mt: string, mb: string): SelfAlignToken | \"auto\" {\n const t = mt.trim().toLowerCase();\n const b = mb.trim().toLowerCase();\n const tAuto = t === \"auto\";\n const bAuto = b === \"auto\";\n if (tAuto && bAuto) return \"center\";\n if (tAuto && !bAuto) return \"end\";\n if (bAuto && !tAuto) return \"start\";\n return \"auto\";\n}\n","/** Viewport-safe placement for `position: fixed` dropdowns (light-DOM portaled menus). */\n\nconst MARGIN = 8;\nconst GAP = 4;\n\nexport function computeFixedMenuPlacement(\n trigger: DOMRect,\n opts: { menuWidth: number; estimatedHeight: number; /** default: line up with trigger left edge */ align?: \"start\" | \"end\" },\n): {\n top: number;\n left: number;\n width: number;\n} {\n const vw = typeof window !== \"undefined\" ? window.innerWidth : 1024;\n const vh = typeof window !== \"undefined\" ? window.innerHeight : 768;\n\n const width = Math.min(Math.max(opts.menuWidth, 120), vw - 2 * MARGIN);\n let left = opts.align === \"end\" ? trigger.right - width : trigger.left;\n left = Math.max(MARGIN, Math.min(left, vw - width - MARGIN));\n\n const belowTop = trigger.bottom + GAP;\n const spaceBelow = vh - belowTop - MARGIN;\n const aboveCandidate = trigger.top - GAP - opts.estimatedHeight;\n const spaceAbove = trigger.top - MARGIN - GAP;\n\n let top: number;\n if (spaceBelow >= opts.estimatedHeight || spaceBelow >= spaceAbove) {\n top = belowTop;\n } else {\n top = Math.max(MARGIN, aboveCandidate);\n }\n\n return { top, left, width };\n}\n","\"use client\";\n\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"./cn\";\n\n/**\n * Snappy hover delays (vs native `title` ~1s). Entrance ~150–200ms matches product UI guidance\n * (see web-animation-design / shadcn Tooltip patterns).\n */\nexport function FluxTooltipProvider({ children }: { children: React.ReactNode }) {\n return (\n <TooltipPrimitive.Provider delayDuration={150} skipDelayDuration={100}>\n {children}\n </TooltipPrimitive.Provider>\n );\n}\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport function PanelTooltip({\n text,\n children,\n side = \"top\",\n}: {\n text: string;\n children: React.ReactNode;\n side?: Side;\n}) {\n const t = text.trim();\n if (!t) return <>{children}</>;\n\n return (\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={6}\n className={cn(\n \"flux-tooltip-content z-[10003] max-w-[min(18rem,calc(100vw-20px))] rounded-small border border-[#555] bg-[#2a2a2a] px-2 py-1\",\n \"font-['Inter',system-ui,sans-serif] text-xs leading-snug text-[#d9d9d9] shadow-lg\",\n )}\n >\n {t}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\n/** Shadow-root layer for dropdowns so panel `overflow` / `clip-path` does not clip menus. */\nexport const EditorMenuPortalContext = createContext<HTMLElement | null>(null);\n\nexport function useEditorMenuPortal(): HTMLElement | null {\n return useContext(EditorMenuPortalContext);\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nexport const ScrubSessionContext = createContext<{ begin: () => void; end: () => void } | null>(null);\n\nexport function useScrubSession(): { begin: () => void; end: () => void } {\n return useContext(ScrubSessionContext) ?? { begin: () => {}, end: () => {} };\n}\n","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\n\nexport type ScrubParseResult =\n | { kind: \"px\"; n: number }\n | { kind: \"unitless\"; n: number }\n | { kind: \"percent\"; n: number }\n | { kind: \"none\" };\n\nfunction parseScrubValue(raw: string, mode: \"px\" | \"unitless\" | \"percent\"): ScrubParseResult {\n const t = raw.trim().replace(/\\s*px\\s*$/i, \"\").replace(/\\s*%$/, \"\").trim();\n if (t === \"\" || t === \"normal\") return { kind: \"none\" };\n const n = Number.parseFloat(t);\n if (Number.isNaN(n) || !Number.isFinite(n)) return { kind: \"none\" };\n if (mode === \"px\") return { kind: \"px\", n };\n if (mode === \"percent\") return { kind: \"percent\", n };\n return { kind: \"unitless\", n };\n}\n\nexport function useScrubCommit({\n value,\n mode,\n onCommit,\n sensitivity = 0.5,\n onSessionBegin,\n onSessionEnd,\n}: {\n value: string;\n mode: \"px\" | \"unitless\" | \"percent\";\n onCommit: (next: string) => void;\n /** Pixels delta per 1px pointer move (after multiplier). */\n sensitivity?: number;\n onSessionBegin?: () => void;\n onSessionEnd?: () => void;\n}) {\n const startRef = useRef({ x: 0, parsed: parseScrubValue(value, mode) });\n const activeRef = useRef(false);\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (e.button !== 0) return;\n const t = e.target as HTMLElement;\n if (t.closest(\"input, select, textarea, button, [data-no-scrub]\")) return;\n e.preventDefault();\n onSessionBegin?.();\n startRef.current = { x: e.clientX, parsed: parseScrubValue(value, mode) };\n activeRef.current = true;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n },\n [value, mode, onSessionBegin],\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!activeRef.current) return;\n const dx = e.clientX - startRef.current.x;\n const mult = e.shiftKey ? 10 : e.altKey ? 0.1 : 1;\n const delta = dx * sensitivity * mult;\n const base = startRef.current.parsed;\n let n = 0;\n if (base.kind === \"px\" || base.kind === \"unitless\" || base.kind === \"percent\") n = base.n;\n n += delta;\n if (mode === \"px\") {\n onCommit(`${Math.round(n * 100) / 100}px`);\n } else if (mode === \"percent\") {\n onCommit(`${Math.round(Math.min(100, Math.max(0, n)))}%`);\n } else {\n onCommit(String(Math.round(n * 100) / 100));\n }\n },\n [mode, onCommit, sensitivity],\n );\n\n const onPointerUp = useCallback(\n (e: React.PointerEvent) => {\n if (!activeRef.current) return;\n activeRef.current = false;\n onSessionEnd?.();\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n },\n [onSessionEnd],\n );\n\n return {\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onPointerCancel: onPointerUp,\n scrubAreaProps: {\n className: \"cursor-ew-resize select-none touch-none\",\n title: \"Drag horizontally to adjust (Shift: ×10, Alt: ×0.1)\",\n } as const,\n };\n}\n","\"use client\";\n\nimport { AlignCenter, AlignLeft, AlignRight, ChevronDown, MoveDown, MoveRight, Square } from \"lucide-react\";\nimport { type ReactNode, useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"./cn\";\nimport { computeFixedMenuPlacement } from \"./floating-menu-position\";\nimport { PanelTooltip } from \"./panel-tooltip\";\nimport { useEditorMenuPortal } from \"./menu-portal-context\";\nimport type { FlowMode } from \"./layout-flow\";\nimport { useScrubSession } from \"./scrub-session-context\";\nimport { useScrubCommit } from \"./use-scrub\";\n\nconst JUSTIFY_COLS: (\"flex-start\" | \"center\" | \"flex-end\")[] = [\"flex-start\", \"center\", \"flex-end\"];\nconst ALIGN_ROWS: (\"flex-start\" | \"center\" | \"flex-end\")[] = [\"flex-start\", \"center\", \"flex-end\"];\n\nconst ALIGN_ICON_MAP: Record<string, React.ReactNode> = {\n \"flex-start\": <AlignLeft className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />,\n center: <AlignCenter className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />,\n \"flex-end\": <AlignRight className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />,\n};\n\nfunction justifyTooltip(j: string): string {\n if (j === \"flex-start\") return \"start\";\n if (j === \"flex-end\") return \"end\";\n return \"center\";\n}\n\nfunction alignTooltip(a: string): string {\n if (a === \"flex-start\") return \"top\";\n if (a === \"flex-end\") return \"bottom\";\n return \"middle\";\n}\n\nexport function PanelAlignmentGrid({\n justifyContent,\n alignItems,\n onJustifyChange,\n onAlignChange,\n /** Double-click any cell: `justify-content: space-between` on the flex container. */\n onCellDoubleClick,\n}: {\n justifyContent: string;\n alignItems: string;\n onJustifyChange: (v: string) => void;\n onAlignChange: (v: string) => void;\n onCellDoubleClick?: () => void;\n}) {\n const normalizeJ = (v: string) => (JUSTIFY_COLS.includes(v as never) ? v : \"flex-start\");\n const normalizeA = (v: string) => (ALIGN_ROWS.includes(v as never) ? v : \"flex-start\");\n const activeJ = normalizeJ(justifyContent);\n const activeA = normalizeA(alignItems);\n\n return (\n <div className={cn(panelChrome.field, \"grid grid-cols-3 grid-rows-3 gap-0 p-1\")} style={{ aspectRatio: \"1.6\" }}>\n {ALIGN_ROWS.map((a) =>\n JUSTIFY_COLS.map((j) => {\n const isActive = activeJ === j && activeA === a;\n const baseTip = `Justify ${justifyTooltip(j)}, align ${alignTooltip(a)}`;\n const tip =\n onCellDoubleClick != null ? `${baseTip} — double-click: space-between (main axis)` : baseTip;\n return (\n <PanelTooltip key={`${a}-${j}`} text={tip}>\n <button\n type=\"button\"\n onClick={(e) => {\n if (e.detail === 2) {\n onCellDoubleClick?.();\n return;\n }\n if (e.detail === 1) {\n onJustifyChange(j);\n onAlignChange(a);\n }\n }}\n className={cn(\"flex items-center justify-center rounded-small transition-colors\", isActive ? \"bg-[#202020]\" : \"hover:bg-[#2a2a2a]\")}\n aria-label={tip}\n aria-pressed={isActive}\n >\n {isActive ? ALIGN_ICON_MAP[j] : <span className=\"block size-[5px] rounded-full bg-[#555]\" />}\n </button>\n </PanelTooltip>\n );\n }),\n )}\n </div>\n );\n}\n\n/** Tokens and primitives for the Flux properties sidebar (#202020 / #333333). */\nexport const panelChrome = {\n panel: \"bg-[#202020] text-[#D9D9D9] antialiased [font-synthesis:none]\",\n /** 8px — editor token `rounded-small` in `tailwind.editor.config.ts` */\n field: \"rounded-small bg-[#333333]\",\n text: \"text-[#D9D9D9]\",\n muted: \"text-[#7C7C7C]\",\n /** Section headings (Layout, Text, Fill, …) */\n title: \"font-['Inter',system-ui,sans-serif] text-[12px] font-bold leading-[14px]\",\n body: \"font-['Inter',system-ui,sans-serif] text-xs leading-[15.6px]\",\n icon: \"size-[14px] shrink-0 text-[#D9D9D9]\",\n toggleTrack: \"flex w-full justify-between gap-2 rounded-small bg-[#333333] p-1\",\n toggleOn: \"rounded-small bg-[#202020] p-1\",\n toggleOff: \"rounded-small p-1\",\n /** Popover surface — pair with `position: fixed` + viewport coords so scroll parents don’t clip menus. */\n selectMenuSurface: \"max-h-48 overflow-y-auto rounded-small border border-[#444] bg-[#2a2a2a] py-1 shadow-lg\",\n} as const;\n\nfunction pathIncludesNode(path: EventTarget[], node: Node | null): boolean {\n if (!node) return false;\n return path.some((x) => x === node);\n}\n\n/** Custom listbox so menu colors match the variable token dropdown (native `<option>` UIs are OS-controlled). */\nfunction PanelFieldCustomSelect({\n value,\n options,\n onChange,\n disabled,\n ariaLabel,\n className,\n /** Shown before the chevron, `gap-1` (4px) from the chevron — e.g. variable picker. */\n beforeTrailingSlot,\n trailingSlot,\n triggerLabel,\n truncateTrigger = true,\n}: {\n value: string;\n options: { value: string; label: string }[];\n onChange: (v: string) => void;\n disabled?: boolean;\n ariaLabel: string;\n className?: string;\n beforeTrailingSlot?: ReactNode;\n /** e.g. chevron — last in the row, 4px after `beforeTrailingSlot`. */\n trailingSlot?: ReactNode;\n /** Closed-state label (e.g. short “Fill” / “Fit” for sizing rows). */\n triggerLabel?: string;\n /** When false, mode trigger text won’t ellipsis (sizing row). Default true. */\n truncateTrigger?: boolean;\n}) {\n const [open, setOpen] = useState(false);\n const [menuBox, setMenuBox] = useState<{ top: number; left: number; width: number } | null>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerBtnRef = useRef<HTMLButtonElement>(null);\n const chevronBtnRef = useRef<HTMLButtonElement>(null);\n const menuDropdownRef = useRef<HTMLDivElement>(null);\n const menuPortalEl = useEditorMenuPortal();\n const current = options.find((o) => o.value === value) ?? options[0];\n\n useLayoutEffect(() => {\n if (!open || !rootRef.current) {\n setMenuBox(null);\n return;\n }\n const tb = triggerBtnRef.current?.getBoundingClientRect();\n const cb = chevronBtnRef.current?.getBoundingClientRect();\n const r = rootRef.current.getBoundingClientRect();\n const left = tb?.left ?? r.left;\n const right = cb?.right ?? tb?.right ?? r.right;\n const top = Math.min(tb?.top ?? r.top, cb?.top ?? r.top);\n const bottom = Math.max(tb?.bottom ?? r.bottom, cb?.bottom ?? r.bottom);\n const anchor = new DOMRect(left, top, Math.max(right - left, 1), Math.max(bottom - top, 1));\n const preferredWidth = Math.max(anchor.width, 120);\n const estH = Math.min(options.length * 36 + 12, 192);\n setMenuBox(computeFixedMenuPlacement(anchor, { menuWidth: preferredWidth, estimatedHeight: estH }));\n }, [open, options.length]);\n\n useEffect(() => {\n if (!open) return;\n const onDocPointer = (e: PointerEvent) => {\n const path = typeof e.composedPath === \"function\" ? e.composedPath() : [];\n if (pathIncludesNode(path, rootRef.current)) return;\n if (pathIncludesNode(path, menuDropdownRef.current)) return;\n setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n const onScroll = () => setOpen(false);\n document.addEventListener(\"pointerdown\", onDocPointer);\n document.addEventListener(\"keydown\", onKey);\n window.addEventListener(\"scroll\", onScroll, true);\n window.addEventListener(\"resize\", onScroll);\n return () => {\n document.removeEventListener(\"pointerdown\", onDocPointer);\n document.removeEventListener(\"keydown\", onKey);\n window.removeEventListener(\"scroll\", onScroll, true);\n window.removeEventListener(\"resize\", onScroll);\n };\n }, [open]);\n\n const toggleOpen = () => {\n if (!disabled) setOpen((o) => !o);\n };\n\n return (\n <div ref={rootRef} className={cn(\"relative flex min-w-0 flex-1 items-center gap-1\", className)} data-flux-ui>\n {/* Label trigger is its own <button>; variable slot is a sibling so picker menus are never nested inside a button. */}\n <button\n ref={triggerBtnRef}\n type=\"button\"\n disabled={disabled}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n className={cn(\n \"min-w-0 flex-1 cursor-pointer border-0 bg-transparent py-0.5 text-left leading-[15.6px] outline-none\",\n truncateTrigger && \"truncate\",\n panelChrome.body,\n panelChrome.text,\n disabled ? \"cursor-not-allowed opacity-60\" : undefined,\n )}\n onClick={toggleOpen}\n >\n {triggerLabel ?? current?.label ?? value}\n </button>\n {beforeTrailingSlot != null ? (\n <span\n className=\"flex shrink-0 items-center\"\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n {beforeTrailingSlot}\n </span>\n ) : null}\n <button\n ref={chevronBtnRef}\n type=\"button\"\n tabIndex={-1}\n aria-hidden\n disabled={disabled}\n className={cn(\n \"flex shrink-0 border-0 bg-transparent p-0 text-[#D9D9D9] outline-none\",\n disabled ? \"cursor-not-allowed opacity-60\" : \"cursor-pointer\",\n )}\n onClick={toggleOpen}\n >\n {trailingSlot}\n </button>\n {open && menuBox\n ? (() => {\n const menuNode = (\n <div\n ref={menuDropdownRef}\n data-flux-select-menu\n data-flux-ui\n style={{\n top: menuBox.top,\n left: menuBox.left,\n width: menuBox.width,\n }}\n >\n {options.map((o) => (\n <PanelTooltip key={o.value} text={o.label}>\n <button\n type=\"button\"\n className={cn(\"flux-menu-option\", o.value === value && \"is-active\")}\n onClick={() => {\n onChange(o.value);\n setOpen(false);\n }}\n >\n {o.label}\n </button>\n </PanelTooltip>\n ))}\n </div>\n );\n return menuPortalEl ? createPortal(menuNode, menuPortalEl) : menuNode;\n })()\n : null}\n </div>\n );\n}\n\nexport function PanelSectionTitle({\n children,\n /** Match `OnDemandSectionButton` label: muted #7C7C7C, hover to #D9D9D9 (default: section heading #D9D9D9). */\n tone = \"default\",\n}: {\n children: React.ReactNode;\n tone?: \"default\" | \"muted\";\n}) {\n return (\n <div\n className={cn(\n panelChrome.title,\n tone === \"muted\" ? cn(panelChrome.muted, \"transition-colors hover:text-[#D9D9D9]\") : panelChrome.text,\n \"shrink-0\",\n )}\n >\n {children}\n </div>\n );\n}\n\n/** Sub-labels under Layout (Flow, Dimensions, Padding, Margin) — 12px, sentence case. */\nexport function PanelSubsectionTitle({ children }: { children: React.ReactNode }) {\n return <div className={cn(\"shrink-0 font-['Inter',system-ui,sans-serif] font-medium text-[#7C7C7C] text-[12px] leading-[15.6px]\")}>{children}</div>;\n}\n\nexport function PanelFlowRow({ value, onChange }: { value: FlowMode; onChange: (m: FlowMode) => void }) {\n const opts: { mode: FlowMode; label: string; icon: React.ReactNode }[] = [\n { mode: \"block\", label: \"Block\", icon: <Square className={panelChrome.icon} strokeWidth={2} aria-hidden /> },\n { mode: \"flex-column\", label: \"Vertical stack (flex column)\", icon: <MoveDown className={panelChrome.icon} strokeWidth={2} aria-hidden /> },\n { mode: \"flex-row\", label: \"Horizontal stack (flex row)\", icon: <MoveRight className={panelChrome.icon} strokeWidth={2} aria-hidden /> },\n ];\n return (\n <fieldset className={cn(panelChrome.toggleTrack, \"min-w-0 border-0 p-1\")}>\n <legend className=\"sr-only\">Layout flow</legend>\n {opts.map((o) => (\n <PanelTooltip key={o.mode} text={o.label}>\n <button\n type=\"button\"\n onClick={() => onChange(o.mode)}\n className={cn(\n \"flex min-w-0 flex-1 items-center justify-center rounded-small p-1.5 transition-colors\",\n value === o.mode ? panelChrome.toggleOn : panelChrome.toggleOff,\n )}\n aria-pressed={value === o.mode}\n aria-label={o.label}\n >\n {o.icon}\n </button>\n </PanelTooltip>\n ))}\n </fieldset>\n );\n}\n\nexport function PanelPrimaryButton({\n children,\n onClick,\n disabled,\n icon,\n title,\n \"data-flux-ui\": dataUi,\n \"aria-live\": ariaLive,\n}: {\n children: React.ReactNode;\n onClick?: () => void;\n disabled?: boolean;\n icon?: React.ReactNode;\n title?: string;\n \"data-flux-ui\"?: boolean;\n \"aria-live\"?: \"off\" | \"polite\" | \"assertive\";\n}) {\n const btn = (\n <button\n type=\"button\"\n {...(dataUi ? { \"data-flux-ui\": true } : {})}\n disabled={disabled}\n aria-live={ariaLive}\n onClick={onClick}\n className={cn(\n panelChrome.field,\n \"flex w-full shrink-0 items-center justify-center gap-2 overflow-hidden px-2 py-1\",\n disabled && \"cursor-not-allowed opacity-50\",\n !disabled && \"hover:brightness-110\",\n )}\n >\n <div className={cn(\"flex w-full items-start justify-center gap-2 py-1\", panelChrome.body, panelChrome.text)}>\n {icon}\n {children}\n </div>\n </button>\n );\n const tip = title?.trim() ?? \"\";\n if (!tip) return btn;\n return (\n <PanelTooltip text={tip}>\n {disabled ? (\n <span className=\"inline-flex w-full max-w-full cursor-not-allowed\">{btn}</span>\n ) : (\n btn\n )}\n </PanelTooltip>\n );\n}\n\nexport function PanelSelect({\n label,\n value,\n onChange,\n options,\n icon,\n className,\n ariaLabel,\n disabled,\n hoverVariableSlot,\n}: {\n label?: string;\n value: string;\n onChange: (v: string) => void;\n options: { value: string; label: string }[];\n icon?: React.ReactNode;\n className?: string;\n ariaLabel?: string;\n disabled?: boolean;\n hoverVariableSlot?: ReactNode;\n}) {\n return (\n <div\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex min-w-0 flex-1 items-center gap-2 overflow-visible px-2 py-1\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n >\n {icon}\n <div className=\"flex min-w-0 flex-1 items-center gap-[13px]\">\n {label != null && <span className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 leading-[15.6px]\")}>{label}</span>}\n <PanelFieldCustomSelect\n value={value}\n options={options}\n onChange={onChange}\n disabled={disabled}\n ariaLabel={ariaLabel ?? (label ? `${label} value` : \"Select value\")}\n className=\"min-w-0 flex-1\"\n beforeTrailingSlot={hoverVariableSlot}\n trailingSlot={<ChevronDown className={panelChrome.icon} aria-hidden strokeWidth={2} />}\n />\n </div>\n </div>\n );\n}\n\n/** One row: label (W/H) + optional fixed value input + mode dropdown + chevron (Paper Editor layout). */\nexport function PanelSizingAxis({\n label,\n mode,\n modeTriggerLabel,\n modeOptions,\n onModeChange,\n showFixedInput,\n fixedDisplayValue,\n onFixedCommit,\n commitRawToCss,\n fixedAriaLabel,\n}: {\n label: string;\n mode: string;\n /** Closed dropdown label (Fill / Fit). Empty when mode is fixed so the number field isn’t duplicated by “Fixed”. */\n modeTriggerLabel: string;\n modeOptions: { value: string; label: string }[];\n onModeChange: (mode: string) => void;\n showFixedInput: boolean;\n /** Shown when not focused; synced when the DOM value changes from outside (e.g. undo). */\n fixedDisplayValue: string;\n /** Receives final CSS dimension (e.g. `120px`) on blur or Enter. */\n onFixedCommit: (cssValue: string) => void;\n /** Turn draft text into a CSS length; called only on commit. */\n commitRawToCss: (raw: string) => string;\n fixedAriaLabel: string;\n}) {\n const [draft, setDraft] = useState(fixedDisplayValue);\n\n useEffect(() => {\n setDraft(fixedDisplayValue);\n }, [fixedDisplayValue]);\n\n const commitDraft = () => {\n onFixedCommit(commitRawToCss(draft));\n };\n\n return (\n <div className={cn(panelChrome.field, \"relative z-[1] flex min-w-0 flex-1 items-center gap-2 overflow-visible px-2 py-1\")}>\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n {label}\n </span>\n {showFixedInput ? (\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={() => {\n commitDraft();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n (e.target as HTMLInputElement).blur();\n }\n }}\n className={cn(\"min-w-[2rem] flex-1 border-0 bg-transparent leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n aria-label={fixedAriaLabel}\n />\n ) : null}\n <PanelFieldCustomSelect\n value={mode}\n options={modeOptions}\n onChange={onModeChange}\n ariaLabel={`${label} sizing mode`}\n className={showFixedInput ? \"w-[5.5rem] shrink-0\" : \"min-w-0 flex-1\"}\n triggerLabel={modeTriggerLabel}\n truncateTrigger={false}\n trailingSlot={<ChevronDown className={panelChrome.icon} aria-hidden strokeWidth={2} />}\n />\n </div>\n );\n}\n\nexport function PanelTextInput({\n value,\n onChange,\n icon,\n className,\n ariaLabel,\n disabled,\n /** When true, only call onChange on blur/Enter so the DOM isn’t rewritten every keystroke (fixes cursor/garbled text). */\n commitOnBlur = false,\n hoverVariableSlot,\n}: {\n value: string;\n onChange: (v: string) => void;\n icon?: React.ReactNode;\n className?: string;\n ariaLabel?: string;\n disabled?: boolean;\n commitOnBlur?: boolean;\n hoverVariableSlot?: ReactNode;\n}) {\n const [draft, setDraft] = useState(value);\n const [focused, setFocused] = useState(false);\n const varSlot = Boolean(hoverVariableSlot);\n\n useEffect(() => {\n if (!focused) setDraft(value);\n }, [value, focused]);\n\n return (\n <div\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 py-1\",\n varSlot && \"group\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n >\n {icon}\n <input\n type=\"text\"\n readOnly={disabled}\n value={commitOnBlur && focused ? draft : value}\n onChange={(e) => {\n if (commitOnBlur) setDraft(e.target.value);\n else onChange(e.target.value);\n }}\n onFocus={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(true);\n setDraft(value);\n }}\n onBlur={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(false);\n onChange(draft);\n }}\n onKeyDown={(e) => {\n if (!commitOnBlur || e.key !== \"Enter\") return;\n (e.target as HTMLInputElement).blur();\n }}\n aria-label={ariaLabel}\n className={cn(\n \"min-w-0 flex-1 border-0 bg-transparent leading-[15.6px] outline-none\",\n panelChrome.body,\n panelChrome.text,\n disabled && \"cursor-not-allowed\",\n )}\n spellCheck={false}\n />\n {varSlot ? <div className=\"flex shrink-0 items-center\">{hoverVariableSlot}</div> : null}\n </div>\n );\n}\n\nfunction hexForColorInput(hexNoHash: string): string {\n const h = hexNoHash\n .replace(/#/g, \"\")\n .replace(/[^0-9a-fA-F]/g, \"\")\n .padEnd(6, \"0\")\n .slice(0, 6);\n return `#${h}`;\n}\n\nexport function PanelSwatchRow({\n hexNoHash,\n opacityPct,\n onHexChange,\n onOpacityPctChange,\n swatchBackground,\n disabled,\n hoverVariableSlot,\n}: {\n hexNoHash: string;\n opacityPct: number;\n onHexChange: (hex6: string) => void;\n onOpacityPctChange: (pct: number) => void;\n swatchBackground: string;\n disabled?: boolean;\n hoverVariableSlot?: ReactNode;\n}) {\n const [hexDraft, setHexDraft] = useState(hexNoHash);\n const [hexFocused, setHexFocused] = useState(false);\n const [opDraft, setOpDraft] = useState(() => String(opacityPct));\n const [opFocused, setOpFocused] = useState(false);\n\n useEffect(() => {\n if (!hexFocused) setHexDraft(hexNoHash);\n }, [hexNoHash, hexFocused]);\n\n useEffect(() => {\n if (!opFocused) setOpDraft(String(opacityPct));\n }, [opacityPct, opFocused]);\n\n const commitHex = useCallback(() => {\n const cleaned = hexDraft\n .replace(/#/g, \"\")\n .replace(/[^0-9a-fA-F]/g, \"\")\n .slice(0, 6);\n if (cleaned.length > 0) onHexChange(cleaned);\n else setHexDraft(hexNoHash);\n }, [hexDraft, hexNoHash, onHexChange]);\n\n const commitOpacity = useCallback(() => {\n const n = Number.parseInt(opDraft.replace(/%/g, \"\").trim(), 10);\n if (!Number.isNaN(n)) onOpacityPctChange(clampPctLocal(n));\n else setOpDraft(String(opacityPct));\n }, [opDraft, onOpacityPctChange, opacityPct]);\n\n const varSlot = Boolean(hoverVariableSlot);\n\n return (\n <div\n data-flux-ui\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex w-full shrink-0 items-center gap-2 overflow-hidden px-2 py-1\",\n varSlot && \"group\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <div className=\"flex shrink-0 items-center gap-2\">\n <label className=\"relative block size-4 shrink-0 cursor-pointer rounded-small\">\n <input\n type=\"color\"\n disabled={disabled}\n value={hexForColorInput(hexNoHash)}\n onChange={(e) => {\n const next = e.target.value.replace(/^#/, \"\").toUpperCase();\n onHexChange(next);\n }}\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n aria-label=\"Pick color\"\n />\n <span\n aria-hidden\n className=\"pointer-events-none absolute inset-0 rounded-small border border-[#202020]\"\n style={{ backgroundColor: swatchBackground }}\n />\n </label>\n <input\n type=\"text\"\n disabled={disabled}\n value={hexFocused ? hexDraft : hexNoHash}\n onFocus={() => {\n setHexFocused(true);\n setHexDraft(hexNoHash);\n }}\n onBlur={() => {\n setHexFocused(false);\n commitHex();\n }}\n onChange={(e) => {\n const next = e.target.value\n .replace(/#/g, \"\")\n .replace(/[^0-9a-fA-F]/g, \"\")\n .slice(0, 6);\n setHexDraft(next);\n }}\n className={cn(\"w-[4.5rem] shrink-0 border-0 bg-transparent uppercase leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n aria-label=\"Color hex\"\n maxLength={6}\n spellCheck={false}\n />\n </div>\n <div className=\"flex min-w-0 flex-1 items-center justify-end gap-1\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n disabled={disabled}\n value={opFocused ? opDraft : `${opacityPct}%`}\n onFocus={() => {\n setOpFocused(true);\n setOpDraft(String(opacityPct));\n }}\n onBlur={() => {\n setOpFocused(false);\n commitOpacity();\n }}\n onChange={(e) => {\n const raw = e.target.value.replace(/%/g, \"\");\n if (raw === \"\" || /^\\d*$/.test(raw)) setOpDraft(raw);\n }}\n className={cn(\"min-w-0 max-w-[5rem] border-0 bg-transparent text-right leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n aria-label=\"Opacity percent\"\n />\n {varSlot ? <div className=\"flex shrink-0 items-center\">{hoverVariableSlot}</div> : null}\n </div>\n </div>\n );\n}\n\nfunction clampPctLocal(n: number): number {\n return Math.min(100, Math.max(0, n));\n}\n\nexport function PanelLabeledMini({\n label,\n value,\n onChange,\n disabled,\n commitOnBlur = false,\n scrubMode,\n hoverVariableSlot,\n}: {\n label: string;\n value: string;\n onChange: (v: string) => void;\n disabled?: boolean;\n commitOnBlur?: boolean;\n scrubMode?: \"px\" | \"unitless\" | \"percent\";\n hoverVariableSlot?: ReactNode;\n}) {\n const [draft, setDraft] = useState(value);\n const [focused, setFocused] = useState(false);\n const { begin, end } = useScrubSession();\n const scrub = useScrubCommit({\n value,\n mode: scrubMode ?? \"px\",\n onCommit: onChange,\n onSessionBegin: begin,\n onSessionEnd: end,\n });\n\n useEffect(() => {\n if (!focused) setDraft(value);\n }, [value, focused]);\n\n const varSlot = Boolean(hoverVariableSlot);\n\n return (\n <div\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex min-w-0 flex-1 items-center gap-1 overflow-hidden px-2 py-1\",\n varSlot && \"group\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {scrubMode && !disabled ? (\n <PanelTooltip text={scrub.scrubAreaProps.title}>\n <span\n className={cn(\n panelChrome.muted,\n panelChrome.body,\n \"shrink-0 leading-[15.6px]\",\n scrub.scrubAreaProps.className,\n \"rounded-small px-0.5\",\n )}\n onPointerDown={scrub.onPointerDown}\n onPointerMove={scrub.onPointerMove}\n onPointerUp={scrub.onPointerUp}\n onPointerCancel={scrub.onPointerCancel}\n >\n {label}\n </span>\n </PanelTooltip>\n ) : (\n <span className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 leading-[15.6px]\")}>{label}</span>\n )}\n <input\n type=\"text\"\n readOnly={disabled}\n value={commitOnBlur && focused ? draft : value}\n onChange={(e) => {\n if (commitOnBlur) setDraft(e.target.value);\n else onChange(e.target.value);\n }}\n onFocus={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(true);\n setDraft(value);\n }}\n onBlur={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(false);\n onChange(draft);\n }}\n onKeyDown={(e) => {\n if (!commitOnBlur || e.key !== \"Enter\") return;\n (e.target as HTMLInputElement).blur();\n }}\n className={cn(\"min-w-0 flex-1 border-0 bg-transparent leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n aria-label={label}\n spellCheck={false}\n />\n </div>\n {varSlot ? <div className=\"flex shrink-0 items-center\">{hoverVariableSlot}</div> : null}\n </div>\n );\n}\n\nexport function PanelIconField({\n icon,\n value,\n onChange,\n ariaLabel,\n disabled,\n /** When true, edits stay local until blur/Enter (avoids fighting the controlled value while typing). */\n commitOnBlur = false,\n suffix,\n scrubMode,\n hoverVariableSlot,\n}: {\n icon: React.ReactNode;\n value: string;\n onChange: (v: string) => void;\n ariaLabel?: string;\n disabled?: boolean;\n commitOnBlur?: boolean;\n suffix?: string;\n scrubMode?: \"px\" | \"unitless\" | \"percent\";\n hoverVariableSlot?: ReactNode;\n}) {\n const [draft, setDraft] = useState(value);\n const [focused, setFocused] = useState(false);\n const { begin, end } = useScrubSession();\n const scrub = useScrubCommit({\n value,\n mode: scrubMode ?? \"px\",\n onCommit: onChange,\n onSessionBegin: begin,\n onSessionEnd: end,\n });\n\n useEffect(() => {\n if (!focused) setDraft(value);\n }, [value, focused]);\n\n const varSlot = Boolean(hoverVariableSlot);\n const iconTip =\n scrubMode && !disabled\n ? ariaLabel\n ? `${ariaLabel} — ${scrub.scrubAreaProps.title}`\n : scrub.scrubAreaProps.title\n : ariaLabel ?? \"\";\n\n return (\n <div\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 py-1\",\n varSlot && \"group\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n {scrubMode && !disabled ? (\n <PanelTooltip text={iconTip}>\n <span\n className={cn(\"inline-flex shrink-0 items-center justify-center\", scrub.scrubAreaProps.className)}\n onPointerDown={scrub.onPointerDown}\n onPointerMove={scrub.onPointerMove}\n onPointerUp={scrub.onPointerUp}\n onPointerCancel={scrub.onPointerCancel}\n aria-hidden\n >\n {icon}\n </span>\n </PanelTooltip>\n ) : (\n <PanelTooltip text={iconTip}>\n <span className=\"inline-flex shrink-0 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n </PanelTooltip>\n )}\n <PanelTooltip text={ariaLabel ?? \"\"}>\n <input\n type=\"text\"\n readOnly={disabled}\n value={commitOnBlur && focused ? draft : value}\n onChange={(e) => {\n if (commitOnBlur) setDraft(e.target.value);\n else onChange(e.target.value);\n }}\n onFocus={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(true);\n setDraft(value);\n }}\n onBlur={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(false);\n onChange(draft);\n }}\n onKeyDown={(e) => {\n if (!commitOnBlur || e.key !== \"Enter\") return;\n (e.target as HTMLInputElement).blur();\n }}\n aria-label={ariaLabel}\n className={cn(\"min-w-0 flex-1 border-0 bg-transparent leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n />\n </PanelTooltip>\n {suffix || varSlot ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {suffix ? <span className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 leading-[15.6px]\")}>{suffix}</span> : null}\n {varSlot ? hoverVariableSlot : null}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function PanelToggleGroup<T extends string>({\n value,\n onChange,\n options,\n disabled,\n}: {\n /** Empty string = no option selected (e.g. `align-self: auto`). */\n value: T | \"\";\n onChange: (v: T) => void;\n options: { value: T; icon: React.ReactNode; title: string }[];\n disabled?: boolean;\n}) {\n return (\n <div className={cn(panelChrome.toggleTrack, disabled && \"cursor-not-allowed opacity-60\")}>\n {options.map((o) => {\n const pressed = value !== \"\" && value === o.value;\n return (\n <PanelTooltip key={o.value} text={o.title}>\n {disabled ? (\n <span className=\"inline-flex shrink-0\">\n <button\n type=\"button\"\n disabled\n onClick={() => onChange(o.value)}\n className={cn(\"flex shrink-0 items-center gap-2 rounded-small p-1\", pressed ? panelChrome.toggleOn : panelChrome.toggleOff)}\n aria-pressed={pressed}\n aria-label={o.title}\n >\n {o.icon}\n </button>\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={() => onChange(o.value)}\n className={cn(\"flex shrink-0 items-center gap-2 rounded-small p-1\", pressed ? panelChrome.toggleOn : panelChrome.toggleOff)}\n aria-pressed={pressed}\n aria-label={o.title}\n >\n {o.icon}\n </button>\n )}\n </PanelTooltip>\n );\n })}\n </div>\n );\n}\n","/**\n * Maps CSS property names (kebab-case) to custom property names that appear\n * in stylesheet values via var(--name), so pickers can prefer vars actually\n * used for that property in the host app.\n */\n\nconst VAR_RE = /var\\(\\s*(--[\\w-]+)\\s*(?:,[^)]*)?\\)/gi;\n\nfunction extractVarNames(value: string): string[] {\n const out: string[] = [];\n let m: RegExpExecArray | null;\n VAR_RE.lastIndex = 0;\n while ((m = VAR_RE.exec(value)) !== null) {\n out.push(m[1].trim());\n }\n return out;\n}\n\nlet cachedMap: Map<string, Set<string>> | null = null;\nlet cachedSheetCount = -1;\n\nfunction walkRules(rules: CSSRuleList, propToVars: Map<string, Set<string>>): void {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSGroupingRule) {\n walkRules(rule.cssRules, propToVars);\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n\n const style = rule.style;\n for (let j = 0; j < style.length; j++) {\n const prop = style[j];\n if (prop.startsWith(\"--\")) continue;\n const val = style.getPropertyValue(prop);\n if (!val.includes(\"var(\")) continue;\n for (const name of extractVarNames(val)) {\n let set = propToVars.get(prop);\n if (!set) {\n set = new Set();\n propToVars.set(prop, set);\n }\n set.add(name);\n }\n }\n }\n}\n\nfunction buildIndex(): Map<string, Set<string>> {\n const propToVars = new Map<string, Set<string>>();\n for (const sheet of document.styleSheets) {\n let rules: CSSRuleList;\n try {\n rules = sheet.cssRules;\n } catch {\n continue;\n }\n walkRules(rules, propToVars);\n }\n return propToVars;\n}\n\nexport function invalidateVariableUsageCache(): void {\n cachedMap = null;\n cachedSheetCount = -1;\n}\n\n/** Custom property names (--foo) that appear in rules for this CSS property. */\nexport function getVariablesUsedForCssProperty(kebabProperty: string): string[] {\n const count = document.styleSheets.length;\n if (!cachedMap || cachedSheetCount !== count) {\n cachedMap = buildIndex();\n cachedSheetCount = count;\n }\n const set = cachedMap.get(kebabProperty);\n return set ? [...set].sort((a, b) => a.localeCompare(b)) : [];\n}\n","/**\n * Lazy token scanner — walks document.styleSheets to discover CSS custom properties\n * and utility class tokens. Scans on-demand per category, cached until stylesheet count changes.\n */\n\nimport { getVariablesUsedForCssProperty, invalidateVariableUsageCache } from \"./variable-usage-index\";\n\nexport type TokenCategory = \"colors\" | \"spacing\" | \"typography\" | \"borders\" | \"effects\" | \"layout\";\nexport type CssFramework = \"tailwind\" | \"css-modules\" | \"custom\" | \"unknown\";\n\nexport interface DesignToken {\n className: string;\n property: string;\n value: string;\n category: TokenCategory;\n}\n\nexport interface CssVariable {\n name: string;\n value: string;\n category: TokenCategory;\n}\n\nexport interface TokenScanResult {\n tokens: DesignToken[];\n variables: CssVariable[];\n framework: CssFramework;\n}\n\nconst PROPERTY_CATEGORY_MAP: Record<string, TokenCategory> = {\n \"color\": \"colors\", \"background-color\": \"colors\", \"border-color\": \"colors\",\n \"outline-color\": \"colors\", \"fill\": \"colors\", \"stroke\": \"colors\",\n \"padding\": \"spacing\", \"padding-top\": \"spacing\", \"padding-right\": \"spacing\",\n \"padding-bottom\": \"spacing\", \"padding-left\": \"spacing\",\n \"margin\": \"spacing\", \"margin-top\": \"spacing\", \"margin-right\": \"spacing\",\n \"margin-bottom\": \"spacing\", \"margin-left\": \"spacing\",\n \"gap\": \"spacing\", \"row-gap\": \"spacing\", \"column-gap\": \"spacing\",\n \"width\": \"spacing\", \"height\": \"spacing\", \"max-width\": \"spacing\",\n \"max-height\": \"spacing\", \"min-width\": \"spacing\", \"min-height\": \"spacing\",\n \"font-size\": \"typography\", \"font-weight\": \"typography\", \"font-family\": \"typography\",\n \"line-height\": \"typography\", \"letter-spacing\": \"typography\",\n \"border-width\": \"borders\", \"border-top-width\": \"borders\", \"border-right-width\": \"borders\",\n \"border-bottom-width\": \"borders\", \"border-left-width\": \"borders\",\n \"border-radius\": \"borders\", \"border-style\": \"borders\",\n \"box-shadow\": \"effects\", \"opacity\": \"effects\", \"filter\": \"effects\",\n \"display\": \"layout\", \"flex-direction\": \"layout\", \"justify-content\": \"layout\",\n \"align-items\": \"layout\", \"overflow\": \"layout\",\n};\n\nfunction getCategoryForProperty(prop: string): TokenCategory | null {\n return PROPERTY_CATEGORY_MAP[prop] ?? null;\n}\n\nlet cachedResult: TokenScanResult | null = null;\nlet cachedSheetCount = -1;\n\nexport function scanTokens(): TokenScanResult {\n const count = document.styleSheets.length;\n if (cachedResult && cachedSheetCount === count) return cachedResult;\n cachedResult = buildTokenRegistry();\n cachedSheetCount = count;\n return cachedResult;\n}\n\nexport function invalidateTokenCache(): void {\n cachedResult = null;\n cachedSheetCount = -1;\n invalidateVariableUsageCache();\n}\n\n/** One-line summary for AI prompts (design-token preamble). */\nexport function summarizeTokenSystem(): string | null {\n if (typeof document === \"undefined\") return null;\n try {\n const { tokens, variables, framework } = scanTokens();\n if (tokens.length === 0 && variables.length === 0) return null;\n const bits: string[] = [];\n if (variables.length > 0) {\n bits.push(`${variables.length} CSS variable${variables.length !== 1 ? \"s\" : \"\"}`);\n }\n if (tokens.length > 0) {\n bits.push(`${tokens.length} scanned utility class${tokens.length !== 1 ? \"es\" : \"\"}`);\n }\n return `${bits.join(\", \")}; framework **${framework}**`;\n } catch {\n return null;\n }\n}\n\nexport function detectFramework(): CssFramework {\n return scanTokens().framework;\n}\n\nexport function getTokensForProperty(cssProperty: string): DesignToken[] {\n const cat = getCategoryForProperty(cssProperty);\n if (!cat) return [];\n return scanTokens().tokens.filter((t) => t.category === cat);\n}\n\nexport function getVariablesForProperty(cssProperty: string): CssVariable[] {\n const cat = getCategoryForProperty(cssProperty);\n if (!cat) return [];\n return scanTokens().variables.filter((v) => v.category === cat);\n}\n\n/**\n * Variables that appear in real CSS rules for this property first, then category fallback.\n */\nexport function getVariablesForPropertySmart(cssPropertyKebab: string): CssVariable[] {\n const usageOrder = getVariablesUsedForCssProperty(cssPropertyKebab);\n const registry = scanTokens().variables;\n const byName = new Map(registry.map((v) => [v.name, v]));\n const primary: CssVariable[] = [];\n const seen = new Set<string>();\n const fallbackCat = getCategoryForProperty(cssPropertyKebab) ?? \"spacing\";\n for (const name of usageOrder) {\n const v = byName.get(name);\n if (v && !seen.has(v.name)) {\n primary.push(v);\n seen.add(v.name);\n } else if (!byName.has(name) && !seen.has(name)) {\n const resolved =\n typeof document !== \"undefined\" ? getComputedStyle(document.documentElement).getPropertyValue(name).trim() : \"\";\n primary.push({ name, value: resolved, category: fallbackCat });\n seen.add(name);\n }\n }\n for (const v of getVariablesForProperty(cssPropertyKebab)) {\n if (!seen.has(v.name)) {\n primary.push(v);\n seen.add(v.name);\n }\n }\n return primary;\n}\n\nfunction buildTokenRegistry(): TokenScanResult {\n const tokens: DesignToken[] = [];\n const variables: CssVariable[] = [];\n const seenClasses = new Set<string>();\n const seenVars = new Set<string>();\n let hasTwVars = false;\n\n const probe = document.createElement(\"div\");\n probe.style.cssText = \"position:fixed;top:-9999px;left:-9999px;visibility:hidden;pointer-events:none;\";\n document.body.appendChild(probe);\n\n try {\n for (const sheet of document.styleSheets) {\n let rules: CSSRuleList;\n try { rules = sheet.cssRules; } catch { continue; }\n scanRules(rules, probe, tokens, variables, seenClasses, seenVars);\n if (!hasTwVars) hasTwVars = detectTailwindVars(rules);\n }\n } finally {\n probe.remove();\n }\n\n const framework = detectCssFramework(hasTwVars, seenClasses);\n return { tokens, variables, framework };\n}\n\nfunction detectTailwindVars(rules: CSSRuleList): boolean {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSGroupingRule) {\n if (detectTailwindVars(rule.cssRules)) return true;\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n for (let j = 0; j < rule.style.length; j++) {\n if (rule.style[j].startsWith(\"--tw-\")) return true;\n }\n }\n return false;\n}\n\nfunction detectCssFramework(hasTwVars: boolean, seenClasses: Set<string>): CssFramework {\n if (hasTwVars) return \"tailwind\";\n const twPattern = /^(p|m|w|h|gap|text|bg|border|rounded|shadow|opacity|font|leading|tracking|flex|grid|z|inset|top|right|bottom|left)([xytrbl])?-/;\n let twCount = 0;\n for (const name of seenClasses) {\n if (twPattern.test(name)) twCount++;\n }\n if (twCount > 10) return \"tailwind\";\n const hashPattern = /^[a-zA-Z_][a-zA-Z0-9_]*__[a-zA-Z0-9]{5,}$/;\n let moduleCount = 0;\n for (const name of seenClasses) {\n if (hashPattern.test(name)) moduleCount++;\n }\n if (moduleCount > 5) return \"css-modules\";\n if (seenClasses.size > 0) return \"custom\";\n return \"unknown\";\n}\n\nfunction isSimpleClassSelector(selector: string): boolean {\n const trimmed = selector.trim();\n return /^\\.[a-zA-Z0-9_-]+$/.test(trimmed) || /^\\\\.[a-zA-Z0-9_-]+$/.test(trimmed);\n}\n\nfunction countAuthoredProperties(style: CSSStyleDeclaration): number {\n const shorthands = new Set<string>();\n for (let i = 0; i < style.length; i++) {\n const prop = style[i];\n if (prop.startsWith(\"--\")) continue;\n const shorthand = (style as unknown as Record<string, unknown>).getPropertyShorthand;\n const sh = typeof shorthand === \"function\" ? (shorthand as (p: string) => string)(prop) : null;\n if (sh) shorthands.add(sh);\n else shorthands.add(prop);\n }\n return shorthands.size;\n}\n\nfunction scanRules(\n rules: CSSRuleList,\n probe: HTMLDivElement,\n tokens: DesignToken[],\n variables: CssVariable[],\n seenClasses: Set<string>,\n seenVars: Set<string>,\n): void {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSGroupingRule) {\n scanRules(rule.cssRules, probe, tokens, variables, seenClasses, seenVars);\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n\n // Collect CSS custom properties from :root\n if (rule.selectorText === \":root\" || rule.selectorText === \":root, :host\") {\n for (let j = 0; j < rule.style.length; j++) {\n const prop = rule.style[j];\n if (!prop.startsWith(\"--\") || seenVars.has(prop)) continue;\n seenVars.add(prop);\n const val = rule.style.getPropertyValue(prop).trim();\n if (!val) continue;\n const cat = guessVariableCategory(prop, val);\n variables.push({ name: prop, value: val, category: cat });\n }\n }\n\n if (!isSimpleClassSelector(rule.selectorText)) continue;\n if (countAuthoredProperties(rule.style) > 1) continue;\n\n const classMatch = rule.selectorText.match(/\\.([a-zA-Z0-9_-]+)/);\n if (!classMatch || seenClasses.has(classMatch[1])) continue;\n const className = classMatch[1];\n seenClasses.add(className);\n\n for (let j = 0; j < rule.style.length; j++) {\n const prop = rule.style[j];\n if (prop.startsWith(\"--\")) continue;\n let val = rule.style.getPropertyValue(prop).trim();\n if (val.includes(\"var(\")) {\n probe.style.cssText = \"position:fixed;top:-9999px;left:-9999px;visibility:hidden;pointer-events:none;\";\n probe.style.setProperty(prop, val);\n val = getComputedStyle(probe).getPropertyValue(prop).trim();\n probe.style.removeProperty(prop);\n }\n if (!val) continue;\n const cat = getCategoryForProperty(prop);\n if (cat) tokens.push({ className, property: prop, value: val, category: cat });\n }\n }\n}\n\nfunction guessVariableCategory(name: string, value: string): TokenCategory {\n const n = name.toLowerCase();\n if (n.includes(\"color\") || n.includes(\"bg\") || n.includes(\"fill\") || n.includes(\"stroke\")) return \"colors\";\n if (n.includes(\"spacing\") || n.includes(\"gap\") || n.includes(\"pad\") || n.includes(\"margin\")) return \"spacing\";\n if (n.includes(\"font\") || n.includes(\"text\") || n.includes(\"leading\") || n.includes(\"tracking\")) return \"typography\";\n if (n.includes(\"radius\") || n.includes(\"border\")) return \"borders\";\n if (n.includes(\"shadow\") || n.includes(\"opacity\") || n.includes(\"blur\")) return \"effects\";\n if (/^#|^rgb|^hsl|^oklch|^color/.test(value.trim())) return \"colors\";\n return \"spacing\";\n}\n","/** Lucide `circle-dot-dashed` — CSS variable / token picker trigger. */\nexport function VariableTokenIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <path d=\"M10.1 2.18a9.93 9.93 0 0 1 3.8 0\" />\n <path d=\"M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7\" />\n <path d=\"M21.82 10.1a9.93 9.93 0 0 1 0 3.8\" />\n <path d=\"M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69\" />\n <path d=\"M13.9 21.82a9.94 9.94 0 0 1-3.8 0\" />\n <path d=\"M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7\" />\n <path d=\"M2.18 13.9a9.93 9.93 0 0 1 0-3.8\" />\n <path d=\"M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69\" />\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n </svg>\n );\n}\n","\"use client\";\n\nimport { Link2 } from \"lucide-react\";\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"./cn\";\nimport { computeFixedMenuPlacement } from \"./floating-menu-position\";\nimport { useEditorMenuPortal } from \"./menu-portal-context\";\nimport { getVariablesForPropertySmart } from \"./token-scanner\";\nimport { VariableTokenIcon } from \"./variable-token-icon\";\n\n/** Token / variable picker: usage-aware list + link / unlink. */\nexport function PanelVariableAffix({\n cssPropertyKebab,\n linkedVar,\n onLink,\n onUnlink,\n disabled,\n /** Compact control for inside a field row; pair with parent `group` + hover reveal. */\n compact = false,\n /** When `compact`, hide token trigger until hover/focus-within or while menu is open; linked state stays visible. */\n revealOnFieldHover = false,\n}: {\n cssPropertyKebab: string;\n linkedVar: string | null;\n onLink: (cssCustomPropertyName: string) => void;\n onUnlink: () => void;\n disabled?: boolean;\n compact?: boolean;\n revealOnFieldHover?: boolean;\n}) {\n const vars = useMemo(() => getVariablesForPropertySmart(cssPropertyKebab).slice(0, 48), [cssPropertyKebab]);\n const [menuOpen, setMenuOpen] = useState(false);\n const [dropBox, setDropBox] = useState<{ top: number; left: number; width: number } | null>(null);\n const summaryRef = useRef<HTMLElement | null>(null);\n const menuRef = useRef<HTMLDivElement | null>(null);\n const menuPortalEl = useEditorMenuPortal();\n\n useLayoutEffect(() => {\n if (!menuOpen) {\n setDropBox(null);\n return;\n }\n const el = summaryRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const width = Math.min(280, Math.max(160, 160));\n const count = vars.length === 0 ? 1 : vars.length;\n const estH = Math.min(count * 36 + 12, 192);\n setDropBox(computeFixedMenuPlacement(r, { menuWidth: width, estimatedHeight: estH, align: \"end\" }));\n }, [menuOpen, vars.length]);\n\n useEffect(() => {\n if (!menuOpen) return;\n const close = () => {\n summaryRef.current?.closest(\"details\")?.removeAttribute(\"open\");\n };\n window.addEventListener(\"scroll\", close, true);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"scroll\", close, true);\n window.removeEventListener(\"resize\", close);\n };\n }, [menuOpen]);\n\n useEffect(() => {\n if (!menuOpen) return;\n const onDocPointer = (e: PointerEvent) => {\n const path = typeof e.composedPath === \"function\" ? e.composedPath() : [];\n if (summaryRef.current && path.includes(summaryRef.current)) return;\n if (menuRef.current && path.includes(menuRef.current)) return;\n summaryRef.current?.closest(\"details\")?.removeAttribute(\"open\");\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") summaryRef.current?.closest(\"details\")?.removeAttribute(\"open\");\n };\n document.addEventListener(\"pointerdown\", onDocPointer);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"pointerdown\", onDocPointer);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [menuOpen]);\n\n if (disabled) return null;\n\n const revealClasses =\n compact && revealOnFieldHover && !linkedVar\n ? cn(\"opacity-0 transition-opacity duration-150\", !menuOpen && \"group-hover:opacity-100 group-focus-within:opacity-100\", menuOpen && \"opacity-100\")\n : undefined;\n\n return (\n <div className={cn(\"flex shrink-0 items-center gap-0.5\", revealClasses)} data-flux-ui data-no-scrub>\n {linkedVar ? (\n <button\n type=\"button\"\n title={`Linked to ${linkedVar} — click to replace with resolved value`}\n aria-label=\"Unlink variable\"\n onClick={() => onUnlink()}\n className={cn(\"rounded-small text-[#93c47d] transition-colors hover:bg-[#2a2a2a]\", compact ? \"p-0.5\" : \"p-1\")}\n >\n <Link2 className={compact ? \"size-3.5\" : \"size-[14px]\"} strokeWidth={2} aria-hidden />\n </button>\n ) : (\n <details className=\"relative\" onToggle={(e) => setMenuOpen((e.target as HTMLDetailsElement).open)}>\n <summary\n ref={(n) => {\n summaryRef.current = n;\n }}\n className={cn(\n \"flex cursor-pointer list-none items-center justify-center rounded-small text-[#7C7C7C] transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\",\n compact ? \"min-h-0 min-w-0 p-0.5\" : \"min-h-0 min-w-0 p-1\",\n \"[&::-webkit-details-marker]:hidden\",\n )}\n title=\"Apply design token (CSS variable)\"\n aria-label=\"Open variable picker\"\n >\n <VariableTokenIcon className={cn(\"shrink-0\", compact && \"scale-[0.92]\")} />\n </summary>\n {menuOpen && dropBox\n ? (() => {\n const menuNode = (\n <div\n ref={menuRef}\n data-flux-variable-menu\n data-flux-ui\n style={{ top: dropBox.top, left: dropBox.left, width: dropBox.width }}\n >\n {vars.length === 0 ? (\n <div className=\"flux-menu-empty\">No variables found</div>\n ) : (\n vars.map((v) => (\n <button\n key={v.name}\n type=\"button\"\n className=\"flux-menu-option\"\n title={v.value ? `${v.name}: ${v.value}` : v.name}\n onClick={(e) => {\n onLink(v.name);\n (e.currentTarget.closest(\"details\") as HTMLDetailsElement | null)?.removeAttribute(\"open\");\n }}\n >\n {v.name}\n </button>\n ))\n )}\n </div>\n );\n return menuPortalEl ? createPortal(menuNode, menuPortalEl) : menuNode;\n })()\n : null}\n </details>\n )}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * Empty state: centered inspect icon + “Select an element to edit” (reference **Editor** empty frame, 277×982).\n */\nimport { DesignEditorToggleIcon } from \"./design-editor-toggle-icon\";\n\nexport function PropertiesEmptyState() {\n return (\n <div className=\"flex min-h-0 flex-1 flex-col items-center justify-center gap-3 px-0 py-6\" data-flux-ui aria-live=\"polite\">\n <DesignEditorToggleIcon size={32} className=\"shrink-0 !fill-none text-[#D9D9D9]\" />\n <p className=\"shrink-0 text-center font-['Inter',system-ui,sans-serif] font-bold text-[#D9D9D9] text-base leading-[15.6px]\">Select an element to edit</p>\n </div>\n );\n}\n","/** Parse first layer of box-shadow into editable parts; compose back. */\n\nexport interface ShadowParts {\n offsetX: string;\n offsetY: string;\n blur: string;\n spread: string;\n color: string;\n inset: boolean;\n}\n\nconst NONE: ShadowParts = {\n offsetX: \"0px\",\n offsetY: \"0px\",\n blur: \"0px\",\n spread: \"0px\",\n color: \"rgba(0, 0, 0, 0.25)\",\n inset: false,\n};\n\nconst COLOR_END = /(rgba?\\([^)]+\\)|hsla?\\([^)]+\\)|#[0-9a-fA-F]{3,8}|[a-z]+)\\s*$/;\n\nfunction firstLayer(shadow: string): string {\n const s = shadow.trim();\n if (!s || s === \"none\") return \"\";\n let depth = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (c === \"(\") depth++;\n else if (c === \")\") depth--;\n else if (c === \",\" && depth === 0) {\n return s.slice(0, i).trim();\n }\n }\n return s;\n}\n\nexport function parseBoxShadow(shadow: string): ShadowParts {\n const layer = firstLayer(shadow);\n if (!layer) return { ...NONE };\n\n let rest = layer;\n let inset = false;\n if (/^inset\\s+/i.test(rest)) {\n inset = true;\n rest = rest.replace(/^inset\\s+/i, \"\");\n }\n\n const colorMatch = rest.match(COLOR_END);\n let color = NONE.color;\n if (colorMatch) {\n color = colorMatch[1].trim();\n rest = rest.slice(0, colorMatch.index).trim();\n }\n\n const tokens = rest\n .split(/\\s+/)\n .filter(Boolean)\n .map((t) => {\n if (/^-?[\\d.]+$/.test(t)) return `${t}px`;\n return t;\n });\n\n const raw = tokens.slice(0, 4);\n const padded = [...raw];\n while (padded.length < 4) padded.push(\"0px\");\n const [offsetX, offsetY, blur, spread] = padded;\n\n return {\n offsetX: normalizeUnit(offsetX),\n offsetY: normalizeUnit(offsetY),\n blur: normalizeUnit(blur),\n spread: normalizeUnit(spread),\n color,\n inset,\n };\n}\n\n/** Normalize a single shadow length token for inline style (digits → px). */\nexport function normalizeShadowLength(v: string): string {\n const t = v.trim();\n if (t === \"\") return \"0px\";\n if (/^-?[\\d.]+$/.test(t)) return `${t}px`;\n return t;\n}\n\nfunction normalizeUnit(v: string): string {\n return normalizeShadowLength(v);\n}\n\nexport function composeBoxShadow(parts: ShadowParts): string {\n const { inset, offsetX, offsetY, blur, spread, color } = parts;\n const prefix = inset ? \"inset \" : \"\";\n return `${prefix}${offsetX} ${offsetY} ${blur} ${spread} ${color}`.trim();\n}\n","/** Maps design-tool sizing modes to CSS width/height values (aligned with Paper Editor layout reference). */\n\nexport type SizingMode = \"fixed\" | \"fill\" | \"fit-container\";\n\n/** Primary W/H modes in the panel. Other CSS keywords exist (`min-content`, `stretch`, `clamp()`, viewport units, etc.) but are not separate menu items — use “More layout & CSS” or classes for those. */\nexport const SIZING_MODE_OPTIONS: { value: SizingMode; label: string }[] = [\n { value: \"fixed\", label: \"Fixed\" },\n { value: \"fill\", label: \"Fill\" },\n { value: \"fit-container\", label: \"Fit\" },\n];\n\n/** Short label on the closed sizing trigger (avoids truncation in narrow rows). */\nexport function sizingModeTriggerLabel(mode: SizingMode): string {\n switch (mode) {\n case \"fill\":\n return \"Fill\";\n case \"fit-container\":\n return \"Fit\";\n default:\n return \"Fixed\";\n }\n}\n\nconst FILL_VALUES = new Set([\"100%\", \"100vw\", \"100dvw\"]);\nconst FIT_CONTAINER_VALUES = new Set([\"max-content\", \"fit-content\", \"min-content\"]);\nconst AUTO_VALUES = new Set([\"auto\", \"initial\", \"inherit\", \"unset\", \"revert\", \"revert-layer\"]);\n\n/**\n * @param computedUsed — resolved value from `getComputedStyle` (often `NNpx`)\n * @param specified — value from inline style `element.style.getPropertyValue(\"width\"|\"height\")` when set\n */\nexport function detectSizingMode(computedUsed: string, axis: \"width\" | \"height\", specified?: string): SizingMode {\n const raw = (specified ?? \"\").trim().toLowerCase();\n if (raw) {\n if (FILL_VALUES.has(raw) || (axis === \"height\" && (raw === \"100vh\" || raw === \"100dvh\"))) return \"fill\";\n if (FIT_CONTAINER_VALUES.has(raw) || AUTO_VALUES.has(raw)) return \"fit-container\";\n return \"fixed\";\n }\n return detectSizingModeFromComputed(computedUsed, axis);\n}\n\nfunction detectSizingModeFromComputed(value: string, axis: \"width\" | \"height\"): SizingMode {\n const v = value.trim().toLowerCase();\n if (AUTO_VALUES.has(v) || v === \"\") return \"fit-container\";\n if (FILL_VALUES.has(v) || (axis === \"height\" && (v === \"100vh\" || v === \"100dvh\"))) return \"fill\";\n if (FIT_CONTAINER_VALUES.has(v)) return \"fit-container\";\n return \"fixed\";\n}\n\nexport function modeToCss(mode: SizingMode, axis: \"width\" | \"height\", fixedValue: string): string {\n switch (mode) {\n case \"fill\":\n return axis === \"height\" ? \"100%\" : \"100%\";\n case \"fit-container\":\n return \"max-content\";\n case \"fixed\":\n return fixedValue.trim() || (axis === \"width\" ? \"100px\" : \"40px\");\n default:\n return \"max-content\";\n }\n}\n\n/** Strip unit for fixed mode display (keep suffix if non-px). */\nexport function extractFixedDisplay(value: string, mode: SizingMode): string {\n if (mode !== \"fixed\") return value;\n return value.trim();\n}\n","/**\n * Persist live preview rules to localStorage for session continuity.\n * Survives full page reload until cleared via reset or empty rules.\n */\n\nimport type { MutableRefObject } from \"react\";\nimport { setElementEditableText } from \"./element-capabilities\";\nimport type { PreviewEngine } from \"./preview-engine\";\nimport type { StyleSnapshot } from \"./use-selection\";\n\nconst STORAGE_KEY = \"flux-preview-session\";\nconst VERSION = 2 as const;\n\ntype PersistedPayload = {\n v: typeof VERSION | 1;\n rules: { selector: string; property: string; value: string }[];\n originals: Record<string, StyleSnapshot>;\n varLinks: Record<string, Record<string, string>>;\n detached: Record<string, { key: string; value: string }[]>;\n /** Selector → current text (inline edit). */\n textOverrides?: Record<string, string>;\n /** Selector → text before first inline edit (for Reset all). */\n textOriginals?: Record<string, string>;\n};\n\nfunction toVarLinksRecord(m: Map<string, Map<keyof StyleSnapshot, string>>): Record<string, Record<string, string>> {\n const out: Record<string, Record<string, string>> = {};\n for (const [sel, inner] of m) {\n out[sel] = Object.fromEntries(inner) as Record<string, string>;\n }\n return out;\n}\n\nfunction fromVarLinksRecord(r: Record<string, Record<string, string>>): Map<string, Map<keyof StyleSnapshot, string>> {\n const m = new Map<string, Map<keyof StyleSnapshot, string>>();\n for (const [sel, obj] of Object.entries(r)) {\n m.set(sel, new Map(Object.entries(obj) as [keyof StyleSnapshot, string][]));\n }\n return m;\n}\n\nexport function persistFluxPreviewState(\n engine: PreviewEngine,\n originals: Map<string, StyleSnapshot>,\n varLinks: Map<string, Map<keyof StyleSnapshot, string>>,\n detached: Map<string, { key: keyof StyleSnapshot; value: string }[]>,\n textOverrides?: Map<string, string>,\n textOriginals?: Map<string, string>,\n): void {\n try {\n const rules = [...engine.getChanges()].map((r) => ({\n selector: r.selector,\n property: r.property,\n value: r.value,\n }));\n const detachedPlain: Record<string, { key: string; value: string }[]> = {};\n for (const [k, arr] of detached) {\n detachedPlain[k] = arr.map((e) => ({ key: e.key as string, value: e.value }));\n }\n const payload: PersistedPayload = {\n v: VERSION,\n rules,\n originals: Object.fromEntries(originals),\n varLinks: toVarLinksRecord(varLinks),\n detached: detachedPlain,\n textOverrides: textOverrides && textOverrides.size > 0 ? Object.fromEntries(textOverrides) : undefined,\n textOriginals: textOriginals && textOriginals.size > 0 ? Object.fromEntries(textOriginals) : undefined,\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(payload));\n } catch {\n /* quota, private mode */\n }\n}\n\nexport function restoreFluxPreviewInto(\n engine: PreviewEngine,\n refs: {\n originals: MutableRefObject<Map<string, StyleSnapshot>>;\n varLinks: MutableRefObject<Map<string, Map<keyof StyleSnapshot, string>>>;\n detached: MutableRefObject<Map<string, { key: keyof StyleSnapshot; value: string }[]>>;\n textOverrides?: MutableRefObject<Map<string, string>>;\n textOriginals?: MutableRefObject<Map<string, string>>;\n },\n): boolean {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return false;\n const data = JSON.parse(raw) as PersistedPayload;\n if ((data.v !== VERSION && data.v !== 1) || !Array.isArray(data.rules)) return false;\n\n engine.clearAll();\n for (const r of data.rules) {\n engine.applyChange(r.selector, r.property, r.value);\n }\n\n refs.originals.current = new Map(Object.entries(data.originals ?? {})) as Map<string, StyleSnapshot>;\n refs.varLinks.current = fromVarLinksRecord(data.varLinks ?? {});\n refs.detached.current = new Map(\n Object.entries(data.detached ?? {}).map(([k, arr]) => [\n k,\n (arr ?? []).map((e) => ({ key: e.key as keyof StyleSnapshot, value: e.value })),\n ]),\n );\n\n const textOv = data.textOverrides ?? {};\n const textOr = data.textOriginals ?? {};\n if (refs.textOverrides) {\n refs.textOverrides.current = new Map(Object.entries(textOv));\n }\n if (refs.textOriginals) {\n refs.textOriginals.current = new Map(Object.entries(textOr));\n }\n if (typeof document !== \"undefined\") {\n for (const [sel, text] of Object.entries(textOv)) {\n try {\n const el = document.querySelector(sel);\n if (el) setElementEditableText(el, text);\n } catch {\n /* invalid selector */\n }\n }\n }\n\n return data.rules.length > 0 || Object.keys(textOv).length > 0;\n } catch {\n return false;\n }\n}\n\nexport function clearFluxPreviewStorage(): void {\n try {\n localStorage.removeItem(STORAGE_KEY);\n } catch {\n /* ignore */\n }\n}\n","/**\n * Live preview engine using Constructable Stylesheets when supported,\n * otherwise a single <style> tag in document.head.\n *\n * Applies CSS changes without mutating the host element's inline styles.\n */\n\nimport { finder } from \"@medv/finder\";\n\nexport interface AppliedRule {\n selector: string;\n property: string;\n value: string;\n}\n\nfunction camelToKebab(s: string): string {\n return s.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n}\n\nfunction propertyToKebab(property: string): string {\n return property.includes(\"-\") ? property : camelToKebab(property);\n}\n\nlet adoptableStyleSheetsSupported: boolean | null = null;\n\nfunction canUseConstructableStylesheet(): boolean {\n if (adoptableStyleSheetsSupported !== null) return adoptableStyleSheetsSupported;\n if (typeof CSSStyleSheet === \"undefined\") {\n adoptableStyleSheetsSupported = false;\n return false;\n }\n if (typeof CSSStyleSheet.prototype.replaceSync !== \"function\") {\n adoptableStyleSheetsSupported = false;\n return false;\n }\n if (typeof document === \"undefined\" || !(\"adoptedStyleSheets\" in document)) {\n adoptableStyleSheetsSupported = false;\n return false;\n }\n try {\n const probe = new CSSStyleSheet();\n const before = document.adoptedStyleSheets;\n document.adoptedStyleSheets = [...before, probe];\n document.adoptedStyleSheets = before;\n adoptableStyleSheetsSupported = true;\n return true;\n } catch {\n adoptableStyleSheetsSupported = false;\n return false;\n }\n}\n\nexport class PreviewEngine {\n private sheet: CSSStyleSheet | null = null;\n private fallbackStyle: HTMLStyleElement | null = null;\n private rules: AppliedRule[] = [];\n private attached = false;\n\n constructor() {\n if (canUseConstructableStylesheet()) {\n try {\n this.sheet = new CSSStyleSheet();\n } catch {\n this.sheet = null;\n }\n }\n if (!this.sheet) {\n this.fallbackStyle = document.createElement(\"style\");\n this.fallbackStyle.setAttribute(\"data-flux-preview\", \"\");\n }\n }\n\n attach() {\n if (this.attached) return;\n\n if (this.sheet) {\n try {\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, this.sheet];\n this.attached = true;\n this.flush();\n return;\n } catch {\n this.sheet = null;\n if (!this.fallbackStyle) {\n this.fallbackStyle = document.createElement(\"style\");\n this.fallbackStyle.setAttribute(\"data-flux-preview\", \"\");\n }\n }\n }\n\n if (this.fallbackStyle && !this.fallbackStyle.parentNode) {\n document.head.appendChild(this.fallbackStyle);\n }\n this.attached = true;\n this.flush();\n }\n\n detach() {\n if (!this.attached) return;\n if (this.sheet) {\n try {\n document.adoptedStyleSheets = document.adoptedStyleSheets.filter((s) => s !== this.sheet);\n } catch {\n /* ignore */\n }\n }\n this.fallbackStyle?.remove();\n this.attached = false;\n }\n\n applyChange(selector: string, property: string, value: string) {\n const idx = this.rules.findIndex((r) => r.selector === selector && r.property === property);\n if (idx !== -1) this.rules.splice(idx, 1);\n this.rules.push({ selector, property, value });\n this.flush();\n }\n\n removeChange(selector: string, property: string) {\n const idx = this.rules.findIndex((r) => r.selector === selector && r.property === property);\n if (idx === -1) return;\n this.rules.splice(idx, 1);\n this.flush();\n }\n\n removeAllChanges(selector: string) {\n this.rules = this.rules.filter((r) => r.selector !== selector);\n this.flush();\n }\n\n clearAll() {\n this.rules = [];\n this.flush();\n }\n\n getChanges(): readonly AppliedRule[] {\n return this.rules;\n }\n\n /** Last preview value applied for this selector + property (e.g. `100%` when Fill), or undefined. */\n getPreviewValue(selector: string, property: string): string | undefined {\n const r = this.rules.find((x) => x.selector === selector && x.property === property);\n return r?.value;\n }\n\n destroy() {\n this.detach();\n this.rules = [];\n if (this.sheet) {\n try {\n this.sheet.replaceSync(\"\");\n } catch {\n /* ignore */\n }\n }\n if (this.fallbackStyle) {\n this.fallbackStyle.textContent = \"\";\n }\n }\n\n private flush() {\n if (!this.attached) return;\n\n const parts: string[] = [];\n for (const r of this.rules) {\n const kebab = propertyToKebab(r.property);\n parts.push(`${r.selector} { ${kebab}: ${r.value} !important; }`);\n }\n const css = parts.join(\"\");\n\n if (this.sheet) {\n try {\n this.sheet.replaceSync(css);\n } catch {\n try {\n this.sheet.replaceSync(\"\");\n } catch {\n return;\n }\n for (const block of parts) {\n try {\n this.sheet.insertRule(block, this.sheet.cssRules.length);\n } catch {\n /* invalid rule */\n }\n }\n }\n return;\n }\n\n if (this.fallbackStyle) {\n this.fallbackStyle.textContent = css;\n }\n }\n}\n\n/**\n * Generate a unique CSS selector for an element using @medv/finder.\n * Falls back to a manual path if finder throws (e.g., SVG elements).\n */\nexport function getUniqueSelector(el: Element): string {\n try {\n const root = document.body ?? document.documentElement;\n return finder(el, { root, className: () => false });\n } catch {\n return buildFallbackSelector(el);\n }\n}\n\nfunction buildFallbackSelector(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n const stop = document.body ?? document.documentElement;\n while (current && current !== stop) {\n const tag = current.tagName.toLowerCase();\n if (current.id) {\n parts.unshift(`#${CSS.escape(current.id)}`);\n break;\n }\n const parentEl: Element | null = current.parentElement;\n if (parentEl) {\n const tagName = current.tagName;\n const siblings = Array.from(parentEl.children).filter((c: Element) => c.tagName === tagName);\n if (siblings.length > 1) {\n const idx = siblings.indexOf(current) + 1;\n parts.unshift(`${tag}:nth-of-type(${idx})`);\n } else {\n parts.unshift(tag);\n }\n } else {\n parts.unshift(tag);\n }\n current = current.parentElement;\n }\n return parts.join(\" > \");\n}\n\n/**\n * `parent > :nth-child(n)` so preview rules (e.g. `order`) target the exact direct child.\n * Finder-only selectors often collide for sibling elements; this stays stable for flex/grid children.\n */\nexport function getDirectChildSelector(parent: Element, child: Element): string {\n if (child.parentElement !== parent) {\n return getUniqueSelector(child);\n }\n const pSel = getUniqueSelector(parent);\n for (let i = 0; i < parent.childNodes.length; i++) {\n if (parent.childNodes[i] === child) {\n return `${pSel} > :nth-child(${i + 1})`;\n }\n }\n return getUniqueSelector(child);\n}\n\nconst PREVIEW_TARGET_ATTR = \"data-flux-preview-target\";\n\n/**\n * Preview rules are emitted as `selector { prop: val !important }`. If `selector`\n * matches multiple nodes, **every** match gets the style — not just the selected\n * element. That can restyle unrelated UI (e.g. another `button`, including the\n * Flux floating toggle in the light DOM). Only accept selectors with exactly one\n * match in the document.\n */\nfunction selectorUniquelyTargetsElement(sel: string, el: Element): boolean {\n try {\n const all = document.querySelectorAll(sel);\n return all.length === 1 && all[0] === el;\n } catch {\n return false;\n }\n}\n\n/**\n * Selector used for {@link PreviewEngine} rules. Verifies each candidate with\n * `querySelectorAll(sel).length === 1` and that node is `el`, so injected rules\n * cannot hit multiple elements (e.g. all `button`s). Last resort: a temporary\n * `data-flux-preview-target` id — call {@link removePreviewTargetAttribute} when deselecting.\n */\nexport function getReliableSelectorForPreview(el: Element): {\n selector: string;\n usedAttrFallback: boolean;\n} {\n const root = document.body ?? document.documentElement;\n const seen = new Set<string>();\n const candidates: string[] = [];\n\n const push = (s: string) => {\n if (s && !seen.has(s)) {\n seen.add(s);\n candidates.push(s);\n }\n };\n\n try {\n push(finder(el, { root, className: () => false }));\n } catch {\n /* ignore */\n }\n push(buildFallbackSelector(el));\n const p = el.parentElement;\n if (p) {\n push(getDirectChildSelector(p, el));\n }\n\n for (const s of candidates) {\n if (selectorUniquelyTargetsElement(s, el)) {\n return { selector: s, usedAttrFallback: false };\n }\n }\n\n const id = crypto.randomUUID();\n el.setAttribute(PREVIEW_TARGET_ATTR, id);\n return {\n selector: `[${PREVIEW_TARGET_ATTR}=\"${id}\"]`,\n usedAttrFallback: true,\n };\n}\n\nexport function removePreviewTargetAttribute(el: Element | null | undefined) {\n if (el?.isConnected) el.removeAttribute(PREVIEW_TARGET_ATTR);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { canonicalBackgroundColorForDiff } from \"./color-alpha\";\nimport { getElementEditableText, setElementEditableText } from \"./element-capabilities\";\nimport { persistFluxPreviewState, restoreFluxPreviewInto } from \"./preview-persistence\";\nimport type { FluxStructuralReorder } from \"./drag-reorder-types\";\nimport {\n PreviewEngine,\n getReliableSelectorForPreview,\n removePreviewTargetAttribute,\n} from \"./preview-engine\";\n\nexport interface StyleSnapshot {\n fontFamily: string;\n fontSize: string;\n fontWeight: string;\n lineHeight: string;\n letterSpacing: string;\n color: string;\n textAlign: string;\n width: string;\n height: string;\n padding: string;\n margin: string;\n paddingTop: string;\n paddingRight: string;\n paddingBottom: string;\n paddingLeft: string;\n marginTop: string;\n marginRight: string;\n marginBottom: string;\n marginLeft: string;\n /** CSS `position` (static, relative, absolute, fixed, sticky). */\n position: string;\n /** Inset offsets for positioned layout (`top` / `right` / `bottom` / `left`). */\n top: string;\n right: string;\n bottom: string;\n left: string;\n /** CSS `align-self` — item alignment in flex/grid. */\n alignSelf: string;\n /** CSS `justify-self` — grid item alignment on row axis. */\n justifySelf: string;\n overflow: string;\n display: string;\n flexDirection: string;\n justifyContent: string;\n alignItems: string;\n gap: string;\n rowGap: string;\n columnGap: string;\n gridTemplateColumns: string;\n gridTemplateRows: string;\n backgroundColor: string;\n /** Computed `background-image` (gradients count as fill for `hasFill`-style checks). */\n backgroundImage: string;\n borderTopWidth: string;\n borderRightWidth: string;\n borderBottomWidth: string;\n borderLeftWidth: string;\n borderTopLeftRadius: string;\n borderTopRightRadius: string;\n borderBottomRightRadius: string;\n borderBottomLeftRadius: string;\n borderTopColor: string;\n borderRightColor: string;\n borderBottomColor: string;\n borderLeftColor: string;\n borderTopStyle: string;\n borderRightStyle: string;\n borderBottomStyle: string;\n borderLeftStyle: string;\n borderColor: string;\n borderRadius: string;\n borderStyle: string;\n boxShadow: string;\n opacity: string;\n}\n\n/** Stable order for copy / diff tables (matches `getComputedSnapshot` fields). */\nexport const STYLE_KEYS: (keyof StyleSnapshot)[] = [\n \"fontFamily\", \"fontSize\", \"fontWeight\", \"lineHeight\", \"letterSpacing\",\n \"color\", \"textAlign\", \"width\", \"height\", \"padding\", \"margin\",\n \"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\",\n \"marginTop\", \"marginRight\", \"marginBottom\", \"marginLeft\",\n \"position\", \"top\", \"right\", \"bottom\", \"left\", \"alignSelf\", \"justifySelf\",\n \"overflow\", \"display\", \"flexDirection\", \"justifyContent\", \"alignItems\",\n \"gap\", \"rowGap\", \"columnGap\", \"gridTemplateColumns\", \"gridTemplateRows\",\n \"backgroundColor\",\n \"backgroundImage\",\n \"borderTopWidth\", \"borderRightWidth\", \"borderBottomWidth\", \"borderLeftWidth\",\n \"borderTopLeftRadius\", \"borderTopRightRadius\", \"borderBottomRightRadius\", \"borderBottomLeftRadius\",\n \"borderTopColor\", \"borderRightColor\", \"borderBottomColor\", \"borderLeftColor\",\n \"borderTopStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderLeftStyle\",\n \"borderColor\", \"borderRadius\", \"borderStyle\",\n \"boxShadow\", \"opacity\",\n];\n\nconst CSS_PROP_MAP: Record<keyof StyleSnapshot, string> = {\n fontFamily: \"font-family\", fontSize: \"font-size\", fontWeight: \"font-weight\",\n lineHeight: \"line-height\", letterSpacing: \"letter-spacing\", color: \"color\",\n textAlign: \"text-align\", width: \"width\", height: \"height\",\n padding: \"padding\", margin: \"margin\",\n paddingTop: \"padding-top\", paddingRight: \"padding-right\",\n paddingBottom: \"padding-bottom\", paddingLeft: \"padding-left\",\n marginTop: \"margin-top\", marginRight: \"margin-right\",\n marginBottom: \"margin-bottom\", marginLeft: \"margin-left\",\n position: \"position\",\n top: \"top\",\n right: \"right\",\n bottom: \"bottom\",\n left: \"left\",\n alignSelf: \"align-self\",\n justifySelf: \"justify-self\",\n overflow: \"overflow\", display: \"display\", flexDirection: \"flex-direction\",\n justifyContent: \"justify-content\", alignItems: \"align-items\",\n gap: \"gap\", rowGap: \"row-gap\", columnGap: \"column-gap\",\n gridTemplateColumns: \"grid-template-columns\", gridTemplateRows: \"grid-template-rows\",\n backgroundColor: \"background-color\",\n backgroundImage: \"background-image\",\n borderTopWidth: \"border-top-width\", borderRightWidth: \"border-right-width\",\n borderBottomWidth: \"border-bottom-width\", borderLeftWidth: \"border-left-width\",\n borderTopLeftRadius: \"border-top-left-radius\", borderTopRightRadius: \"border-top-right-radius\",\n borderBottomRightRadius: \"border-bottom-right-radius\", borderBottomLeftRadius: \"border-bottom-left-radius\",\n borderTopColor: \"border-top-color\", borderRightColor: \"border-right-color\",\n borderBottomColor: \"border-bottom-color\", borderLeftColor: \"border-left-color\",\n borderTopStyle: \"border-top-style\", borderRightStyle: \"border-right-style\",\n borderBottomStyle: \"border-bottom-style\", borderLeftStyle: \"border-left-style\",\n borderColor: \"border-color\", borderRadius: \"border-radius\", borderStyle: \"border-style\",\n boxShadow: \"box-shadow\", opacity: \"opacity\",\n};\n\nconst MAX_HISTORY = 100;\n\nexport type DesignEditorElement = Element & { style: CSSStyleDeclaration };\n\nfunction hasCssStyleDeclaration(el: Element): el is DesignEditorElement {\n if (!(\"style\" in el) || el.style == null) return false;\n const st = el.style as unknown;\n return typeof st === \"object\" && \"setProperty\" in (st as object) && typeof (st as CSSStyleDeclaration).setProperty === \"function\";\n}\n\nexport function isStyleableElement(target: EventTarget | null): target is DesignEditorElement {\n return target instanceof Element && hasCssStyleDeclaration(target);\n}\n\nexport function resolveEventTargetToStyleableElement(target: EventTarget | null): DesignEditorElement | null {\n let n: Node | null = target instanceof Node ? target : null;\n while (n) {\n if (n.nodeType === Node.ELEMENT_NODE && isStyleableElement(n)) return n;\n n = n.parentNode;\n }\n return null;\n}\n\n/**\n * Walk into open shadow roots so the hit target matches the visually topmost node\n * (same idea as walking shadow roots for `elementFromPoint`).\n */\nexport function deepElementFromPoint(clientX: number, clientY: number): Element | null {\n let el = document.elementFromPoint(clientX, clientY);\n if (!el) return null;\n while (el.shadowRoot) {\n const inner = el.shadowRoot.elementFromPoint(clientX, clientY);\n if (!inner || inner === el) break;\n el = inner;\n }\n return el;\n}\n\n/** Deepest element under the point, then first styleable ancestor (for inspect hover / click). */\nexport function resolveDeepPointToStyleableElement(clientX: number, clientY: number): DesignEditorElement | null {\n const hit = deepElementFromPoint(clientX, clientY);\n return hit ? resolveEventTargetToStyleableElement(hit) : null;\n}\n\nexport function getClassNameString(el: Element): string {\n if (typeof el.className === \"string\") return el.className;\n return el.getAttribute(\"class\") ?? \"\";\n}\n\nexport function getComputedSnapshot(el: Element): StyleSnapshot {\n const s = window.getComputedStyle(el);\n return {\n fontFamily: s.fontFamily, fontSize: s.fontSize, fontWeight: s.fontWeight,\n lineHeight: s.lineHeight, letterSpacing: s.letterSpacing, color: s.color,\n textAlign: s.textAlign, width: s.width, height: s.height,\n padding: s.padding, margin: s.margin,\n paddingTop: s.paddingTop, paddingRight: s.paddingRight,\n paddingBottom: s.paddingBottom, paddingLeft: s.paddingLeft,\n marginTop: s.marginTop, marginRight: s.marginRight,\n marginBottom: s.marginBottom, marginLeft: s.marginLeft,\n position: s.position,\n top: s.top,\n right: s.right,\n bottom: s.bottom,\n left: s.left,\n alignSelf: s.alignSelf,\n justifySelf: s.justifySelf,\n overflow: s.overflow, display: s.display, flexDirection: s.flexDirection,\n justifyContent: s.justifyContent, alignItems: s.alignItems,\n gap: s.gap, rowGap: s.rowGap, columnGap: s.columnGap,\n gridTemplateColumns: s.gridTemplateColumns, gridTemplateRows: s.gridTemplateRows,\n backgroundColor: s.backgroundColor,\n backgroundImage: s.backgroundImage,\n borderTopWidth: s.borderTopWidth, borderRightWidth: s.borderRightWidth,\n borderBottomWidth: s.borderBottomWidth, borderLeftWidth: s.borderLeftWidth,\n borderTopLeftRadius: s.borderTopLeftRadius, borderTopRightRadius: s.borderTopRightRadius,\n borderBottomRightRadius: s.borderBottomRightRadius, borderBottomLeftRadius: s.borderBottomLeftRadius,\n borderTopColor: s.borderTopColor, borderRightColor: s.borderRightColor,\n borderBottomColor: s.borderBottomColor, borderLeftColor: s.borderLeftColor,\n borderTopStyle: s.borderTopStyle, borderRightStyle: s.borderRightStyle,\n borderBottomStyle: s.borderBottomStyle, borderLeftStyle: s.borderLeftStyle,\n borderColor: s.borderColor, borderRadius: s.borderRadius, borderStyle: s.borderStyle,\n boxShadow: s.boxShadow, opacity: s.opacity,\n };\n}\n\nexport function getElementPath(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n while (current && current !== document.body) {\n let part = current.tagName.toLowerCase();\n if (current.id) part += `#${current.id}`;\n const classStr = getClassNameString(current).trim();\n if (classStr) {\n const classes = classStr.split(/\\s+/).filter(Boolean);\n if (classes.length) part += `.${classes.join(\".\")}`;\n }\n parts.unshift(part);\n current = current.parentElement;\n }\n return parts.join(\" > \");\n}\n\nexport function getElementSelector(el: Element): string {\n if (el.id) return `#${el.id}`;\n const tag = el.tagName.toLowerCase();\n const classes = getClassNameString(el).trim().split(/\\s+/).filter(Boolean).slice(0, 3);\n return classes.length ? `${tag}.${classes.join(\".\")}` : tag;\n}\n\nexport function normalizeLetterSpacingForCss(raw: string): string {\n const t = raw.trim().toLowerCase();\n if (t === \"\" || t === \"normal\" || t === \"initial\") return \"normal\";\n if (t === \"0%\" || t === \"0\" || t === \"0px\") return \"normal\";\n const bare = raw.trim();\n if (bare.endsWith(\".\")) return bare;\n if (/^-?(\\d+\\.?\\d*|\\.\\d+)$/.test(bare) && Number.isFinite(Number(bare))) return `${bare}px`;\n return bare;\n}\n\nexport function normalizeLineHeightForCss(raw: string): string {\n const s = raw.trim();\n if (s === \"\") return \"normal\";\n if (s.toLowerCase() === \"normal\") return \"normal\";\n if (/px|em|rem|%|vh|vw|ex|ch\\b/i.test(s)) return s;\n if (/^-?\\d+\\.\\d+$/.test(s)) return s;\n if (/^-?\\d+$/.test(s)) {\n const n = Number.parseInt(s, 10);\n if (Number.isNaN(n)) return s;\n if (n >= 0 && n <= 3) return s;\n return `${n}px`;\n }\n return s;\n}\n\n/** Normalize values so computed vs snapshot diffs don’t false-positive (e.g. `backgroundImage` missing → \"\"). */\nfunction snapshotValueForDiff(key: keyof StyleSnapshot, s: StyleSnapshot): string {\n const raw = (s[key] as string | undefined) ?? \"\";\n if (key === \"backgroundImage\") {\n const t = raw.trim();\n return t === \"\" ? \"none\" : t;\n }\n if (key === \"backgroundColor\") {\n return canonicalBackgroundColorForDiff(raw);\n }\n return raw;\n}\n\n/** Diff computed style vs the original snapshot. */\nexport function buildChangesMap(el: DesignEditorElement, original: StyleSnapshot): Map<keyof StyleSnapshot, { before: string; after: string }> {\n const snapshot = getComputedSnapshot(el);\n const next = new Map<keyof StyleSnapshot, { before: string; after: string }>();\n for (const key of STYLE_KEYS) {\n const before = snapshotValueForDiff(key, original);\n const after = snapshotValueForDiff(key, snapshot);\n if (before !== after) next.set(key, { before, after });\n }\n return next;\n}\n\n/** Reverse `CSS_PROP_MAP` for preview rule property names. */\nexport function kebabCssPropToSnapshotKey(cssProp: string): keyof StyleSnapshot | null {\n for (const [key, kebab] of Object.entries(CSS_PROP_MAP) as [keyof StyleSnapshot, string][]) {\n if (kebab === cssProp) return key;\n }\n return null;\n}\n\n/**\n * Merge computed diffs with **preview sheet** rules for the selected selector.\n * Fixes missing copy rows when `getComputedStyle` matches the old snapshot (e.g. `width: 100%`\n * still resolves to the same pixel width as before) but the authored preview value changed.\n */\nexport function buildMergedChangesForCopy(\n el: DesignEditorElement,\n original: StyleSnapshot,\n engine: PreviewEngine,\n selector: string,\n): Map<keyof StyleSnapshot, { before: string; after: string }> {\n const merged = new Map(buildChangesMap(el, original));\n for (const r of engine.getChanges()) {\n if (r.selector !== selector) continue;\n const key = kebabCssPropToSnapshotKey(r.property);\n if (!key) continue;\n const origVal = snapshotValueForDiff(key, original);\n const ruleVal =\n key === \"backgroundImage\"\n ? (r.value.trim() === \"\" ? \"none\" : r.value.trim())\n : key === \"backgroundColor\"\n ? canonicalBackgroundColorForDiff(r.value)\n : r.value;\n if (ruleVal === origVal) continue;\n merged.set(key, { before: origVal, after: ruleVal });\n }\n for (const [k, v] of merged) {\n if (v.before === v.after) merged.delete(k);\n }\n return merged;\n}\n\n/** Map of camelCase style key to kebab-case CSS property name. */\nexport { CSS_PROP_MAP };\n\ninterface HistoryEntry {\n selector: string;\n changes: { property: string; value: string }[];\n}\n\n/** Detached variables row for copy (user unlinked `var(--token)`). */\nexport type DetachedVariableEntry = { key: keyof StyleSnapshot; value: string };\n\n/** One element in a batched copy (`---` between nodes). */\nexport type CopyBatchItem = {\n el: DesignEditorElement;\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>;\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string>;\n detachedVariables: readonly DetachedVariableEntry[];\n};\n\nexport function collectCopyBatchItems(\n engine: PreviewEngine,\n originals: ReadonlyMap<string, StyleSnapshot>,\n variableLinksBySelector: ReadonlyMap<string, ReadonlyMap<keyof StyleSnapshot, string>>,\n detachedBySelector: ReadonlyMap<string, readonly DetachedVariableEntry[]>,\n): CopyBatchItem[] {\n const orderedSelectors: string[] = [];\n const seen = new Set<string>();\n for (const r of engine.getChanges()) {\n if (!seen.has(r.selector)) {\n seen.add(r.selector);\n orderedSelectors.push(r.selector);\n }\n }\n const items: CopyBatchItem[] = [];\n for (const sel of orderedSelectors) {\n let el: Element | null = null;\n try {\n el = document.querySelector(sel);\n } catch {\n continue;\n }\n if (!el || !isStyleableElement(el)) continue;\n const orig = originals.get(sel);\n if (!orig) continue;\n const changes = buildMergedChangesForCopy(el, orig, engine, sel);\n if (changes.size === 0) continue;\n const links = variableLinksBySelector.get(sel) ?? new Map<keyof StyleSnapshot, string>();\n const detached = detachedBySelector.get(sel) ?? [];\n items.push({ el, changes, variableLinks: links, detachedVariables: detached });\n }\n return items;\n}\n\nexport interface UseSelectionReturn {\n selectedElement: DesignEditorElement | null;\n hoveredElement: DesignEditorElement | null;\n originalSnapshot: StyleSnapshot | null;\n currentSnapshot: StyleSnapshot | null;\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>;\n /** Design-token link: property → `--name` (applied as `var(--name)` in preview). */\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string>;\n /** Raw `width` / `height` from preview rules when set (e.g. `100%` for Fill). */\n previewSizeHints: Readonly<{ width?: string; height?: string }>;\n /** Rules in the preview engine (any selector); Copy, global Reset, badge. */\n previewRuleCount: number;\n /** Rules whose selector matches the current selection (diagnostics / future UI). */\n previewRulesForSelectionCount: number;\n /** All elements with pending preview edits (batched copy). */\n getCopyBatchItems: () => CopyBatchItem[];\n /** DOM reorder events recorded for copy (flex/grid siblings). */\n structuralReorders: readonly FluxStructuralReorder[];\n structuralReorderCount: number;\n recordStructuralReorder: (change: FluxStructuralReorder) => void;\n /** After `insertBefore`, refresh computed snapshot / inspector without clearing undo. */\n syncSelectionAfterStructuralChange: () => void;\n selectElement: (el: DesignEditorElement | null) => void;\n updateStyle: (key: keyof StyleSnapshot, value: string) => void;\n linkVariable: (key: keyof StyleSnapshot, cssCustomPropertyName: string) => void;\n unlinkVariable: (key: keyof StyleSnapshot) => void;\n resetStyle: (key: keyof StyleSnapshot) => void;\n resetAll: () => void;\n beginStyleScrub: () => void;\n endStyleScrub: () => void;\n undo: () => void;\n redo: () => void;\n setHoveredElement: (el: DesignEditorElement | null) => void;\n /** When the selected element is a flex container, set `justify-content: space-between` (Layout alignment grid double-click). */\n justifyFlexMainAxisSpaceBetween: () => void;\n /** Commit inline text edit (DOM + session persistence). */\n applyTextContentOverride: (text: string) => void;\n}\n\nfunction normalizeVarName(name: string): string {\n const t = name.trim();\n if (t.startsWith(\"--\")) return t;\n return `--${t}`;\n}\n\nexport function useSelection(): UseSelectionReturn {\n const [selectedElement, setSelectedElement] = useState<DesignEditorElement | null>(null);\n const [hoveredElement, setHoveredElement] = useState<DesignEditorElement | null>(null);\n const [originalSnapshot, setOriginalSnapshot] = useState<StyleSnapshot | null>(null);\n const [currentSnapshot, setCurrentSnapshot] = useState<StyleSnapshot | null>(null);\n const [changes, setChanges] = useState<Map<keyof StyleSnapshot, { before: string; after: string }>>(new Map());\n const [variableLinks, setVariableLinks] = useState<Map<keyof StyleSnapshot, string>>(() => new Map());\n /** Width/height as authored in the preview sheet (`100%`, `max-content`, …) — inline style is often empty. */\n const [previewSizeHints, setPreviewSizeHints] = useState<{ width?: string; height?: string }>({});\n const [previewRuleCount, setPreviewRuleCount] = useState(0);\n const [previewRulesForSelectionCount, setPreviewRulesForSelectionCount] = useState(0);\n const [structuralReorders, setStructuralReorders] = useState<FluxStructuralReorder[]>([]);\n\n const engineRef = useRef<PreviewEngine | null>(null);\n const selectorRef = useRef<string>(\"\");\n /** Element that received `data-flux-preview-target` when no CSS selector matched uniquely; cleared on deselect. */\n const previewTargetAttrElRef = useRef<Element | null>(null);\n /** First-seen original snapshot per selector (for batch copy / diff). */\n const originalSnapshotFirstEditRef = useRef<Map<string, StyleSnapshot>>(new Map());\n const variableLinksBySelectorRef = useRef<Map<string, Map<keyof StyleSnapshot, string>>>(new Map());\n const detachedBySelectorRef = useRef<Map<string, DetachedVariableEntry[]>>(new Map());\n const textOverridesBySelectorRef = useRef<Map<string, string>>(new Map());\n const textOriginalsBySelectorRef = useRef<Map<string, string>>(new Map());\n const undoStackRef = useRef<HistoryEntry[]>([]);\n const redoStackRef = useRef<HistoryEntry[]>([]);\n const styleScrubDepthRef = useRef(0);\n const scrubUndoPushedRef = useRef(false);\n\n const flushPersist = useCallback(() => {\n const eng = engineRef.current;\n if (!eng) return;\n persistFluxPreviewState(\n eng,\n originalSnapshotFirstEditRef.current,\n variableLinksBySelectorRef.current,\n detachedBySelectorRef.current,\n textOverridesBySelectorRef.current,\n textOriginalsBySelectorRef.current,\n );\n }, []);\n\n useEffect(() => {\n const engine = new PreviewEngine();\n engine.attach();\n engineRef.current = engine;\n restoreFluxPreviewInto(engine, {\n originals: originalSnapshotFirstEditRef,\n varLinks: variableLinksBySelectorRef,\n detached: detachedBySelectorRef,\n textOverrides: textOverridesBySelectorRef,\n textOriginals: textOriginalsBySelectorRef,\n });\n setPreviewRuleCount(engine.getChanges().length);\n return () => engine.destroy();\n }, []);\n\n useEffect(() => {\n const sel = selectorRef.current;\n if (!sel || !selectedElement) return;\n variableLinksBySelectorRef.current.set(sel, new Map(variableLinks));\n }, [variableLinks, selectedElement]);\n\n const getCopyBatchItems = useCallback((): CopyBatchItem[] => {\n const engine = engineRef.current;\n if (!engine) return [];\n return collectCopyBatchItems(\n engine,\n originalSnapshotFirstEditRef.current,\n variableLinksBySelectorRef.current,\n detachedBySelectorRef.current,\n );\n }, []);\n\n const recordStructuralReorder = useCallback((change: FluxStructuralReorder) => {\n setStructuralReorders((prev) => [...prev, change]);\n }, []);\n\n const computeLiveChanges = useCallback((el: DesignEditorElement, orig: StyleSnapshot) => {\n const engine = engineRef.current;\n const sel = selectorRef.current;\n if (!engine || !sel) return buildChangesMap(el, orig);\n return buildMergedChangesForCopy(el, orig, engine, sel);\n }, []);\n\n const syncFromDom = useCallback(\n (el: DesignEditorElement, orig: StyleSnapshot | null) => {\n setCurrentSnapshot(getComputedSnapshot(el));\n if (orig) setChanges(computeLiveChanges(el, orig));\n else setChanges(new Map());\n const eng = engineRef.current;\n const sel = selectorRef.current;\n if (eng && sel) {\n setPreviewSizeHints({\n width: eng.getPreviewValue(sel, \"width\"),\n height: eng.getPreviewValue(sel, \"height\"),\n });\n } else {\n setPreviewSizeHints({});\n }\n const allRules = eng?.getChanges() ?? [];\n setPreviewRuleCount(allRules.length);\n setPreviewRulesForSelectionCount(sel ? allRules.filter((r) => r.selector === sel).length : 0);\n },\n [computeLiveChanges],\n );\n\n const syncSelectionAfterStructuralChange = useCallback(() => {\n const el = selectedElement;\n const orig = originalSnapshot;\n if (!el || !orig) return;\n syncFromDom(el, orig);\n }, [selectedElement, originalSnapshot, syncFromDom]);\n\n const selectElement = useCallback(\n (el: DesignEditorElement | null) => {\n undoStackRef.current = [];\n redoStackRef.current = [];\n setVariableLinks(new Map());\n if (!el) {\n removePreviewTargetAttribute(previewTargetAttrElRef.current);\n previewTargetAttrElRef.current = null;\n selectorRef.current = \"\";\n /* Keep originals / variable maps / detached across deselect so preview + localStorage stay consistent. */\n setSelectedElement(null);\n setOriginalSnapshot(null);\n setCurrentSnapshot(null);\n setChanges(new Map());\n setPreviewSizeHints({});\n setPreviewRuleCount(engineRef.current?.getChanges().length ?? 0);\n setPreviewRulesForSelectionCount(0);\n return;\n }\n removePreviewTargetAttribute(previewTargetAttrElRef.current);\n previewTargetAttrElRef.current = null;\n const { selector: previewSel, usedAttrFallback } = getReliableSelectorForPreview(el);\n selectorRef.current = previewSel;\n if (usedAttrFallback) previewTargetAttrElRef.current = el;\n const sel = selectorRef.current;\n const eng = engineRef.current;\n const snapshotLive = getComputedSnapshot(el);\n const hasPreviewForSel = Boolean(eng?.getChanges().some((r) => r.selector === sel));\n const storedOrig = originalSnapshotFirstEditRef.current.get(sel);\n /** Re-selecting while preview rules apply: computed style is already edited — keep the true pre-edit baseline. */\n const baseline =\n hasPreviewForSel && storedOrig != null ? { ...storedOrig } : snapshotLive;\n\n setSelectedElement(el);\n setOriginalSnapshot(baseline);\n const restoredLinks = variableLinksBySelectorRef.current.get(sel);\n if (restoredLinks && restoredLinks.size > 0) {\n setVariableLinks(new Map(restoredLinks));\n }\n syncFromDom(el, baseline);\n },\n [syncFromDom],\n );\n\n const pushUndo = useCallback((overrideSelector?: string) => {\n const engine = engineRef.current;\n if (!engine) return;\n const selector = overrideSelector ?? selectorRef.current;\n const current = engine.getChanges().filter((r) => r.selector === selector);\n undoStackRef.current.push({\n selector,\n changes: current.map((r) => ({ property: r.property, value: r.value })),\n });\n if (undoStackRef.current.length > MAX_HISTORY) undoStackRef.current.shift();\n redoStackRef.current = [];\n }, []);\n\n const beginStyleScrub = useCallback(() => {\n styleScrubDepthRef.current += 1;\n if (styleScrubDepthRef.current === 1 && !scrubUndoPushedRef.current) {\n pushUndo();\n scrubUndoPushedRef.current = true;\n }\n }, [pushUndo]);\n\n const endStyleScrub = useCallback(() => {\n styleScrubDepthRef.current = Math.max(0, styleScrubDepthRef.current - 1);\n if (styleScrubDepthRef.current === 0) {\n scrubUndoPushedRef.current = false;\n flushPersist();\n }\n }, [flushPersist]);\n\n const updateStyle = useCallback(\n (key: keyof StyleSnapshot, value: string) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n const selector = selectorRef.current;\n if (!originalSnapshotFirstEditRef.current.has(selector)) {\n originalSnapshotFirstEditRef.current.set(selector, { ...orig });\n }\n if (styleScrubDepthRef.current === 0) pushUndo();\n setVariableLinks((prev) => {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n const cssProp = CSS_PROP_MAP[key];\n\n /* Shorthand vs longhand: only one wins in CSS; clear conflicting preview rules. */\n if (key === \"margin\") {\n engine.removeChange(selector, \"margin-top\");\n engine.removeChange(selector, \"margin-right\");\n engine.removeChange(selector, \"margin-bottom\");\n engine.removeChange(selector, \"margin-left\");\n } else if (key === \"marginTop\" || key === \"marginRight\" || key === \"marginBottom\" || key === \"marginLeft\") {\n engine.removeChange(selector, \"margin\");\n }\n if (key === \"padding\") {\n engine.removeChange(selector, \"padding-top\");\n engine.removeChange(selector, \"padding-right\");\n engine.removeChange(selector, \"padding-bottom\");\n engine.removeChange(selector, \"padding-left\");\n } else if (key === \"paddingTop\" || key === \"paddingRight\" || key === \"paddingBottom\" || key === \"paddingLeft\") {\n engine.removeChange(selector, \"padding\");\n }\n if (key === \"borderColor\") {\n engine.removeChange(selector, \"border-top-color\");\n engine.removeChange(selector, \"border-right-color\");\n engine.removeChange(selector, \"border-bottom-color\");\n engine.removeChange(selector, \"border-left-color\");\n } else if (\n key === \"borderTopColor\" ||\n key === \"borderRightColor\" ||\n key === \"borderBottomColor\" ||\n key === \"borderLeftColor\"\n ) {\n engine.removeChange(selector, \"border-color\");\n }\n if (key === \"borderRadius\") {\n engine.removeChange(selector, \"border-top-left-radius\");\n engine.removeChange(selector, \"border-top-right-radius\");\n engine.removeChange(selector, \"border-bottom-right-radius\");\n engine.removeChange(selector, \"border-bottom-left-radius\");\n } else if (\n key === \"borderTopLeftRadius\" ||\n key === \"borderTopRightRadius\" ||\n key === \"borderBottomRightRadius\" ||\n key === \"borderBottomLeftRadius\"\n ) {\n engine.removeChange(selector, \"border-radius\");\n }\n if (key === \"borderStyle\") {\n engine.removeChange(selector, \"border-top-style\");\n engine.removeChange(selector, \"border-right-style\");\n engine.removeChange(selector, \"border-bottom-style\");\n engine.removeChange(selector, \"border-left-style\");\n } else if (\n key === \"borderTopStyle\" ||\n key === \"borderRightStyle\" ||\n key === \"borderBottomStyle\" ||\n key === \"borderLeftStyle\"\n ) {\n engine.removeChange(selector, \"border-style\");\n }\n if (key === \"top\") {\n engine.removeChange(selector, \"bottom\");\n } else if (key === \"bottom\") {\n engine.removeChange(selector, \"top\");\n }\n if (key === \"left\") {\n engine.removeChange(selector, \"right\");\n } else if (key === \"right\") {\n engine.removeChange(selector, \"left\");\n }\n\n /* Solid fill must win over gradients/images (same idea as a typical property panel). */\n if (key === \"backgroundColor\") {\n engine.applyChange(selector, \"background-image\", \"none\");\n }\n\n if (key === \"letterSpacing\") {\n engine.applyChange(selector, cssProp, normalizeLetterSpacingForCss(value));\n } else if (key === \"lineHeight\") {\n engine.applyChange(selector, cssProp, normalizeLineHeightForCss(value));\n } else {\n engine.applyChange(selector, cssProp, value);\n }\n\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, pushUndo, syncFromDom, flushPersist],\n );\n\n const justifyFlexMainAxisSpaceBetween = useCallback(() => {\n const el = selectedElement;\n const orig = originalSnapshot;\n if (!el || !orig) return;\n const d = window.getComputedStyle(el).display;\n if (d !== \"flex\" && d !== \"inline-flex\") return;\n updateStyle(\"justifyContent\", \"space-between\");\n }, [selectedElement, originalSnapshot, updateStyle]);\n\n const applyTextContentOverride = useCallback(\n (text: string) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n const sel = selectorRef.current;\n if (!sel) return;\n if (!textOriginalsBySelectorRef.current.has(sel)) {\n textOriginalsBySelectorRef.current.set(sel, getElementEditableText(el));\n }\n setElementEditableText(el, text);\n textOverridesBySelectorRef.current.set(sel, text);\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, syncFromDom, flushPersist],\n );\n\n const linkVariable = useCallback(\n (key: keyof StyleSnapshot, cssCustomPropertyName: string) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n const selector = selectorRef.current;\n if (!originalSnapshotFirstEditRef.current.has(selector)) {\n originalSnapshotFirstEditRef.current.set(selector, { ...orig });\n }\n pushUndo();\n const name = normalizeVarName(cssCustomPropertyName);\n const cssProp = CSS_PROP_MAP[key];\n if (key === \"backgroundColor\") {\n engine.applyChange(selector, \"background-image\", \"none\");\n }\n engine.applyChange(selector, cssProp, `var(${name})`);\n setVariableLinks((prev) => new Map(prev).set(key, name));\n const prevDetached = detachedBySelectorRef.current.get(selector) ?? [];\n detachedBySelectorRef.current.set(\n selector,\n prevDetached.filter((p) => p.key !== key),\n );\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, pushUndo, syncFromDom, flushPersist],\n );\n\n const unlinkVariable = useCallback(\n (key: keyof StyleSnapshot) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n const selector = selectorRef.current;\n if (!originalSnapshotFirstEditRef.current.has(selector)) {\n originalSnapshotFirstEditRef.current.set(selector, { ...orig });\n }\n pushUndo();\n const cssProp = CSS_PROP_MAP[key];\n engine.removeChange(selector, cssProp);\n if (key === \"backgroundColor\") {\n engine.removeChange(selector, \"background-image\");\n }\n setVariableLinks((prev) => {\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n const snap = getComputedSnapshot(el);\n const raw = snap[key];\n if (key === \"letterSpacing\") {\n engine.applyChange(selector, cssProp, normalizeLetterSpacingForCss(raw));\n } else if (key === \"lineHeight\") {\n engine.applyChange(selector, cssProp, normalizeLineHeightForCss(raw));\n } else {\n engine.applyChange(selector, cssProp, raw);\n }\n const prevD = detachedBySelectorRef.current.get(selector) ?? [];\n detachedBySelectorRef.current.set(selector, [...prevD.filter((p) => p.key !== key), { key, value: raw }]);\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, pushUndo, syncFromDom, flushPersist],\n );\n\n const resetStyle = useCallback(\n (key: keyof StyleSnapshot) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n pushUndo();\n const selector = selectorRef.current;\n /* Mirror `updateStyle` shorthand / longhand so reset clears every preview rule that wins in CSS. */\n if (key === \"margin\") {\n engine.removeChange(selector, \"margin-top\");\n engine.removeChange(selector, \"margin-right\");\n engine.removeChange(selector, \"margin-bottom\");\n engine.removeChange(selector, \"margin-left\");\n engine.removeChange(selector, \"margin\");\n } else if (key === \"marginTop\" || key === \"marginRight\" || key === \"marginBottom\" || key === \"marginLeft\") {\n engine.removeChange(selector, \"margin\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"padding\") {\n engine.removeChange(selector, \"padding-top\");\n engine.removeChange(selector, \"padding-right\");\n engine.removeChange(selector, \"padding-bottom\");\n engine.removeChange(selector, \"padding-left\");\n engine.removeChange(selector, \"padding\");\n } else if (key === \"paddingTop\" || key === \"paddingRight\" || key === \"paddingBottom\" || key === \"paddingLeft\") {\n engine.removeChange(selector, \"padding\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"borderColor\") {\n engine.removeChange(selector, \"border-top-color\");\n engine.removeChange(selector, \"border-right-color\");\n engine.removeChange(selector, \"border-bottom-color\");\n engine.removeChange(selector, \"border-left-color\");\n engine.removeChange(selector, \"border-color\");\n } else if (\n key === \"borderTopColor\" ||\n key === \"borderRightColor\" ||\n key === \"borderBottomColor\" ||\n key === \"borderLeftColor\"\n ) {\n engine.removeChange(selector, \"border-color\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"borderRadius\") {\n engine.removeChange(selector, \"border-top-left-radius\");\n engine.removeChange(selector, \"border-top-right-radius\");\n engine.removeChange(selector, \"border-bottom-right-radius\");\n engine.removeChange(selector, \"border-bottom-left-radius\");\n engine.removeChange(selector, \"border-radius\");\n } else if (\n key === \"borderTopLeftRadius\" ||\n key === \"borderTopRightRadius\" ||\n key === \"borderBottomRightRadius\" ||\n key === \"borderBottomLeftRadius\"\n ) {\n engine.removeChange(selector, \"border-radius\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"borderStyle\") {\n engine.removeChange(selector, \"border-top-style\");\n engine.removeChange(selector, \"border-right-style\");\n engine.removeChange(selector, \"border-bottom-style\");\n engine.removeChange(selector, \"border-left-style\");\n engine.removeChange(selector, \"border-style\");\n } else if (\n key === \"borderTopStyle\" ||\n key === \"borderRightStyle\" ||\n key === \"borderBottomStyle\" ||\n key === \"borderLeftStyle\"\n ) {\n engine.removeChange(selector, \"border-style\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"top\") {\n engine.removeChange(selector, \"bottom\");\n engine.removeChange(selector, \"top\");\n } else if (key === \"bottom\") {\n engine.removeChange(selector, \"top\");\n engine.removeChange(selector, \"bottom\");\n } else if (key === \"left\") {\n engine.removeChange(selector, \"right\");\n engine.removeChange(selector, \"left\");\n } else if (key === \"right\") {\n engine.removeChange(selector, \"left\");\n engine.removeChange(selector, \"right\");\n } else if (key === \"backgroundImage\") {\n engine.removeChange(selector, \"background-image\");\n } else if (key === \"backgroundColor\") {\n engine.removeChange(selector, \"background-color\");\n engine.removeChange(selector, \"background-image\");\n } else {\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n }\n setVariableLinks((prev) => {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n const prevD = detachedBySelectorRef.current.get(selector) ?? [];\n detachedBySelectorRef.current.set(\n selector,\n prevD.filter((p) => p.key !== key),\n );\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, pushUndo, syncFromDom, flushPersist],\n );\n\n /** Clear every preview rule and session maps (global reset, not per-selector). */\n const resetAll = useCallback(() => {\n setStructuralReorders([]);\n const engine = engineRef.current;\n if (!engine) return;\n const hasCss = engine.getChanges().length > 0;\n const hasText = textOverridesBySelectorRef.current.size > 0;\n if (!hasCss && !hasText) return;\n\n undoStackRef.current = [];\n redoStackRef.current = [];\n\n if (hasCss) {\n engine.clearAll();\n }\n originalSnapshotFirstEditRef.current.clear();\n variableLinksBySelectorRef.current.clear();\n detachedBySelectorRef.current.clear();\n setVariableLinks(new Map());\n setPreviewRuleCount(0);\n setPreviewRulesForSelectionCount(0);\n\n for (const [sel, origText] of textOriginalsBySelectorRef.current) {\n try {\n const node = document.querySelector(sel);\n if (node) setElementEditableText(node, origText);\n } catch {\n /* ignore */\n }\n }\n textOverridesBySelectorRef.current.clear();\n textOriginalsBySelectorRef.current.clear();\n\n const el = selectedElement;\n if (el) {\n const live = getComputedSnapshot(el);\n setOriginalSnapshot(live);\n syncFromDom(el, live);\n } else {\n setOriginalSnapshot(null);\n setCurrentSnapshot(null);\n setChanges(new Map());\n setPreviewSizeHints({});\n }\n\n flushPersist();\n }, [selectedElement, syncFromDom, flushPersist]);\n\n const restoreHistoryEntry = useCallback(\n (entry: HistoryEntry) => {\n const engine = engineRef.current;\n const el = selectedElement;\n const orig = originalSnapshot;\n if (!engine || !el || !orig) return;\n engine.removeAllChanges(entry.selector);\n for (const { property, value } of entry.changes) {\n engine.applyChange(entry.selector, property, value);\n }\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, syncFromDom, flushPersist],\n );\n\n const undo = useCallback(() => {\n const engine = engineRef.current;\n if (!engine || !selectedElement || !originalSnapshot) return;\n const stack = undoStackRef.current;\n if (stack.length === 0) return;\n const prev = stack.pop();\n if (!prev) return;\n const current = engine.getChanges().filter((r) => r.selector === prev.selector);\n redoStackRef.current.push({\n selector: prev.selector,\n changes: current.map((r) => ({ property: r.property, value: r.value })),\n });\n if (redoStackRef.current.length > MAX_HISTORY) redoStackRef.current.shift();\n restoreHistoryEntry(prev);\n }, [selectedElement, originalSnapshot, restoreHistoryEntry]);\n\n const redo = useCallback(() => {\n const engine = engineRef.current;\n if (!engine || !selectedElement || !originalSnapshot) return;\n const stack = redoStackRef.current;\n if (stack.length === 0) return;\n const next = stack.pop();\n if (!next) return;\n const current = engine.getChanges().filter((r) => r.selector === next.selector);\n undoStackRef.current.push({\n selector: next.selector,\n changes: current.map((r) => ({ property: r.property, value: r.value })),\n });\n if (undoStackRef.current.length > MAX_HISTORY) undoStackRef.current.shift();\n restoreHistoryEntry(next);\n }, [selectedElement, originalSnapshot, restoreHistoryEntry]);\n\n useEffect(() => {\n if (!selectedElement || !originalSnapshot) {\n setChanges(new Map());\n return;\n }\n setChanges(computeLiveChanges(selectedElement, originalSnapshot));\n }, [selectedElement, originalSnapshot, computeLiveChanges]);\n\n return {\n selectedElement,\n hoveredElement,\n originalSnapshot,\n currentSnapshot,\n changes,\n variableLinks,\n previewSizeHints,\n previewRuleCount,\n previewRulesForSelectionCount,\n getCopyBatchItems,\n structuralReorders,\n structuralReorderCount: structuralReorders.length,\n recordStructuralReorder,\n syncSelectionAfterStructuralChange,\n selectElement,\n updateStyle,\n linkVariable,\n unlinkVariable,\n resetStyle,\n resetAll,\n beginStyleScrub,\n endStyleScrub,\n undo,\n redo,\n setHoveredElement,\n justifyFlexMainAxisSpaceBetween,\n applyTextContentOverride,\n };\n}\n","\"use client\";\n\nimport {\n AlignCenter,\n AlignHorizontalJustifyCenter,\n AlignHorizontalJustifyEnd,\n AlignHorizontalJustifyStart,\n AlignHorizontalSpaceAround,\n AlignLeft,\n AlignRight,\n AlignVerticalJustifyCenter,\n AlignVerticalJustifyEnd,\n AlignVerticalJustifyStart,\n AlignVerticalSpaceAround,\n ArrowDownToLine,\n ArrowLeftRight,\n ArrowUpDown,\n ArrowUpToLine,\n Check,\n Copy,\n CornerUpLeft,\n Eye,\n FoldVertical,\n Ruler,\n Minus,\n Plus,\n Rows3,\n SquareDashed,\n SquareSquare,\n SunDim,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"./cn\";\nimport { buildCssFromHexOpacity, parseCssColorToHexOpacity } from \"./color-alpha\";\nimport { CornerRadiusIcon } from \"./corner-radius-icon\";\nimport { elementSupportsTypography, snapshotHasFill } from \"./element-capabilities\";\nimport { CopyPendingBadge } from \"./copy-pending-badge\";\nimport { fontFamilyApplyCss, matchFontSelectValue, useFontFamilyOptions } from \"./font-options\";\nimport { applyFlowMode, detectFlowMode } from \"./layout-flow\";\nimport {\n type SelfAlignToken,\n getParentLayoutKind,\n inferFlexMainAxisFromHorizontalMargins,\n inferFlexMainAxisFromVerticalMargins,\n normalizeSelfAlign,\n selfTokenToCss,\n} from \"./position-alignment\";\nimport {\n PanelAlignmentGrid,\n PanelFlowRow,\n PanelIconField,\n PanelLabeledMini,\n PanelSectionTitle,\n PanelSelect,\n PanelSizingAxis,\n PanelSubsectionTitle,\n PanelSwatchRow,\n PanelTextInput,\n PanelToggleGroup,\n panelChrome,\n} from \"./panel-chrome\";\nimport { PanelTooltip } from \"./panel-tooltip\";\nimport { PanelVariableAffix } from \"./panel-variable-affix\";\nimport { PropertiesEmptyState } from \"./properties-empty-state\";\nimport { type ShadowParts, composeBoxShadow, normalizeShadowLength, parseBoxShadow } from \"./shadow-parse\";\nimport { SIZING_MODE_OPTIONS, type SizingMode, detectSizingMode, modeToCss, sizingModeTriggerLabel } from \"./sizing\";\nimport {\n type DesignEditorElement,\n type StyleSnapshot,\n getElementPath,\n normalizeLetterSpacingForCss,\n normalizeLineHeightForCss,\n} from \"./use-selection\";\n\ninterface PropertiesPanelProps {\n selectedElement: DesignEditorElement | null;\n originalSnapshot: StyleSnapshot | null;\n snapshot: StyleSnapshot | null;\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>;\n onChange: (key: keyof StyleSnapshot, value: string) => void;\n onReset: (key: keyof StyleSnapshot) => void;\n onResetAll: () => void;\n changedKeys: Map<keyof StyleSnapshot, { before: string; after: string }>;\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string>;\n previewSizeHints: Readonly<{ width?: string; height?: string }>;\n /** Rules applied anywhere in the preview engine (Reset all, Copy batch, badge). */\n previewRuleCount: number;\n /** Recorded flex/grid DOM reorders (copy + Reset all). */\n structuralReorderCount?: number;\n onCopyPrompt: () => Promise<boolean>;\n /** Called after clipboard copy succeeds (e.g. celebration overlay). */\n onCopySuccess?: () => void;\n linkVariable: (key: keyof StyleSnapshot, cssCustomPropertyName: string) => void;\n unlinkVariable: (key: keyof StyleSnapshot) => void;\n /** Layout: double-click on the flex alignment grid sets `justify-content: space-between` on the selected flex container. */\n justifyFlexMainAxisSpaceBetween?: () => void;\n}\n\nconst BORDER_STYLES = [\"none\", \"solid\", \"dashed\", \"dotted\", \"double\", \"groove\", \"ridge\", \"inset\", \"outset\"];\n\nconst WEIGHT_OPTIONS: { value: string; label: string }[] = [\n { value: \"100\", label: \"Thin\" },\n { value: \"200\", label: \"Extra light\" },\n { value: \"300\", label: \"Light\" },\n { value: \"400\", label: \"Regular\" },\n { value: \"500\", label: \"Medium\" },\n { value: \"600\", label: \"Semibold\" },\n { value: \"700\", label: \"Bold\" },\n { value: \"800\", label: \"Extra bold\" },\n { value: \"900\", label: \"Black\" },\n { value: \"normal\", label: \"Normal\" },\n { value: \"bold\", label: \"Bold (keyword)\" },\n { value: \"lighter\", label: \"Lighter\" },\n { value: \"bolder\", label: \"Bolder\" },\n];\n\ntype BorderSide = \"all\" | \"top\" | \"right\" | \"bottom\" | \"left\";\n\nfunction formatPxDisplay(css: string): string {\n const m = css.match(/^([\\d.]+)\\s*(px|rem|em)?$/i);\n if (m) return `${m[1]} px`;\n return css;\n}\n\nfunction parsePxInput(raw: string): string {\n const t = raw\n .trim()\n .replace(/\\s*px\\s*$/i, \"\")\n .trim();\n if (t === \"\") return \"0px\";\n if (/^[\\d.]+$/.test(t)) return `${t}px`;\n return raw.trim();\n}\n\nfunction displayGap(gap: string): string {\n const t = gap.trim().toLowerCase();\n if (t === \"normal\" || t === \"\" || t === \"0\" || t === \"0px\") return \"0\";\n const parts = t.split(/\\s+/);\n return stripPxForNumberField(parts[0]);\n}\n\nfunction cssAlignItemsToVerticalControl(v: string): \"top\" | \"middle\" | \"bottom\" {\n if (v === \"center\") return \"middle\";\n if (v === \"flex-end\" || v === \"end\") return \"bottom\";\n return \"top\";\n}\n\nfunction verticalAlignToCssAlignItems(p: \"top\" | \"middle\" | \"bottom\"): string {\n if (p === \"middle\") return \"center\";\n if (p === \"bottom\") return \"flex-end\";\n return \"flex-start\";\n}\n\nfunction stripPxForNumberField(css: string): string {\n return css.replace(/\\s*px\\s*$/i, \"\").trim();\n}\n\n/** Inset fields: show `auto` verbatim; otherwise strip `px` for editing. */\nfunction displayInset(css: string): string {\n const t = css.trim().toLowerCase();\n if (t === \"\" || t === \"auto\") return \"auto\";\n return stripPxForNumberField(css);\n}\n\nfunction commitInsetInput(raw: string): string {\n const t = raw.trim().toLowerCase();\n if (t === \"auto\") return \"auto\";\n return parsePxInput(raw);\n}\n\nfunction ensurePxSize(raw: string): string {\n const t = raw.trim();\n if (t === \"\") return \"16px\";\n if (/^[\\d.]+$/.test(t)) return `${t}px`;\n return t;\n}\n\nfunction commitFixedDimension(raw: string): string {\n const t = raw.trim().replace(/\\s*px\\s*$/i, \"\");\n if (t === \"\" || t === \".\") return \"0px\";\n const n = Number.parseFloat(t);\n if (!Number.isNaN(n) && Number.isFinite(n)) return `${n}px`;\n return ensurePxSize(raw.trim());\n}\n\nfunction linkedSpacingVH(shorthand: string): { v: string; h: string } {\n const parts = shorthand.trim().split(/\\s+/).filter(Boolean);\n const strip = (x: string) => x.replace(/\\s*px\\s*$/i, \"\").trim();\n if (parts.length === 0) return { v: \"0\", h: \"0\" };\n if (parts.length === 1) return { v: strip(parts[0]), h: strip(parts[0]) };\n if (parts.length === 2) return { v: strip(parts[0]), h: strip(parts[1]) };\n if (parts.length === 3) return { v: strip(parts[0]), h: strip(parts[1]) };\n return { v: strip(parts[0]), h: strip(parts[1]) };\n}\n\nfunction paddingLinkedDisplay(s: StyleSnapshot): { v: string; h: string } {\n if (s.padding.trim()) return linkedSpacingVH(s.padding);\n const t = stripPxForNumberField(s.paddingTop);\n const b = stripPxForNumberField(s.paddingBottom);\n const l = stripPxForNumberField(s.paddingLeft);\n const r = stripPxForNumberField(s.paddingRight);\n if (t === b && l === r) return { v: t, h: l };\n return { v: t, h: l };\n}\n\nfunction marginLinkedDisplay(s: StyleSnapshot): { v: string; h: string } {\n if (s.margin.trim()) return linkedSpacingVH(s.margin);\n const t = stripPxForNumberField(s.marginTop);\n const b = stripPxForNumberField(s.marginBottom);\n const l = stripPxForNumberField(s.marginLeft);\n const r = stripPxForNumberField(s.marginRight);\n if (t === b && l === r) return { v: t, h: l };\n return { v: t, h: l };\n}\n\nconst POSITION_TYPE_OPTIONS: { value: string; label: string }[] = [\n { value: \"static\", label: \"Static\" },\n { value: \"relative\", label: \"Relative\" },\n { value: \"absolute\", label: \"Absolute\" },\n { value: \"fixed\", label: \"Fixed\" },\n { value: \"sticky\", label: \"Sticky\" },\n];\n\nconst POSITION_RESET_KEYS = [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"position\",\n \"alignSelf\",\n \"justifySelf\",\n] as const satisfies readonly (keyof StyleSnapshot)[];\n\nconst LAYOUT_RESET_KEYS = [\n \"width\",\n \"height\",\n \"padding\",\n \"margin\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"overflow\",\n \"display\",\n \"flexDirection\",\n \"justifyContent\",\n \"alignItems\",\n \"gap\",\n \"rowGap\",\n \"columnGap\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n] as const satisfies readonly (keyof StyleSnapshot)[];\n\nconst TEXT_RESET_KEYS = [\n \"fontFamily\",\n \"fontWeight\",\n \"fontSize\",\n \"lineHeight\",\n \"letterSpacing\",\n \"textAlign\",\n \"color\",\n] as const satisfies readonly (keyof StyleSnapshot)[];\n\nfunction OnDemandSectionButton({ label, onClick }: { label: string; onClick: () => void }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex w-full items-center justify-between gap-2 rounded-small px-0 py-1 transition-colors\",\n panelChrome.title,\n panelChrome.muted,\n \"hover:text-[#D9D9D9]\",\n )}\n >\n <span>{label}</span>\n <Plus className=\"size-[14px] shrink-0\" strokeWidth={2} aria-hidden />\n </button>\n );\n}\n\nfunction SectionHeaderWithReset({\n children,\n hasChange,\n onReset,\n /** Extra controls after Reset (e.g. Background +/−) — same row as Border: title | [flex gap-1]. */\n trailing,\n /** Same label tone as `OnDemandSectionButton` (muted + hover) when aligned with those rows. */\n titleTone = \"default\",\n}: {\n children: React.ReactNode;\n hasChange: boolean;\n onReset: () => void;\n trailing?: React.ReactNode;\n titleTone?: \"default\" | \"muted\";\n}) {\n const showRight = hasChange || Boolean(trailing);\n return (\n <div className=\"flex w-full items-center justify-between gap-2 py-1\">\n <PanelSectionTitle tone={titleTone}>{children}</PanelSectionTitle>\n {showRight ? (\n <div className=\"flex items-center gap-1\">\n {hasChange ? (\n <button type=\"button\" className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 hover:text-[#D9D9D9]\")} onClick={onReset}>\n Reset\n </button>\n ) : null}\n {trailing}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function PropertiesPanel({\n selectedElement,\n originalSnapshot,\n snapshot,\n changes,\n onChange,\n onReset,\n onResetAll,\n changedKeys,\n variableLinks,\n previewSizeHints,\n previewRuleCount,\n structuralReorderCount = 0,\n onCopyPrompt,\n onCopySuccess,\n linkVariable,\n unlinkVariable,\n justifyFlexMainAxisSpaceBetween,\n}: PropertiesPanelProps) {\n const [copied, setCopied] = useState(false);\n const [copyFailed, setCopyFailed] = useState(false);\n const [shadowParts, setShadowParts] = useState<ShadowParts>(() => parseBoxShadow(\"\"));\n const [borderSide, setBorderSide] = useState<BorderSide>(\"all\");\n const [paddingExpanded, setPaddingExpanded] = useState(false);\n const [marginExpanded, setMarginExpanded] = useState(false);\n const [showBorderSection, setShowBorderSection] = useState(false);\n const [showShadowSection, setShowShadowSection] = useState(false);\n const lastSelectionPathRef = useRef<string | null>(null);\n\n const hasChange = useCallback((key: keyof StyleSnapshot) => changedKeys.has(key), [changedKeys]);\n\n const handleAddFill = useCallback(() => {\n onChange(\"backgroundColor\", \"#ffffff\");\n }, [onChange]);\n\n const handleRemoveFill = useCallback(() => {\n onChange(\"backgroundColor\", \"transparent\");\n }, [onChange]);\n\n /** Open on-demand sections when the newly selected node already uses them (otherwise easy to miss behind “+”). */\n useEffect(() => {\n if (!selectedElement || !snapshot) {\n if (!selectedElement) lastSelectionPathRef.current = null;\n return;\n }\n const path = getElementPath(selectedElement);\n if (path === lastSelectionPathRef.current) return;\n lastSelectionPathRef.current = path;\n\n setShowBorderSection(false);\n setShowShadowSection(false);\n\n const bs = snapshot.boxShadow.trim().toLowerCase();\n if (bs && bs !== \"none\" && bs !== \"initial\" && bs !== \"inherit\") setShowShadowSection(true);\n\n const bw = Number.parseFloat(snapshot.borderTopWidth.replace(/px/i, \"\").trim()) || 0;\n if (snapshot.borderStyle && snapshot.borderStyle !== \"none\" && bw > 0) setShowBorderSection(true);\n }, [selectedElement, snapshot]);\n\n const boxShadowValue = snapshot?.boxShadow ?? \"\";\n const lastBoxShadowWrittenRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (boxShadowValue === lastBoxShadowWrittenRef.current) return;\n lastBoxShadowWrittenRef.current = boxShadowValue;\n setShadowParts(parseBoxShadow(boxShadowValue));\n }, [boxShadowValue]);\n\n const updateShadow = useCallback(\n (patch: Partial<ShadowParts>) => {\n const prev = shadowParts;\n const next = { ...prev, ...patch };\n const s = composeBoxShadow(next);\n lastBoxShadowWrittenRef.current = s;\n setShadowParts(next);\n onChange(\"boxShadow\", s);\n },\n [onChange, shadowParts],\n );\n\n const handleCopy = useCallback(async () => {\n setCopied(false);\n setCopyFailed(false);\n const ok = await onCopyPrompt();\n if (ok) {\n setCopied(true);\n onCopySuccess?.();\n window.setTimeout(() => setCopied(false), 2000);\n } else {\n setCopyFailed(true);\n window.setTimeout(() => setCopyFailed(false), 2800);\n }\n }, [onCopyPrompt, onCopySuccess]);\n\n const fontOptions = useFontFamilyOptions(snapshot?.fontFamily);\n const fontSelectValue = useMemo(() => (snapshot ? matchFontSelectValue(snapshot.fontFamily, fontOptions) : \"\"), [snapshot, fontOptions]);\n\n const weightOptions = useMemo(() => {\n if (!snapshot) return WEIGHT_OPTIONS;\n const w = snapshot.fontWeight;\n if (WEIGHT_OPTIONS.some((o) => o.value === w)) return WEIGHT_OPTIONS;\n return [{ value: w, label: w }, ...WEIGHT_OPTIONS];\n }, [snapshot]);\n\n const borderWidthKey = (side: BorderSide): keyof StyleSnapshot => {\n switch (side) {\n case \"top\":\n return \"borderTopWidth\";\n case \"right\":\n return \"borderRightWidth\";\n case \"bottom\":\n return \"borderBottomWidth\";\n case \"left\":\n return \"borderLeftWidth\";\n default:\n return \"borderTopWidth\";\n }\n };\n\n const getBorderWidthDisplay = (): string => {\n if (!snapshot) return \"0 px\";\n if (borderSide === \"all\") {\n return formatPxDisplay(snapshot.borderTopWidth);\n }\n return formatPxDisplay(snapshot[borderWidthKey(borderSide)]);\n };\n\n const setBorderWidthFromInput = (raw: string) => {\n if (!snapshot) return;\n const css = parsePxInput(raw);\n if (borderSide === \"all\") {\n onChange(\"borderTopWidth\", css);\n onChange(\"borderRightWidth\", css);\n onChange(\"borderBottomWidth\", css);\n onChange(\"borderLeftWidth\", css);\n } else {\n onChange(borderWidthKey(borderSide), css);\n }\n };\n\n const shadowColorParts = useMemo(() => parseCssColorToHexOpacity(shadowParts.color), [shadowParts.color]);\n\n if (!snapshot) {\n return <PropertiesEmptyState />;\n }\n\n const hasAnyChange = changedKeys.size > 0;\n const canCopy =\n Boolean(selectedElement) &&\n (hasAnyChange || previewRuleCount > 0 || structuralReorderCount > 0);\n /** Prefer global preview rule count so the badge matches “all pending edits”, not only this node’s diff. */\n const changeCountForBadge =\n previewRuleCount > 0\n ? Math.min(previewRuleCount + structuralReorderCount, 99)\n : structuralReorderCount > 0\n ? Math.min(structuralReorderCount, 99)\n : changedKeys.size > 0\n ? changedKeys.size\n : 0;\n const specifiedWidth = selectedElement?.style.getPropertyValue(\"width\").trim() ?? \"\";\n const specifiedHeight = selectedElement?.style.getPropertyValue(\"height\").trim() ?? \"\";\n const effectiveWidthSpecified = specifiedWidth || previewSizeHints.width || undefined;\n const effectiveHeightSpecified = specifiedHeight || previewSizeHints.height || undefined;\n const widthMode = detectSizingMode(snapshot.width, \"width\", effectiveWidthSpecified);\n const heightMode = detectSizingMode(snapshot.height, \"height\", effectiveHeightSpecified);\n\n const fillParts = parseCssColorToHexOpacity(snapshot.backgroundColor);\n const fillHasVariable = Boolean(variableLinks.get(\"backgroundColor\"));\n const hasFill = snapshotHasFill(snapshot, { fillHasVariable });\n const fillHasPendingChange = hasChange(\"backgroundColor\") || hasChange(\"backgroundImage\");\n const borderColorParts = parseCssColorToHexOpacity(snapshot.borderColor);\n const textColorParts = parseCssColorToHexOpacity(snapshot.color);\n const supportsTypography = elementSupportsTypography(selectedElement);\n\n const textToggleValue: \"left\" | \"center\" | \"right\" = snapshot.textAlign === \"right\" ? \"right\" : snapshot.textAlign === \"center\" ? \"center\" : \"left\";\n const vAlign = cssAlignItemsToVerticalControl(snapshot.alignItems);\n\n const opacityNum = Math.min(1, Math.max(0, Number.parseFloat(snapshot.opacity) || 1));\n const opacityDisplay = `${Math.round(opacityNum * 100)} %`;\n\n const letterDisplay = snapshot.letterSpacing === \"normal\" || snapshot.letterSpacing === \"0px\" ? \"0\" : stripPxForNumberField(snapshot.letterSpacing);\n\n const flowMode = detectFlowMode(snapshot);\n const padLinked = paddingLinkedDisplay(snapshot);\n const marginLinked = marginLinkedDisplay(snapshot);\n const positionHasChange = POSITION_RESET_KEYS.some((k) => hasChange(k));\n const layoutHasChange = LAYOUT_RESET_KEYS.some((k) => hasChange(k));\n\n const parentLayoutKind = useMemo(() => getParentLayoutKind(selectedElement), [selectedElement]);\n\n const alignmentHorizontalToggle = useMemo((): SelfAlignToken | \"auto\" | \"stretch\" => {\n if (parentLayoutKind === \"grid\") return normalizeSelfAlign(snapshot.justifySelf);\n if (parentLayoutKind === \"flex-row\") return inferFlexMainAxisFromHorizontalMargins(snapshot.marginLeft, snapshot.marginRight);\n if (parentLayoutKind === \"flex-col\") return normalizeSelfAlign(snapshot.alignSelf);\n return \"auto\";\n }, [snapshot, parentLayoutKind]);\n\n const alignmentVerticalToggle = useMemo((): SelfAlignToken | \"auto\" | \"stretch\" => {\n if (parentLayoutKind === \"grid\") return normalizeSelfAlign(snapshot.alignSelf);\n if (parentLayoutKind === \"flex-row\") return normalizeSelfAlign(snapshot.alignSelf);\n if (parentLayoutKind === \"flex-col\") return inferFlexMainAxisFromVerticalMargins(snapshot.marginTop, snapshot.marginBottom);\n return \"auto\";\n }, [snapshot, parentLayoutKind]);\n\n const showParentAlignment = parentLayoutKind === \"grid\" || parentLayoutKind === \"flex-row\" || parentLayoutKind === \"flex-col\";\n\n const applyHorizontalAlignment = useCallback(\n (v: SelfAlignToken) => {\n if (parentLayoutKind === \"grid\") {\n onChange(\"justifySelf\", selfTokenToCss(v));\n } else if (parentLayoutKind === \"flex-row\") {\n if (v === \"start\") {\n onChange(\"marginLeft\", \"0px\");\n onChange(\"marginRight\", \"auto\");\n } else if (v === \"center\") {\n onChange(\"marginLeft\", \"auto\");\n onChange(\"marginRight\", \"auto\");\n } else {\n onChange(\"marginLeft\", \"auto\");\n onChange(\"marginRight\", \"0px\");\n }\n } else if (parentLayoutKind === \"flex-col\") {\n onChange(\"alignSelf\", selfTokenToCss(v));\n }\n },\n [onChange, parentLayoutKind],\n );\n\n const applyVerticalAlignment = useCallback(\n (v: SelfAlignToken) => {\n if (parentLayoutKind === \"grid\") {\n onChange(\"alignSelf\", selfTokenToCss(v));\n } else if (parentLayoutKind === \"flex-row\") {\n onChange(\"alignSelf\", selfTokenToCss(v));\n } else if (parentLayoutKind === \"flex-col\") {\n if (v === \"start\") {\n onChange(\"marginTop\", \"0px\");\n onChange(\"marginBottom\", \"auto\");\n } else if (v === \"center\") {\n onChange(\"marginTop\", \"auto\");\n onChange(\"marginBottom\", \"auto\");\n } else {\n onChange(\"marginTop\", \"auto\");\n onChange(\"marginBottom\", \"0px\");\n }\n }\n },\n [onChange, parentLayoutKind],\n );\n\n const hToggleValue: \"\" | SelfAlignToken =\n alignmentHorizontalToggle === \"start\" || alignmentHorizontalToggle === \"center\" || alignmentHorizontalToggle === \"end\"\n ? alignmentHorizontalToggle\n : \"\";\n const vToggleValue: \"\" | SelfAlignToken =\n alignmentVerticalToggle === \"start\" || alignmentVerticalToggle === \"center\" || alignmentVerticalToggle === \"end\"\n ? alignmentVerticalToggle\n : \"\";\n\n const positionSelectValue = POSITION_TYPE_OPTIONS.some((o) => o.value === snapshot.position) ? snapshot.position : \"static\";\n\n return (\n <div className=\"flex flex-col gap-4\" data-flux-ui>\n <div className=\"flex gap-3\" data-flux-ui>\n <button\n type=\"button\"\n data-flux-ui\n onClick={onResetAll}\n disabled={previewRuleCount === 0 && structuralReorderCount === 0}\n className={cn(\n \"flex min-w-0 flex-1 items-center justify-center gap-2 rounded-small bg-[#333333] px-2 py-1\",\n previewRuleCount === 0 && structuralReorderCount === 0 && \"cursor-not-allowed opacity-50\",\n )}\n >\n <CornerUpLeft className=\"size-[14px] shrink-0 text-[#D9D9D9]\" strokeWidth={2} aria-hidden />\n <span className={cn(panelChrome.body, \"text-[#D9D9D9]\")}>Reset</span>\n </button>\n {(() => {\n const copyTip = !selectedElement ? \"Select an element on the page first.\" : \"\";\n const copyBtn = (\n <button\n type=\"button\"\n data-flux-ui\n disabled={!canCopy}\n onClick={() => void handleCopy()}\n aria-live=\"polite\"\n aria-label={\n canCopy && changeCountForBadge > 0\n ? `Copy ${changeCountForBadge} pending change${changeCountForBadge === 1 ? \"\" : \"s\"} to clipboard`\n : \"Copy to clipboard\"\n }\n className={cn(\n \"flex min-w-0 flex-1 items-center justify-center gap-2 rounded-small bg-[#F3F3F3] px-2 py-1\",\n !canCopy && \"cursor-not-allowed opacity-50\",\n )}\n >\n {copied ? (\n <Check className=\"size-[14px] shrink-0 text-[#7C7C7C]\" strokeWidth={2} aria-hidden />\n ) : (\n <Copy className=\"size-[14px] shrink-0 text-[#7C7C7C]\" strokeWidth={2} aria-hidden />\n )}\n <span className={cn(panelChrome.body, \"text-[#202020]\")}>{copyFailed ? \"Copy failed\" : copied ? \"Copied\" : \"Copy\"}</span>\n {!copied && canCopy && changeCountForBadge > 0 ? <CopyPendingBadge count={changeCountForBadge} /> : null}\n </button>\n );\n return copyTip ? (\n <PanelTooltip text={copyTip}>\n <span className=\"inline-flex min-w-0 flex-1 max-w-full\">{copyBtn}</span>\n </PanelTooltip>\n ) : (\n copyBtn\n );\n })()}\n </div>\n\n {/* Position — above Layout (placement vs sizing/flow). */}\n <section className=\"flex flex-col gap-3\">\n <SectionHeaderWithReset\n hasChange={positionHasChange}\n onReset={() => {\n for (const k of POSITION_RESET_KEYS) {\n if (hasChange(k)) onReset(k);\n }\n }}\n >\n Position\n </SectionHeaderWithReset>\n {showParentAlignment ? (\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Alignment</PanelSubsectionTitle>\n <div className=\"flex min-w-0 flex-row gap-2\">\n <div className=\"min-w-0 flex-1\">\n <PanelToggleGroup\n value={hToggleValue}\n onChange={(v) => applyHorizontalAlignment(v)}\n options={[\n {\n value: \"start\",\n title: \"Start\",\n icon: <AlignHorizontalJustifyStart className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n {\n value: \"center\",\n title: \"Center\",\n icon: <AlignHorizontalJustifyCenter className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n {\n value: \"end\",\n title: \"End\",\n icon: <AlignHorizontalJustifyEnd className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n ]}\n />\n </div>\n <div className=\"min-w-0 flex-1\">\n <PanelToggleGroup\n value={vToggleValue}\n onChange={(v) => applyVerticalAlignment(v)}\n options={[\n {\n value: \"start\",\n title: \"Start\",\n icon: <AlignVerticalJustifyStart className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n {\n value: \"center\",\n title: \"Center\",\n icon: <AlignVerticalJustifyCenter className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n {\n value: \"end\",\n title: \"End\",\n icon: <AlignVerticalJustifyEnd className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n ]}\n />\n </div>\n </div>\n </div>\n ) : null}\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Type</PanelSubsectionTitle>\n <PanelSelect\n ariaLabel=\"CSS position\"\n value={positionSelectValue}\n onChange={(v) => onChange(\"position\", v)}\n options={POSITION_TYPE_OPTIONS}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"position\"\n linkedVar={variableLinks.get(\"position\") ?? null}\n onLink={(n) => linkVariable(\"position\", n)}\n onUnlink={() => unlinkVariable(\"position\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n {[\"absolute\", \"fixed\", \"sticky\"].includes(snapshot.position) ? (\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Offsets</PanelSubsectionTitle>\n <p className={cn(panelChrome.muted, panelChrome.body, \"leading-snug\")}>\n Drag the selection on the page when <strong className=\"font-medium text-[#D9D9D9]\">absolute</strong> or{\" \"}\n <strong className=\"font-medium text-[#D9D9D9]\">fixed</strong> to move; or edit values here (use{\" \"}\n <code className=\"text-[11px]\">auto</code>).\n </p>\n <div className=\"grid w-full grid-cols-2 gap-2\">\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Top inset\"\n icon={\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n T\n </span>\n }\n value={displayInset(snapshot.top)}\n onChange={(raw) => onChange(\"top\", commitInsetInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"top\"\n linkedVar={variableLinks.get(\"top\") ?? null}\n onLink={(n) => linkVariable(\"top\", n)}\n onUnlink={() => unlinkVariable(\"top\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Right inset\"\n icon={\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n R\n </span>\n }\n value={displayInset(snapshot.right)}\n onChange={(raw) => onChange(\"right\", commitInsetInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"right\"\n linkedVar={variableLinks.get(\"right\") ?? null}\n onLink={(n) => linkVariable(\"right\", n)}\n onUnlink={() => unlinkVariable(\"right\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Bottom inset\"\n icon={\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n B\n </span>\n }\n value={displayInset(snapshot.bottom)}\n onChange={(raw) => onChange(\"bottom\", commitInsetInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"bottom\"\n linkedVar={variableLinks.get(\"bottom\") ?? null}\n onLink={(n) => linkVariable(\"bottom\", n)}\n onUnlink={() => unlinkVariable(\"bottom\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Left inset\"\n icon={\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n L\n </span>\n }\n value={displayInset(snapshot.left)}\n onChange={(raw) => onChange(\"left\", commitInsetInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"left\"\n linkedVar={variableLinks.get(\"left\") ?? null}\n onLink={(n) => linkVariable(\"left\", n)}\n onUnlink={() => unlinkVariable(\"left\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n ) : null}\n </section>\n\n {/* Layout */}\n <section className=\"flex flex-col gap-3\">\n <SectionHeaderWithReset\n hasChange={layoutHasChange}\n onReset={() => {\n for (const k of LAYOUT_RESET_KEYS) {\n if (hasChange(k)) onReset(k);\n }\n }}\n >\n Layout\n </SectionHeaderWithReset>\n\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Flow</PanelSubsectionTitle>\n <PanelFlowRow value={flowMode} onChange={(m) => applyFlowMode(m, onChange)} />\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Dimensions</PanelSubsectionTitle>\n <div className=\"flex w-full gap-2\">\n <PanelSizingAxis\n label=\"W\"\n mode={widthMode}\n modeTriggerLabel={widthMode === \"fixed\" ? \"\" : sizingModeTriggerLabel(widthMode)}\n modeOptions={SIZING_MODE_OPTIONS}\n onModeChange={(m) => {\n const mode = m as SizingMode;\n if (mode === \"fixed\") {\n const cur = detectSizingMode(snapshot.width, \"width\", effectiveWidthSpecified);\n const prev = cur === \"fixed\" ? snapshot.width : `${Math.round(Number.parseFloat(snapshot.width) || 120)}px`;\n onChange(\"width\", modeToCss(\"fixed\", \"width\", prev));\n } else onChange(\"width\", modeToCss(mode, \"width\", \"\"));\n }}\n showFixedInput={widthMode === \"fixed\"}\n fixedDisplayValue={stripPxForNumberField(snapshot.width)}\n onFixedCommit={(v) => onChange(\"width\", v)}\n commitRawToCss={commitFixedDimension}\n fixedAriaLabel=\"Width value\"\n />\n <PanelSizingAxis\n label=\"H\"\n mode={heightMode}\n modeTriggerLabel={heightMode === \"fixed\" ? \"\" : sizingModeTriggerLabel(heightMode)}\n modeOptions={SIZING_MODE_OPTIONS}\n onModeChange={(m) => {\n const mode = m as SizingMode;\n if (mode === \"fixed\") {\n const cur = detectSizingMode(snapshot.height, \"height\", effectiveHeightSpecified);\n const prev = cur === \"fixed\" ? snapshot.height : `${Math.round(Number.parseFloat(snapshot.height) || 48)}px`;\n onChange(\"height\", modeToCss(\"fixed\", \"height\", prev));\n } else onChange(\"height\", modeToCss(mode, \"height\", \"\"));\n }}\n showFixedInput={heightMode === \"fixed\"}\n fixedDisplayValue={stripPxForNumberField(snapshot.height)}\n onFixedCommit={(v) => onChange(\"height\", v)}\n commitRawToCss={commitFixedDimension}\n fixedAriaLabel=\"Height value\"\n />\n </div>\n {(hasChange(\"width\") || hasChange(\"height\")) && (\n <div className=\"flex flex-wrap gap-2\">\n {hasChange(\"width\") && (\n <button type=\"button\" className={cn(panelChrome.muted, panelChrome.body, \"hover:text-[#D9D9D9]\")} onClick={() => onReset(\"width\")}>\n Reset W\n </button>\n )}\n {hasChange(\"height\") && (\n <button type=\"button\" className={cn(panelChrome.muted, panelChrome.body, \"hover:text-[#D9D9D9]\")} onClick={() => onReset(\"height\")}>\n Reset H\n </button>\n )}\n </div>\n )}\n </div>\n\n {(flowMode === \"flex-column\" || flowMode === \"flex-row\") && (\n <div className=\"flex items-start gap-3\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <PanelSubsectionTitle>Align items</PanelSubsectionTitle>\n <PanelAlignmentGrid\n justifyContent={snapshot.justifyContent}\n alignItems={snapshot.alignItems}\n onJustifyChange={(v) => onChange(\"justifyContent\", v)}\n onAlignChange={(v) => onChange(\"alignItems\", v)}\n onCellDoubleClick={justifyFlexMainAxisSpaceBetween}\n />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <PanelSubsectionTitle>Gap</PanelSubsectionTitle>\n <div className=\"flex min-w-0 items-stretch\">\n <PanelIconField\n commitOnBlur\n scrubMode=\"px\"\n icon={<Rows3 className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n ariaLabel=\"Gap\"\n value={displayGap(snapshot.gap)}\n onChange={(v) => {\n const t = v.trim();\n if (t === \"\" || t === \"0\") {\n onChange(\"gap\", \"0px\");\n return;\n }\n onChange(\"gap\", /^[\\d.]+$/.test(t) ? `${t}px` : t);\n }}\n suffix=\"px\"\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"gap\"\n linkedVar={variableLinks.get(\"gap\") ?? null}\n onLink={(n) => linkVariable(\"gap\", n)}\n onUnlink={() => unlinkVariable(\"gap\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n </div>\n )}\n\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <PanelSubsectionTitle>Padding</PanelSubsectionTitle>\n <PanelTooltip text={paddingExpanded ? \"Link vertical & horizontal padding\" : \"Edit padding per side\"}>\n <button\n type=\"button\"\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n aria-label={paddingExpanded ? \"Link padding\" : \"Expand padding sides\"}\n onClick={() => setPaddingExpanded((e) => !e)}\n >\n <SquareSquare className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />\n </button>\n </PanelTooltip>\n </div>\n {paddingExpanded ? (\n <div className=\"grid grid-cols-2 gap-2\">\n <PanelLabeledMini\n label=\"T\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.paddingTop)}\n onChange={(raw) => onChange(\"paddingTop\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding-top\"\n linkedVar={variableLinks.get(\"paddingTop\") ?? null}\n onLink={(n) => linkVariable(\"paddingTop\", n)}\n onUnlink={() => unlinkVariable(\"paddingTop\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"R\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.paddingRight)}\n onChange={(raw) => onChange(\"paddingRight\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding-right\"\n linkedVar={variableLinks.get(\"paddingRight\") ?? null}\n onLink={(n) => linkVariable(\"paddingRight\", n)}\n onUnlink={() => unlinkVariable(\"paddingRight\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"B\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.paddingBottom)}\n onChange={(raw) => onChange(\"paddingBottom\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding-bottom\"\n linkedVar={variableLinks.get(\"paddingBottom\") ?? null}\n onLink={(n) => linkVariable(\"paddingBottom\", n)}\n onUnlink={() => unlinkVariable(\"paddingBottom\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"L\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.paddingLeft)}\n onChange={(raw) => onChange(\"paddingLeft\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding-left\"\n linkedVar={variableLinks.get(\"paddingLeft\") ?? null}\n onLink={(n) => linkVariable(\"paddingLeft\", n)}\n onUnlink={() => unlinkVariable(\"paddingLeft\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n ) : (\n <div className=\"flex gap-2\">\n <PanelIconField\n scrubMode=\"px\"\n commitOnBlur\n ariaLabel=\"Padding vertical\"\n icon={<AlignVerticalSpaceAround className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={padLinked.v}\n onChange={(raw) => {\n const v = parsePxInput(raw);\n const h = parsePxInput(padLinked.h);\n onChange(\"padding\", `${v} ${h}`);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding\"\n linkedVar={variableLinks.get(\"padding\") ?? null}\n onLink={(n) => linkVariable(\"padding\", n)}\n onUnlink={() => unlinkVariable(\"padding\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelIconField\n scrubMode=\"px\"\n commitOnBlur\n ariaLabel=\"Padding horizontal\"\n icon={<AlignHorizontalSpaceAround className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={padLinked.h}\n onChange={(raw) => {\n const h = parsePxInput(raw);\n const v = parsePxInput(padLinked.v);\n onChange(\"padding\", `${v} ${h}`);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding\"\n linkedVar={variableLinks.get(\"padding\") ?? null}\n onLink={(n) => linkVariable(\"padding\", n)}\n onUnlink={() => unlinkVariable(\"padding\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n )}\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <PanelSubsectionTitle>Margin</PanelSubsectionTitle>\n <PanelTooltip text={marginExpanded ? \"Link vertical & horizontal margin\" : \"Edit margin per side\"}>\n <button\n type=\"button\"\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n aria-label={marginExpanded ? \"Link margin\" : \"Expand margin sides\"}\n onClick={() => setMarginExpanded((e) => !e)}\n >\n <SquareSquare className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />\n </button>\n </PanelTooltip>\n </div>\n {marginExpanded ? (\n <div className=\"grid grid-cols-2 gap-2\">\n <PanelLabeledMini\n label=\"T\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.marginTop)}\n onChange={(raw) => onChange(\"marginTop\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin-top\"\n linkedVar={variableLinks.get(\"marginTop\") ?? null}\n onLink={(n) => linkVariable(\"marginTop\", n)}\n onUnlink={() => unlinkVariable(\"marginTop\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"R\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.marginRight)}\n onChange={(raw) => onChange(\"marginRight\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin-right\"\n linkedVar={variableLinks.get(\"marginRight\") ?? null}\n onLink={(n) => linkVariable(\"marginRight\", n)}\n onUnlink={() => unlinkVariable(\"marginRight\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"B\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.marginBottom)}\n onChange={(raw) => onChange(\"marginBottom\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin-bottom\"\n linkedVar={variableLinks.get(\"marginBottom\") ?? null}\n onLink={(n) => linkVariable(\"marginBottom\", n)}\n onUnlink={() => unlinkVariable(\"marginBottom\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"L\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.marginLeft)}\n onChange={(raw) => onChange(\"marginLeft\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin-left\"\n linkedVar={variableLinks.get(\"marginLeft\") ?? null}\n onLink={(n) => linkVariable(\"marginLeft\", n)}\n onUnlink={() => unlinkVariable(\"marginLeft\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n ) : (\n <div className=\"flex gap-2\">\n <PanelIconField\n scrubMode=\"px\"\n commitOnBlur\n ariaLabel=\"Margin vertical\"\n icon={<AlignVerticalSpaceAround className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={marginLinked.v}\n onChange={(raw) => {\n const v = parsePxInput(raw);\n const h = parsePxInput(marginLinked.h);\n onChange(\"margin\", `${v} ${h}`);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin\"\n linkedVar={variableLinks.get(\"margin\") ?? null}\n onLink={(n) => linkVariable(\"margin\", n)}\n onUnlink={() => unlinkVariable(\"margin\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelIconField\n scrubMode=\"px\"\n commitOnBlur\n ariaLabel=\"Margin horizontal\"\n icon={<AlignHorizontalSpaceAround className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={marginLinked.h}\n onChange={(raw) => {\n const h = parsePxInput(raw);\n const v = parsePxInput(marginLinked.v);\n onChange(\"margin\", `${v} ${h}`);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin\"\n linkedVar={variableLinks.get(\"margin\") ?? null}\n onLink={(n) => linkVariable(\"margin\", n)}\n onUnlink={() => unlinkVariable(\"margin\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n )}\n </div>\n\n </section>\n\n {/* Text — hidden for replaced / non-text controls (img, video, checkbox inputs, SVG, …). */}\n {supportsTypography ? (\n <section className=\"flex flex-col gap-2\">\n <SectionHeaderWithReset\n hasChange={TEXT_RESET_KEYS.some((k) => hasChange(k))}\n onReset={() => {\n for (const k of TEXT_RESET_KEYS) {\n if (hasChange(k)) onReset(k);\n }\n }}\n >\n Text\n </SectionHeaderWithReset>\n <PanelSelect\n value={fontSelectValue}\n onChange={(v) => {\n const opt = fontOptions.find((o) => o.value === v);\n onChange(\"fontFamily\", opt?.applyCss ?? fontFamilyApplyCss(v));\n }}\n options={fontOptions.map((f) => ({ value: f.value, label: f.label }))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"font-family\"\n linkedVar={variableLinks.get(\"fontFamily\") ?? null}\n onLink={(n) => linkVariable(\"fontFamily\", n)}\n onUnlink={() => unlinkVariable(\"fontFamily\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <div className=\"flex gap-2\">\n <PanelSelect\n value={snapshot.fontWeight}\n onChange={(v) => onChange(\"fontWeight\", v)}\n options={weightOptions.map((o) => ({ value: o.value, label: o.label }))}\n />\n <div className=\"min-w-0 flex-1\">\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Font size\"\n value={stripPxForNumberField(snapshot.fontSize)}\n onChange={(v) => {\n const t = v.trim();\n if (t === \"\") return;\n onChange(\"fontSize\", ensurePxSize(t));\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"font-size\"\n linkedVar={variableLinks.get(\"fontSize\") ?? null}\n onLink={(n) => linkVariable(\"fontSize\", n)}\n onUnlink={() => unlinkVariable(\"fontSize\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n <div className=\"flex gap-2\">\n <div className=\"min-w-0 flex-1\">\n <PanelIconField\n commitOnBlur\n scrubMode=\"unitless\"\n ariaLabel=\"Line height\"\n icon={<ArrowUpDown className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={stripPxForNumberField(snapshot.lineHeight)}\n onChange={(v) => onChange(\"lineHeight\", normalizeLineHeightForCss(v))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"line-height\"\n linkedVar={variableLinks.get(\"lineHeight\") ?? null}\n onLink={(n) => linkVariable(\"lineHeight\", n)}\n onUnlink={() => unlinkVariable(\"lineHeight\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n <div className=\"min-w-0 flex-1\">\n <PanelIconField\n commitOnBlur\n scrubMode=\"px\"\n ariaLabel=\"Letter spacing\"\n icon={<ArrowLeftRight className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={letterDisplay}\n onChange={(v) => onChange(\"letterSpacing\", normalizeLetterSpacingForCss(v))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"letter-spacing\"\n linkedVar={variableLinks.get(\"letterSpacing\") ?? null}\n onLink={(n) => linkVariable(\"letterSpacing\", n)}\n onUnlink={() => unlinkVariable(\"letterSpacing\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n <div className=\"flex gap-2\">\n <PanelToggleGroup\n value={textToggleValue}\n onChange={(v) => onChange(\"textAlign\", v)}\n options={[\n { value: \"left\", title: \"Align text left\", icon: <AlignLeft className={panelChrome.icon} strokeWidth={2} /> },\n { value: \"center\", title: \"Align text center\", icon: <AlignCenter className={panelChrome.icon} strokeWidth={2} /> },\n { value: \"right\", title: \"Align text right\", icon: <AlignRight className={panelChrome.icon} strokeWidth={2} /> },\n ]}\n />\n <PanelToggleGroup\n value={vAlign}\n onChange={(p) => onChange(\"alignItems\", verticalAlignToCssAlignItems(p))}\n options={[\n { value: \"top\", title: \"Align items to start (cross axis)\", icon: <ArrowUpToLine className={panelChrome.icon} strokeWidth={2} /> },\n { value: \"middle\", title: \"Align items to center (cross axis)\", icon: <FoldVertical className={panelChrome.icon} strokeWidth={2} /> },\n { value: \"bottom\", title: \"Align items to end (cross axis)\", icon: <ArrowDownToLine className={panelChrome.icon} strokeWidth={2} /> },\n ]}\n />\n </div>\n <PanelSwatchRow\n hexNoHash={textColorParts.hex}\n opacityPct={textColorParts.opacityPct}\n swatchBackground={snapshot.color}\n onHexChange={(hex) => onChange(\"color\", buildCssFromHexOpacity(hex, textColorParts.opacityPct))}\n onOpacityPctChange={(pct) => onChange(\"color\", buildCssFromHexOpacity(textColorParts.hex, pct))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"color\"\n linkedVar={variableLinks.get(\"color\") ?? null}\n onLink={(n) => linkVariable(\"color\", n)}\n onUnlink={() => unlinkVariable(\"color\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </section>\n ) : null}\n\n {/* Appearance */}\n <section className=\"flex flex-col gap-2\">\n <SectionHeaderWithReset\n hasChange={hasChange(\"opacity\") || hasChange(\"borderRadius\")}\n onReset={() => {\n if (hasChange(\"opacity\")) onReset(\"opacity\");\n if (hasChange(\"borderRadius\")) onReset(\"borderRadius\");\n }}\n >\n Appearance\n </SectionHeaderWithReset>\n <div className=\"flex gap-2\">\n <div className=\"min-w-0 flex-1\">\n <PanelIconField\n ariaLabel=\"Opacity\"\n commitOnBlur\n scrubMode=\"percent\"\n icon={<SunDim className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={opacityDisplay}\n onChange={(raw) => {\n const n = Number.parseFloat(raw.replace(/%/g, \"\").trim());\n if (!Number.isNaN(n)) onChange(\"opacity\", String(Math.min(1, Math.max(0, n / 100))));\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"opacity\"\n linkedVar={variableLinks.get(\"opacity\") ?? null}\n onLink={(n) => linkVariable(\"opacity\", n)}\n onUnlink={() => unlinkVariable(\"opacity\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n <div className=\"min-w-0 flex-1\">\n <PanelIconField\n ariaLabel=\"Corner radius\"\n commitOnBlur\n scrubMode=\"px\"\n icon={<CornerRadiusIcon className={panelChrome.icon} />}\n value={stripPxForNumberField(snapshot.borderRadius)}\n onChange={(v) => {\n const t = v.trim();\n if (t === \"\") return;\n onChange(\"borderRadius\", /^[\\d.]+$/.test(t) ? `${t}px` : v);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"border-radius\"\n linkedVar={variableLinks.get(\"borderRadius\") ?? null}\n onLink={(n) => linkVariable(\"borderRadius\", n)}\n onUnlink={() => unlinkVariable(\"borderRadius\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n </section>\n\n {/* Background + Border + Shadow: one `gap-2` stack. No `<section>` around the header row — it added uneven block spacing vs `OnDemandSectionButton` siblings. */}\n <div className=\"flex flex-col gap-2\">\n {hasFill ? (\n <div className=\"flex flex-col gap-2\">\n <SectionHeaderWithReset\n hasChange={fillHasPendingChange}\n titleTone=\"muted\"\n onReset={() => {\n if (hasChange(\"backgroundColor\")) onReset(\"backgroundColor\");\n if (hasChange(\"backgroundImage\")) onReset(\"backgroundImage\");\n }}\n trailing={\n <PanelTooltip text=\"Remove background\">\n <button\n type=\"button\"\n title=\"Remove background\"\n aria-label=\"Remove background\"\n onClick={handleRemoveFill}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Minus className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n </PanelTooltip>\n }\n >\n Background\n </SectionHeaderWithReset>\n <PanelSwatchRow\n hexNoHash={fillParts.hex}\n opacityPct={fillParts.opacityPct}\n swatchBackground={snapshot.backgroundColor}\n onHexChange={(hex) => onChange(\"backgroundColor\", buildCssFromHexOpacity(hex, fillParts.opacityPct))}\n onOpacityPctChange={(pct) => onChange(\"backgroundColor\", buildCssFromHexOpacity(fillParts.hex, pct))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"background-color\"\n linkedVar={variableLinks.get(\"backgroundColor\") ?? null}\n onLink={(n) => linkVariable(\"backgroundColor\", n)}\n onUnlink={() => unlinkVariable(\"backgroundColor\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n ) : (\n <SectionHeaderWithReset\n hasChange={fillHasPendingChange}\n titleTone=\"muted\"\n onReset={() => {\n if (hasChange(\"backgroundColor\")) onReset(\"backgroundColor\");\n if (hasChange(\"backgroundImage\")) onReset(\"backgroundImage\");\n }}\n trailing={\n <div className=\"group flex items-center gap-1\">\n <PanelVariableAffix\n cssPropertyKebab=\"background-color\"\n linkedVar={variableLinks.get(\"backgroundColor\") ?? null}\n onLink={(n) => linkVariable(\"backgroundColor\", n)}\n onUnlink={() => unlinkVariable(\"backgroundColor\")}\n compact\n revealOnFieldHover\n />\n <PanelTooltip text=\"Add background\">\n <button\n type=\"button\"\n title=\"Add background\"\n aria-label=\"Add background\"\n onClick={handleAddFill}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Plus className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n </PanelTooltip>\n </div>\n }\n >\n Background\n </SectionHeaderWithReset>\n )}\n\n {/* Border (on-demand, renders in place) */}\n {showBorderSection ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex w-full items-center justify-between gap-2 py-1\">\n <PanelSectionTitle tone=\"muted\">Border</PanelSectionTitle>\n <div className=\"flex items-center gap-1\">\n {(hasChange(\"borderTopWidth\") ||\n hasChange(\"borderRightWidth\") ||\n hasChange(\"borderBottomWidth\") ||\n hasChange(\"borderLeftWidth\") ||\n hasChange(\"borderColor\") ||\n hasChange(\"borderStyle\")) && (\n <button\n type=\"button\"\n className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 hover:text-[#D9D9D9]\")}\n onClick={() => {\n for (const k of [\"borderTopWidth\", \"borderRightWidth\", \"borderBottomWidth\", \"borderLeftWidth\", \"borderColor\", \"borderStyle\"] as const) {\n if (hasChange(k)) onReset(k);\n }\n }}\n >\n Reset\n </button>\n )}\n <button\n type=\"button\"\n title=\"Toggle border visibility\"\n aria-label=\"Toggle border visibility\"\n onClick={() => {\n const hasVisibleBorder = snapshot.borderStyle !== \"none\" && Number.parseFloat(snapshot.borderTopWidth) > 0;\n if (hasVisibleBorder) {\n onChange(\"borderStyle\", \"none\");\n } else {\n onChange(\"borderStyle\", \"solid\");\n if (Number.parseFloat(snapshot.borderTopWidth) === 0) {\n onChange(\"borderTopWidth\", \"1px\");\n onChange(\"borderRightWidth\", \"1px\");\n onChange(\"borderBottomWidth\", \"1px\");\n onChange(\"borderLeftWidth\", \"1px\");\n }\n }\n }}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Eye className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n <button\n type=\"button\"\n title=\"Remove border controls\"\n aria-label=\"Remove border section\"\n onClick={() => setShowBorderSection(false)}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Minus className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <PanelIconField\n commitOnBlur\n ariaLabel=\"Border width\"\n icon={<Ruler className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={getBorderWidthDisplay()}\n onChange={setBorderWidthFromInput}\n />\n <PanelSelect\n ariaLabel=\"Border side\"\n icon={<SquareDashed className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={borderSide}\n onChange={(v) => setBorderSide(v as BorderSide)}\n options={[\n { value: \"all\", label: \"All\" },\n { value: \"top\", label: \"Top\" },\n { value: \"right\", label: \"Right\" },\n { value: \"bottom\", label: \"Bottom\" },\n { value: \"left\", label: \"Left\" },\n ]}\n />\n </div>\n <PanelSwatchRow\n hexNoHash={borderColorParts.hex}\n opacityPct={borderColorParts.opacityPct}\n swatchBackground={snapshot.borderColor}\n onHexChange={(hex) => onChange(\"borderColor\", buildCssFromHexOpacity(hex, borderColorParts.opacityPct))}\n onOpacityPctChange={(pct) => onChange(\"borderColor\", buildCssFromHexOpacity(borderColorParts.hex, pct))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"border-color\"\n linkedVar={variableLinks.get(\"borderColor\") ?? null}\n onLink={(n) => linkVariable(\"borderColor\", n)}\n onUnlink={() => unlinkVariable(\"borderColor\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n ) : (\n <OnDemandSectionButton label=\"Border\" onClick={() => setShowBorderSection(true)} />\n )}\n\n {/* Shadow & Blur (on-demand, renders in place) */}\n {showShadowSection ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex w-full items-center justify-between gap-2 py-1\">\n <PanelSectionTitle tone=\"muted\">Shadow & Blur</PanelSectionTitle>\n <div className=\"flex items-center gap-1\">\n {hasChange(\"boxShadow\") && (\n <button type=\"button\" className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 hover:text-[#D9D9D9]\")} onClick={() => onReset(\"boxShadow\")}>\n Reset\n </button>\n )}\n <button\n type=\"button\"\n title=\"Remove shadow controls\"\n aria-label=\"Remove shadow section\"\n onClick={() => setShowShadowSection(false)}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Minus className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <PanelLabeledMini\n label=\"X\"\n scrubMode=\"px\"\n commitOnBlur\n value={shadowParts.offsetX}\n onChange={(v) => updateShadow({ offsetX: normalizeShadowLength(v) })}\n />\n <PanelLabeledMini\n label=\"Y\"\n scrubMode=\"px\"\n commitOnBlur\n value={shadowParts.offsetY}\n onChange={(v) => updateShadow({ offsetY: normalizeShadowLength(v) })}\n />\n <PanelLabeledMini\n label=\"B\"\n scrubMode=\"px\"\n commitOnBlur\n value={shadowParts.blur}\n onChange={(v) => updateShadow({ blur: normalizeShadowLength(v) })}\n />\n <PanelLabeledMini\n label=\"S\"\n scrubMode=\"px\"\n commitOnBlur\n value={shadowParts.spread}\n onChange={(v) => updateShadow({ spread: normalizeShadowLength(v) })}\n />\n </div>\n <PanelSwatchRow\n hexNoHash={shadowColorParts.hex}\n opacityPct={shadowColorParts.opacityPct}\n swatchBackground={shadowParts.color}\n onHexChange={(hex) => updateShadow({ color: buildCssFromHexOpacity(hex, shadowColorParts.opacityPct) })}\n onOpacityPctChange={(pct) => updateShadow({ color: buildCssFromHexOpacity(shadowColorParts.hex, pct) })}\n />\n </div>\n ) : (\n <OnDemandSectionButton label=\"Shadow & Blur\" onClick={() => setShowShadowSection(true)} />\n )}\n </div>\n </div>\n );\n}\n","import { finder } from \"@medv/finder\";\n\nfunction buildFallbackSelector(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n\n while (current && current !== document.body) {\n let part = current.tagName.toLowerCase();\n if (current.id) {\n parts.unshift(`#${current.id}`);\n break;\n }\n const parent = current.parentElement;\n if (parent) {\n const siblings = Array.from(parent.children).filter((c) => c.tagName === current!.tagName);\n if (siblings.length > 1) {\n const index = siblings.indexOf(current) + 1;\n part += `:nth-of-type(${index})`;\n }\n }\n parts.unshift(part);\n current = parent;\n }\n\n return parts.join(\" > \");\n}\n\n/** Unique selector for structural copy (CSS selector via `@medv/finder` + fallback). */\nexport function getDragReorderSelector(element: Element): string {\n try {\n return finder(element, {\n root: document.body,\n className: (name: string) => {\n if (name.startsWith(\"_\") || name.startsWith(\"css-\")) return false;\n if (/^[a-z]{1,3}[A-Za-z0-9_]{8,}$/.test(name)) return false;\n return true;\n },\n seedMinLength: 1,\n optimizedMinLength: 2,\n threshold: 1000,\n });\n } catch {\n return buildFallbackSelector(element);\n }\n}\n","/** React fiber helpers for drag reorder detection (array vs static child heuristics). */\n\nexport function getFiber(element: Element): unknown {\n const key = Object.keys(element).find((k) => k.startsWith(\"__reactFiber$\"));\n return key ? (element as Record<string, unknown>)[key] : null;\n}\n\nfunction isFrameworkInternal(name: string): boolean {\n if (name.startsWith(\"_\")) return true;\n if (/^(Fragment|Suspense|StrictMode|Profiler|Lazy|Memo|Forward)/.test(name)) return true;\n if (/(?:Provider|Consumer|Context|Boundary|Handler|Root|Wrapper)$/.test(name)) return true;\n if (/(?:Router|Layout|Template|Loading|Segment|Fallback|Reload|Manager|Metadata|Viewport|Head|Script|Link)/.test(name))\n return true;\n if (/^(Home|App|Page|Main|Index|Default|View|Screen|Dashboard|Root)$/.test(name)) return true;\n if (name.length <= 2) return true;\n return false;\n}\n\nexport function getReactComponentHierarchy(element: Element): string[] {\n const fiber = getFiber(element) as {\n type?: unknown;\n elementType?: { displayName?: string; name?: string };\n return?: unknown;\n } | null;\n if (!fiber) return [];\n\n const components: string[] = [];\n let current: typeof fiber = fiber;\n\n while (current) {\n const t = current.type;\n if (typeof t === \"function\" || typeof t === \"object\") {\n const rec = t as { displayName?: string; name?: string };\n const name =\n rec?.displayName ||\n rec?.name ||\n (current.elementType as { displayName?: string; name?: string } | undefined)?.displayName ||\n (current.elementType as { displayName?: string; name?: string } | undefined)?.name;\n if (name && !isFrameworkInternal(name)) components.push(name);\n }\n current = current.return as typeof fiber;\n }\n\n return components;\n}\n\nexport function getReactSource(element: Element): {\n fileName: string;\n lineNumber: number;\n columnNumber?: number;\n} | null {\n const fiber = getFiber(element) as {\n _debugSource?: { fileName: string; lineNumber: number; columnNumber?: number };\n _debugOwner?: { _debugSource?: { fileName: string; lineNumber: number; columnNumber?: number } };\n return?: unknown;\n } | null;\n if (!fiber) return null;\n\n let current: typeof fiber = fiber;\n while (current) {\n if (current._debugSource) {\n return {\n fileName: current._debugSource.fileName,\n lineNumber: current._debugSource.lineNumber,\n columnNumber: current._debugSource.columnNumber,\n };\n }\n if (current._debugOwner?._debugSource) {\n return {\n fileName: current._debugOwner._debugSource.fileName,\n lineNumber: current._debugOwner._debugSource.lineNumber,\n columnNumber: current._debugOwner._debugSource.columnNumber,\n };\n }\n current = current.return as typeof fiber;\n }\n\n return null;\n}\n","/**\n * Drag-to-reorder: pointer handling, ghost, drop indicator, DOM insertBefore.\n * Visuals mount on `document.body` so they sit below the Flux panel (z-index 9999).\n */\n\nimport type { FluxStructuralReorder, ReorderableContainer, ReorderChild } from \"./drag-reorder-types\";\nimport { getDragReorderSelector } from \"./drag-reorder-selector\";\nimport { getReactComponentHierarchy } from \"./drag-reorder-fiber\";\n\nconst DRAG_THRESHOLD = 5;\nconst FLUX_DRAG_Z = 9998;\n\nexport interface ReorderCallbacks {\n onDragStart: () => void;\n onDragCancel: () => void;\n onReorder: (change: FluxStructuralReorder) => void;\n}\n\ninterface DragState {\n draggedChild: ReorderChild;\n container: ReorderableContainer;\n startX: number;\n startY: number;\n ghost: HTMLElement;\n indicator: HTMLElement;\n dropIndex: number;\n horizontal: boolean;\n active: boolean;\n}\n\nexport function createReorderController(\n callbacks: ReorderCallbacks,\n options?: { mountRoot?: ParentNode },\n): { startDrag: (child: ReorderChild, container: ReorderableContainer, startX: number, startY: number) => void; destroy: () => void } {\n let state: DragState | null = null;\n const mountRoot = options?.mountRoot ?? document.body;\n\n function startDrag(child: ReorderChild, container: ReorderableContainer, startX: number, startY: number) {\n const computed = getComputedStyle(container.container);\n const direction = computed.flexDirection;\n const horizontal =\n direction === \"row\" || direction === \"row-reverse\" || container.layout === \"grid\";\n\n const ghost = document.createElement(\"div\");\n ghost.setAttribute(\"data-flux-drag-ghost\", \"\");\n ghost.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: ${FLUX_DRAG_Z};\n opacity: 0.85;\n border-radius: 8px;\n border: 2px solid #3b82f6;\n background: rgba(59, 130, 246, 0.08);\n transition: none;\n display: none;\n `;\n const rect = child.element.getBoundingClientRect();\n ghost.style.width = `${rect.width}px`;\n ghost.style.height = `${rect.height}px`;\n mountRoot.appendChild(ghost);\n\n const indicator = document.createElement(\"div\");\n indicator.setAttribute(\"data-flux-drop-indicator\", \"\");\n indicator.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: ${FLUX_DRAG_Z};\n background: #3b82f6;\n border-radius: 2px;\n display: none;\n `;\n if (horizontal) {\n indicator.style.width = \"3px\";\n indicator.style.height = `${rect.height}px`;\n } else {\n indicator.style.height = \"3px\";\n indicator.style.width = `${rect.width}px`;\n }\n mountRoot.appendChild(indicator);\n\n state = {\n draggedChild: child,\n container,\n startX,\n startY,\n ghost,\n indicator,\n dropIndex: child.index,\n horizontal,\n active: false,\n };\n\n document.addEventListener(\"pointermove\", handlePointerMove, true);\n document.addEventListener(\"pointerup\", handlePointerUp, true);\n document.addEventListener(\"pointercancel\", handlePointerUp, true);\n }\n\n function handlePointerMove(e: PointerEvent) {\n if (!state) return;\n e.preventDefault();\n e.stopPropagation();\n\n const dx = e.clientX - state.startX;\n const dy = e.clientY - state.startY;\n\n if (!state.active) {\n if (Math.abs(dx) + Math.abs(dy) < DRAG_THRESHOLD) return;\n state.active = true;\n state.ghost.style.display = \"\";\n callbacks.onDragStart();\n (state.draggedChild.element as HTMLElement).style.opacity = \"0.3\";\n }\n\n const rect = state.draggedChild.element.getBoundingClientRect();\n state.ghost.style.left = `${rect.left + dx}px`;\n state.ghost.style.top = `${rect.top + dy}px`;\n\n const children = state.container.children;\n let newDropIndex = state.draggedChild.index;\n\n for (let i = 0; i < children.length; i++) {\n if (i === state.draggedChild.index) continue;\n const childRect = children[i].element.getBoundingClientRect();\n const midX = childRect.left + childRect.width / 2;\n const midY = childRect.top + childRect.height / 2;\n\n if (state.horizontal) {\n if (e.clientX < midX && i < state.draggedChild.index) {\n newDropIndex = i;\n break;\n }\n if (e.clientX > midX && i > state.draggedChild.index) {\n newDropIndex = i;\n }\n } else {\n if (e.clientY < midY && i < state.draggedChild.index) {\n newDropIndex = i;\n break;\n }\n if (e.clientY > midY && i > state.draggedChild.index) {\n newDropIndex = i;\n }\n }\n }\n\n state.dropIndex = newDropIndex;\n\n if (newDropIndex !== state.draggedChild.index) {\n state.indicator.style.display = \"\";\n const targetChild = children[newDropIndex];\n const targetRect = targetChild.element.getBoundingClientRect();\n\n if (state.horizontal) {\n const x = newDropIndex < state.draggedChild.index ? targetRect.left - 3 : targetRect.right;\n state.indicator.style.left = `${x}px`;\n state.indicator.style.top = `${targetRect.top}px`;\n state.indicator.style.height = `${targetRect.height}px`;\n } else {\n const y = newDropIndex < state.draggedChild.index ? targetRect.top - 3 : targetRect.bottom;\n state.indicator.style.left = `${targetRect.left}px`;\n state.indicator.style.top = `${y}px`;\n state.indicator.style.width = `${targetRect.width}px`;\n }\n } else {\n state.indicator.style.display = \"none\";\n }\n }\n\n function handlePointerUp(e: PointerEvent) {\n if (!state) return;\n e.preventDefault();\n e.stopPropagation();\n\n document.removeEventListener(\"pointermove\", handlePointerMove, true);\n document.removeEventListener(\"pointerup\", handlePointerUp, true);\n document.removeEventListener(\"pointercancel\", handlePointerUp, true);\n\n (state.draggedChild.element as HTMLElement).style.opacity = \"\";\n state.ghost.remove();\n state.indicator.remove();\n\n if (!state.active || state.dropIndex === state.draggedChild.index) {\n state = null;\n callbacks.onDragCancel();\n return;\n }\n\n const containerInfo = state.container;\n const originalOrder = containerInfo.children.map((c) => c.label);\n\n const newChildren = [...containerInfo.children];\n const [moved] = newChildren.splice(state.draggedChild.index, 1);\n newChildren.splice(state.dropIndex, 0, moved);\n const newOrder = newChildren.map((c) => c.label);\n\n const draggedEl = state.draggedChild.element;\n const targetEl = containerInfo.children[state.dropIndex].element;\n if (state.dropIndex < state.draggedChild.index) {\n containerInfo.container.insertBefore(draggedEl, targetEl);\n } else {\n const nextSibling = targetEl.nextElementSibling;\n if (nextSibling) {\n containerInfo.container.insertBefore(draggedEl, nextSibling);\n } else {\n containerInfo.container.appendChild(draggedEl);\n }\n }\n\n const childSources =\n containerInfo.childrenType === \"static\"\n ? containerInfo.children\n .filter((c) => c.sourceFile)\n .map((c) => ({\n label: c.label,\n sourceFile: c.sourceFile!,\n }))\n : undefined;\n\n const change: FluxStructuralReorder = {\n type: \"reorder\",\n containerSelector: getDragReorderSelector(containerInfo.container),\n containerComponents: getReactComponentHierarchy(containerInfo.container),\n containerSourceFile: containerInfo.sourceFile,\n childrenType: containerInfo.childrenType,\n originalOrder,\n newOrder,\n childSources,\n timestamp: Date.now(),\n };\n\n state = null;\n callbacks.onReorder(change);\n }\n\n function destroy() {\n if (state) {\n (state.draggedChild.element as HTMLElement).style.opacity = \"\";\n state.ghost.remove();\n state.indicator.remove();\n document.removeEventListener(\"pointermove\", handlePointerMove, true);\n document.removeEventListener(\"pointerup\", handlePointerUp, true);\n document.removeEventListener(\"pointercancel\", handlePointerUp, true);\n state = null;\n }\n }\n\n return { startDrag, destroy };\n}\n","/**\n * Detects flex/grid parents with 2+ visible children and classifies array vs static children.\n */\n\nimport type { ReorderableContainer, ReorderChild } from \"./drag-reorder-types\";\nimport { getFiber, getReactSource } from \"./drag-reorder-fiber\";\n\nfunction getDirectText(el: Element): string {\n const parts: string[] = [];\n for (const node of el.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.trim();\n if (text) parts.push(text);\n }\n }\n if (parts.length === 0 && el.children.length > 0) {\n const first = el.children[0];\n for (const node of first.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.trim();\n if (text) {\n parts.push(text);\n break;\n }\n }\n }\n }\n return parts.join(\" \").slice(0, 40);\n}\n\nfunction getChildLabel(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const text = getDirectText(el);\n const cls =\n el.className && typeof el.className === \"string\" ? el.className.trim().split(/\\s+/).slice(0, 2).join(\".\") : \"\";\n\n if (text) return `<${tag}> \"${text}\"`;\n if (cls) return `<${tag}.${cls}>`;\n return `<${tag}>`;\n}\n\nfunction getDirectComponentName(element: Element): string | null {\n const fiber = getFiber(element) as {\n return?: {\n type?: unknown;\n elementType?: { displayName?: string; name?: string };\n return?: unknown;\n };\n } | null;\n if (!fiber) return null;\n\n let current = fiber.return;\n while (current) {\n const t = current.type;\n if (typeof t === \"function\" || typeof t === \"object\") {\n const rec = t as { displayName?: string; name?: string };\n const name =\n rec?.displayName ||\n rec?.name ||\n (current.elementType as { displayName?: string; name?: string } | undefined)?.displayName ||\n (current.elementType as { displayName?: string; name?: string } | undefined)?.name;\n if (name && name.length > 2 && !name.startsWith(\"_\")) return name;\n }\n current = current.return;\n }\n return null;\n}\n\nexport function detectChildrenType(container: Element): \"array\" | \"static\" {\n const children = Array.from(container.children);\n if (children.length < 2) return \"static\";\n\n const fibers = children.map(getFiber).filter(Boolean);\n if (fibers.length === 0) return \"static\";\n\n const sourceLines = new Map<string, number>();\n let withKeys = 0;\n\n for (const fiber of fibers) {\n const f = fiber as { _debugSource?: { fileName: string; lineNumber: number }; key?: unknown };\n const src = f._debugSource;\n if (src) {\n const key = `${src.fileName}:${src.lineNumber}`;\n sourceLines.set(key, (sourceLines.get(key) || 0) + 1);\n }\n if (f.key !== null) withKeys++;\n }\n\n const maxShared = Math.max(...sourceLines.values(), 0);\n if (maxShared >= fibers.length * 0.7) return \"array\";\n\n if (withKeys >= fibers.length * 0.7 && sourceLines.size <= 2) return \"array\";\n\n return \"static\";\n}\n\nexport function detectReorderableContainer(element: Element): ReorderableContainer | null {\n const parent = element.parentElement;\n if (!parent) return null;\n\n const computed = getComputedStyle(parent);\n const display = computed.display;\n\n let layout: \"flex\" | \"grid\";\n if (display === \"flex\" || display === \"inline-flex\") {\n layout = \"flex\";\n } else if (display === \"grid\" || display === \"inline-grid\") {\n layout = \"grid\";\n } else {\n return null;\n }\n\n const domChildren = Array.from(parent.children).filter((child) => {\n const cs = getComputedStyle(child);\n return cs.display !== \"none\" && cs.visibility !== \"hidden\";\n });\n if (domChildren.length < 2) return null;\n\n const childrenType = detectChildrenType(parent);\n\n const children: ReorderChild[] = domChildren.map((child, index) => ({\n element: child,\n index,\n label: getChildLabel(child),\n sourceFile: getReactSource(child),\n componentName: getDirectComponentName(child),\n }));\n\n return {\n container: parent,\n layout,\n childrenType,\n children,\n sourceFile: getReactSource(parent),\n };\n}\n","/**\n * Drag-to-reposition for `position: absolute | fixed`.\n * Uses pointer capture on the drag zone, live `!important` inline preview, commits px values on release.\n */\n\nexport type InsetKey = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface RepositionCallbacks {\n onDragStart: () => void;\n /** Called when pointer up with no meaningful movement (under ~0.5px per axis). */\n onDragCancel: () => void;\n onCommit: (patch: Partial<Record<InsetKey, string>>) => void;\n}\n\nexport function detectInsetAxes(el: Element): {\n vertical: \"top\" | \"bottom\";\n horizontal: \"left\" | \"right\";\n} {\n const cs = getComputedStyle(el);\n const t = cs.top;\n const b = cs.bottom;\n const l = cs.left;\n const r = cs.right;\n const tNum = parseFloat(t);\n const bNum = parseFloat(b);\n const lNum = parseFloat(l);\n const rNum = parseFloat(r);\n\n let vertical: \"top\" | \"bottom\";\n if (t === \"auto\" && b !== \"auto\") vertical = \"bottom\";\n else if (b === \"auto\" && t !== \"auto\") vertical = \"top\";\n else if (t !== \"auto\" && b !== \"auto\" && !Number.isNaN(tNum) && !Number.isNaN(bNum)) {\n vertical = tNum <= bNum ? \"top\" : \"bottom\";\n } else {\n vertical = \"top\";\n }\n\n let horizontal: \"left\" | \"right\";\n if (l === \"auto\" && r !== \"auto\") horizontal = \"right\";\n else if (r === \"auto\" && l !== \"auto\") horizontal = \"left\";\n else if (l !== \"auto\" && r !== \"auto\" && !Number.isNaN(lNum) && !Number.isNaN(rNum)) {\n horizontal = lNum <= rNum ? \"left\" : \"right\";\n } else {\n horizontal = \"left\";\n }\n return { vertical, horizontal };\n}\n\nexport function isCanvasRepositionable(el: Element): boolean {\n const p = getComputedStyle(el).position;\n return p === \"absolute\" || p === \"fixed\";\n}\n\ninterface RepositionState {\n el: HTMLElement;\n zone: HTMLElement;\n insetAxes: ReturnType<typeof detectInsetAxes>;\n startX: number;\n startY: number;\n startTop: number;\n startLeft: number;\n startRight: number;\n startBottom: number;\n pointerId: number;\n}\n\nexport function createRepositionController(callbacks: RepositionCallbacks): {\n startDrag: (\n el: HTMLElement,\n zone: HTMLElement,\n insetAxes: ReturnType<typeof detectInsetAxes>,\n pointerId: number,\n startX: number,\n startY: number,\n ) => void;\n destroy: () => void;\n} {\n let state: RepositionState | null = null;\n\n function removeListeners() {\n document.removeEventListener(\"pointermove\", handleMove, true);\n document.removeEventListener(\"pointerup\", handleUp, true);\n document.removeEventListener(\"pointercancel\", handleUp, true);\n }\n\n function handleMove(e: PointerEvent) {\n if (!state) return;\n e.preventDefault();\n const rawDx = e.clientX - state.startX;\n const rawDy = e.clientY - state.startY;\n const el = state.el;\n const ax = state.insetAxes;\n if (ax.vertical === \"top\") {\n el.style.setProperty(\"top\", `${Math.round(state.startTop + rawDy)}px`, \"important\");\n } else {\n el.style.setProperty(\"bottom\", `${Math.round(state.startBottom - rawDy)}px`, \"important\");\n }\n if (ax.horizontal === \"left\") {\n el.style.setProperty(\"left\", `${Math.round(state.startLeft + rawDx)}px`, \"important\");\n } else {\n el.style.setProperty(\"right\", `${Math.round(state.startRight - rawDx)}px`, \"important\");\n }\n }\n\n function handleUp(e: PointerEvent) {\n if (!state) return;\n e.preventDefault();\n const s = state;\n state = null;\n removeListeners();\n\n const el = s.el;\n try {\n el.releasePointerCapture(s.pointerId);\n } catch {\n /* ignore */\n }\n el.style.removeProperty(\"top\");\n el.style.removeProperty(\"bottom\");\n el.style.removeProperty(\"left\");\n el.style.removeProperty(\"right\");\n\n const totalDx = e.clientX - s.startX;\n const totalDy = e.clientY - s.startY;\n const ax = s.insetAxes;\n const patch: Partial<Record<InsetKey, string>> = {};\n if (Math.abs(totalDy) > 0.5) {\n if (ax.vertical === \"top\") {\n patch.top = `${Math.round(s.startTop + totalDy)}px`;\n } else {\n patch.bottom = `${Math.round(s.startBottom - totalDy)}px`;\n }\n }\n if (Math.abs(totalDx) > 0.5) {\n if (ax.horizontal === \"left\") {\n patch.left = `${Math.round(s.startLeft + totalDx)}px`;\n } else {\n patch.right = `${Math.round(s.startRight - totalDx)}px`;\n }\n }\n if (Object.keys(patch).length === 0) {\n callbacks.onDragCancel();\n } else {\n callbacks.onCommit(patch);\n }\n }\n\n function startDrag(\n el: HTMLElement,\n zone: HTMLElement,\n insetAxes: ReturnType<typeof detectInsetAxes>,\n pointerId: number,\n startX: number,\n startY: number,\n ) {\n const cs = getComputedStyle(el);\n state = {\n el,\n zone,\n insetAxes,\n startX,\n startY,\n startTop: parseFloat(cs.top) || 0,\n startLeft: parseFloat(cs.left) || 0,\n startRight: parseFloat(cs.right) || 0,\n startBottom: parseFloat(cs.bottom) || 0,\n pointerId,\n };\n try {\n zone.setPointerCapture(pointerId);\n } catch {\n /* ignore */\n }\n callbacks.onDragStart();\n document.addEventListener(\"pointermove\", handleMove, true);\n document.addEventListener(\"pointerup\", handleUp, true);\n document.addEventListener(\"pointercancel\", handleUp, true);\n }\n\n function destroy() {\n if (!state) return;\n const el = state.el;\n const pid = state.pointerId;\n removeListeners();\n try {\n el.releasePointerCapture(pid);\n } catch {\n /* ignore */\n }\n el.style.removeProperty(\"top\");\n el.style.removeProperty(\"bottom\");\n el.style.removeProperty(\"left\");\n el.style.removeProperty(\"right\");\n state = null;\n }\n\n return { startDrag, destroy };\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { createReorderController } from \"./drag-reorder-controller\";\nimport { detectReorderableContainer } from \"./drag-reorder-detect\";\nimport type { FluxStructuralReorder, ReorderableContainer } from \"./drag-reorder-types\";\nimport {\n createRepositionController,\n detectInsetAxes,\n isCanvasRepositionable,\n type InsetKey,\n} from \"./drag-reposition-controller\";\nimport type { DesignEditorElement } from \"./use-selection\";\n\nconst FLUX_ZONE_Z = 9998;\n\nexport type InsetCommitPatch = Partial<Record<InsetKey, string>>;\n\nexport interface CanvasDragHandlesProps {\n enabled: boolean;\n selectedElement: DesignEditorElement | null;\n onReorder: (change: FluxStructuralReorder) => void;\n onRepositionCommit: (patch: InsetCommitPatch) => void;\n onDragStart: () => void;\n onDragEnd: () => void;\n}\n\n/** @deprecated Use `CanvasDragHandles` */\nexport const DragReorderHandles = CanvasDragHandles;\n/** @deprecated Use `CanvasDragHandlesProps` */\nexport type DragReorderHandlesProps = CanvasDragHandlesProps;\n\n/**\n * Canvas drag: **absolute/fixed** → reposition; otherwise flex/grid sibling reorder when applicable.\n * Pointer capture on the drag zone; `cursor: move` vs `grab` / `grabbing`.\n */\nexport function CanvasDragHandles({\n enabled,\n selectedElement,\n onReorder,\n onRepositionCommit,\n onDragStart,\n onDragEnd,\n}: CanvasDragHandlesProps) {\n const [container, setContainer] = useState<ReorderableContainer | null>(null);\n const [mode, setMode] = useState<\"reposition\" | \"reorder\" | null>(null);\n\n const reorderControllerRef = useRef<ReturnType<typeof createReorderController> | null>(null);\n const repositionControllerRef = useRef<ReturnType<typeof createRepositionController> | null>(null);\n const dragZoneRef = useRef<HTMLElement | null>(null);\n\n const onReorderRef = useRef(onReorder);\n const onRepositionCommitRef = useRef(onRepositionCommit);\n const onDragStartRef = useRef(onDragStart);\n const onDragEndRef = useRef(onDragEnd);\n\n onReorderRef.current = onReorder;\n onRepositionCommitRef.current = onRepositionCommit;\n onDragStartRef.current = onDragStart;\n onDragEndRef.current = onDragEnd;\n\n useEffect(() => {\n if (!enabled || !selectedElement) {\n setMode(null);\n setContainer(null);\n return;\n }\n if (isCanvasRepositionable(selectedElement)) {\n setMode(\"reposition\");\n setContainer(null);\n return;\n }\n setMode(\"reorder\");\n setContainer(detectReorderableContainer(selectedElement));\n }, [enabled, selectedElement]);\n\n useEffect(() => {\n function teardownZone() {\n if (dragZoneRef.current) {\n dragZoneRef.current.remove();\n dragZoneRef.current = null;\n }\n reorderControllerRef.current?.destroy();\n reorderControllerRef.current = null;\n repositionControllerRef.current?.destroy();\n repositionControllerRef.current = null;\n }\n\n if (!enabled || !selectedElement || !mode) {\n teardownZone();\n return;\n }\n\n if (mode === \"reposition\") {\n const el = selectedElement as HTMLElement;\n const controller = createRepositionController({\n onDragStart: () => onDragStartRef.current(),\n onDragCancel: () => {\n const z = dragZoneRef.current;\n if (z) {\n z.style.pointerEvents = \"auto\";\n z.style.cursor = \"move\";\n }\n onDragEndRef.current();\n },\n onCommit: (patch) => {\n const z = dragZoneRef.current;\n if (z) {\n z.style.pointerEvents = \"auto\";\n z.style.cursor = \"move\";\n }\n onRepositionCommitRef.current(patch);\n onDragEndRef.current();\n },\n });\n repositionControllerRef.current = controller;\n\n const zone = document.createElement(\"div\");\n zone.setAttribute(\"data-flux-drag-zone\", \"\");\n zone.setAttribute(\"data-flux-drag-mode\", \"reposition\");\n zone.style.cssText = `\n position: fixed;\n z-index: ${FLUX_ZONE_Z};\n cursor: move;\n pointer-events: auto;\n user-select: none;\n touch-action: none;\n background: transparent;\n `;\n document.body.appendChild(zone);\n dragZoneRef.current = zone;\n\n function updatePosition() {\n const r = el.getBoundingClientRect();\n zone.style.left = `${r.left}px`;\n zone.style.top = `${r.top}px`;\n zone.style.width = `${r.width}px`;\n zone.style.height = `${r.height}px`;\n }\n updatePosition();\n\n const onPointerDown = (e: PointerEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n zone.style.pointerEvents = \"none\";\n const axes = detectInsetAxes(el);\n controller.startDrag(el, zone, axes, e.pointerId, e.clientX, e.clientY);\n };\n zone.addEventListener(\"pointerdown\", onPointerDown);\n\n let raf: number | null = null;\n function scheduleUpdate() {\n if (raf !== null) return;\n raf = requestAnimationFrame(() => {\n raf = null;\n updatePosition();\n });\n }\n\n window.addEventListener(\"scroll\", scheduleUpdate, { capture: true, passive: true });\n window.addEventListener(\"resize\", scheduleUpdate, { passive: true });\n\n return () => {\n zone.removeEventListener(\"pointerdown\", onPointerDown);\n teardownZone();\n window.removeEventListener(\"scroll\", scheduleUpdate, true);\n window.removeEventListener(\"resize\", scheduleUpdate);\n if (raf !== null) cancelAnimationFrame(raf);\n };\n }\n\n if (mode === \"reorder\") {\n if (!container) {\n teardownZone();\n return;\n }\n\n const childIndex = container.children.findIndex((c) => c.element === selectedElement);\n const dragChild =\n childIndex !== -1\n ? container.children[childIndex]\n : container.children.find((c) => c.element.contains(selectedElement));\n\n if (!dragChild) {\n teardownZone();\n return;\n }\n\n const controller = createReorderController({\n onDragStart: () => onDragStartRef.current(),\n onDragCancel: () => {\n if (dragZoneRef.current) {\n dragZoneRef.current.style.pointerEvents = \"auto\";\n dragZoneRef.current.style.cursor = \"grab\";\n }\n onDragEndRef.current();\n },\n onReorder: (change) => {\n if (dragZoneRef.current) {\n dragZoneRef.current.style.pointerEvents = \"auto\";\n dragZoneRef.current.style.cursor = \"grab\";\n }\n onDragEndRef.current();\n onReorderRef.current(change);\n if (selectedElement) {\n setContainer(detectReorderableContainer(selectedElement));\n }\n },\n });\n reorderControllerRef.current = controller;\n\n const zone = document.createElement(\"div\");\n zone.setAttribute(\"data-flux-drag-zone\", \"\");\n zone.setAttribute(\"data-flux-drag-mode\", \"reorder\");\n zone.style.cssText = `\n position: fixed;\n z-index: ${FLUX_ZONE_Z};\n cursor: grab;\n pointer-events: auto;\n user-select: none;\n touch-action: none;\n background: transparent;\n `;\n document.body.appendChild(zone);\n dragZoneRef.current = zone;\n\n function updatePosition() {\n const r = dragChild.element.getBoundingClientRect();\n zone.style.left = `${r.left}px`;\n zone.style.top = `${r.top}px`;\n zone.style.width = `${r.width}px`;\n zone.style.height = `${r.height}px`;\n }\n updatePosition();\n\n const onPointerDown = (e: PointerEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n try {\n zone.setPointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n zone.style.cursor = \"grabbing\";\n zone.style.pointerEvents = \"none\";\n controller.startDrag(dragChild, container, e.clientX, e.clientY);\n };\n zone.addEventListener(\"pointerdown\", onPointerDown);\n\n let raf: number | null = null;\n function scheduleUpdate() {\n if (raf !== null) return;\n raf = requestAnimationFrame(() => {\n raf = null;\n updatePosition();\n });\n }\n\n window.addEventListener(\"scroll\", scheduleUpdate, { capture: true, passive: true });\n window.addEventListener(\"resize\", scheduleUpdate, { passive: true });\n\n return () => {\n zone.removeEventListener(\"pointerdown\", onPointerDown);\n teardownZone();\n window.removeEventListener(\"scroll\", scheduleUpdate, true);\n window.removeEventListener(\"resize\", scheduleUpdate);\n if (raf !== null) cancelAnimationFrame(raf);\n };\n }\n\n return teardownZone;\n }, [enabled, mode, container, selectedElement]);\n\n return null;\n}\n","/**\n * Border-box dimensions in viewport CSS pixels, rounded for the overlay label.\n */\nexport function formatSelectionDimensions(width: number, height: number): string {\n return `${Math.round(width)} × ${Math.round(height)}`;\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { elementSupportsInlineTextEdit } from \"./element-capabilities\";\nimport {\n type DesignEditorElement,\n deepElementFromPoint,\n getClassNameString,\n getElementPath,\n resolveDeepPointToStyleableElement,\n resolveEventTargetToStyleableElement,\n} from \"./use-selection\";\nimport { formatSelectionDimensions } from \"./format-selection-dimensions\";\nimport { subscribeViewportLayoutSync } from \"./viewport-layout-sync\";\n\n/**\n * Wired by `installFluxRadixMintInspectVars()` — Mint 9 selected, Mint 8 hover (@radix-ui/colors).\n */\nconst INSPECTOR_BORDER_SELECTED = \"2px solid var(--flux-mint-9, #86ead4)\";\n\nconst INSPECTOR_RING_BASE: Omit<CSSProperties, \"border\" | \"backgroundColor\"> = {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"6px\",\n pointerEvents: \"none\",\n /** Snap to viewport on scroll; animating top/left feels like the ring “floats” behind the content. */\n transitionProperty: \"width, height\",\n transitionDuration: \"25ms\",\n transitionTimingFunction: \"ease-out\",\n};\n\nconst INSPECTOR_RING_STYLE_SELECTED: CSSProperties = {\n ...INSPECTOR_RING_BASE,\n border: INSPECTOR_BORDER_SELECTED,\n backgroundColor: \"transparent\",\n};\n\n/** Softer hover (feedback-style) — selection stays crisp mint 9. */\nconst INSPECTOR_RING_STYLE_HOVER: CSSProperties = {\n ...INSPECTOR_RING_BASE,\n border: \"1px solid color-mix(in srgb, var(--flux-mint-8, #4cbba5) 50%, transparent)\",\n backgroundColor: \"color-mix(in srgb, var(--flux-mint-8, #4cbba5) 7%, transparent)\",\n transitionProperty: \"width, height, opacity\",\n};\n\n/** Portaled menus live on `document.body` / `[data-flux-editor-menu-layer]` — ignore for pick & hover. */\nfunction isFluxFloatingUiInEventPath(e: MouseEvent): boolean {\n const path = typeof e.composedPath === \"function\" ? e.composedPath() : [];\n for (const n of path) {\n if (!(n instanceof Element)) continue;\n if (\n n.hasAttribute(\"data-flux-select-menu\") ||\n n.hasAttribute(\"data-flux-variable-menu\") ||\n n.hasAttribute(\"data-flux-editor-menu-layer\")\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isFluxFloatingUiAtPoint(clientX: number, clientY: number): boolean {\n const top = deepElementFromPoint(clientX, clientY);\n return Boolean(\n top?.closest(\"[data-flux-select-menu], [data-flux-variable-menu], [data-flux-editor-menu-layer]\"),\n );\n}\n\nfunction safeBoundingRect(el: Element): DOMRect | null {\n if (!el.isConnected) return null;\n try {\n return el.getBoundingClientRect();\n } catch {\n return null;\n }\n}\n\nfunction positionDimensionBadge(label: HTMLDivElement, rect: DOMRect): void {\n const viewportH = window.innerHeight;\n const labelY = rect.bottom + 4 + 20 < viewportH ? rect.bottom + 4 : rect.top - 24;\n label.style.top = `${labelY}px`;\n label.style.left = `${rect.left + rect.width / 2}px`;\n label.style.transform = \"translateX(-50%)\";\n}\n\nconst SELECTION_DIMENSION_BADGE_STYLE: CSSProperties = {\n position: \"absolute\",\n boxSizing: \"border-box\",\n color: \"#fff\",\n fontSize: 11,\n fontFamily: \"'Inter', system-ui, sans-serif\",\n padding: \"2px 6px\",\n borderRadius: 3,\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n zIndex: 1,\n /** Dimension badge (inspector) */\n backgroundColor: \"#0D99FF\",\n display: \"none\",\n};\n\nconst INTERACTIVE_PAGE_SELECTOR =\n \"button, a, input, select, textarea, [role='button'], [onclick], summary, [contenteditable='true']\";\n\ninterface SelectionOverlayProps {\n enabled: boolean;\n /** Capture-phase `pointerdown` + stricter click blocking for buttons/links/inputs (playground / opt-in). */\n blockPageInteractions?: boolean;\n selectedElement: DesignEditorElement | null;\n hoveredElement: DesignEditorElement | null;\n onSelect: (el: DesignEditorElement | null) => void;\n onHover: (el: DesignEditorElement | null) => void;\n /** Double-click the current selection to edit text in place (when supported). */\n onRequestInlineTextEdit?: () => void;\n}\n\nexport function SelectionOverlay({\n enabled,\n blockPageInteractions = false,\n selectedElement,\n hoveredElement,\n onSelect,\n onHover,\n onRequestInlineTextEdit,\n}: SelectionOverlayProps) {\n const overlayRef = useRef<HTMLDivElement>(null);\n const hoverOutlineRef = useRef<HTMLDivElement>(null);\n const selectOutlineRef = useRef<HTMLDivElement>(null);\n const selectDimensionsRef = useRef<HTMLDivElement>(null);\n /** After scroll stops, show hover chrome again (calm scroll). */\n const [hoverScrollIdle, setHoverScrollIdle] = useState(true);\n const moveRafRef = useRef<number>(0);\n const latestPointerRef = useRef<{ x: number; y: number } | null>(null);\n\n useEffect(() => {\n const scrollTimerRef = { current: undefined as ReturnType<typeof setTimeout> | undefined };\n const onScroll = () => {\n setHoverScrollIdle(false);\n if (scrollTimerRef.current) clearTimeout(scrollTimerRef.current);\n scrollTimerRef.current = setTimeout(() => {\n setHoverScrollIdle(true);\n scrollTimerRef.current = undefined;\n }, 150);\n };\n document.addEventListener(\"scroll\", onScroll, { capture: true, passive: true });\n return () => {\n document.removeEventListener(\"scroll\", onScroll, true);\n if (scrollTimerRef.current) clearTimeout(scrollTimerRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n const overlay = overlayRef.current;\n if (!overlay) return;\n\n const isEditorElement = (el: Element | null): boolean => {\n if (!el) return false;\n return Boolean(el.closest(\"[data-flux-ui]\") || el.closest(\"[data-flux-editor-host]\"));\n };\n\n const handleClick = (e: MouseEvent) => {\n if (isFluxFloatingUiInEventPath(e)) return;\n const path0 = (e.composedPath()[0] ?? e.target) as EventTarget | undefined;\n const pathEl = path0 instanceof Element ? path0 : path0 instanceof Node ? path0.parentElement : null;\n if (pathEl) {\n const hitInteractive = pathEl.closest(INTERACTIVE_PAGE_SELECTOR);\n if (\n blockPageInteractions &&\n hitInteractive &&\n !isEditorElement(hitInteractive) &&\n !hitInteractive.closest(\"[data-flux-editor-host]\")\n ) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n const hit = deepElementFromPoint(e.clientX, e.clientY);\n if (!hit || overlay.contains(hit)) return;\n const el = resolveEventTargetToStyleableElement(hit);\n if (!el) return;\n if (isEditorElement(el)) return;\n if (\n e.detail === 2 &&\n selectedElement &&\n onRequestInlineTextEdit &&\n (el === selectedElement || selectedElement.contains(el)) &&\n elementSupportsInlineTextEdit(selectedElement)\n ) {\n e.preventDefault();\n e.stopPropagation();\n onRequestInlineTextEdit();\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n onSelect(el);\n };\n\n const handlePointerDown = (e: PointerEvent) => {\n if (!blockPageInteractions) return;\n if (isFluxFloatingUiInEventPath(e as unknown as MouseEvent)) return;\n const path0 = (e.composedPath()[0] ?? e.target) as EventTarget | undefined;\n const pathEl = path0 instanceof Element ? path0 : path0 instanceof Node ? path0.parentElement : null;\n if (!pathEl) return;\n if (isEditorElement(pathEl) || pathEl.closest(\"[data-flux-editor-host]\")) return;\n const hitInteractive = pathEl.closest(INTERACTIVE_PAGE_SELECTOR);\n if (hitInteractive && !isEditorElement(hitInteractive)) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const runHoverHitTest = (clientX: number, clientY: number) => {\n if (isFluxFloatingUiAtPoint(clientX, clientY)) {\n onHover(null);\n return;\n }\n const topEl = deepElementFromPoint(clientX, clientY);\n if (isEditorElement(topEl) || topEl?.hasAttribute(\"data-flux-editor-host\")) {\n onHover(null);\n return;\n }\n const el = resolveDeepPointToStyleableElement(clientX, clientY);\n if (!el || overlay.contains(el) || isEditorElement(el)) {\n onHover(null);\n return;\n }\n onHover(el);\n };\n\n const handleMouseMove = (e: MouseEvent) => {\n latestPointerRef.current = { x: e.clientX, y: e.clientY };\n if (moveRafRef.current) return;\n moveRafRef.current = requestAnimationFrame(() => {\n moveRafRef.current = 0;\n const p = latestPointerRef.current;\n if (!p) return;\n runHoverHitTest(p.x, p.y);\n });\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n const ae = document.activeElement;\n if (ae instanceof Element && isEditorElement(ae)) return;\n onSelect(null);\n };\n\n document.addEventListener(\"click\", handleClick, true);\n document.addEventListener(\"mousemove\", handleMouseMove, { passive: true });\n window.addEventListener(\"keydown\", handleKeyDown);\n if (blockPageInteractions) {\n document.addEventListener(\"pointerdown\", handlePointerDown, true);\n }\n\n return () => {\n document.removeEventListener(\"click\", handleClick, true);\n document.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"keydown\", handleKeyDown);\n if (blockPageInteractions) {\n document.removeEventListener(\"pointerdown\", handlePointerDown, true);\n }\n if (moveRafRef.current) {\n cancelAnimationFrame(moveRafRef.current);\n moveRafRef.current = 0;\n }\n };\n }, [enabled, blockPageInteractions, onSelect, onHover, onRequestInlineTextEdit, selectedElement]);\n\n useEffect(() => {\n const outline = hoverOutlineRef.current;\n if (!outline || !hoveredElement || hoveredElement === selectedElement) return;\n const update = () => {\n if (!hoverScrollIdle) {\n outline.style.display = \"none\";\n outline.style.opacity = \"0\";\n return;\n }\n const rect = safeBoundingRect(hoveredElement);\n if (!rect || (rect.width === 0 && rect.height === 0)) {\n outline.style.display = \"none\";\n return;\n }\n outline.style.opacity = \"1\";\n outline.style.top = `${rect.top}px`;\n outline.style.left = `${rect.left}px`;\n outline.style.width = `${rect.width}px`;\n outline.style.height = `${rect.height}px`;\n outline.style.display = \"block\";\n };\n const observer = new ResizeObserver(update);\n try {\n observer.observe(hoveredElement);\n } catch {\n outline.style.display = \"none\";\n }\n const unsubLayout = subscribeViewportLayoutSync(hoveredElement, update);\n return () => {\n observer.disconnect();\n unsubLayout();\n };\n }, [hoveredElement, selectedElement, hoverScrollIdle]);\n\n useEffect(() => {\n const outline = selectOutlineRef.current;\n const label = selectDimensionsRef.current;\n if (!outline || !selectedElement) return;\n const update = () => {\n const rect = safeBoundingRect(selectedElement);\n if (!rect || (rect.width === 0 && rect.height === 0)) {\n outline.style.display = \"none\";\n if (label) label.style.display = \"none\";\n return;\n }\n outline.style.top = `${rect.top}px`;\n outline.style.left = `${rect.left}px`;\n outline.style.width = `${rect.width}px`;\n outline.style.height = `${rect.height}px`;\n outline.style.display = \"block\";\n if (label) {\n label.textContent = formatSelectionDimensions(rect.width, rect.height);\n positionDimensionBadge(label, rect);\n label.style.display = \"block\";\n }\n };\n const observer = new ResizeObserver(update);\n try {\n observer.observe(selectedElement);\n } catch {\n outline.style.display = \"none\";\n if (label) label.style.display = \"none\";\n }\n const unsubLayout = subscribeViewportLayoutSync(selectedElement, update);\n return () => {\n observer.disconnect();\n unsubLayout();\n if (selectDimensionsRef.current) selectDimensionsRef.current.style.display = \"none\";\n };\n }, [selectedElement]);\n\n if (!enabled) return null;\n\n return (\n <div\n ref={overlayRef}\n className=\"flux-overlay\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9998,\n pointerEvents: \"none\",\n cursor: \"crosshair\",\n }}\n aria-hidden\n >\n {hoveredElement && hoveredElement !== selectedElement && (\n <div ref={hoverOutlineRef} className=\"flux-hover-outline\" style={INSPECTOR_RING_STYLE_HOVER} />\n )}\n {selectedElement && (\n <>\n <div ref={selectOutlineRef} className=\"flux-select-outline\" style={INSPECTOR_RING_STYLE_SELECTED} />\n <div\n ref={selectDimensionsRef}\n className=\"flux-select-dimensions\"\n style={SELECTION_DIMENSION_BADGE_STYLE}\n aria-hidden\n />\n </>\n )}\n </div>\n );\n}\n\nexport function Breadcrumb({ element, className }: { element: Element | null; className?: string }) {\n if (!element) return null;\n const path = getElementPath(element);\n const tag = element.tagName.toLowerCase();\n const id = element.id;\n const classes = getClassNameString(element).trim().split(/\\s+/).filter(Boolean).slice(0, 2).join(\".\");\n const label = id ? `${tag}#${id}` : classes ? `${tag}.${classes}` : tag;\n return (\n <div className={className ?? \"truncate font-mono text-[11px] text-[#71717a]\"} title={path}>\n {label}\n </div>\n );\n}\n","import { mint } from \"@radix-ui/colors\";\n\nconst STYLE_ID = \"flux-radix-mint-inspector\";\n\n/**\n * Injects `--flux-mint-8` / `--flux-mint-9` from [@radix-ui/colors](https://www.npmjs.com/package/@radix-ui/colors)\n * for the selection overlay (hover = mint 8, selected = mint 9).\n */\nexport function installFluxRadixMintInspectVars(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n\n const css = `\n:root {\n --flux-mint-8: ${mint.mint8};\n --flux-mint-9: ${mint.mint9};\n}\n`.trim();\n\n const el = document.createElement(\"style\");\n el.id = STYLE_ID;\n el.textContent = css;\n document.head.appendChild(el);\n}\n","/**\n * Styles for select / variable menus that portal to `document.body`.\n * Tailwind in the shadow panel does not apply to light-DOM portaled nodes.\n *\n * Pattern matches Radix / Floating UI: overlays mount outside clipped or\n * `pointer-events: none` ancestors so hit-testing and clicks behave normally.\n */\n\nconst STYLE_ID = \"flux-editor-floating-menu-css\";\n\nexport const FLOATING_MENU_CSS = `\n[data-flux-select-menu],\n[data-flux-variable-menu] {\n position: fixed;\n z-index: 10002;\n max-height: 12rem;\n overflow-y: auto;\n border-radius: 6px;\n border: 1px solid #444;\n background-color: #2a2a2a;\n padding: 4px 0;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.35);\n pointer-events: auto;\n font-family: 'Inter', system-ui, sans-serif;\n font-size: 12px;\n line-height: 15.6px;\n color: #d9d9d9;\n -webkit-font-smoothing: antialiased;\n box-sizing: border-box;\n}\n[data-flux-variable-menu] {\n max-width: 14rem;\n}\n[data-flux-select-menu] .flux-menu-option,\n[data-flux-variable-menu] .flux-menu-option {\n display: block;\n width: 100%;\n box-sizing: border-box;\n padding: 4px 8px;\n margin: 0;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n line-height: 15.6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[data-flux-select-menu] .flux-menu-option:hover,\n[data-flux-variable-menu] .flux-menu-option:hover {\n background-color: #333;\n}\n[data-flux-select-menu] .flux-menu-option.is-active,\n[data-flux-variable-menu] .flux-menu-option.is-active {\n background-color: #202020;\n}\n[data-flux-variable-menu] .flux-menu-empty {\n padding: 6px 8px;\n color: #7c7c7c;\n font-size: 12px;\n}\n@keyframes flux-tooltip-in {\n from { opacity: 0; transform: scale(0.97); }\n to { opacity: 1; transform: scale(1); }\n}\n/* Tooltips portal to document.body; shadow-injected Tailwind does not apply — match panel rounded-small token (8px). */\n.flux-tooltip-content {\n border-radius: 8px;\n box-sizing: border-box;\n}\n.flux-tooltip-content[data-state=\"delayed-open\"],\n.flux-tooltip-content[data-state=\"instant-open\"] {\n animation: flux-tooltip-in 150ms cubic-bezier(0.215, 0.61, 0.355, 1) both;\n}\n`;\n\nexport function installFluxFloatingMenuStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement(\"style\");\n el.id = STYLE_ID;\n el.textContent = FLOATING_MENU_CSS;\n document.head.appendChild(el);\n}\n","export const editorStyles = \".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.-right-0{right:0}.-right-1{right:-.25rem}.-top-0{top:0}.-top-1{top:-.25rem}.bottom-2{bottom:.5rem}.left-0{left:0}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-4{right:1rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-2{top:.5rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-\\\\[10003\\\\]{z-index:10003}.z-\\\\[10020\\\\]{z-index:10020}.z-\\\\[1\\\\]{z-index:1}.z-\\\\[9997\\\\]{z-index:9997}.z-\\\\[9998\\\\]{z-index:9998}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.-mt-px{margin-top:-1px}.mb-2{margin-bottom:.5rem}.ml-px{margin-left:1px}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.box-border{box-sizing:border-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-3{width:.75rem;height:.75rem}.size-3\\\\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-9{width:2.25rem;height:2.25rem}.size-\\\\[14px\\\\]{width:14px;height:14px}.size-\\\\[5px\\\\]{width:5px;height:5px}.h-3{height:.75rem}.h-4{height:1rem}.h-9{height:2.25rem}.h-full{height:100%}.max-h-48{max-height:12rem}.max-h-\\\\[min\\\\(90vh\\\\2c 640px\\\\)\\\\]{max-height:min(90vh,640px)}.min-h-0{min-height:0}.w-0{width:0}.w-0\\\\.5{width:.125rem}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-\\\\[4\\\\.5rem\\\\]{width:4.5rem}.w-\\\\[5\\\\.5rem\\\\]{width:5.5rem}.w-\\\\[52px\\\\]{width:52px}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\\\\[2rem\\\\]{min-width:2rem}.min-w-full{min-width:100%}.max-w-\\\\[520px\\\\]{max-width:520px}.max-w-\\\\[5rem\\\\]{max-width:5rem}.max-w-\\\\[min\\\\(18rem\\\\2c calc\\\\(100vw-20px\\\\)\\\\)\\\\]{max-width:min(18rem,calc(100vw - 20px))}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.scale-\\\\[0\\\\.92\\\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\\\\[0\\\\.92\\\\]{--tw-scale-x:0.92;--tw-scale-y:0.92}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-col-resize{cursor:col-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\\\\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\\\\[13px\\\\]{gap:13px}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-small{border-radius:8px}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-\\\\[\\\\#202020\\\\]{--tw-border-opacity:1;border-color:rgb(32 32 32/var(--tw-border-opacity,1))}.border-\\\\[\\\\#444\\\\]{--tw-border-opacity:1;border-color:rgb(68 68 68/var(--tw-border-opacity,1))}.border-\\\\[\\\\#555\\\\]{--tw-border-opacity:1;border-color:rgb(85 85 85/var(--tw-border-opacity,1))}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity,1))}.border-amber-800\\\\/35{border-color:rgba(146,64,14,.35)}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity,1))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.border-zinc-200\\\\/90{border-color:hsla(240,6%,90%,.9)}.bg-\\\\[\\\\#202020\\\\]{--tw-bg-opacity:1;background-color:rgb(32 32 32/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#2a2a2a\\\\]{--tw-bg-opacity:1;background-color:rgb(42 42 42/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#333333\\\\]{--tw-bg-opacity:1;background-color:rgb(51 51 51/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#555\\\\]{--tw-bg-opacity:1;background-color:rgb(85 85 85/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#F3F3F3\\\\]{--tw-bg-opacity:1;background-color:rgb(243 243 243/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-black\\\\/50{background-color:rgba(0,0,0,.5)}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity,1))}.bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity,1))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.bg-zinc-50\\\\/90{background-color:hsla(0,0%,98%,.9)}.\\\\!fill-none{fill:none!important}.p-0{padding:0}.p-0\\\\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\\\\.5{padding:.375rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\\\\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-top:0;padding-bottom:0}.py-0\\\\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-0\\\\.5{padding-left:.125rem}.pr-0{padding-right:0}.pr-10{padding-right:2.5rem}.pr-11{padding-right:2.75rem}.pr-6{padding-right:1.5rem}.pr-7{padding-right:1.75rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-\\\\[\\\\'Inter\\\\'\\\\2c system-ui\\\\2c sans-serif\\\\]{font-family:Inter,system-ui,sans-serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\\\\[10px\\\\]{font-size:10px}.text-\\\\[11px\\\\]{font-size:11px}.text-\\\\[12px\\\\]{font-size:12px}.text-\\\\[15px\\\\]{font-size:15px}.text-\\\\[7px\\\\]{font-size:7px}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\\\\[14px\\\\]{line-height:14px}.leading-\\\\[15\\\\.6px\\\\]{line-height:15.6px}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-tight{letter-spacing:-.025em}.text-\\\\[\\\\#202020\\\\]{--tw-text-opacity:1;color:rgb(32 32 32/var(--tw-text-opacity,1))}.text-\\\\[\\\\#333333\\\\]{--tw-text-opacity:1;color:rgb(51 51 51/var(--tw-text-opacity,1))}.text-\\\\[\\\\#71717a\\\\]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-\\\\[\\\\#7C7C7C\\\\]{--tw-text-opacity:1;color:rgb(124 124 124/var(--tw-text-opacity,1))}.text-\\\\[\\\\#93c47d\\\\]{--tw-text-opacity:1;color:rgb(147 196 125/var(--tw-text-opacity,1))}.text-\\\\[\\\\#D9D9D9\\\\]{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.text-\\\\[\\\\#b45309\\\\]{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-\\\\[\\\\#c2410c\\\\]{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.text-\\\\[\\\\#d9d9d9\\\\]{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity,1))}.text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity,1))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-\\\\[0_24px_80px_rgba\\\\(0\\\\2c 0\\\\2c 0\\\\2c 0\\\\.2\\\\)\\\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\\\[0_24px_80px_rgba\\\\(0\\\\2c 0\\\\2c 0\\\\2c 0\\\\.2\\\\)\\\\]{--tw-shadow:0 24px 80px rgba(0,0,0,.2);--tw-shadow-colored:0 24px 80px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.\\\\!outline{outline-style:solid!important}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\\\\[3px\\\\]{--tw-backdrop-blur:blur(3px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\\\[transform\\\\]{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-opacity{transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\\\\[font-synthesis\\\\:none\\\\]{font-synthesis:none}*,:after,:before{box-sizing:border-box;margin:0}button,input,select,textarea{font:inherit;color:inherit;background:transparent;border:none;padding:0;margin:0;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}select{cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.hover\\\\:bg-\\\\[\\\\#2a2a2a\\\\]:hover{--tw-bg-opacity:1;background-color:rgb(42 42 42/var(--tw-bg-opacity,1))}.hover\\\\:bg-\\\\[\\\\#333333\\\\]:hover{--tw-bg-opacity:1;background-color:rgb(51 51 51/var(--tw-bg-opacity,1))}.hover\\\\:text-\\\\[\\\\#D9D9D9\\\\]:hover{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.hover\\\\:brightness-110:hover{--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus-visible\\\\:outline:focus-visible{outline-style:solid}.focus-visible\\\\:outline-2:focus-visible{outline-width:2px}.focus-visible\\\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\\\:outline-\\\\[\\\\#D9D9D9\\\\]\\\\/40:focus-visible{outline-color:hsla(0,0%,85%,.4)}.active\\\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:focus-within .group-focus-within\\\\:opacity-100{opacity:1}.group:hover .group-hover\\\\:opacity-100{opacity:1}@media (min-width:640px){.sm\\\\:max-w-\\\\[200px\\\\]{max-width:200px}.sm\\\\:flex-row{flex-direction:row}.sm\\\\:items-start{align-items:flex-start}.sm\\\\:justify-between{justify-content:space-between}.sm\\\\:gap-6{gap:1.5rem}.sm\\\\:px-4{padding-left:1rem;padding-right:1rem}.sm\\\\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\\\\:pt-4{padding-top:1rem}}.\\\\[\\\\&\\\\:\\\\:-webkit-details-marker\\\\]\\\\:hidden::-webkit-details-marker{display:none}.\\\\[\\\\&_svg\\\\]\\\\:-mt-px svg{margin-top:-1px}.\\\\[\\\\&_svg\\\\]\\\\:\\\\!fill-none svg{fill:none!important}\";\n","/**\n * Shadow DOM mount for the editor panel.\n * Creates a host element with an open shadow root, injects the compiled\n * Tailwind CSS, and returns the container to render into via createPortal.\n *\n * Menus portal to a **light-DOM** `menuLayer` on `document.body` (not inside the\n * shadow host). The host uses `pointer-events: none` so the page stays pickable;\n * browsers often skip hit-testing shadow descendants for clicks, which broke\n * menu buttons when menus lived under that host (same idea as Radix Popper content).\n */\n\nimport { installFluxRadixMintInspectVars } from \"./install-flux-radix-mint\";\nimport { installFluxFloatingMenuStyles } from \"./floating-menu-styles\";\nimport { editorStyles } from \"./editor-styles\";\n\nexport interface ShadowMount {\n host: HTMLDivElement;\n container: HTMLDivElement;\n /** Light-DOM sibling on `body` for portaled menus — outside shadow host so clicks hit menu targets. */\n menuLayer: HTMLDivElement;\n}\n\nexport function mountShadowPanel(): ShadowMount {\n const host = document.createElement(\"div\");\n host.setAttribute(\"data-flux-editor-host\", \"\");\n host.style.cssText = \"position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;pointer-events:none;\";\n document.body.appendChild(host);\n\n const shadow = host.attachShadow({ mode: \"open\" });\n\n const style = document.createElement(\"style\");\n style.textContent = editorStyles;\n shadow.appendChild(style);\n\n const container = document.createElement(\"div\");\n container.style.cssText = \"position:absolute;inset:0;pointer-events:none;cursor:default;z-index:0;\";\n shadow.appendChild(container);\n\n installFluxFloatingMenuStyles();\n installFluxRadixMintInspectVars();\n\n const menuLayer = document.createElement(\"div\");\n menuLayer.setAttribute(\"data-flux-editor-menu-layer\", \"\");\n menuLayer.setAttribute(\"data-flux-ui\", \"\");\n menuLayer.style.cssText = \"position:fixed;inset:0;z-index:10001;pointer-events:none;overflow:visible;\";\n document.body.appendChild(menuLayer);\n\n return { host, container, menuLayer };\n}\n\nexport function unmountShadowPanel(host: HTMLDivElement, menuLayer: HTMLDivElement): void {\n host.remove();\n menuLayer.remove();\n}\n","\"use client\";\n\nimport { X } from \"lucide-react\";\nimport { Breadcrumb } from \"./selection-overlay\";\nimport type { DesignEditorElement } from \"./use-selection\";\n\ninterface ToolbarProps {\n selectedElement: DesignEditorElement | null;\n /** Panel close — parent supplies iris exit origin (e.g. floating toggle), not the ✕ hit target. */\n onClose: () => void;\n}\n\nconst titleClass = \"truncate font-['Inter',system-ui,sans-serif] text-[12px] leading-[14px] text-[#D9D9D9]\";\n\nexport function Toolbar({ selectedElement, onClose }: ToolbarProps) {\n return (\n <header data-flux-ui className=\"flex shrink-0 items-start justify-between gap-0 px-3 pt-3 pb-2\">\n <div className=\"h-4 min-w-0 flex-1\">\n {selectedElement ? <Breadcrumb element={selectedElement} className={titleClass} /> : <div className={titleClass}>Element name</div>}\n </div>\n <button\n type=\"button\"\n onPointerDown={(e) => {\n if (e.button !== 0) return;\n e.preventDefault();\n onClose();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClose();\n }\n }}\n className=\"shrink-0 rounded-small p-0.5 text-[#D9D9D9] transition-colors hover:bg-[#333333]\"\n title=\"Close panel\"\n aria-label=\"Close panel\"\n >\n <X size={16} strokeWidth={2} aria-hidden />\n </button>\n </header>\n );\n}\n","/**\n * Traces winning CSS rules for properties.\n */\n\nexport interface StyleSource {\n property: string;\n value: string;\n selector: string;\n origin: \"inline\" | \"stylesheet\" | \"user-agent\";\n stylesheet?: string;\n important: boolean;\n mediaQuery?: string;\n}\n\nconst LONGHAND_TO_SHORTHAND: Record<string, string> = {\n \"padding-top\": \"padding\",\n \"padding-right\": \"padding\",\n \"padding-bottom\": \"padding\",\n \"padding-left\": \"padding\",\n \"margin-top\": \"margin\",\n \"margin-right\": \"margin\",\n \"margin-bottom\": \"margin\",\n \"margin-left\": \"margin\",\n \"border-top-width\": \"border-width\",\n \"border-right-width\": \"border-width\",\n \"border-bottom-width\": \"border-width\",\n \"border-left-width\": \"border-width\",\n \"border-top-color\": \"border-color\",\n \"border-right-color\": \"border-color\",\n \"border-bottom-color\": \"border-color\",\n \"border-left-color\": \"border-color\",\n \"border-top-style\": \"border-style\",\n \"border-right-style\": \"border-style\",\n \"border-bottom-style\": \"border-style\",\n \"border-left-style\": \"border-style\",\n \"border-top-left-radius\": \"border-radius\",\n \"border-top-right-radius\": \"border-radius\",\n \"border-bottom-left-radius\": \"border-radius\",\n \"border-bottom-right-radius\": \"border-radius\",\n gap: \"gap\",\n \"row-gap\": \"gap\",\n \"column-gap\": \"gap\",\n};\n\nexport function camelToKebab(s: string): string {\n return s.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n}\n\nfunction formatSheetName(href: string): string {\n if (href === \"embedded\") return \"embedded\";\n try {\n const url = new URL(href);\n return url.pathname.replace(/^\\/_next\\/static\\/css\\//, \"\").replace(/^\\//, \"\");\n } catch {\n return href.slice(0, 80);\n }\n}\n\nfunction walkRules(\n rules: CSSRuleList,\n element: Element,\n properties: string[],\n result: Map<string, StyleSource[]>,\n sheetName: string,\n mediaQuery?: string,\n): void {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSMediaRule) {\n walkRules(rule.cssRules, element, properties, result, sheetName, rule.conditionText);\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n try {\n if (!element.matches(rule.selectorText)) continue;\n } catch {\n continue;\n }\n const style = rule.style;\n for (const prop of properties) {\n const kebab = camelToKebab(prop);\n let value = style.getPropertyValue(kebab);\n let matchedProperty = kebab;\n if (!value) {\n const shorthand = LONGHAND_TO_SHORTHAND[kebab];\n if (shorthand) {\n value = style.getPropertyValue(shorthand);\n matchedProperty = shorthand;\n }\n }\n if (value) {\n const src: StyleSource = {\n property: matchedProperty,\n value: value.trim(),\n selector: rule.selectorText,\n origin: \"stylesheet\",\n stylesheet: sheetName,\n important: style.getPropertyPriority(matchedProperty) === \"important\",\n };\n if (mediaQuery) src.mediaQuery = mediaQuery;\n result.get(prop)?.push(src);\n }\n }\n }\n}\n\n/**\n * All matching rules per camelCase property, ordered inline first then !important.\n */\nexport function findStyleSources(element: Element, properties: string[]): Map<string, StyleSource[]> {\n const result = new Map<string, StyleSource[]>();\n for (const prop of properties) {\n result.set(prop, []);\n }\n\n if (element instanceof HTMLElement) {\n const inlineStyle = element.style;\n for (const prop of properties) {\n const kebab = camelToKebab(prop);\n let value = inlineStyle.getPropertyValue(kebab);\n let matchedProperty = kebab;\n if (!value) {\n const shorthand = LONGHAND_TO_SHORTHAND[kebab];\n if (shorthand) {\n value = inlineStyle.getPropertyValue(shorthand);\n matchedProperty = shorthand;\n }\n }\n if (value) {\n result.get(prop)?.push({\n property: matchedProperty,\n value: value.trim(),\n selector: \"[inline]\",\n origin: \"inline\",\n important: inlineStyle.getPropertyPriority(matchedProperty) === \"important\",\n });\n }\n }\n }\n\n for (const sheet of document.styleSheets) {\n try {\n const sheetLabel = sheet.href ? formatSheetName(sheet.href) : \"embedded\";\n walkRules(sheet.cssRules, element, properties, result, sheetLabel);\n } catch {\n /* cross-origin or inaccessible */\n }\n }\n\n for (const [, sources] of result) {\n sources.sort((a, b) => {\n if (a.origin === \"inline\" && b.origin !== \"inline\") return -1;\n if (b.origin === \"inline\" && a.origin !== \"inline\") return 1;\n if (a.important && !b.important) return -1;\n if (b.important && !a.important) return 1;\n return 0;\n });\n }\n\n return result;\n}\n\n/** One-line “winning rule” summary for copy output. */\nexport function formatStyleSourceSummary(sources: StyleSource[]): string {\n if (sources.length === 0) return \"unknown\";\n const winner = sources[0];\n if (winner.origin === \"inline\") return \"inline style\";\n let result = `\\`${winner.selector}\\``;\n if (winner.stylesheet) result += ` in \\`${winner.stylesheet}\\``;\n if (winner.mediaQuery) result += ` @media(${winner.mediaQuery})`;\n if (winner.important) result += \" !important\";\n return result;\n}\n","/**\n * Per-property token / variable / stylesheet context for copy enrichment.\n */\n\nimport { findStyleSources } from \"./style-source\";\nimport { getTokensForProperty, scanTokens } from \"./token-scanner\";\nimport type { StyleSnapshot } from \"./use-selection\";\n\nconst MAX_ALTERNATIVES = 3;\nconst MAX_CSS_VARS = 2;\n\n/** Same shape as `CollapsedChangeRow` in `use-copy-prompt` (avoid circular imports). */\nexport type CollapseRowInput = {\n sortKey:\n | keyof StyleSnapshot\n | \"__borderWidthAll\"\n | \"__borderRadiusAll\"\n | \"__borderColorAll\"\n | \"__borderStyleAll\";\n label: string;\n cssProp: string;\n before: string;\n after: string;\n variableLink?: string;\n};\n\nexport type RecommendedToken = {\n type: \"css-variable\" | \"utility-class\";\n name: string;\n value: string;\n exact: boolean;\n distance?: string;\n};\n\nexport type EnrichedCollapsedRow = CollapseRowInput & {\n snapshotKey: keyof StyleSnapshot;\n recommended?: RecommendedToken;\n alternatives: RecommendedToken[];\n cssVariableNames: string[];\n conflicts: import(\"./style-source\").StyleSource[];\n winningSource?: import(\"./style-source\").StyleSource;\n};\n\nfunction valuesRoughlyEqual(a: string, b: string): boolean {\n const x = a.trim().toLowerCase().replace(/\\s+/g, \"\");\n const y = b.trim().toLowerCase().replace(/\\s+/g, \"\");\n if (!x || !y) return false;\n return x === y || x.includes(y) || y.includes(x);\n}\n\nfunction snapshotKeyForRow(row: CollapseRowInput): keyof StyleSnapshot {\n if (row.sortKey === \"__borderWidthAll\") return \"borderTopWidth\";\n if (row.sortKey === \"__borderRadiusAll\") return \"borderTopLeftRadius\";\n if (row.sortKey === \"__borderColorAll\") return \"borderTopColor\";\n if (row.sortKey === \"__borderStyleAll\") return \"borderTopStyle\";\n return row.sortKey as keyof StyleSnapshot;\n}\n\nconst SKIP_CSS_VAR_VALUE_MATCH = new Set([\"top\", \"right\", \"bottom\", \"left\", \"transform\"]);\n\nfunction findCssVarNamesForValue(cssPropKebab: string, targetValue: string): string[] {\n if (SKIP_CSS_VAR_VALUE_MATCH.has(cssPropKebab)) return [];\n const names: string[] = [];\n try {\n const { variables } = scanTokens();\n const t = targetValue.trim().toLowerCase();\n const root = document.documentElement;\n for (const v of variables) {\n const resolved = getComputedStyle(root).getPropertyValue(v.name).trim();\n const r = resolved.trim().toLowerCase();\n if (r && (r === t || valuesRoughlyEqual(resolved, targetValue))) {\n names.push(v.name);\n if (names.length >= MAX_CSS_VARS) break;\n }\n }\n } catch {\n /* ignore */\n }\n return names;\n}\n\nexport function enrichChangeRows(\n element: Element,\n rows: CollapseRowInput[],\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string> | undefined,\n): EnrichedCollapsedRow[] {\n return rows.map((row) => {\n const snapshotKey = snapshotKeyForRow(row);\n const link = row.variableLink ?? variableLinks?.get(snapshotKey);\n let recommended: RecommendedToken | undefined;\n if (link) {\n const n = link.startsWith(\"--\") ? link : `--${link}`;\n recommended = {\n type: \"css-variable\",\n name: `var(${n})`,\n value: row.after,\n exact: true,\n };\n }\n\n const tokens = (() => {\n try {\n return getTokensForProperty(row.cssProp);\n } catch {\n return [];\n }\n })();\n\n if (!recommended && tokens.length > 0) {\n let best = tokens.find((t) => t.value.trim().toLowerCase() === row.after.trim().toLowerCase());\n let exact = Boolean(best);\n if (!best) {\n best = tokens.find((t) => valuesRoughlyEqual(t.value, row.after)) ?? tokens[0];\n exact = best ? valuesRoughlyEqual(best.value, row.after) : false;\n }\n if (best) {\n recommended = {\n type: \"utility-class\",\n name: `.${best.className}`,\n value: best.value,\n exact,\n distance: exact ? undefined : `nearest: ${best.value} vs ${row.after}`,\n };\n }\n }\n\n const cssVarNames = findCssVarNamesForValue(row.cssProp, row.after);\n if (!recommended && cssVarNames.length > 0) {\n recommended = {\n type: \"css-variable\",\n name: `var(${cssVarNames[0]})`,\n value: row.after,\n exact: true,\n };\n }\n\n const alternatives: RecommendedToken[] = [];\n const recName = recommended?.name;\n for (const t of tokens) {\n if (alternatives.length >= MAX_ALTERNATIVES) break;\n const cand = `.${t.className}`;\n if (cand === recName) continue;\n const ex = t.value.trim().toLowerCase() === row.after.trim().toLowerCase();\n alternatives.push({\n type: \"utility-class\",\n name: cand,\n value: t.value,\n exact: ex,\n distance: ex ? undefined : undefined,\n });\n }\n\n let winningSource: import(\"./style-source\").StyleSource | undefined;\n let conflicts: import(\"./style-source\").StyleSource[] = [];\n try {\n const camel = String(snapshotKey);\n const map = findStyleSources(element, [camel]);\n const list = map.get(camel) ?? [];\n if (list.length > 0) {\n winningSource = list[0];\n conflicts = list.slice(1, 4);\n }\n } catch {\n /* ignore */\n }\n\n return {\n ...row,\n snapshotKey,\n recommended,\n alternatives,\n cssVariableNames: cssVarNames,\n conflicts,\n winningSource,\n };\n });\n}\n","/**\n * React fiber traversal for extracting component hierarchy and source file locations.\n * Works with React 18+ dev builds that attach `__reactFiber$` to DOM nodes.\n */\n\nexport interface ReactComponentInfo {\n components: string[];\n sourceFile: { fileName: string; lineNumber: number; columnNumber?: number } | null;\n}\n\nexport function getFiberFromElement(el: Element): unknown {\n const elAny = el as unknown as Record<string, unknown>;\n for (const key of Object.keys(elAny)) {\n if (key.startsWith(\"__reactFiber$\")) return elAny[key];\n }\n return null;\n}\n\nfunction normalizeSourceFilePath(fileName: string): string {\n let path = fileName.replace(/^file:\\/\\//, \"\");\n path = path.replace(/^\\/([A-Za-z]:\\/)/, \"$1\");\n const inNodeModules = path.split(\"/node_modules/\");\n if (inNodeModules.length > 1) {\n path = `node_modules/${inNodeModules[inNodeModules.length - 1]}`;\n }\n const projectMarker = \"/able/\";\n const i = path.indexOf(projectMarker);\n if (i !== -1) return path.slice(i + projectMarker.length);\n return path.replace(/\\\\/g, \"/\");\n}\n\nfunction isProjectSourceFile(file: string): boolean {\n const f = file.replace(/\\\\/g, \"/\");\n if (!f || f.startsWith(\"node_modules/\") || f.includes(\"/node_modules/\")) return false;\n if (f.includes(\".next/\") || f.includes(\"__next\") || f.includes(\"next/dist\") || f.includes(\"@vercel/\")) return false;\n return (\n f.startsWith(\"app/\") ||\n f.startsWith(\"components/\") ||\n f.startsWith(\"lib/\") ||\n f.startsWith(\"pages/\") ||\n f.startsWith(\"src/\") ||\n f.includes(\"/app/\") ||\n f.includes(\"/components/\") ||\n f.includes(\"/lib/\") ||\n f.includes(\"/pages/\") ||\n f.includes(\"/src/\")\n );\n}\n\nfunction isBoilerplateStackFile(file: string): boolean {\n const f = file.replace(/\\\\/g, \"/\");\n return f.includes(\"components/ui/\") || f.includes(\"components/providers/\") ||\n f.includes(\"components/theme/\") || f.includes(\"components/click-sound/\");\n}\n\nfunction readDebugSource(fiber: Record<string, unknown>): { fileName: string; lineNumber: number; columnNumber?: number } | null {\n const ds = fiber._debugSource as { fileName?: string; lineNumber?: number; columnNumber?: number } | undefined;\n if (ds?.fileName != null && ds.lineNumber != null) {\n return { fileName: ds.fileName, lineNumber: ds.lineNumber, columnNumber: ds.columnNumber };\n }\n const info = fiber._debugInfo;\n if (info != null && typeof info === \"object\" && !Array.isArray(info)) {\n const row = info as Record<string, unknown>;\n const fileName = row.fileName ?? row.filename;\n const lineNumber = row.lineNumber ?? row.line;\n if (typeof fileName === \"string\" && typeof lineNumber === \"number\") {\n return { fileName, lineNumber, columnNumber: typeof row.columnNumber === \"number\" ? row.columnNumber : undefined };\n }\n }\n return null;\n}\n\nfunction componentNameFromType(type: unknown): string | null {\n if (type == null || typeof type === \"string\") return null;\n if (typeof type === \"function\") {\n const fn = type as { name?: string; displayName?: string };\n const n = fn.displayName || fn.name;\n return n && !n.startsWith(\"_\") ? n : \"Anonymous\";\n }\n if (typeof type === \"object\") {\n const o = type as Record<string, unknown>;\n if (typeof o.render === \"function\") {\n const r = o.render as { name?: string; displayName?: string };\n return r.displayName || r.name || \"ForwardRef\";\n }\n if (o.type != null) return componentNameFromType(o.type);\n }\n return null;\n}\n\nconst REACT_STACK_SKIP_NAMES = new Set([\n \"OuterLayoutRouter\", \"InnerLayoutRouter\", \"SegmentStateProvider\",\n \"RenderFromTemplateContext\", \"ScrollAndFocusHandler\", \"InnerScrollAndFocusHandler\",\n \"ErrorBoundary\", \"LoadingBoundary\", \"HTTPAccessFallbackBoundary\",\n \"HTTPAccessFallbackErrorBoundary\", \"RedirectBoundary\", \"RedirectErrorBoundary\",\n \"SegmentViewNode\", \"ViewportBoundary\", \"MetadataBoundary\", \"OutletBoundary\",\n \"Providers\", \"ViewTransitions\", \"TooltipProvider\", \"TooltipProviderProvider\",\n \"AppThemeProvider\", \"ClickSoundProvider\", \"DesignEditor\",\n]);\n\nfunction isNoiseComponentName(name: string): boolean {\n if (name.length === 1 && /^[A-Za-z]$/.test(name)) return true;\n if (name.endsWith(\"Provider\")) return true;\n return false;\n}\n\nexport function getExactSourceLocation(el: Element): string | null {\n let fiber: unknown = getFiberFromElement(el);\n while (fiber && typeof fiber === \"object\") {\n const f = fiber as Record<string, unknown>;\n const debugSource = readDebugSource(f);\n if (debugSource) {\n const file = normalizeSourceFilePath(debugSource.fileName);\n if (isProjectSourceFile(file)) {\n const col = debugSource.columnNumber != null ? `:${debugSource.columnNumber}` : \"\";\n return `${file}:${debugSource.lineNumber}${col}`;\n }\n }\n fiber = f.return;\n }\n return null;\n}\n\nexport function getReactComponentStack(el: Element): string | null {\n if (typeof window === \"undefined\") return null;\n const fiber = getFiberFromElement(el);\n if (!fiber || typeof fiber !== \"object\") return null;\n\n const fromProject: string[] = [];\n const fallback: string[] = [];\n let f: unknown = fiber;\n let depth = 0;\n while (f && typeof f === \"object\" && depth++ < 64) {\n const node = f as Record<string, unknown>;\n const name = componentNameFromType(node.type);\n if (!name || REACT_STACK_SKIP_NAMES.has(name) || isNoiseComponentName(name)) {\n f = node.return;\n continue;\n }\n const ds = readDebugSource(node);\n if (ds) {\n const file = normalizeSourceFilePath(ds.fileName);\n if (isProjectSourceFile(file) && !isBoilerplateStackFile(file)) fromProject.push(name);\n if (file.startsWith(\"node_modules/\") || (isProjectSourceFile(file) && isBoilerplateStackFile(file))) {\n f = node.return;\n continue;\n }\n }\n fallback.push(name);\n f = node.return;\n }\n if (fromProject.length > 0) return fromProject.reverse().join(\" > \");\n if (fallback.length === 0) return null;\n return fallback.slice(0, 14).reverse().join(\" > \");\n}\n\nexport function getReactComponentInfo(el: Element): ReactComponentInfo {\n const stack = getReactComponentStack(el);\n const source = getExactSourceLocation(el);\n return {\n components: stack ? stack.split(\" > \") : [],\n sourceFile: source ? parseSourceLocation(source) : null,\n };\n}\n\nfunction parseSourceLocation(s: string): { fileName: string; lineNumber: number; columnNumber?: number } {\n const parts = s.split(\":\");\n const fileName = parts.slice(0, -1).join(\":\").replace(/:$/, \"\") || parts[0];\n const lineNumber = Number.parseInt(parts[parts.length - 1], 10) || 1;\n return { fileName: fileName.replace(/:$/, \"\"), lineNumber };\n}\n","\"use client\";\n\nimport { enrichChangeRows, type EnrichedCollapsedRow, type RecommendedToken } from \"./change-enrichment\";\nimport { getUniqueSelector } from \"./preview-engine\";\nimport { formatStyleSourceSummary } from \"./style-source\";\nimport { detectFramework, summarizeTokenSystem } from \"./token-scanner\";\nimport type { FluxStructuralReorder } from \"./drag-reorder-types\";\nimport type { CopyBatchItem, DesignEditorElement, DetachedVariableEntry, StyleSnapshot } from \"./use-selection\";\nimport {\n STYLE_KEYS,\n CSS_PROP_MAP,\n getClassNameString,\n getComputedSnapshot,\n getElementPath,\n getElementSelector,\n} from \"./use-selection\";\nimport { getExactSourceLocation, getReactComponentStack } from \"./react-info\";\n\nconst PSEUDO_STATES = [\":hover\", \":focus\", \":active\", \":focus-visible\", \":focus-within\"] as const;\n\nfunction parsePseudoState(selector: string): { base: string; pseudoState: string | null } {\n for (const pseudo of PSEUDO_STATES) {\n if (selector.endsWith(pseudo)) {\n return { base: selector.slice(0, -pseudo.length), pseudoState: pseudo.slice(1) };\n }\n }\n return { base: selector, pseudoState: null };\n}\n\n/** Selector scope line for copy output (standard detail). */\nexport function describeSelectorScope(selector: string): string | null {\n const { base } = parsePseudoState(selector.trim());\n if (!base || typeof document === \"undefined\") return null;\n\n const noParen = base.replace(/\\([^)]*\\)/g, \"\");\n const hasDescendant = /[.\\])\\w]\\s+[.\\[:]/.test(noParen);\n const hasChild = /[.\\])\\w]\\s*>\\s*[.\\[:]/.test(noParen);\n\n if (base.startsWith(\".\") || base.startsWith(\":\") || base.startsWith(\"[\")) {\n try {\n const count = document.querySelectorAll(base).length;\n const countStr = count > 0 ? `, ${count} element${count > 1 ? \"s\" : \"\"}` : \"\";\n if (hasDescendant || hasChild) {\n return `ancestor-scoped${countStr}`;\n }\n if (count > 0) {\n return `class-scoped${countStr}`;\n }\n } catch {\n /* fall through */\n }\n if (hasDescendant || hasChild) return \"ancestor-scoped\";\n return \"class-scoped\";\n }\n\n if (base.startsWith(\"#\")) return \"id-scoped, unique\";\n if (base.includes(\">\")) return \"element-specific\";\n return null;\n}\n\nfunction getNthOfTypeIndex(el: Element): number {\n const parent = el.parentElement;\n if (!parent) return 1;\n const tag = el.tagName.toLowerCase();\n let n = 0;\n for (const child of parent.children) {\n if (child.tagName.toLowerCase() === tag) {\n n++;\n if (child === el) return n;\n }\n }\n return 1;\n}\n\nfunction getPreciseSelector(el: Element): string {\n if (el.id) return `#${CSS.escape(el.id)}`;\n const tag = el.tagName.toLowerCase();\n const n = getNthOfTypeIndex(el);\n const classes = (getClassNameString(el).trim().match(/\\S+/g) ?? []).slice(0, 2);\n const suffix = classes.length ? `.${classes.join(\".\")}` : \"\";\n return `${tag}:nth-of-type(${n})${suffix}`;\n}\n\nfunction pathWithLeafNthOfType(fullPath: string, el: Element): string {\n const parts = fullPath.split(\" > \");\n if (parts.length === 0) return fullPath;\n const tag = el.tagName.toLowerCase();\n const n = getNthOfTypeIndex(el);\n const last = parts[parts.length - 1];\n if (last.includes(\"nth-of-type\")) return fullPath;\n const re = new RegExp(`^${tag}(?=(\\\\.|#|$))`);\n parts[parts.length - 1] = re.test(last) ? last.replace(re, `${tag}:nth-of-type(${n})`) : `${tag}:nth-of-type(${n})`;\n return parts.join(\" > \");\n}\n\nfunction truncateText(s: string, max: number): string {\n const t = s.replace(/\\s+/g, \" \").trim();\n if (t.length <= max) return t;\n return `${t.slice(0, max - 1)}\\u2026`;\n}\n\nconst PROP_LABELS: Record<string, string> = {\n fontFamily: \"font-family\",\n fontSize: \"font-size\",\n fontWeight: \"font-weight\",\n lineHeight: \"line-height\",\n letterSpacing: \"letter-spacing\",\n color: \"color\",\n textAlign: \"text-align\",\n width: \"width\",\n height: \"height\",\n padding: \"padding\",\n margin: \"margin\",\n paddingTop: \"padding-top\",\n paddingRight: \"padding-right\",\n paddingBottom: \"padding-bottom\",\n paddingLeft: \"padding-left\",\n marginTop: \"margin-top\",\n marginRight: \"margin-right\",\n marginBottom: \"margin-bottom\",\n marginLeft: \"margin-left\",\n position: \"position\",\n top: \"top\",\n right: \"right\",\n bottom: \"bottom\",\n left: \"left\",\n alignSelf: \"align-self\",\n justifySelf: \"justify-self\",\n overflow: \"overflow\",\n display: \"display\",\n flexDirection: \"flex-direction\",\n justifyContent: \"justify-content\",\n alignItems: \"align-items\",\n gap: \"gap\",\n rowGap: \"row-gap\",\n columnGap: \"column-gap\",\n gridTemplateColumns: \"grid-template-columns\",\n gridTemplateRows: \"grid-template-rows\",\n backgroundColor: \"background-color\",\n backgroundImage: \"background-image\",\n borderTopWidth: \"border-top-width\",\n borderRightWidth: \"border-right-width\",\n borderBottomWidth: \"border-bottom-width\",\n borderLeftWidth: \"border-left-width\",\n borderTopLeftRadius: \"border-top-left-radius\",\n borderTopRightRadius: \"border-top-right-radius\",\n borderBottomRightRadius: \"border-bottom-right-radius\",\n borderBottomLeftRadius: \"border-bottom-left-radius\",\n borderTopColor: \"border-top-color\",\n borderRightColor: \"border-right-color\",\n borderBottomColor: \"border-bottom-color\",\n borderLeftColor: \"border-left-color\",\n borderTopStyle: \"border-top-style\",\n borderRightStyle: \"border-right-style\",\n borderBottomStyle: \"border-bottom-style\",\n borderLeftStyle: \"border-left-style\",\n borderColor: \"border-color\",\n borderRadius: \"border-radius\",\n borderStyle: \"border-style\",\n boxShadow: \"box-shadow\",\n opacity: \"opacity\",\n __borderWidthAll: \"border-width\",\n __borderRadiusAll: \"border-radius\",\n __borderColorAll: \"border-color\",\n __borderStyleAll: \"border-style\",\n};\n\nfunction shortenPathSegment(segment: string): string {\n if (segment.length <= 44) return segment;\n const hash = segment.indexOf(\"#\");\n if (hash !== -1) {\n const beforeId = segment.slice(0, hash);\n const id = segment.slice(hash);\n const dot = beforeId.indexOf(\".\");\n return dot === -1 ? segment : `${beforeId.slice(0, dot)}${id}`;\n }\n const dot = segment.indexOf(\".\");\n return dot === -1 ? segment : segment.slice(0, dot);\n}\n\nfunction abbreviateDomPath(full: string, maxLen = 160): string {\n const parts = full.split(\" > \").map(shortenPathSegment);\n const joined = parts.join(\" > \");\n if (joined.length <= maxLen) return joined;\n if (parts.length <= 4) return joined;\n return `\\u2026 > ${parts.slice(-5).join(\" > \")}`;\n}\n\nfunction escapeMdCell(s: string): string {\n return s.replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \");\n}\n\nfunction formatStylingApproach(approach: string): string {\n switch (approach) {\n case \"tailwind\":\n return \"Tailwind CSS (modify utility classes)\";\n case \"css-modules\":\n return \"CSS Modules (modify `.module.css` file)\";\n case \"css-in-js\":\n return \"CSS-in-JS / Emotion (modify style object)\";\n case \"styled-components\":\n return \"styled-components (modify template literal)\";\n case \"plain-css\":\n return \"Plain CSS (modify stylesheet)\";\n case \"custom\":\n return \"Custom / mixed CSS\";\n default:\n return approach;\n }\n}\n\n/** Recommended token / class hints (Token column). */\nfunction formatRecommendedCell(rec?: RecommendedToken): string {\n if (!rec) return \"\\u2014\";\n const quoted = `\\`${rec.name}\\``;\n if (!rec.exact && rec.distance) return `${quoted} (${rec.distance})`;\n return quoted;\n}\n\nexport type CollapsedSyntheticKey =\n | \"__borderWidthAll\"\n | \"__borderRadiusAll\"\n | \"__borderColorAll\"\n | \"__borderStyleAll\";\n\nexport type CollapsedChangeRow = {\n sortKey: keyof StyleSnapshot | CollapsedSyntheticKey;\n label: string;\n cssProp: string;\n before: string;\n after: string;\n variableLink?: string;\n};\n\nfunction tryCollapseFourEqualSides(\n m: Map<keyof StyleSnapshot, { before: string; after: string }>,\n keys: (keyof StyleSnapshot)[],\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string> | undefined,\n out: CollapsedChangeRow,\n): boolean {\n if (!keys.every((k) => m.has(k)) || keys.some((k) => variableLinks?.has(k))) return false;\n const rows = keys.map((k) => m.get(k)).filter((v): v is { before: string; after: string } => v != null);\n if (\n rows.length !== 4 ||\n new Set(rows.map((r) => r.before)).size !== 1 ||\n new Set(rows.map((r) => r.after)).size !== 1\n ) {\n return false;\n }\n for (const k of keys) m.delete(k);\n Object.assign(out, {\n before: rows[0].before,\n after: rows[0].after,\n variableLink: undefined,\n });\n return true;\n}\n\n/** Collapse matching longhands into one row in the changes table. */\nexport function collapseChangesForPrompt(\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>,\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string> | undefined,\n): CollapsedChangeRow[] {\n const m = new Map(changes);\n const synthetics: CollapsedChangeRow[] = [];\n\n const padLong: (keyof StyleSnapshot)[] = [\"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\"];\n if (padLong.every((k) => m.has(k)) && !padLong.some((k) => variableLinks?.has(k))) {\n const rows = padLong.map((k) => m.get(k)).filter((v): v is { before: string; after: string } => v != null);\n if (\n rows.length === 4 &&\n new Set(rows.map((r) => r.before)).size === 1 &&\n new Set(rows.map((r) => r.after)).size === 1\n ) {\n for (const k of padLong) m.delete(k);\n m.set(\"padding\", { before: rows[0].before, after: rows[0].after });\n }\n }\n\n const marLong: (keyof StyleSnapshot)[] = [\"marginTop\", \"marginRight\", \"marginBottom\", \"marginLeft\"];\n if (marLong.every((k) => m.has(k)) && !marLong.some((k) => variableLinks?.has(k))) {\n const rows = marLong.map((k) => m.get(k)).filter((v): v is { before: string; after: string } => v != null);\n if (\n rows.length === 4 &&\n new Set(rows.map((r) => r.before)).size === 1 &&\n new Set(rows.map((r) => r.after)).size === 1\n ) {\n for (const k of marLong) m.delete(k);\n m.set(\"margin\", { before: rows[0].before, after: rows[0].after });\n }\n }\n\n const bw: CollapsedChangeRow = {\n sortKey: \"__borderWidthAll\",\n label: PROP_LABELS.__borderWidthAll,\n cssProp: \"border-width\",\n before: \"\",\n after: \"\",\n };\n if (\n tryCollapseFourEqualSides(\n m,\n [\"borderTopWidth\", \"borderRightWidth\", \"borderBottomWidth\", \"borderLeftWidth\"],\n variableLinks,\n bw,\n )\n ) {\n synthetics.push(bw);\n }\n\n const br: CollapsedChangeRow = {\n sortKey: \"__borderRadiusAll\",\n label: PROP_LABELS.__borderRadiusAll,\n cssProp: \"border-radius\",\n before: \"\",\n after: \"\",\n };\n if (\n tryCollapseFourEqualSides(\n m,\n [\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\",\n \"borderBottomRightRadius\",\n \"borderBottomLeftRadius\",\n ],\n variableLinks,\n br,\n )\n ) {\n synthetics.push(br);\n }\n\n const bc: CollapsedChangeRow = {\n sortKey: \"__borderColorAll\",\n label: PROP_LABELS.__borderColorAll,\n cssProp: \"border-color\",\n before: \"\",\n after: \"\",\n };\n if (\n tryCollapseFourEqualSides(\n m,\n [\"borderTopColor\", \"borderRightColor\", \"borderBottomColor\", \"borderLeftColor\"],\n variableLinks,\n bc,\n )\n ) {\n synthetics.push(bc);\n }\n\n const bs: CollapsedChangeRow = {\n sortKey: \"__borderStyleAll\",\n label: PROP_LABELS.__borderStyleAll,\n cssProp: \"border-style\",\n before: \"\",\n after: \"\",\n };\n if (\n tryCollapseFourEqualSides(\n m,\n [\"borderTopStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderLeftStyle\"],\n variableLinks,\n bs,\n )\n ) {\n synthetics.push(bs);\n }\n\n const out: CollapsedChangeRow[] = [];\n for (const [k, v] of m) {\n out.push({\n sortKey: k,\n label: PROP_LABELS[k] ?? String(k),\n cssProp: CSS_PROP_MAP[k],\n before: v.before,\n after: v.after,\n variableLink: variableLinks?.get(k),\n });\n }\n out.push(...synthetics);\n return sortCollapsedRows(out);\n}\n\nfunction sortOrderIndex(sortKey: CollapsedChangeRow[\"sortKey\"], order: Map<keyof StyleSnapshot, number>): number {\n if (sortKey === \"__borderWidthAll\") return order.get(\"borderTopWidth\") ?? 99;\n if (sortKey === \"__borderRadiusAll\") return order.get(\"borderTopLeftRadius\") ?? 99;\n if (sortKey === \"__borderColorAll\") return order.get(\"borderTopColor\") ?? 99;\n if (sortKey === \"__borderStyleAll\") return order.get(\"borderTopStyle\") ?? 99;\n return order.get(sortKey as keyof StyleSnapshot) ?? 999;\n}\n\nfunction sortCollapsedRows(rows: CollapsedChangeRow[]): CollapsedChangeRow[] {\n const order = new Map(STYLE_KEYS.map((k, i) => [k, i]));\n return rows.sort((a, b) => sortOrderIndex(a.sortKey, order) - sortOrderIndex(b.sortKey, order));\n}\n\n/** Resolution context block (winning rule + alternatives). */\nfunction formatResolutionContextFromEnriched(rows: EnrichedCollapsedRow[]): string | null {\n const entries: string[] = [];\n for (const row of rows) {\n const hasAlt = row.alternatives.length > 0;\n const hasVars = row.cssVariableNames.length > 0;\n const hasConf = row.conflicts.length > 0;\n const hasWin = Boolean(row.winningSource);\n if (!row.recommended && !hasAlt && !hasVars && !hasConf && !hasWin) continue;\n\n const lines: string[] = [];\n lines.push(`**\\`${row.label}\\`** \\`${row.before}\\` \\u2192 \\`${row.after}\\``);\n\n if (row.winningSource) {\n lines.push(`- Source: ${formatStyleSourceSummary([row.winningSource])}`);\n }\n if (row.recommended) {\n const r = row.recommended;\n const label = r.exact ? \"exact\" : r.distance || \"fuzzy\";\n lines.push(`- Recommended: \\`${r.name}\\` (${label}, \\`${escapeMdCell(r.value)}\\`)`);\n }\n if (hasAlt) {\n lines.push(\n `- Alternatives: ${row.alternatives.map((a) => `\\`${a.name}\\` (\\`${escapeMdCell(a.value)}\\`)`).join(\", \")}`,\n );\n }\n if (hasVars) {\n lines.push(`- CSS vars: ${row.cssVariableNames.map((v) => `\\`var(${v})\\``).join(\", \")}`);\n }\n if (hasConf) {\n for (const c of row.conflicts) {\n const imp = c.important ? \", !important\" : \"\";\n lines.push(`- Competing rule: \\`${escapeMdCell(c.selector)}\\` (\\`${escapeMdCell(c.value)}\\`${imp})`);\n }\n }\n entries.push(lines.join(\"\\n\"));\n }\n if (entries.length === 0) return null;\n return `### Resolution context\\n\\n${entries.join(\"\\n\\n\")}\\n`;\n}\n\nfunction buildSharedHeaderLines(elementCount: number): {\n lines: string[];\n framework: ReturnType<typeof detectFramework>;\n} {\n const lines: string[] = [];\n lines.push(\"Apply these visual changes to the source code:\\n\");\n lines.push(`# Visual Changes (${elementCount} element${elementCount !== 1 ? \"s\" : \"\"})`);\n lines.push(\"\");\n lines.push(\"**Environment:**\");\n const url = typeof window !== \"undefined\" ? window.location.href : \"\";\n if (url) lines.push(`- URL: ${url}`);\n if (typeof window !== \"undefined\") {\n lines.push(`- Viewport: ${window.innerWidth}\\u00d7${window.innerHeight}`);\n lines.push(`- Device Pixel Ratio: ${window.devicePixelRatio}`);\n lines.push(`- Timestamp: ${new Date().toISOString()}`);\n }\n lines.push(\"\");\n\n let framework: ReturnType<typeof detectFramework> = \"unknown\";\n try {\n const tokenSummary = summarizeTokenSystem();\n if (tokenSummary) {\n lines.push(`> **Design tokens detected:** ${tokenSummary}`);\n lines.push(\"\");\n }\n framework = detectFramework();\n } catch {\n /* ignore scan failures */\n }\n if (framework === \"tailwind\") {\n lines.push(\n \"> **Framework:** Tailwind CSS detected. Apply all changes using Tailwind utility classes \\u2014 do NOT use inline styles or raw CSS values. When a class swap is suggested, replace the old class with the new one in the JSX/HTML.\",\n );\n lines.push(\"\");\n } else if (framework === \"css-modules\") {\n lines.push(\n \"> **Framework:** CSS Modules\\u2013style hashed classes detected. Prefer edits in the co-located `.module.css` (or equivalent) when matching selectors.\",\n );\n lines.push(\"\");\n }\n return { lines, framework };\n}\n\nfunction buildElementSectionLines(\n item: CopyBatchItem,\n framework: ReturnType<typeof detectFramework>,\n): string[] {\n const el = item.el;\n const changes = item.changes;\n const links = item.variableLinks;\n const detached = item.detachedVariables;\n\n const tag = el.tagName.toLowerCase();\n const textHeadline = truncateText(el.textContent ?? \"\", 60);\n const selectorLoose = getElementSelector(el);\n let selectorPrimary = selectorLoose;\n try {\n selectorPrimary = getUniqueSelector(el);\n } catch {\n selectorPrimary = selectorLoose;\n }\n const selectorPrecise = getPreciseSelector(el);\n const pathRaw = getElementPath(el);\n const pathFull = pathWithLeafNthOfType(pathRaw, el);\n const pathAbbrev = abbreviateDomPath(pathFull);\n const classes = getClassNameString(el).trim();\n const textPreview = truncateText(el.textContent ?? \"\", 180);\n const nth = getNthOfTypeIndex(el);\n const source = getExactSourceLocation(el);\n const reactStack = getReactComponentStack(el);\n\n const lines: string[] = [];\n lines.push(`## \\`<${tag}>\\`${textHeadline ? ` \"${textHeadline.replace(/\"/g, \"'\")}\"` : \"\"}`);\n lines.push(\"\");\n\n if (source) {\n lines.push(`**Source:** \\`${source.replace(/`/g, \"'\")}\\``);\n } else {\n lines.push(\n \"**Source:** *(not mapped \\u2014 React dev metadata may omit `_debugSource` in this build. Use **Component** + **DOM Path** below.)*\",\n );\n }\n\n if (reactStack) {\n lines.push(`**Component:** ${reactStack.replace(/ > /g, \" \\u2192 \").replace(/`/g, \"'\")}`);\n }\n\n if (framework !== \"unknown\") {\n lines.push(`**Styling:** ${formatStylingApproach(framework)}`);\n }\n\n const pathShown = pathFull.length > 720 ? `${pathFull.slice(0, 717)}\\u2026` : pathFull;\n lines.push(`**DOM Path:** \\`${pathShown.replace(/`/g, \"'\")}\\``);\n if (pathAbbrev !== pathFull && pathAbbrev.length < pathFull.length) {\n lines.push(`**DOM Path (abbrev):** \\`${pathAbbrev.replace(/`/g, \"'\")}\\``);\n }\n\n const { base: baseSelector, pseudoState } = parsePseudoState(selectorPrimary);\n const selectorNotes: string[] = [];\n if (pseudoState) selectorNotes.push(`${pseudoState} state`);\n const scope = describeSelectorScope(selectorPrimary);\n if (scope) selectorNotes.push(scope);\n const selSuffix = selectorNotes.length > 0 ? ` (${selectorNotes.join(\", \")})` : \"\";\n lines.push(`**Selector:** \\`${baseSelector.replace(/`/g, \"'\")}\\`${selSuffix}`);\n\n const noParen = baseSelector.replace(/\\([^)]*\\)/g, \"\");\n const isAncestorSelector =\n /\\.[a-zA-Z][\\w-]*\\s+\\.[a-zA-Z]/.test(noParen) || /\\.[a-zA-Z][\\w-]*\\s*>\\s*\\.[a-zA-Z]/.test(noParen);\n if (isAncestorSelector) {\n const parts = baseSelector.split(/\\s+(?=[.#\\[:])/).filter(Boolean);\n if (parts.length >= 2) {\n const ancestorPart = parts.slice(0, -1).join(\" \");\n const elementPart = parts[parts.length - 1];\n lines.push(`**Ancestor context:** \\`${ancestorPart}\\` \\u2014 change only applies inside this ancestor`);\n lines.push(`**Target element:** \\`${elementPart}\\` \\u2014 the element being styled`);\n }\n } else {\n const compoundClasses = baseSelector.match(/\\.[a-zA-Z0-9_-]+/g);\n if (compoundClasses && compoundClasses.length > 1) {\n const breakdown = compoundClasses.map((c) => {\n const cls = c.slice(1);\n try {\n const count = document.querySelectorAll(c).length;\n return `\\`.${cls}\\` (${count})`;\n } catch {\n return `\\`.${cls}\\``;\n }\n });\n lines.push(`**Target classes:** ${breakdown.join(\" \\u2192 \")} \\u2014 apply where all are present`);\n }\n }\n\n lines.push(\n `**Sibling disambiguation:** \\`${selectorPrecise.replace(/`/g, \"'\")}\\` *(leaf \\`:nth-of-type(${nth})\\` among same-tag siblings)*`,\n );\n if (selectorLoose !== selectorPrimary) {\n lines.push(`**Selector (alternate):** \\`${selectorLoose.replace(/`/g, \"'\")}\\``);\n }\n\n lines.push(`**Text:** \\`${textPreview.replace(/`/g, \"'\")}\\``);\n if (classes) lines.push(`**Classes:** \\`${classes.replace(/`/g, \"'\")}\\``);\n\n lines.push(\"\");\n lines.push(\"### Changes\");\n lines.push(\"\");\n lines.push(\"| Property | Before | After | Token |\");\n lines.push(\"| --- | --- | --- | --- |\");\n\n if (changes.size === 0) {\n lines.push(\n \"| \\u2014 | \\u2014 | \\u2014 | *No tracked edits for this node in the batch (computed vs snapshot).* |\",\n );\n lines.push(\"\");\n lines.push(\"### Current computed styles\");\n lines.push(\"\");\n lines.push(\"| Property | Value |\");\n lines.push(\"| --- | --- |\");\n const snap = getComputedSnapshot(el);\n const snapshotKeys: (keyof StyleSnapshot)[] = [\n \"fontFamily\",\n \"fontSize\",\n \"fontWeight\",\n \"lineHeight\",\n \"letterSpacing\",\n \"color\",\n \"textAlign\",\n \"width\",\n \"height\",\n \"padding\",\n \"margin\",\n ];\n for (const key of snapshotKeys) {\n const label = PROP_LABELS[key] ?? String(key);\n lines.push(`| ${escapeMdCell(label)} | \\`${escapeMdCell(snap[key])}\\` |`);\n }\n } else {\n lines.push(\"\");\n lines.push(\n \"> Rows use **preview sheet** values where relevant (e.g. `width: 100%`) even when computed pixels match the pre-edit snapshot.\",\n );\n lines.push(\"\");\n\n const collapsed = collapseChangesForPrompt(changes, links);\n const enriched = enrichChangeRows(el, collapsed, links);\n for (const row of enriched) {\n const afterShown = row.variableLink\n ? `var(${row.variableLink.startsWith(\"--\") ? row.variableLink : `--${row.variableLink}`})`\n : row.after;\n const tokenCell = formatRecommendedCell(row.recommended);\n lines.push(\n `| \\`${escapeMdCell(row.label)}\\` | \\`${escapeMdCell(row.before)}\\` | \\`${escapeMdCell(afterShown)}\\` | ${tokenCell} |`,\n );\n }\n\n if (detached.length > 0) {\n lines.push(\"\");\n lines.push(\"### Detached Variables\");\n lines.push(\"\");\n lines.push(\n \"The following properties had their design token/variable binding removed. Hardcode the current values \\u2014 do not use the token class or CSS variable:\",\n );\n lines.push(\"\");\n lines.push(\"| Property | Current Value |\");\n lines.push(\"| --- | --- |\");\n for (const { key, value } of detached) {\n const kebab = CSS_PROP_MAP[key];\n lines.push(`| \\`${escapeMdCell(kebab)}\\` | \\`${escapeMdCell(value)}\\` |`);\n }\n }\n\n const res = formatResolutionContextFromEnriched(enriched);\n if (res) {\n lines.push(\"\");\n lines.push(res);\n }\n }\n\n return lines;\n}\n\nfunction buildSuggestedFooterLines(\n framework: ReturnType<typeof detectFramework>,\n anySource: boolean,\n): string[] {\n const lines: string[] = [];\n lines.push(\"\");\n lines.push(\"### Suggested agent steps\");\n lines.push(\"\");\n if (anySource) {\n lines.push(\n \"1. For **each** element section above, open **Source** when present and confirm the JSX/HTML node using **Text**, **DOM Path**, and **Sibling disambiguation**.\",\n );\n } else {\n lines.push(\n \"1. For **each** section, locate the node from **URL** + **DOM Path** + **Text** + **Classes** (search under `app/`, `components/`, `pages/`, or `src/`).\",\n );\n }\n if (framework === \"tailwind\") {\n lines.push(\n \"2. Map each **After** to Tailwind utilities using **Token** and **Resolution context**; replace classes in JSX/HTML as needed.\",\n );\n } else {\n lines.push(\"2. Apply **After** on each node (utilities, inline `style`, or stylesheet) using **Before** to find the old declaration.\");\n }\n lines.push(\"3. Do not change sibling instances unless the selector intentionally matches multiple nodes.\");\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"*From Flux.*\");\n return lines;\n}\n\nfunction formatStructuralReordersMarkdown(reorders: FluxStructuralReorder[]): string {\n const lines: string[] = [];\n for (let i = 0; i < reorders.length; i++) {\n const r = reorders[i];\n lines.push(`### Structural reorder ${i + 1}`);\n lines.push(\"\");\n lines.push(`- **Container selector:** \\`${escapeMdCell(r.containerSelector)}\\``);\n if (r.containerComponents.length > 0) {\n lines.push(\n `- **Component hierarchy:** ${r.containerComponents.map((c) => `\\`${escapeMdCell(c)}\\``).join(\" → \")}`,\n );\n }\n if (r.containerSourceFile) {\n const s = r.containerSourceFile;\n lines.push(`- **Container source:** \\`${escapeMdCell(s.fileName)}:${s.lineNumber}\\``);\n }\n lines.push(\n `- **Children strategy:** ${r.childrenType === \"array\" ? \"array-driven (likely `.map()`)\" : \"static JSX siblings\"}`,\n );\n lines.push(`- **Child order before:** ${r.originalOrder.map((x) => `\\`${escapeMdCell(x)}\\``).join(\", \")}`);\n lines.push(`- **Child order after:** ${r.newOrder.map((x) => `\\`${escapeMdCell(x)}\\``).join(\", \")}`);\n if (r.childSources?.length) {\n lines.push(\"\");\n lines.push(\"| Child label | Source file |\");\n lines.push(\"| --- | --- |\");\n for (const cs of r.childSources) {\n lines.push(\n `| \\`${escapeMdCell(cs.label)}\\` | \\`${escapeMdCell(`${cs.sourceFile.fileName}:${cs.sourceFile.lineNumber}`)}\\` |`,\n );\n }\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n}\n\nfunction buildStructuralOnlyPrompt(reorders: FluxStructuralReorder[]): string {\n const lines: string[] = [];\n lines.push(\"Apply these structural changes to the source code:\\n\");\n lines.push(\"# Structural changes\");\n lines.push(\"\");\n lines.push(\"**Environment:**\");\n const url = typeof window !== \"undefined\" ? window.location.href : \"\";\n if (url) lines.push(`- URL: ${url}`);\n if (typeof window !== \"undefined\") {\n lines.push(`- Viewport: ${window.innerWidth}\\u00d7${window.innerHeight}`);\n lines.push(`- Device Pixel Ratio: ${window.devicePixelRatio}`);\n lines.push(`- Timestamp: ${new Date().toISOString()}`);\n }\n lines.push(\"\");\n lines.push(formatStructuralReordersMarkdown(reorders));\n lines.push(\"\");\n lines.push(\"### Suggested agent steps\");\n lines.push(\"\");\n lines.push(\"1. Locate the **container** using **Container selector** and **Component hierarchy**.\");\n lines.push(\n \"2. If **Children strategy** is array-driven, reorder the backing array or `.map()` input; if static JSX, reorder sibling elements in source.\",\n );\n lines.push(\"3. Use **Child order before / after** to match DOM siblings to source.\");\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"*From Flux.*\");\n return lines.join(\"\\n\");\n}\n\n/** Style + optional DOM reorder sections for clipboard. */\nexport function buildCombinedCopyPrompt(\n items: CopyBatchItem[],\n structuralReorders: readonly FluxStructuralReorder[],\n): string {\n if (items.length === 0 && structuralReorders.length === 0) return \"No changes recorded.\\n\";\n\n if (items.length === 0) {\n return buildStructuralOnlyPrompt(structuralReorders);\n }\n\n const base = buildBatchPrompt(items);\n if (structuralReorders.length === 0) return base;\n\n const structuralMd = formatStructuralReordersMarkdown(structuralReorders);\n const marker = \"### Suggested agent steps\";\n const idx = base.indexOf(marker);\n if (idx === -1) {\n return `${base}\\n\\n${structuralMd}\\n`;\n }\n return `${base.slice(0, idx) + structuralMd}\\n\\n${base.slice(idx)}`;\n}\n\n/** Batched copy: shared header + `---` between elements. */\nexport function buildBatchPrompt(items: CopyBatchItem[]): string {\n if (items.length === 0) return \"No changes recorded.\\n\";\n\n const { lines: head, framework } = buildSharedHeaderLines(items.length);\n const body: string[] = [];\n for (let i = 0; i < items.length; i++) {\n if (i > 0) {\n body.push(\"---\");\n body.push(\"\");\n }\n body.push(...buildElementSectionLines(items[i], framework));\n }\n const anySource = items.some((it) => Boolean(getExactSourceLocation(it.el)));\n const tail = buildSuggestedFooterLines(framework, anySource);\n return [...head, ...body, ...tail].join(\"\\n\");\n}\n\nexport function buildPrompt(\n el: DesignEditorElement,\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>,\n opts?: {\n variableLinks?: ReadonlyMap<keyof StyleSnapshot, string>;\n detachedVariables?: readonly DetachedVariableEntry[];\n },\n): string {\n return buildBatchPrompt([\n {\n el,\n changes,\n variableLinks: opts?.variableLinks ?? new Map(),\n detachedVariables: opts?.detachedVariables ?? [],\n },\n ]);\n}\n\nexport async function writeTextToClipboard(text: string): Promise<boolean> {\n if (typeof window === \"undefined\") return false;\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n /* try fallback */\n }\n try {\n const ta = document.createElement(\"textarea\");\n ta.value = text;\n ta.setAttribute(\"readonly\", \"\");\n ta.style.position = \"fixed\";\n ta.style.left = \"-9999px\";\n ta.style.top = \"0\";\n ta.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(ta);\n ta.focus();\n ta.select();\n ta.setSelectionRange(0, text.length);\n const ok = document.execCommand(\"copy\");\n ta.remove();\n return ok;\n } catch {\n return false;\n }\n}\n\nexport async function copyBatchPromptToClipboard(items: CopyBatchItem[]): Promise<boolean> {\n return writeTextToClipboard(buildBatchPrompt(items));\n}\n\nexport async function copyCombinedPromptToClipboard(\n items: CopyBatchItem[],\n structuralReorders: readonly FluxStructuralReorder[],\n): Promise<boolean> {\n return writeTextToClipboard(buildCombinedCopyPrompt(items, structuralReorders));\n}\n\nexport async function copyPromptToClipboard(\n el: DesignEditorElement,\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>,\n opts?: {\n variableLinks?: ReadonlyMap<keyof StyleSnapshot, string>;\n detachedVariables?: readonly DetachedVariableEntry[];\n },\n): Promise<boolean> {\n return copyBatchPromptToClipboard([\n {\n el,\n changes,\n variableLinks: opts?.variableLinks ?? new Map(),\n detachedVariables: opts?.detachedVariables ?? [],\n },\n ]);\n}\n","export const fluxHostStyles = \".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.-right-0{right:0}.-right-1{right:-.25rem}.-top-0{top:0}.-top-1{top:-.25rem}.bottom-2{bottom:.5rem}.left-0{left:0}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-4{right:1rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-2{top:.5rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-\\\\[10003\\\\]{z-index:10003}.z-\\\\[10020\\\\]{z-index:10020}.z-\\\\[1\\\\]{z-index:1}.z-\\\\[9997\\\\]{z-index:9997}.z-\\\\[9998\\\\]{z-index:9998}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.-mt-px{margin-top:-1px}.mb-2{margin-bottom:.5rem}.ml-px{margin-left:1px}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.box-border{box-sizing:border-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-3{width:.75rem;height:.75rem}.size-3\\\\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-9{width:2.25rem;height:2.25rem}.size-\\\\[14px\\\\]{width:14px;height:14px}.size-\\\\[5px\\\\]{width:5px;height:5px}.h-3{height:.75rem}.h-4{height:1rem}.h-9{height:2.25rem}.h-full{height:100%}.max-h-48{max-height:12rem}.max-h-\\\\[min\\\\(90vh\\\\2c 640px\\\\)\\\\]{max-height:min(90vh,640px)}.min-h-0{min-height:0}.w-0{width:0}.w-0\\\\.5{width:.125rem}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-\\\\[4\\\\.5rem\\\\]{width:4.5rem}.w-\\\\[5\\\\.5rem\\\\]{width:5.5rem}.w-\\\\[52px\\\\]{width:52px}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\\\\[2rem\\\\]{min-width:2rem}.min-w-full{min-width:100%}.max-w-\\\\[520px\\\\]{max-width:520px}.max-w-\\\\[5rem\\\\]{max-width:5rem}.max-w-\\\\[min\\\\(18rem\\\\2c calc\\\\(100vw-20px\\\\)\\\\)\\\\]{max-width:min(18rem,calc(100vw - 20px))}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.scale-\\\\[0\\\\.92\\\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\\\\[0\\\\.92\\\\]{--tw-scale-x:0.92;--tw-scale-y:0.92}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-col-resize{cursor:col-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\\\\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\\\\[13px\\\\]{gap:13px}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-small{border-radius:8px}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-\\\\[\\\\#202020\\\\]{--tw-border-opacity:1;border-color:rgb(32 32 32/var(--tw-border-opacity,1))}.border-\\\\[\\\\#444\\\\]{--tw-border-opacity:1;border-color:rgb(68 68 68/var(--tw-border-opacity,1))}.border-\\\\[\\\\#555\\\\]{--tw-border-opacity:1;border-color:rgb(85 85 85/var(--tw-border-opacity,1))}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity,1))}.border-amber-800\\\\/35{border-color:rgba(146,64,14,.35)}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity,1))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.border-zinc-200\\\\/90{border-color:hsla(240,6%,90%,.9)}.bg-\\\\[\\\\#202020\\\\]{--tw-bg-opacity:1;background-color:rgb(32 32 32/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#2a2a2a\\\\]{--tw-bg-opacity:1;background-color:rgb(42 42 42/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#333333\\\\]{--tw-bg-opacity:1;background-color:rgb(51 51 51/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#555\\\\]{--tw-bg-opacity:1;background-color:rgb(85 85 85/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#F3F3F3\\\\]{--tw-bg-opacity:1;background-color:rgb(243 243 243/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-black\\\\/50{background-color:rgba(0,0,0,.5)}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity,1))}.bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity,1))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.bg-zinc-50\\\\/90{background-color:hsla(0,0%,98%,.9)}.\\\\!fill-none{fill:none!important}.p-0{padding:0}.p-0\\\\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\\\\.5{padding:.375rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\\\\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-top:0;padding-bottom:0}.py-0\\\\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-0\\\\.5{padding-left:.125rem}.pr-0{padding-right:0}.pr-10{padding-right:2.5rem}.pr-11{padding-right:2.75rem}.pr-6{padding-right:1.5rem}.pr-7{padding-right:1.75rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-\\\\[\\\\'Inter\\\\'\\\\2c system-ui\\\\2c sans-serif\\\\]{font-family:Inter,system-ui,sans-serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\\\\[10px\\\\]{font-size:10px}.text-\\\\[11px\\\\]{font-size:11px}.text-\\\\[12px\\\\]{font-size:12px}.text-\\\\[15px\\\\]{font-size:15px}.text-\\\\[7px\\\\]{font-size:7px}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\\\\[14px\\\\]{line-height:14px}.leading-\\\\[15\\\\.6px\\\\]{line-height:15.6px}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-tight{letter-spacing:-.025em}.text-\\\\[\\\\#202020\\\\]{--tw-text-opacity:1;color:rgb(32 32 32/var(--tw-text-opacity,1))}.text-\\\\[\\\\#333333\\\\]{--tw-text-opacity:1;color:rgb(51 51 51/var(--tw-text-opacity,1))}.text-\\\\[\\\\#71717a\\\\]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-\\\\[\\\\#7C7C7C\\\\]{--tw-text-opacity:1;color:rgb(124 124 124/var(--tw-text-opacity,1))}.text-\\\\[\\\\#93c47d\\\\]{--tw-text-opacity:1;color:rgb(147 196 125/var(--tw-text-opacity,1))}.text-\\\\[\\\\#D9D9D9\\\\]{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.text-\\\\[\\\\#b45309\\\\]{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-\\\\[\\\\#c2410c\\\\]{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.text-\\\\[\\\\#d9d9d9\\\\]{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity,1))}.text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity,1))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-\\\\[0_24px_80px_rgba\\\\(0\\\\2c 0\\\\2c 0\\\\2c 0\\\\.2\\\\)\\\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\\\[0_24px_80px_rgba\\\\(0\\\\2c 0\\\\2c 0\\\\2c 0\\\\.2\\\\)\\\\]{--tw-shadow:0 24px 80px rgba(0,0,0,.2);--tw-shadow-colored:0 24px 80px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.\\\\!outline{outline-style:solid!important}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\\\\[3px\\\\]{--tw-backdrop-blur:blur(3px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\\\[transform\\\\]{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-opacity{transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\\\\[font-synthesis\\\\:none\\\\]{font-synthesis:none}.hover\\\\:bg-\\\\[\\\\#2a2a2a\\\\]:hover{--tw-bg-opacity:1;background-color:rgb(42 42 42/var(--tw-bg-opacity,1))}.hover\\\\:bg-\\\\[\\\\#333333\\\\]:hover{--tw-bg-opacity:1;background-color:rgb(51 51 51/var(--tw-bg-opacity,1))}.hover\\\\:text-\\\\[\\\\#D9D9D9\\\\]:hover{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.hover\\\\:brightness-110:hover{--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus-visible\\\\:outline:focus-visible{outline-style:solid}.focus-visible\\\\:outline-2:focus-visible{outline-width:2px}.focus-visible\\\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\\\:outline-\\\\[\\\\#D9D9D9\\\\]\\\\/40:focus-visible{outline-color:hsla(0,0%,85%,.4)}.active\\\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:focus-within .group-focus-within\\\\:opacity-100{opacity:1}.group:hover .group-hover\\\\:opacity-100{opacity:1}@media (min-width:640px){.sm\\\\:max-w-\\\\[200px\\\\]{max-width:200px}.sm\\\\:flex-row{flex-direction:row}.sm\\\\:items-start{align-items:flex-start}.sm\\\\:justify-between{justify-content:space-between}.sm\\\\:gap-6{gap:1.5rem}.sm\\\\:px-4{padding-left:1rem;padding-right:1rem}.sm\\\\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\\\\:pt-4{padding-top:1rem}}.\\\\[\\\\&\\\\:\\\\:-webkit-details-marker\\\\]\\\\:hidden::-webkit-details-marker{display:none}.\\\\[\\\\&_svg\\\\]\\\\:-mt-px svg{margin-top:-1px}.\\\\[\\\\&_svg\\\\]\\\\:\\\\!fill-none svg{fill:none!important}\";\n","\"use client\";\n\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal, flushSync } from \"react-dom\";\nimport { DesignEditorToggleIcon } from \"./design-editor-toggle-icon\";\nimport { BoxModelOverlay } from \"./box-model-overlay\";\nimport { CopySuccessOverlay } from \"./copy-success-overlay\";\nimport { PropertiesPanel } from \"./properties-panel\";\nimport { ScrubSessionContext } from \"./scrub-session-context\";\nimport { CanvasDragHandles, type InsetCommitPatch } from \"./canvas-drag-handles\";\nimport { SelectionOverlay } from \"./selection-overlay\";\nimport { type ShadowMount, mountShadowPanel, unmountShadowPanel } from \"./shadow-mount\";\nimport { Toolbar } from \"./toolbar\";\nimport { EditorMenuPortalContext } from \"./menu-portal-context\";\nimport { getElementEditableText, setElementEditableText } from \"./element-capabilities\";\nimport { copyCombinedPromptToClipboard, writeTextToClipboard } from \"./use-copy-prompt\";\nimport { FluxTooltipProvider } from \"./panel-tooltip\";\nimport { getElementPath, type DesignEditorElement, type StyleSnapshot, useSelection } from \"./use-selection\";\nimport { usePrefersReducedMotion } from \"./use-prefers-reduced-motion\";\nimport { fluxHostStyles } from \"./host-styles\";\n\nconst MIN_WIDTH = 240;\nconst MAX_WIDTH = 560;\nconst DEFAULT_WIDTH = 277;\n\n/** Horizontal inset from viewport edges for the docked panel (`right: 8` + left breathing room). */\nconst PANEL_VIEWPORT_MARGIN_PX = 16;\n\n/** Must match floating open button: `right-2 bottom-2` + `size-11` (8px + 44px). */\nconst EDITOR_TOGGLE_INSET_PX = 8;\nconst EDITOR_TOGGLE_SIZE_PX = 44;\n\n/** Same easing as portfolio `theme-reveal` (`components/theme` view transition). */\nconst THEME_REVEAL_EASE: [number, number, number, number] = [0.4, 0, 0.2, 1];\n/** Iris collapse: quick takeoff so close doesn’t “hang” at full size (exit-only). */\nconst IRIS_EXIT_EASE: [number, number, number, number] = [0.2, 0, 0, 1];\n\nfunction readThemeTransitionDurationSeconds(): number {\n if (typeof document === \"undefined\") return 1;\n const raw = getComputedStyle(document.documentElement).getPropertyValue(\"--theme-transition-duration\").trim() || \"1s\";\n if (raw.endsWith(\"ms\")) return Math.max(0, Number.parseFloat(raw) / 1000);\n if (raw.endsWith(\"s\")) return Math.max(0, Number.parseFloat(raw));\n const n = Number.parseFloat(raw);\n return Number.isFinite(n) ? n : 1;\n}\n\n/**\n * Viewport point → panel-local px for `clip-path: circle(... at x y)`.\n * Not clamped so the iris center matches the open/close origin (e.g. toggle button).\n */\n/**\n * Width available for fixed UI — use the tighter of layout client width and `visualViewport`\n * (browser zoom often shrinks the visual viewport more than `clientWidth` alone).\n */\nfunction layoutViewportWidth(): number {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") return 0;\n const client = document.documentElement.clientWidth;\n const inner = window.innerWidth;\n const base = client > 0 ? client : inner;\n const vv = window.visualViewport?.width;\n if (vv != null && vv > 0 && Number.isFinite(vv)) {\n return Math.min(base, vv);\n }\n return base > 0 ? base : inner;\n}\n\nfunction layoutViewportHeight(): number {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") return 0;\n const client = document.documentElement.clientHeight;\n const inner = window.innerHeight;\n const base = client > 0 ? client : inner;\n const vv = window.visualViewport?.height;\n if (vv != null && vv > 0 && Number.isFinite(vv)) {\n return Math.min(base, vv);\n }\n return base > 0 ? base : inner;\n}\n\nfunction viewportToPanelClipOrigin(clientX: number, clientY: number, panelWidth: number): { ox: number; oy: number } {\n if (typeof window === \"undefined\") return { ox: panelWidth * 0.85, oy: 200 };\n const vw = layoutViewportWidth();\n const panelLeft = vw - panelWidth - 8;\n const panelTop = 8;\n return {\n ox: clientX - panelLeft,\n oy: clientY - panelTop,\n };\n}\n\n/** Toggle isn’t mounted while the panel is open — use the same geometry as the button CSS. */\nfunction getEditorToggleViewportCenter(): { x: number; y: number } {\n if (typeof window === \"undefined\") return { x: 0, y: 0 };\n const vw = layoutViewportWidth();\n const vh = layoutViewportHeight();\n const half = EDITOR_TOGGLE_SIZE_PX / 2;\n return {\n x: vw - EDITOR_TOGGLE_INSET_PX - half,\n y: vh - EDITOR_TOGGLE_INSET_PX - half,\n };\n}\n\nfunction defaultExitViewport(): { x: number; y: number } {\n if (typeof window === \"undefined\") return { x: 0, y: 0 };\n return getEditorToggleViewportCenter();\n}\n\n/** Don’t steal ⌘./Ctrl+. while typing in form fields or contenteditable (host page or shadow DOM). */\nfunction isEditableShortcutTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\n return false;\n}\n\nfunction isPeriodShortcutKey(e: KeyboardEvent): boolean {\n return e.key === \".\" || e.code === \"Period\";\n}\n\nexport type DesignEditorProps = {\n /**\n * When true, the editor mounts in production builds.\n * Default is **development only** (`process.env.NODE_ENV === \"development\"`).\n */\n force?: boolean;\n /**\n * Classic margin / border / padding overlay bands on the selected node.\n * Default **false** — only the mint selection ring is shown unless you opt in.\n */\n showBoxModel?: boolean;\n /**\n * When the overlay is active, block default actions on interactive page nodes (buttons, links, inputs, …)\n * via capture-phase listeners. Opt-in for host apps (e.g. playgrounds); default **false**.\n */\n blockPageInteractions?: boolean;\n};\n\n/** True in dev for Next/Webpack (`process`) and Vite (`import.meta.env`) — `process` is often undefined in Vite’s browser bundle. */\nfunction isBundlerDevelopmentMode(): boolean {\n if (typeof process !== \"undefined\" && process.env?.NODE_ENV === \"development\") {\n return true;\n }\n try {\n const env = (import.meta as ImportMeta & { env?: { DEV?: boolean; MODE?: string } }).env;\n if (env?.DEV === true) return true;\n if (env?.MODE === \"development\") return true;\n } catch {\n /* import.meta unavailable */\n }\n return false;\n}\n\nfunction isDesignEditorAllowed(force: boolean): boolean {\n if (force) return true;\n return isBundlerDevelopmentMode();\n}\n\nfunction DesignEditorImpl({\n showBoxModel,\n blockPageInteractions,\n}: {\n showBoxModel: boolean;\n blockPageInteractions: boolean;\n}) {\n const [enabled, setEnabled] = useState(false);\n /** True while the panel DOM stays mounted for the iris **close** animation after `enabled` became false. */\n const [isExiting, setIsExiting] = useState(false);\n const [width, setWidth] = useState(DEFAULT_WIDTH);\n /** Bumps on resize / visualViewport so we re-clamp panel width at high browser zoom. */\n const [layoutW, setLayoutW] = useState(0);\n const resizeRef = useRef<{ startX: number; startWidth: number } | null>(null);\n const mountRef = useRef<ShadowMount | null>(null);\n const editorToggleRef = useRef<HTMLButtonElement | null>(null);\n /** Viewport coords for enter iris (set from the open toggle). */\n const openClipVpRef = useRef(defaultExitViewport());\n /** Viewport coords for exit iris — `flushSync` updates this before `setEnabled(false)` so exit sees the right `at` with no microtask delay. */\n const [exitClipVp, setExitClipVp] = useState<{ x: number; y: number } | null>(null);\n const [portalTarget, setPortalTarget] = useState<HTMLDivElement | null>(null);\n const [menuPortalTarget, setMenuPortalTarget] = useState<HTMLDivElement | null>(null);\n const [copySuccessOverlayOpen, setCopySuccessOverlayOpen] = useState(false);\n const closeCopySuccessOverlay = useCallback(() => setCopySuccessOverlayOpen(false), []);\n /** Double-click selection → contenteditable / focus field until blur or Escape. */\n const [inlineTextSession, setInlineTextSession] = useState<DesignEditorElement | null>(null);\n const inlineEditSnapshotRef = useRef<{ el: DesignEditorElement; original: string } | null>(null);\n\n useEffect(() => {\n const mount = mountShadowPanel();\n mountRef.current = mount;\n setPortalTarget(mount.container);\n setMenuPortalTarget(mount.menuLayer);\n return () => {\n unmountShadowPanel(mount.host, mount.menuLayer);\n mountRef.current = null;\n setPortalTarget(null);\n setMenuPortalTarget(null);\n };\n }, []);\n\n /** Pre-built Tailwind utilities for light-DOM Flux UI — consumers do not add Flux to their Tailwind `content`. */\n useEffect(() => {\n const id = \"flux-host-tailwind\";\n if (typeof document === \"undefined\" || document.getElementById(id)) return;\n const el = document.createElement(\"style\");\n el.id = id;\n el.setAttribute(\"data-flux-host-tailwind\", \"\");\n el.textContent = fluxHostStyles;\n document.head.appendChild(el);\n }, []);\n\n /** Light-DOM open toggle: host Tailwind/CSS must not recolor this (arbitrary `bg-[#202020]` can fail to generate or lose to global `button` rules). */\n useEffect(() => {\n const id = \"flux-floating-toggle-host-styles\";\n if (document.getElementById(id)) return;\n const el = document.createElement(\"style\");\n el.id = id;\n el.textContent = `\nbutton[data-flux-floating-toggle] {\n background-color: #202020 !important;\n color: #d9d9d9 !important;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2), 0 4px 16px rgba(0,0,0,0.1) !important;\n}\nbutton[data-flux-floating-toggle]:hover {\n background-color: #2a2a2a !important;\n}\n`;\n document.head.appendChild(el);\n }, []);\n\n useLayoutEffect(() => {\n const sync = () => setLayoutW(layoutViewportWidth());\n sync();\n window.addEventListener(\"resize\", sync);\n const vv = window.visualViewport;\n vv?.addEventListener(\"resize\", sync);\n return () => {\n window.removeEventListener(\"resize\", sync);\n vv?.removeEventListener(\"resize\", sync);\n };\n }, []);\n\n const handleResizeStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n resizeRef.current = { startX: e.clientX, startWidth: width };\n },\n [width],\n );\n\n useEffect(() => {\n if (!enabled) return;\n const handleMove = (e: MouseEvent) => {\n if (!resizeRef.current) return;\n const dx = resizeRef.current.startX - e.clientX;\n const lw = layoutViewportWidth();\n const cap = Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, lw - PANEL_VIEWPORT_MARGIN_PX));\n const next = Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, resizeRef.current.startWidth + dx));\n setWidth(Math.min(next, cap));\n };\n const handleUp = () => {\n resizeRef.current = null;\n };\n window.addEventListener(\"mousemove\", handleMove);\n window.addEventListener(\"mouseup\", handleUp);\n return () => {\n window.removeEventListener(\"mousemove\", handleMove);\n window.removeEventListener(\"mouseup\", handleUp);\n };\n }, [enabled]);\n\n useEffect(() => {\n if (enabled) {\n document.body.style.cursor = \"crosshair\";\n return () => {\n document.body.style.cursor = \"\";\n };\n }\n }, [enabled]);\n\n const syncOpenClipFromToggle = useCallback((fromEl?: HTMLButtonElement | null) => {\n const el = fromEl ?? editorToggleRef.current;\n if (el) {\n const r = el.getBoundingClientRect();\n openClipVpRef.current = { x: r.left + r.width / 2, y: r.top + r.height / 2 };\n } else {\n openClipVpRef.current = defaultExitViewport();\n }\n }, []);\n\n const openFromToggle = useCallback((fromEl?: HTMLButtonElement | null) => {\n syncOpenClipFromToggle(fromEl);\n setEnabled(true);\n }, [syncOpenClipFromToggle]);\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (!isPeriodShortcutKey(e)) return;\n if (!(e.metaKey || e.ctrlKey)) return;\n if (e.shiftKey || e.altKey) return;\n if (e.repeat) return;\n if (isEditableShortcutTarget(e.target)) return;\n e.preventDefault();\n if (enabled) {\n flushSync(() => {\n setExitClipVp(getEditorToggleViewportCenter());\n });\n flushSync(() => {\n setIsExiting(true);\n });\n flushSync(() => {\n setEnabled(false);\n });\n } else {\n openFromToggle();\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [enabled, openFromToggle]);\n\n const {\n selectedElement,\n hoveredElement,\n currentSnapshot,\n originalSnapshot,\n changes,\n variableLinks,\n previewSizeHints,\n previewRuleCount,\n structuralReorders,\n getCopyBatchItems,\n recordStructuralReorder,\n syncSelectionAfterStructuralChange,\n beginStyleScrub,\n endStyleScrub,\n selectElement,\n updateStyle,\n linkVariable,\n unlinkVariable,\n resetStyle,\n resetAll,\n setHoveredElement,\n justifyFlexMainAxisSpaceBetween,\n applyTextContentOverride,\n } = useSelection();\n\n const handleRequestInlineTextEdit = useCallback(() => {\n if (selectedElement) setInlineTextSession(selectedElement);\n }, [selectedElement]);\n\n useEffect(() => {\n if (!inlineTextSession) return;\n const el = inlineTextSession;\n const original = getElementEditableText(el);\n inlineEditSnapshotRef.current = { el, original };\n let finished = false;\n const isField = el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement;\n\n const finish = (commit: boolean) => {\n if (finished) return;\n finished = true;\n el.removeEventListener(\"blur\", onBlur);\n el.removeEventListener(\"keydown\", onKeyDown);\n if (!isField) (el as HTMLElement).contentEditable = \"false\";\n if (commit) {\n applyTextContentOverride(getElementEditableText(el));\n } else {\n setElementEditableText(el, original);\n }\n inlineEditSnapshotRef.current = null;\n setInlineTextSession(null);\n };\n\n const onBlur = () => finish(true);\n const onKeyDown = (e: Event) => {\n const ke = e as KeyboardEvent;\n if (ke.key === \"Escape\") {\n ke.preventDefault();\n finish(false);\n }\n };\n\n const htmlEl = el as HTMLElement;\n if (isField) {\n htmlEl.focus();\n (el as HTMLInputElement | HTMLTextAreaElement).select();\n } else {\n htmlEl.contentEditable = \"true\";\n htmlEl.focus();\n const range = document.createRange();\n range.selectNodeContents(el);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n\n el.addEventListener(\"blur\", onBlur);\n el.addEventListener(\"keydown\", onKeyDown);\n return () => {\n if (!finished) {\n setElementEditableText(el, original);\n if (!isField) (el as HTMLElement).contentEditable = \"false\";\n el.removeEventListener(\"blur\", onBlur);\n el.removeEventListener(\"keydown\", onKeyDown);\n inlineEditSnapshotRef.current = null;\n }\n };\n }, [inlineTextSession, applyTextContentOverride]);\n\n useEffect(() => {\n const snap = inlineEditSnapshotRef.current;\n if (!snap || !inlineTextSession) return;\n if (selectedElement !== snap.el) {\n setElementEditableText(snap.el, snap.original);\n if (!(snap.el instanceof HTMLInputElement || snap.el instanceof HTMLTextAreaElement)) {\n (snap.el as HTMLElement).contentEditable = \"false\";\n }\n inlineEditSnapshotRef.current = null;\n setInlineTextSession(null);\n }\n }, [selectedElement, inlineTextSession]);\n\n const handleRepositionCommit = useCallback(\n (patch: InsetCommitPatch) => {\n beginStyleScrub();\n for (const [k, v] of Object.entries(patch)) {\n if (v !== undefined) updateStyle(k as keyof StyleSnapshot, v);\n }\n endStyleScrub();\n syncSelectionAfterStructuralChange();\n },\n [beginStyleScrub, endStyleScrub, updateStyle, syncSelectionAfterStructuralChange],\n );\n\n const scrubCtx = useMemo(() => ({ begin: beginStyleScrub, end: endStyleScrub }), [beginStyleScrub, endStyleScrub]);\n\n const handleCopyPrompt = useCallback(async () => {\n const items = getCopyBatchItems();\n if (items.length === 0 && structuralReorders.length === 0) {\n return writeTextToClipboard(\"No changes recorded.\\n\");\n }\n return copyCombinedPromptToClipboard(items, structuralReorders);\n }, [getCopyBatchItems, structuralReorders]);\n\n const reduceMotion = usePrefersReducedMotion();\n const panelRef = useRef<HTMLDivElement>(null);\n const panelVisible = enabled || isExiting;\n const irisOpenDoneRef = useRef(false);\n const exitAnimStartedRef = useRef(false);\n /** Pin with `right`, not `left: calc(100vw - …)` — avoids overlap with page content when browser zoom changes `100vw` vs layout width. */\n const themeRevealDuration = useMemo(() => readThemeTransitionDurationSeconds(), []);\n\n /** Never wider than viewport minus margins (fixes overlap at 150%+ browser zoom). */\n const effectiveWidth = useMemo(() => {\n const lw = layoutW > 0 ? layoutW : layoutViewportWidth();\n if (lw <= PANEL_VIEWPORT_MARGIN_PX) return MIN_WIDTH;\n const cap = Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, lw - PANEL_VIEWPORT_MARGIN_PX));\n return Math.min(width, cap);\n }, [width, layoutW]);\n\n const openO = viewportToPanelClipOrigin(openClipVpRef.current.x, openClipVpRef.current.y, effectiveWidth);\n const exitVpForClip = exitClipVp ?? defaultExitViewport();\n const closeO = viewportToPanelClipOrigin(exitVpForClip.x, exitVpForClip.y, effectiveWidth);\n\n const easeReveal = `cubic-bezier(${THEME_REVEAL_EASE.join(\",\")})`;\n const easeExit = `cubic-bezier(${IRIS_EXIT_EASE.join(\",\")})`;\n\n useEffect(() => {\n if (!enabled) irisOpenDoneRef.current = false;\n }, [enabled]);\n\n useEffect(() => {\n if (!isExiting) exitAnimStartedRef.current = false;\n }, [isExiting]);\n\n /** Iris open: circle(0) → circle(150vmax). CSS transitions — not View Transitions API (better React fit; see MDN for document-level SPA). */\n useLayoutEffect(() => {\n if (!panelVisible || !enabled || isExiting) return;\n if (irisOpenDoneRef.current) return;\n const el = panelRef.current;\n if (!el) return;\n irisOpenDoneRef.current = true;\n if (reduceMotion) {\n el.style.transition = \"\";\n el.style.clipPath = \"none\";\n return;\n }\n el.style.transition = \"none\";\n el.style.clipPath = `circle(0px at ${openO.ox}px ${openO.oy}px)`;\n const id = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.style.transition = `clip-path ${themeRevealDuration}s ${easeReveal}`;\n el.style.clipPath = `circle(150vmax at ${openO.ox}px ${openO.oy}px)`;\n });\n });\n return () => cancelAnimationFrame(id);\n }, [\n panelVisible,\n enabled,\n isExiting,\n reduceMotion,\n themeRevealDuration,\n easeReveal,\n openO.ox,\n openO.oy,\n ]);\n\n /** Iris close: expanded → circle(0) at close origin. */\n useLayoutEffect(() => {\n if (!isExiting || enabled) return;\n if (exitAnimStartedRef.current) return;\n const el = panelRef.current;\n if (!el) return;\n exitAnimStartedRef.current = true;\n if (reduceMotion) {\n el.style.transition = \"\";\n el.style.clipPath = `circle(0px at ${closeO.ox}px ${closeO.oy}px)`;\n queueMicrotask(() => {\n setIsExiting(false);\n setExitClipVp(null);\n });\n return;\n }\n el.style.transition = \"none\";\n el.style.clipPath = `circle(150vmax at ${openO.ox}px ${openO.oy}px)`;\n void el.offsetHeight;\n el.style.transition = `clip-path ${themeRevealDuration}s ${easeExit}`;\n el.style.clipPath = `circle(0px at ${closeO.ox}px ${closeO.oy}px)`;\n }, [isExiting, enabled, reduceMotion, themeRevealDuration, easeExit, openO.ox, openO.oy, closeO.ox, closeO.oy]);\n\n const onPanelTransitionEnd = useCallback(\n (e: React.TransitionEvent<HTMLDivElement>) => {\n if (e.propertyName !== \"clip-path\") return;\n if (!isExiting || enabled || reduceMotion) return;\n setIsExiting(false);\n setExitClipVp(null);\n },\n [isExiting, enabled, reduceMotion],\n );\n\n const panelContent = (\n <>\n {panelVisible && (\n <div\n ref={panelRef}\n data-flux-ui\n onTransitionEnd={onPanelTransitionEnd}\n style={{\n position: \"fixed\",\n top: 8,\n right: 8,\n bottom: 8,\n width: effectiveWidth,\n zIndex: 9999,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n borderRadius: 12,\n backgroundColor: \"#202020\",\n fontFamily: \"'Inter', system-ui, sans-serif\",\n color: \"#D9D9D9\",\n colorScheme: \"dark\",\n WebkitFontSmoothing: \"antialiased\",\n pointerEvents: \"auto\",\n willChange: reduceMotion ? undefined : \"clip-path\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 10,\n height: \"100%\",\n width: 8,\n cursor: \"col-resize\",\n }}\n onMouseDown={handleResizeStart}\n aria-hidden\n />\n <Toolbar\n selectedElement={selectedElement}\n onClose={() => {\n flushSync(() => {\n setExitClipVp(getEditorToggleViewportCenter());\n });\n flushSync(() => {\n setIsExiting(true);\n });\n flushSync(() => {\n setEnabled(false);\n });\n }}\n />\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto px-3 pb-3\">\n <PropertiesPanel\n key={selectedElement ? getElementPath(selectedElement) : \"none\"}\n selectedElement={selectedElement}\n originalSnapshot={originalSnapshot}\n snapshot={currentSnapshot}\n changes={changes}\n onChange={updateStyle}\n onReset={resetStyle}\n onResetAll={resetAll}\n changedKeys={changes}\n variableLinks={variableLinks}\n previewSizeHints={previewSizeHints}\n previewRuleCount={previewRuleCount}\n structuralReorderCount={structuralReorders.length}\n onCopyPrompt={handleCopyPrompt}\n onCopySuccess={() => setCopySuccessOverlayOpen(true)}\n linkVariable={linkVariable}\n unlinkVariable={unlinkVariable}\n justifyFlexMainAxisSpaceBetween={justifyFlexMainAxisSpaceBetween}\n />\n </div>\n </div>\n )}\n </>\n );\n\n return (\n <>\n {!enabled && (\n <button\n ref={editorToggleRef}\n type=\"button\"\n data-flux-ui\n data-flux-floating-toggle\n onPointerDown={(e) => {\n if (e.button !== 0) return;\n e.preventDefault();\n openFromToggle(e.currentTarget);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openFromToggle(e.currentTarget as HTMLButtonElement);\n }\n }}\n className=\"fixed bottom-2 right-2 z-[9998] flex size-11 shrink-0 items-center justify-center rounded-full border-0 p-0 transition-[transform] active:scale-95 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#D9D9D9]/40 [&_svg]:-mt-px [&_svg]:!fill-none\"\n aria-label=\"Open design editor — ⌘. or Ctrl+.\"\n title=\"Open design editor (⌘. · Ctrl+.)\"\n >\n <DesignEditorToggleIcon size={20} className=\"shrink-0\" />\n </button>\n )}\n\n {enabled && (\n <SelectionOverlay\n enabled={enabled}\n blockPageInteractions={blockPageInteractions}\n selectedElement={selectedElement}\n hoveredElement={hoveredElement}\n onSelect={selectElement}\n onHover={setHoveredElement}\n onRequestInlineTextEdit={handleRequestInlineTextEdit}\n />\n )}\n\n {enabled && (\n <CanvasDragHandles\n enabled={enabled}\n selectedElement={selectedElement}\n onReorder={(change) => {\n recordStructuralReorder(change);\n syncSelectionAfterStructuralChange();\n }}\n onRepositionCommit={handleRepositionCommit}\n onDragStart={() => setHoveredElement(null)}\n onDragEnd={() => {}}\n />\n )}\n\n {showBoxModel && enabled && <BoxModelOverlay enabled={Boolean(selectedElement)} target={selectedElement} />}\n\n <CopySuccessOverlay open={copySuccessOverlayOpen} onClose={closeCopySuccessOverlay} />\n\n {portalTarget &&\n createPortal(\n <EditorMenuPortalContext.Provider value={menuPortalTarget}>\n <ScrubSessionContext.Provider value={scrubCtx}>\n <FluxTooltipProvider>{panelContent}</FluxTooltipProvider>\n </ScrubSessionContext.Provider>\n </EditorMenuPortalContext.Provider>,\n portalTarget,\n )}\n </>\n );\n}\n\n/**\n * Visual design editor overlay. **Does not render in production** unless `force` is set.\n */\nexport function DesignEditor({\n force = false,\n showBoxModel = false,\n blockPageInteractions = false,\n}: DesignEditorProps) {\n if (!isDesignEditorAllowed(force)) return null;\n return (\n <DesignEditorImpl showBoxModel={showBoxModel} blockPageInteractions={blockPageInteractions} />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/design-editor-toggle-icon.tsx","../src/viewport-layout-sync.ts","../src/box-model-overlay.tsx","../src/cn.ts","../src/color-alpha.ts","../src/corner-radius-icon.tsx","../src/element-capabilities.ts","../src/copy-pending-badge.tsx","../src/font-options.ts","../src/layout-flow.ts","../src/position-alignment.ts","../src/floating-menu-position.ts","../src/panel-tooltip.tsx","../src/menu-portal-context.tsx","../src/scrub-session-context.tsx","../src/use-scrub.ts","../src/panel-chrome.tsx","../src/variable-usage-index.ts","../src/token-scanner.ts","../src/variable-token-icon.tsx","../src/panel-variable-affix.tsx","../src/properties-empty-state.tsx","../src/shadow-parse.ts","../src/sizing.ts","../src/preview-persistence.ts","../src/preview-engine.ts","../src/use-selection.ts","../src/properties-panel.tsx","../src/drag-reorder-selector.ts","../src/drag-reorder-fiber.ts","../src/drag-reorder-controller.ts","../src/drag-reorder-detect.ts","../src/drag-reposition-controller.ts","../src/canvas-drag-handles.tsx","../src/format-selection-dimensions.ts","../src/selection-overlay.tsx","../src/install-flux-radix-mint.ts","../src/floating-menu-styles.ts","../src/editor-styles.ts","../src/shadow-mount.ts","../src/toolbar.tsx","../src/style-source.ts","../src/change-enrichment.ts","../src/react-info.ts","../src/use-copy-prompt.ts","../src/use-prefers-reduced-motion.ts","../src/host-styles.ts","../src/design-editor.tsx"],"names":["jsx","useRef","useEffect","jsxs","Fragment","twMerge","clsx","useState","useMemo","TooltipPrimitive","createContext","useContext","useCallback","AlignLeft","AlignCenter","AlignRight","useLayoutEffect","createPortal","Square","MoveDown","MoveRight","ChevronDown","cachedSheetCount","Link2","finder","Plus","CornerUpLeft","Check","Copy","AlignHorizontalJustifyStart","AlignHorizontalJustifyCenter","AlignHorizontalJustifyEnd","AlignVerticalJustifyStart","AlignVerticalJustifyCenter","AlignVerticalJustifyEnd","Rows3","SquareSquare","AlignVerticalSpaceAround","AlignHorizontalSpaceAround","ArrowUpDown","ArrowLeftRight","ArrowUpToLine","FoldVertical","ArrowDownToLine","SunDim","Minus","Eye","Ruler","SquareDashed","buildFallbackSelector","updatePosition","scheduleUpdate","mint","STYLE_ID","X","camelToKebab","walkRules","dot","flushSync"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Inspect / design-tool mark — stroke icon (host-safe `fill=\"none\"`). */\nexport function DesignEditorToggleIcon({\n className,\n /** Pixel size; prefer this over Tailwind `size-*` inside the shadow panel (editor CSS may omit those utilities). */\n size = 24,\n}: {\n className?: string;\n size?: number;\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className={className}\n aria-hidden\n >\n <path\n d=\"M15 7L8.83447 8.76158C8.52956 8.8487 8.37711 8.89226 8.25117 8.97414C8.13969 9.04662 8.04379 9.1406 7.96907 9.2506C7.88466 9.37485 7.83803 9.5264 7.74477 9.82948L4 22M4 22L16.1705 18.2552C16.4736 18.162 16.6251 18.1153 16.7494 18.0309C16.8594 17.9562 16.9534 17.8603 17.0259 17.7488C17.1077 17.6229 17.1513 17.4704 17.2384 17.1655L19 11M4 22L10.586 15.4139M5 8V2M2 5H8M21.8686 7.86863L18.1314 4.13137C17.7354 3.73535 17.5373 3.53735 17.309 3.46316C17.1082 3.3979 16.8918 3.3979 16.691 3.46316C16.4627 3.53735 16.2646 3.73535 15.8686 4.13137L15.1314 4.86863C14.7354 5.26465 14.5373 5.46265 14.4632 5.69098C14.3979 5.89183 14.3979 6.10817 14.4632 6.30902C14.5373 6.53735 14.7354 6.73535 15.1314 7.13137L18.8686 10.8686C19.2646 11.2646 19.4627 11.4627 19.691 11.5368C19.8918 11.6021 20.1082 11.6021 20.309 11.5368C20.5373 11.4627 20.7354 11.2646 21.1314 10.8686L21.8686 10.1314C22.2646 9.73535 22.4627 9.53735 22.5368 9.30902C22.6021 9.10817 22.6021 8.89183 22.5368 8.69098C22.4627 8.46265 22.2646 8.26465 21.8686 7.86863ZM12 12C13.1046 12 14 12.8954 14 14C14 15.1046 13.1046 16 12 16C10.8954 16 10 15.1046 10 14C10 12.8954 10.8954 12 12 12Z\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","/**\n * Re-run `update` when `target`'s viewport box may change: window resize/scroll and\n * scroll on overflow ancestors (nested scroll containers). Scroll events do not bubble,\n * so inner `overflow: auto` regions need their own listeners.\n */\nexport function subscribeViewportLayoutSync(target: Element, update: () => void): () => void {\n update();\n const cleanups: (() => void)[] = [];\n\n const run = () => update();\n\n window.addEventListener(\"scroll\", run, true);\n window.addEventListener(\"resize\", run);\n cleanups.push(() => window.removeEventListener(\"scroll\", run, true));\n cleanups.push(() => window.removeEventListener(\"resize\", run));\n\n const scrollRoots = new Set<Element>();\n let n: Element | null = target;\n while (n && n !== document.documentElement) {\n const st = getComputedStyle(n);\n const oy = st.overflowY;\n const ox = st.overflowX;\n const scrollY = /(auto|scroll|overlay)/.test(oy) && n.scrollHeight > n.clientHeight;\n const scrollX = /(auto|scroll|overlay)/.test(ox) && n.scrollWidth > n.clientWidth;\n if (scrollY || scrollX) scrollRoots.add(n);\n n = n.parentElement;\n }\n\n for (const el of scrollRoots) {\n el.addEventListener(\"scroll\", run, { passive: true });\n cleanups.push(() => el.removeEventListener(\"scroll\", run));\n }\n\n return () => {\n for (const c of cleanups) c();\n };\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport type { DesignEditorElement } from \"./use-selection\";\nimport { subscribeViewportLayoutSync } from \"./viewport-layout-sync\";\n\nconst MARGIN_COLOR = \"rgba(246, 178, 107, 0.35)\";\nconst BORDER_COLOR = \"rgba(255, 229, 153, 0.45)\";\nconst PADDING_COLOR = \"rgba(147, 196, 125, 0.4)\";\nconst CONTENT_COLOR = \"rgba(111, 168, 220, 0.2)\";\n\nfunction safeRect(el: Element): DOMRect | null {\n if (!el.isConnected) return null;\n try {\n return el.getBoundingClientRect();\n } catch {\n return null;\n }\n}\n\n/**\n * Margin / border / padding bands for the selected element.\n */\nexport function BoxModelOverlay({ enabled, target }: { enabled: boolean; target: DesignEditorElement | null }) {\n const marginRef = useRef<HTMLDivElement>(null);\n const borderRef = useRef<HTMLDivElement>(null);\n const paddingRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!enabled || !target) return;\n\n const update = () => {\n const rect = safeRect(target);\n const s = window.getComputedStyle(target);\n if (!rect) return;\n\n const mt = Number.parseFloat(s.marginTop) || 0;\n const mr = Number.parseFloat(s.marginRight) || 0;\n const mb = Number.parseFloat(s.marginBottom) || 0;\n const ml = Number.parseFloat(s.marginLeft) || 0;\n const bt = Number.parseFloat(s.borderTopWidth) || 0;\n const br = Number.parseFloat(s.borderRightWidth) || 0;\n const bBottom = Number.parseFloat(s.borderBottomWidth) || 0;\n const bl = Number.parseFloat(s.borderLeftWidth) || 0;\n const pt = Number.parseFloat(s.paddingTop) || 0;\n const pr = Number.parseFloat(s.paddingRight) || 0;\n const pb = Number.parseFloat(s.paddingBottom) || 0;\n const pl = Number.parseFloat(s.paddingLeft) || 0;\n\n const borderBox = rect;\n const outerTop = borderBox.top - mt;\n const outerLeft = borderBox.left - ml;\n const outerW = borderBox.width + ml + mr;\n const outerH = borderBox.height + mt + mb;\n\n const setBox = (node: HTMLDivElement | null, top: number, left: number, w: number, h: number, bg: string) => {\n if (!node) return;\n node.style.top = `${top}px`;\n node.style.left = `${left}px`;\n node.style.width = `${Math.max(0, w)}px`;\n node.style.height = `${Math.max(0, h)}px`;\n node.style.backgroundColor = bg;\n node.style.display = w > 0 && h > 0 ? \"block\" : \"none\";\n };\n\n setBox(marginRef.current, outerTop, outerLeft, outerW, outerH, MARGIN_COLOR);\n setBox(borderRef.current, borderBox.top, borderBox.left, borderBox.width, borderBox.height, BORDER_COLOR);\n\n const padTop = borderBox.top + bt;\n const padLeft = borderBox.left + bl;\n const padW = borderBox.width - bl - br;\n const padH = borderBox.height - bt - bBottom;\n setBox(paddingRef.current, padTop, padLeft, padW, padH, PADDING_COLOR);\n\n const contentTop = padTop + pt;\n const contentLeft = padLeft + pl;\n const contentW = Math.max(0, padW - pl - pr);\n const contentH = Math.max(0, padH - pt - pb);\n setBox(contentRef.current, contentTop, contentLeft, contentW, contentH, CONTENT_COLOR);\n };\n\n const ro = new ResizeObserver(update);\n try {\n ro.observe(target);\n } catch {\n /* ignore */\n }\n const unsubLayout = subscribeViewportLayoutSync(target, update);\n return () => {\n ro.disconnect();\n unsubLayout();\n };\n }, [enabled, target]);\n\n if (!enabled || !target) return null;\n\n const band = \"pointer-events-none fixed z-[9997] box-border\";\n\n return (\n <>\n <div ref={marginRef} className={band} aria-hidden />\n <div ref={borderRef} className={band} aria-hidden />\n <div ref={paddingRef} className={band} aria-hidden />\n <div ref={contentRef} className={band} aria-hidden />\n </>\n );\n}\n","import type { ClassValue } from \"clsx\";\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** `clsx` + `tailwind-merge` are bundled as dependencies of `@sanmid/flux`. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/** Split / merge colors for Paper-style rows (hex + opacity %). */\n\nfunction clampPct(n: number): number {\n return Math.min(100, Math.max(0, n));\n}\n\n/** Parse CSS color to 6-char hex (no #) and 0–100 opacity. */\nexport function parseCssColorToHexOpacity(css: string): { hex: string; opacityPct: number } {\n const raw = css.trim();\n if (!raw || raw === \"transparent\") return { hex: \"808080\", opacityPct: 0 };\n\n const hex8 = raw.match(/^#([0-9a-fA-F]{8})$/);\n if (hex8) {\n const h = hex8[1];\n const a = Number.parseInt(h.slice(6, 8), 16) / 255;\n return { hex: h.slice(0, 6).toUpperCase(), opacityPct: Math.round(a * 100) };\n }\n\n const hex6 = raw.match(/^#([0-9a-fA-F]{6})$/);\n if (hex6) return { hex: hex6[1].toUpperCase(), opacityPct: 100 };\n\n const hex3 = raw.match(/^#([0-9a-fA-F]{3})$/);\n if (hex3) {\n const [r, g, b] = hex3[1].split(\"\");\n return { hex: `${r}${r}${g}${g}${b}${b}`.toUpperCase(), opacityPct: 100 };\n }\n\n const rgba = raw.match(/^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i);\n if (rgba) {\n const r = Math.round(Number.parseFloat(rgba[1]));\n const g = Math.round(Number.parseFloat(rgba[2]));\n const b = Math.round(Number.parseFloat(rgba[3]));\n const a = rgba[4] !== undefined ? Number.parseFloat(rgba[4]) : 1;\n const toH = (n: number) => n.toString(16).padStart(2, \"0\");\n return { hex: `${toH(r)}${toH(g)}${toH(b)}`.toUpperCase(), opacityPct: Math.round(clampPct(a * 100)) };\n }\n\n /** CSS Color 4: `rgb(r g b / a)` — browsers often return transparent fills in this form. */\n const rgbSlash = raw.match(/^rgba?\\(\\s*([\\d.]+%?)\\s+([\\d.]+%?)\\s+([\\d.]+%?)\\s*\\/\\s*([\\d.]+%?)\\s*\\)$/i);\n if (rgbSlash) {\n const ch = (s: string) => {\n const t = s.trim();\n if (t.endsWith(\"%\")) return Math.round((Number.parseFloat(t) / 100) * 255);\n return Math.round(Number.parseFloat(t));\n };\n const r = ch(rgbSlash[1]);\n const g = ch(rgbSlash[2]);\n const b = ch(rgbSlash[3]);\n const aStr = rgbSlash[4].trim();\n const a = aStr.endsWith(\"%\") ? Number.parseFloat(aStr) / 100 : Number.parseFloat(aStr);\n const toH = (n: number) => n.toString(16).padStart(2, \"0\");\n return { hex: `${toH(r)}${toH(g)}${toH(b)}`.toUpperCase(), opacityPct: Math.round(clampPct(a * 100)) };\n }\n\n return { hex: \"808080\", opacityPct: 100 };\n}\n\n/**\n * Stable string for diffing `background-color` so `transparent`, `rgba(0,0,0,0)`,\n * and `rgb(0 0 0 / 0)` don’t register as different when they’re visually the same.\n */\nexport function canonicalBackgroundColorForDiff(css: string): string {\n const raw = (css ?? \"\").trim();\n if (!raw || raw === \"transparent\") return \"transparent\";\n const { opacityPct } = parseCssColorToHexOpacity(raw);\n if (opacityPct === 0) return \"transparent\";\n return raw;\n}\n\nexport function buildCssFromHexOpacity(hexNoHash: string, opacityPct: number): string {\n let h = hexNoHash\n .replace(/^#/, \"\")\n .replace(/[^0-9a-fA-F]/g, \"\")\n .toUpperCase();\n if (h.length === 0) h = \"000000\";\n else if (h.length < 6) h = h.padEnd(6, \"0\");\n else if (h.length > 6) h = h.slice(0, 6);\n const r = Number.parseInt(h.slice(0, 2), 16);\n const g = Number.parseInt(h.slice(2, 4), 16);\n const b = Number.parseInt(h.slice(4, 6), 16);\n const a = clampPct(opacityPct) / 100;\n if (a >= 1) return `#${h}`;\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n","/** Lucide `square-round-corner` paths — playground uses lucide-react 0.452, which has no `SquareRoundCorner` export. */\nexport function CornerRadiusIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <path d=\"M21 11a8 8 0 0 0-8-8\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n </svg>\n );\n}\n","import { parseCssColorToHexOpacity } from \"./color-alpha\";\n\n/** Minimal shape for fill detection (PropertyPanel-style `hasFill`). */\nexport type FillSnapshot = {\n backgroundColor: string;\n backgroundImage: string;\n};\n\n/**\n * Logic: any non-`none` background-image counts as fill; solid fill only if\n * `background-color` is not empty/transparent and has opacity &gt; 0 (we parse CSS Color 4).\n * Optional `fillHasVariable`: linked `var()` on background-color counts as having fill.\n */\nexport function snapshotHasFill(\n snapshot: FillSnapshot,\n options?: { fillHasVariable?: boolean },\n): boolean {\n if (options?.fillHasVariable) return true;\n const bgImg = snapshot.backgroundImage?.trim();\n if (bgImg && bgImg !== \"none\") return true;\n const raw = snapshot.backgroundColor?.trim();\n if (!raw || raw === \"transparent\") return false;\n const { opacityPct } = parseCssColorToHexOpacity(raw);\n return opacityPct > 0;\n}\n\n/**\n * Which property groups make sense for the selected DOM node (hide\n * typography on replaced / non-text controls).\n */\n\nconst NO_TYPOGRAPHY_TAGS = new Set([\n \"IMG\",\n \"VIDEO\",\n \"CANVAS\",\n \"IFRAME\",\n \"EMBED\",\n \"OBJECT\",\n \"BR\",\n \"HR\",\n \"COL\",\n \"COLGROUP\",\n \"SOURCE\",\n \"TRACK\",\n \"WBR\",\n]);\n\n/** Input types where font/color UI is misleading or inapplicable. */\nconst INPUT_TYPES_NO_TYPOGRAPHY = new Set([\n \"hidden\",\n \"checkbox\",\n \"radio\",\n \"file\",\n \"range\",\n \"color\",\n \"image\",\n \"button\",\n \"submit\",\n \"reset\",\n]);\n\n/** Font / text / alignment controls apply to normal flow content, not replaced media or most form widgets. */\nexport function elementSupportsTypography(el: Element | null): boolean {\n if (!el) return true;\n const t = el.tagName;\n if (NO_TYPOGRAPHY_TAGS.has(t)) return false;\n if (t === \"INPUT\") {\n const type = (el as HTMLInputElement).type?.toLowerCase() ?? \"text\";\n if (INPUT_TYPES_NO_TYPOGRAPHY.has(type)) return false;\n }\n if (t === \"SELECT\") return false;\n if (el.namespaceURI === \"http://www.w3.org/2000/svg\") return false;\n return true;\n}\n\n/** Same as {@link snapshotHasFill} on computed styles. */\nexport function elementHasVisibleBackgroundLayer(el: Element | null): boolean {\n if (!el || typeof window === \"undefined\") return false;\n const s = window.getComputedStyle(el);\n return snapshotHasFill({\n backgroundColor: s.backgroundColor,\n backgroundImage: s.backgroundImage,\n });\n}\n\n/** Read live text for inline edit commit / snapshot. */\nexport function getElementEditableText(el: Element): string {\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) return el.value;\n return el.textContent ?? \"\";\n}\n\n/** Apply text from inline edit (must match {@link getElementEditableText}). */\nexport function setElementEditableText(el: Element, text: string): void {\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n el.value = text;\n return;\n }\n el.textContent = text;\n}\n\n/**\n * Inline text editing (Retune-style): text-like inputs, or elements with no element children\n * (single text flow — avoids breaking rich markup with contenteditable).\n */\nexport function elementSupportsInlineTextEdit(el: Element | null): boolean {\n if (!el) return false;\n if (el.namespaceURI === \"http://www.w3.org/2000/svg\") return false;\n const t = el.tagName;\n if (t === \"TEXTAREA\") return true;\n if (t === \"INPUT\") {\n const type = (el as HTMLInputElement).type?.toLowerCase() ?? \"text\";\n return [\"text\", \"search\", \"url\", \"email\", \"tel\", \"number\"].includes(type);\n }\n if (!elementSupportsTypography(el)) return false;\n return el.children.length === 0;\n}\n","/** Pending change count — hex halo scaled to 14px to match Lucide Copy / Check in the row. */\nexport function CopyPendingBadge({ count }: { count: number }) {\n const label = count > 99 ? \"99+\" : String(count);\n return (\n <span className=\"pointer-events-none relative inline-flex size-[14px] shrink-0 items-center justify-center\" aria-hidden>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className=\"absolute inset-0 text-[#333333]\"\n aria-hidden\n >\n <path\n d=\"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z\"\n fill=\"#333333\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span className=\"relative z-[1] font-['Inter',system-ui,sans-serif] text-[7px] font-semibold leading-none text-[#D9D9D9]\">{label}</span>\n </span>\n );\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\n\n/** First resolved font family from a computed `font-family` stack (handles quoted names). */\nexport function firstFontFamilyFromStack(fontFamily: string): string {\n const s = fontFamily.trim();\n if (!s) return \"\";\n let i = 0;\n let start = 0;\n let q: string | null = null;\n while (i < s.length) {\n const c = s[i];\n if (q) {\n if (c === \"\\\\\") {\n i += 2;\n continue;\n }\n if (c === q) q = null;\n i++;\n continue;\n }\n if (c === '\"' || c === \"'\") {\n q = c;\n if (start === 0) start = i;\n i++;\n continue;\n }\n if (c === \",\") {\n return s\n .slice(start, i)\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n }\n i++;\n }\n return s\n .slice(start)\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n}\n\n/** Display / select key for the primary face (fallback if stack parsing fails). */\nexport function primaryFontLabel(computedStack: string): string {\n const s = computedStack.trim();\n if (!s) return \"\";\n const a = firstFontFamilyFromStack(s);\n if (a) return a;\n return (\n s\n .split(\",\")[0]\n ?.trim()\n .replace(/^[\"']|[\"']$/g, \"\") ?? \"\"\n );\n}\n\nfunction cssFamilyToken(name: string): string {\n const t = name.trim();\n if (!t) return \"\";\n if (/^[\"'].*[\"']$/.test(t)) return t;\n if (t.includes(\" \") || /[^a-zA-Z0-9_-]/.test(t)) return `\"${t.replace(/\"/g, '\\\\\"')}\"`;\n return t;\n}\n\n/** Minimal valid `font-family` for a primary face (generic fallback only). */\nexport function fontFamilyApplyCss(primaryName: string): string {\n const token = cssFamilyToken(primaryName);\n if (!token) return \"sans-serif\";\n return `${token}, sans-serif`;\n}\n\nexport type FontFamilyOption = {\n /** Select `value` — single family name, matches {@link firstFontFamilyFromStack}. */\n value: string;\n label: string;\n /** Written to `element.style.fontFamily`. */\n applyCss: string;\n};\n\nconst FONT_FAMILY_RE = /font-family\\s*:\\s*([^;}+]+)/gi;\n\n/** Collect `font-family` values from parsed stylesheets (best-effort; skips cross-origin). */\nexport function scanStylesheetFontFamilies(): string[] {\n if (typeof document === \"undefined\") return [];\n const seen = new Set<string>();\n const out: string[] = [];\n for (const sheet of document.styleSheets) {\n let rules: CSSRuleList;\n try {\n rules = sheet.cssRules;\n } catch {\n continue;\n }\n collectFontFamiliesFromRules(rules, seen, out);\n }\n return out;\n}\n\nfunction collectFontFamiliesFromRules(rules: CSSRuleList, seen: Set<string>, out: string[]): void {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSGroupingRule) {\n collectFontFamiliesFromRules(rule.cssRules, seen, out);\n continue;\n }\n if (rule instanceof CSSFontFaceRule) {\n const fam = rule.style.getPropertyValue(\"font-family\").trim().replace(/^[\"']|[\"']$/g, \"\");\n if (fam && !seen.has(fam.toLowerCase())) {\n seen.add(fam.toLowerCase());\n out.push(fam);\n }\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n const cssText = rule.cssText;\n FONT_FAMILY_RE.lastIndex = 0;\n for (const m of cssText.matchAll(FONT_FAMILY_RE)) {\n const raw = m[1].trim();\n const first = firstFontFamilyFromStack(raw);\n if (first && !/^(inherit|initial|unset|revert)$/i.test(first) && !seen.has(first.toLowerCase())) {\n seen.add(first.toLowerCase());\n out.push(first);\n }\n }\n }\n}\n\nfunction readLoadedFontOptions(): FontFamilyOption[] {\n if (typeof document === \"undefined\") return [];\n const out: FontFamilyOption[] = [];\n const seen = new Set<string>();\n try {\n for (const face of document.fonts.values()) {\n const label = face.family.trim().replace(/^[\"']|[\"']$/g, \"\");\n if (!label) continue;\n const key = label.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n out.push({\n value: label,\n label,\n applyCss: fontFamilyApplyCss(label),\n });\n }\n } catch {\n return [];\n }\n return out.sort((a, b) => a.label.localeCompare(b.label));\n}\n\n/**\n * Match computed stack to a select value (case-insensitive); falls back to parsed first name.\n */\nexport function matchFontSelectValue(computedStack: string, options: FontFamilyOption[]): string {\n const first = primaryFontLabel(computedStack);\n if (!first) return options[0]?.value ?? \"\";\n const lower = first.toLowerCase();\n const hit = options.find((o) => o.value.toLowerCase() === lower);\n return hit?.value ?? first;\n}\n\n/**\n * Fonts actually loaded on the page (`document.fonts`), plus the current computed primary if missing.\n * Dropdown shows one name per face — not full CSS stacks.\n */\nexport function useFontFamilyOptions(computedStack: string | undefined): FontFamilyOption[] {\n const [loaded, setLoaded] = useState<FontFamilyOption[]>([]);\n const [authored, setAuthored] = useState<string[]>([]);\n\n useEffect(() => {\n const refresh = () => {\n setLoaded(readLoadedFontOptions());\n setAuthored(scanStylesheetFontFamilies());\n };\n refresh();\n document.fonts?.addEventListener?.(\"loadingdone\", refresh);\n return () => document.fonts?.removeEventListener?.(\"loadingdone\", refresh);\n }, []);\n\n return useMemo(() => {\n const merged: FontFamilyOption[] = [];\n const byLower = new Set<string>();\n\n for (const name of authored) {\n const key = name.toLowerCase();\n if (byLower.has(key)) continue;\n byLower.add(key);\n merged.push({ value: name, label: name, applyCss: fontFamilyApplyCss(name) });\n }\n\n for (const o of loaded) {\n if (!byLower.has(o.value.toLowerCase())) {\n byLower.add(o.value.toLowerCase());\n merged.push(o);\n }\n }\n\n const generics: FontFamilyOption[] = [\n { value: \"system-ui\", label: \"system-ui\", applyCss: \"system-ui, sans-serif\" },\n { value: \"ui-sans-serif\", label: \"ui-sans-serif\", applyCss: \"ui-sans-serif, system-ui, sans-serif\" },\n { value: \"ui-serif\", label: \"ui-serif\", applyCss: \"ui-serif, serif\" },\n { value: \"ui-monospace\", label: \"ui-monospace\", applyCss: \"ui-monospace, monospace\" },\n ];\n for (const g of generics) {\n if (!byLower.has(g.value.toLowerCase())) {\n byLower.add(g.value.toLowerCase());\n merged.push(g);\n }\n }\n\n const v = computedStack?.trim();\n if (v) {\n const primary = primaryFontLabel(v);\n if (primary && !byLower.has(primary.toLowerCase())) {\n merged.unshift({\n value: primary,\n label: `${primary} (current)`,\n applyCss: v,\n });\n }\n }\n\n if (merged.length === 0 && v) {\n const p = primaryFontLabel(v) || \"Font\";\n merged.push({ value: p, label: p, applyCss: v });\n }\n\n return merged;\n }, [computedStack, loaded, authored]);\n}\n","import type { StyleSnapshot } from \"./use-selection\";\n\n/** Visual “Flow” presets mapped to CSS display + flex-direction. */\nexport type FlowMode = \"block\" | \"flex-column\" | \"flex-row\" | \"grid\";\n\nexport function detectFlowMode(s: StyleSnapshot): FlowMode {\n const d = s.display.toLowerCase();\n if (d === \"grid\" || d === \"inline-grid\") return \"grid\";\n if (d === \"flex\" || d === \"inline-flex\") {\n const fd = s.flexDirection.toLowerCase();\n if (fd.includes(\"column\")) return \"flex-column\";\n return \"flex-row\";\n }\n return \"block\";\n}\n\n/** Applies flow; may call onChange multiple times (separate undo steps). */\nexport function applyFlowMode(mode: FlowMode, onChange: (key: keyof StyleSnapshot, value: string) => void): void {\n switch (mode) {\n case \"block\":\n onChange(\"display\", \"block\");\n break;\n case \"flex-column\":\n onChange(\"display\", \"flex\");\n onChange(\"flexDirection\", \"column\");\n break;\n case \"flex-row\":\n onChange(\"display\", \"flex\");\n onChange(\"flexDirection\", \"row\");\n break;\n case \"grid\":\n onChange(\"display\", \"grid\");\n break;\n default:\n break;\n }\n}\n","/** Parent layout for mapping alignment controls to the right CSS (grid vs flex). */\n\nexport type ParentLayoutKind = \"grid\" | \"flex-row\" | \"flex-col\" | \"other\";\n\nexport function getParentLayoutKind(el: Element | null): ParentLayoutKind {\n if (!el?.parentElement) return \"other\";\n const p = el.parentElement;\n const s = getComputedStyle(p);\n const d = s.display;\n if (d === \"grid\" || d === \"inline-grid\") return \"grid\";\n if (d === \"flex\" || d === \"inline-flex\") {\n const fd = s.flexDirection;\n if (fd === \"row\" || fd === \"row-reverse\") return \"flex-row\";\n if (fd === \"column\" || fd === \"column-reverse\") return \"flex-col\";\n }\n return \"other\";\n}\n\nexport type SelfAlignToken = \"start\" | \"center\" | \"end\";\n\n/** Map computed align-self / justify-self to start | center | end | auto. */\nexport function normalizeSelfAlign(v: string): SelfAlignToken | \"auto\" | \"stretch\" {\n const t = v.trim().toLowerCase();\n if (t === \"\" || t === \"auto\") return \"auto\";\n if (t === \"flex-start\" || t === \"start\" || t === \"self-start\") return \"start\";\n if (t === \"center\") return \"center\";\n if (t === \"flex-end\" || t === \"end\" || t === \"self-end\") return \"end\";\n if (t === \"stretch\") return \"stretch\";\n return \"auto\";\n}\n\n/** CSS value for align-self / justify-self (modern `start`/`end`). */\nexport function selfTokenToCss(v: SelfAlignToken): string {\n return v;\n}\n\nexport function inferFlexMainAxisFromHorizontalMargins(ml: string, mr: string): SelfAlignToken | \"auto\" {\n const m = ml.trim().toLowerCase();\n const r = mr.trim().toLowerCase();\n const mlAuto = m === \"auto\";\n const mrAuto = r === \"auto\";\n if (mlAuto && mrAuto) return \"center\";\n if (mlAuto && !mrAuto) return \"end\";\n if (mrAuto && !mlAuto) return \"start\";\n return \"auto\";\n}\n\nexport function inferFlexMainAxisFromVerticalMargins(mt: string, mb: string): SelfAlignToken | \"auto\" {\n const t = mt.trim().toLowerCase();\n const b = mb.trim().toLowerCase();\n const tAuto = t === \"auto\";\n const bAuto = b === \"auto\";\n if (tAuto && bAuto) return \"center\";\n if (tAuto && !bAuto) return \"end\";\n if (bAuto && !tAuto) return \"start\";\n return \"auto\";\n}\n","/** Viewport-safe placement for `position: fixed` dropdowns (light-DOM portaled menus). */\n\nconst MARGIN = 8;\nconst GAP = 4;\n\nexport function computeFixedMenuPlacement(\n trigger: DOMRect,\n opts: { menuWidth: number; estimatedHeight: number; /** default: line up with trigger left edge */ align?: \"start\" | \"end\" },\n): {\n top: number;\n left: number;\n width: number;\n} {\n const vw = typeof window !== \"undefined\" ? window.innerWidth : 1024;\n const vh = typeof window !== \"undefined\" ? window.innerHeight : 768;\n\n const width = Math.min(Math.max(opts.menuWidth, 120), vw - 2 * MARGIN);\n let left = opts.align === \"end\" ? trigger.right - width : trigger.left;\n left = Math.max(MARGIN, Math.min(left, vw - width - MARGIN));\n\n const belowTop = trigger.bottom + GAP;\n const spaceBelow = vh - belowTop - MARGIN;\n const aboveCandidate = trigger.top - GAP - opts.estimatedHeight;\n const spaceAbove = trigger.top - MARGIN - GAP;\n\n let top: number;\n if (spaceBelow >= opts.estimatedHeight || spaceBelow >= spaceAbove) {\n top = belowTop;\n } else {\n top = Math.max(MARGIN, aboveCandidate);\n }\n\n return { top, left, width };\n}\n","\"use client\";\n\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"./cn\";\n\n/**\n * Snappy hover delays (vs native `title` ~1s). Entrance ~150–200ms matches product UI guidance\n * (see web-animation-design / shadcn Tooltip patterns).\n */\nexport function FluxTooltipProvider({ children }: { children: React.ReactNode }) {\n return (\n <TooltipPrimitive.Provider delayDuration={150} skipDelayDuration={100}>\n {children}\n </TooltipPrimitive.Provider>\n );\n}\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport function PanelTooltip({\n text,\n children,\n side = \"top\",\n}: {\n text: string;\n children: React.ReactNode;\n side?: Side;\n}) {\n const t = text.trim();\n if (!t) return <>{children}</>;\n\n return (\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n side={side}\n sideOffset={6}\n className={cn(\n \"flux-tooltip-content z-[10003] max-w-[min(18rem,calc(100vw-20px))] rounded-small border border-[#555] bg-[#2a2a2a] px-2 py-1\",\n \"font-['Inter',system-ui,sans-serif] text-xs leading-snug text-[#d9d9d9] shadow-lg\",\n )}\n >\n {t}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\n/** Shadow-root layer for dropdowns so panel `overflow` / `clip-path` does not clip menus. */\nexport const EditorMenuPortalContext = createContext<HTMLElement | null>(null);\n\nexport function useEditorMenuPortal(): HTMLElement | null {\n return useContext(EditorMenuPortalContext);\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nexport const ScrubSessionContext = createContext<{ begin: () => void; end: () => void } | null>(null);\n\nexport function useScrubSession(): { begin: () => void; end: () => void } {\n return useContext(ScrubSessionContext) ?? { begin: () => {}, end: () => {} };\n}\n","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\n\nexport type ScrubParseResult =\n | { kind: \"px\"; n: number }\n | { kind: \"unitless\"; n: number }\n | { kind: \"percent\"; n: number }\n | { kind: \"none\" };\n\nfunction parseScrubValue(raw: string, mode: \"px\" | \"unitless\" | \"percent\"): ScrubParseResult {\n const t = raw.trim().replace(/\\s*px\\s*$/i, \"\").replace(/\\s*%$/, \"\").trim();\n if (t === \"\" || t === \"normal\") return { kind: \"none\" };\n const n = Number.parseFloat(t);\n if (Number.isNaN(n) || !Number.isFinite(n)) return { kind: \"none\" };\n if (mode === \"px\") return { kind: \"px\", n };\n if (mode === \"percent\") return { kind: \"percent\", n };\n return { kind: \"unitless\", n };\n}\n\nexport function useScrubCommit({\n value,\n mode,\n onCommit,\n sensitivity = 0.5,\n onSessionBegin,\n onSessionEnd,\n}: {\n value: string;\n mode: \"px\" | \"unitless\" | \"percent\";\n onCommit: (next: string) => void;\n /** Pixels delta per 1px pointer move (after multiplier). */\n sensitivity?: number;\n onSessionBegin?: () => void;\n onSessionEnd?: () => void;\n}) {\n const startRef = useRef({ x: 0, parsed: parseScrubValue(value, mode) });\n const activeRef = useRef(false);\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (e.button !== 0) return;\n const t = e.target as HTMLElement;\n if (t.closest(\"input, select, textarea, button, [data-no-scrub]\")) return;\n e.preventDefault();\n onSessionBegin?.();\n startRef.current = { x: e.clientX, parsed: parseScrubValue(value, mode) };\n activeRef.current = true;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n },\n [value, mode, onSessionBegin],\n );\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!activeRef.current) return;\n const dx = e.clientX - startRef.current.x;\n const mult = e.shiftKey ? 10 : e.altKey ? 0.1 : 1;\n const delta = dx * sensitivity * mult;\n const base = startRef.current.parsed;\n let n = 0;\n if (base.kind === \"px\" || base.kind === \"unitless\" || base.kind === \"percent\") n = base.n;\n n += delta;\n if (mode === \"px\") {\n onCommit(`${Math.round(n * 100) / 100}px`);\n } else if (mode === \"percent\") {\n onCommit(`${Math.round(Math.min(100, Math.max(0, n)))}%`);\n } else {\n onCommit(String(Math.round(n * 100) / 100));\n }\n },\n [mode, onCommit, sensitivity],\n );\n\n const onPointerUp = useCallback(\n (e: React.PointerEvent) => {\n if (!activeRef.current) return;\n activeRef.current = false;\n onSessionEnd?.();\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n },\n [onSessionEnd],\n );\n\n return {\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onPointerCancel: onPointerUp,\n scrubAreaProps: {\n className: \"cursor-ew-resize select-none touch-none\",\n title: \"Drag horizontally to adjust (Shift: ×10, Alt: ×0.1)\",\n } as const,\n };\n}\n","\"use client\";\n\nimport { AlignCenter, AlignLeft, AlignRight, ChevronDown, MoveDown, MoveRight, Square } from \"lucide-react\";\nimport { type ReactNode, useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"./cn\";\nimport { computeFixedMenuPlacement } from \"./floating-menu-position\";\nimport { PanelTooltip } from \"./panel-tooltip\";\nimport { useEditorMenuPortal } from \"./menu-portal-context\";\nimport type { FlowMode } from \"./layout-flow\";\nimport { useScrubSession } from \"./scrub-session-context\";\nimport { useScrubCommit } from \"./use-scrub\";\n\nconst JUSTIFY_COLS: (\"flex-start\" | \"center\" | \"flex-end\")[] = [\"flex-start\", \"center\", \"flex-end\"];\nconst ALIGN_ROWS: (\"flex-start\" | \"center\" | \"flex-end\")[] = [\"flex-start\", \"center\", \"flex-end\"];\n\nconst ALIGN_ICON_MAP: Record<string, React.ReactNode> = {\n \"flex-start\": <AlignLeft className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />,\n center: <AlignCenter className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />,\n \"flex-end\": <AlignRight className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />,\n};\n\nfunction justifyTooltip(j: string): string {\n if (j === \"flex-start\") return \"start\";\n if (j === \"flex-end\") return \"end\";\n return \"center\";\n}\n\nfunction alignTooltip(a: string): string {\n if (a === \"flex-start\") return \"top\";\n if (a === \"flex-end\") return \"bottom\";\n return \"middle\";\n}\n\nexport function PanelAlignmentGrid({\n justifyContent,\n alignItems,\n onJustifyChange,\n onAlignChange,\n /** Double-click any cell: `justify-content: space-between` on the flex container. */\n onCellDoubleClick,\n}: {\n justifyContent: string;\n alignItems: string;\n onJustifyChange: (v: string) => void;\n onAlignChange: (v: string) => void;\n onCellDoubleClick?: () => void;\n}) {\n const normalizeJ = (v: string) => (JUSTIFY_COLS.includes(v as never) ? v : \"flex-start\");\n const normalizeA = (v: string) => (ALIGN_ROWS.includes(v as never) ? v : \"flex-start\");\n const activeJ = normalizeJ(justifyContent);\n const activeA = normalizeA(alignItems);\n\n return (\n <div className={cn(panelChrome.field, \"grid grid-cols-3 grid-rows-3 gap-0 p-1\")} style={{ aspectRatio: \"1.6\" }}>\n {ALIGN_ROWS.map((a) =>\n JUSTIFY_COLS.map((j) => {\n const isActive = activeJ === j && activeA === a;\n const baseTip = `Justify ${justifyTooltip(j)}, align ${alignTooltip(a)}`;\n const tip =\n onCellDoubleClick != null ? `${baseTip} — double-click: space-between (main axis)` : baseTip;\n return (\n <PanelTooltip key={`${a}-${j}`} text={tip}>\n <button\n type=\"button\"\n onClick={(e) => {\n if (e.detail === 2) {\n onCellDoubleClick?.();\n return;\n }\n if (e.detail === 1) {\n onJustifyChange(j);\n onAlignChange(a);\n }\n }}\n className={cn(\"flex items-center justify-center rounded-small transition-colors\", isActive ? \"bg-[#202020]\" : \"hover:bg-[#2a2a2a]\")}\n aria-label={tip}\n aria-pressed={isActive}\n >\n {isActive ? ALIGN_ICON_MAP[j] : <span className=\"block size-[5px] rounded-full bg-[#555]\" />}\n </button>\n </PanelTooltip>\n );\n }),\n )}\n </div>\n );\n}\n\n/** Tokens and primitives for the Flux properties sidebar (#202020 / #333333). */\nexport const panelChrome = {\n panel: \"bg-[#202020] text-[#D9D9D9] antialiased [font-synthesis:none]\",\n /** 8px — editor token `rounded-small` in `tailwind.editor.config.ts` */\n field: \"rounded-small bg-[#333333]\",\n text: \"text-[#D9D9D9]\",\n muted: \"text-[#7C7C7C]\",\n /** Section headings (Layout, Text, Fill, …) */\n title: \"font-['Inter',system-ui,sans-serif] text-[12px] font-bold leading-[14px]\",\n body: \"font-['Inter',system-ui,sans-serif] text-xs leading-[15.6px]\",\n icon: \"size-[14px] shrink-0 text-[#D9D9D9]\",\n toggleTrack: \"flex w-full justify-between gap-2 rounded-small bg-[#333333] p-1\",\n toggleOn: \"rounded-small bg-[#202020] p-1\",\n toggleOff: \"rounded-small p-1\",\n /** Popover surface — pair with `position: fixed` + viewport coords so scroll parents don’t clip menus. */\n selectMenuSurface: \"max-h-48 overflow-y-auto rounded-small border border-[#444] bg-[#2a2a2a] py-1 shadow-lg\",\n} as const;\n\nfunction pathIncludesNode(path: EventTarget[], node: Node | null): boolean {\n if (!node) return false;\n return path.some((x) => x === node);\n}\n\n/** Custom listbox so menu colors match the variable token dropdown (native `<option>` UIs are OS-controlled). */\nfunction PanelFieldCustomSelect({\n value,\n options,\n onChange,\n disabled,\n ariaLabel,\n className,\n /** Shown before the chevron, `gap-1` (4px) from the chevron — e.g. variable picker. */\n beforeTrailingSlot,\n trailingSlot,\n triggerLabel,\n truncateTrigger = true,\n}: {\n value: string;\n options: { value: string; label: string }[];\n onChange: (v: string) => void;\n disabled?: boolean;\n ariaLabel: string;\n className?: string;\n beforeTrailingSlot?: ReactNode;\n /** e.g. chevron — last in the row, 4px after `beforeTrailingSlot`. */\n trailingSlot?: ReactNode;\n /** Closed-state label (e.g. short “Fill” / “Fit” for sizing rows). */\n triggerLabel?: string;\n /** When false, mode trigger text won’t ellipsis (sizing row). Default true. */\n truncateTrigger?: boolean;\n}) {\n const [open, setOpen] = useState(false);\n const [menuBox, setMenuBox] = useState<{ top: number; left: number; width: number } | null>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerBtnRef = useRef<HTMLButtonElement>(null);\n const chevronBtnRef = useRef<HTMLButtonElement>(null);\n const menuDropdownRef = useRef<HTMLDivElement>(null);\n const menuPortalEl = useEditorMenuPortal();\n const current = options.find((o) => o.value === value) ?? options[0];\n\n useLayoutEffect(() => {\n if (!open || !rootRef.current) {\n setMenuBox(null);\n return;\n }\n const tb = triggerBtnRef.current?.getBoundingClientRect();\n const cb = chevronBtnRef.current?.getBoundingClientRect();\n const r = rootRef.current.getBoundingClientRect();\n const left = tb?.left ?? r.left;\n const right = cb?.right ?? tb?.right ?? r.right;\n const top = Math.min(tb?.top ?? r.top, cb?.top ?? r.top);\n const bottom = Math.max(tb?.bottom ?? r.bottom, cb?.bottom ?? r.bottom);\n const anchor = new DOMRect(left, top, Math.max(right - left, 1), Math.max(bottom - top, 1));\n const preferredWidth = Math.max(anchor.width, 120);\n const estH = Math.min(options.length * 36 + 12, 192);\n setMenuBox(computeFixedMenuPlacement(anchor, { menuWidth: preferredWidth, estimatedHeight: estH }));\n }, [open, options.length]);\n\n useEffect(() => {\n if (!open) return;\n const onDocPointer = (e: PointerEvent) => {\n const path = typeof e.composedPath === \"function\" ? e.composedPath() : [];\n if (pathIncludesNode(path, rootRef.current)) return;\n if (pathIncludesNode(path, menuDropdownRef.current)) return;\n setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n const onScroll = () => setOpen(false);\n document.addEventListener(\"pointerdown\", onDocPointer);\n document.addEventListener(\"keydown\", onKey);\n window.addEventListener(\"scroll\", onScroll, true);\n window.addEventListener(\"resize\", onScroll);\n return () => {\n document.removeEventListener(\"pointerdown\", onDocPointer);\n document.removeEventListener(\"keydown\", onKey);\n window.removeEventListener(\"scroll\", onScroll, true);\n window.removeEventListener(\"resize\", onScroll);\n };\n }, [open]);\n\n const toggleOpen = () => {\n if (!disabled) setOpen((o) => !o);\n };\n\n return (\n <div ref={rootRef} className={cn(\"relative flex min-w-0 flex-1 items-center gap-1\", className)} data-flux-ui>\n {/* Label trigger is its own <button>; variable slot is a sibling so picker menus are never nested inside a button. */}\n <button\n ref={triggerBtnRef}\n type=\"button\"\n disabled={disabled}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n className={cn(\n \"min-w-0 flex-1 cursor-pointer border-0 bg-transparent py-0.5 text-left leading-[15.6px] outline-none\",\n truncateTrigger && \"truncate\",\n panelChrome.body,\n panelChrome.text,\n disabled ? \"cursor-not-allowed opacity-60\" : undefined,\n )}\n onClick={toggleOpen}\n >\n {triggerLabel ?? current?.label ?? value}\n </button>\n {beforeTrailingSlot != null ? (\n <span\n className=\"flex shrink-0 items-center\"\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n {beforeTrailingSlot}\n </span>\n ) : null}\n <button\n ref={chevronBtnRef}\n type=\"button\"\n tabIndex={-1}\n aria-hidden\n disabled={disabled}\n className={cn(\n \"flex shrink-0 border-0 bg-transparent p-0 text-[#D9D9D9] outline-none\",\n disabled ? \"cursor-not-allowed opacity-60\" : \"cursor-pointer\",\n )}\n onClick={toggleOpen}\n >\n {trailingSlot}\n </button>\n {open && menuBox\n ? (() => {\n const menuNode = (\n <div\n ref={menuDropdownRef}\n data-flux-select-menu\n data-flux-ui\n style={{\n top: menuBox.top,\n left: menuBox.left,\n width: menuBox.width,\n }}\n >\n {options.map((o) => (\n <PanelTooltip key={o.value} text={o.label}>\n <button\n type=\"button\"\n className={cn(\"flux-menu-option\", o.value === value && \"is-active\")}\n onClick={() => {\n onChange(o.value);\n setOpen(false);\n }}\n >\n {o.label}\n </button>\n </PanelTooltip>\n ))}\n </div>\n );\n return menuPortalEl ? createPortal(menuNode, menuPortalEl) : menuNode;\n })()\n : null}\n </div>\n );\n}\n\nexport function PanelSectionTitle({\n children,\n /** Match `OnDemandSectionButton` label: muted #7C7C7C, hover to #D9D9D9 (default: section heading #D9D9D9). */\n tone = \"default\",\n}: {\n children: React.ReactNode;\n tone?: \"default\" | \"muted\";\n}) {\n return (\n <div\n className={cn(\n panelChrome.title,\n tone === \"muted\" ? cn(panelChrome.muted, \"transition-colors hover:text-[#D9D9D9]\") : panelChrome.text,\n \"shrink-0\",\n )}\n >\n {children}\n </div>\n );\n}\n\n/** Sub-labels under Layout (Flow, Dimensions, Padding, Margin) — 12px, sentence case. */\nexport function PanelSubsectionTitle({ children }: { children: React.ReactNode }) {\n return <div className={cn(\"shrink-0 font-['Inter',system-ui,sans-serif] font-medium text-[#7C7C7C] text-[12px] leading-[15.6px]\")}>{children}</div>;\n}\n\nexport function PanelFlowRow({ value, onChange }: { value: FlowMode; onChange: (m: FlowMode) => void }) {\n const opts: { mode: FlowMode; label: string; icon: React.ReactNode }[] = [\n { mode: \"block\", label: \"Block\", icon: <Square className={panelChrome.icon} strokeWidth={2} aria-hidden /> },\n { mode: \"flex-column\", label: \"Vertical stack (flex column)\", icon: <MoveDown className={panelChrome.icon} strokeWidth={2} aria-hidden /> },\n { mode: \"flex-row\", label: \"Horizontal stack (flex row)\", icon: <MoveRight className={panelChrome.icon} strokeWidth={2} aria-hidden /> },\n ];\n return (\n <fieldset className={cn(panelChrome.toggleTrack, \"min-w-0 border-0 p-1\")}>\n <legend className=\"sr-only\">Layout flow</legend>\n {opts.map((o) => (\n <PanelTooltip key={o.mode} text={o.label}>\n <button\n type=\"button\"\n onClick={() => onChange(o.mode)}\n className={cn(\n \"flex min-w-0 flex-1 items-center justify-center rounded-small p-1.5 transition-colors\",\n value === o.mode ? panelChrome.toggleOn : panelChrome.toggleOff,\n )}\n aria-pressed={value === o.mode}\n aria-label={o.label}\n >\n {o.icon}\n </button>\n </PanelTooltip>\n ))}\n </fieldset>\n );\n}\n\nexport function PanelPrimaryButton({\n children,\n onClick,\n disabled,\n icon,\n title,\n \"data-flux-ui\": dataUi,\n \"aria-live\": ariaLive,\n}: {\n children: React.ReactNode;\n onClick?: () => void;\n disabled?: boolean;\n icon?: React.ReactNode;\n title?: string;\n \"data-flux-ui\"?: boolean;\n \"aria-live\"?: \"off\" | \"polite\" | \"assertive\";\n}) {\n const btn = (\n <button\n type=\"button\"\n {...(dataUi ? { \"data-flux-ui\": true } : {})}\n disabled={disabled}\n aria-live={ariaLive}\n onClick={onClick}\n className={cn(\n panelChrome.field,\n \"flex w-full shrink-0 items-center justify-center gap-2 overflow-hidden px-2 py-1\",\n disabled && \"cursor-not-allowed opacity-50\",\n !disabled && \"hover:brightness-110\",\n )}\n >\n <div className={cn(\"flex w-full items-start justify-center gap-2 py-1\", panelChrome.body, panelChrome.text)}>\n {icon}\n {children}\n </div>\n </button>\n );\n const tip = title?.trim() ?? \"\";\n if (!tip) return btn;\n return (\n <PanelTooltip text={tip}>\n {disabled ? (\n <span className=\"inline-flex w-full max-w-full cursor-not-allowed\">{btn}</span>\n ) : (\n btn\n )}\n </PanelTooltip>\n );\n}\n\nexport function PanelSelect({\n label,\n value,\n onChange,\n options,\n icon,\n className,\n ariaLabel,\n disabled,\n hoverVariableSlot,\n}: {\n label?: string;\n value: string;\n onChange: (v: string) => void;\n options: { value: string; label: string }[];\n icon?: React.ReactNode;\n className?: string;\n ariaLabel?: string;\n disabled?: boolean;\n hoverVariableSlot?: ReactNode;\n}) {\n return (\n <div\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex min-w-0 flex-1 items-center gap-2 overflow-visible px-2 py-1\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n >\n {icon}\n <div className=\"flex min-w-0 flex-1 items-center gap-[13px]\">\n {label != null && <span className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 leading-[15.6px]\")}>{label}</span>}\n <PanelFieldCustomSelect\n value={value}\n options={options}\n onChange={onChange}\n disabled={disabled}\n ariaLabel={ariaLabel ?? (label ? `${label} value` : \"Select value\")}\n className=\"min-w-0 flex-1\"\n beforeTrailingSlot={hoverVariableSlot}\n trailingSlot={<ChevronDown className={panelChrome.icon} aria-hidden strokeWidth={2} />}\n />\n </div>\n </div>\n );\n}\n\n/** One row: label (W/H) + optional fixed value input + mode dropdown + chevron (Paper Editor layout). */\nexport function PanelSizingAxis({\n label,\n mode,\n modeTriggerLabel,\n modeOptions,\n onModeChange,\n showFixedInput,\n fixedDisplayValue,\n onFixedCommit,\n commitRawToCss,\n fixedAriaLabel,\n}: {\n label: string;\n mode: string;\n /** Closed dropdown label (Fill / Fit). Empty when mode is fixed so the number field isn’t duplicated by “Fixed”. */\n modeTriggerLabel: string;\n modeOptions: { value: string; label: string }[];\n onModeChange: (mode: string) => void;\n showFixedInput: boolean;\n /** Shown when not focused; synced when the DOM value changes from outside (e.g. undo). */\n fixedDisplayValue: string;\n /** Receives final CSS dimension (e.g. `120px`) on blur or Enter. */\n onFixedCommit: (cssValue: string) => void;\n /** Turn draft text into a CSS length; called only on commit. */\n commitRawToCss: (raw: string) => string;\n fixedAriaLabel: string;\n}) {\n const [draft, setDraft] = useState(fixedDisplayValue);\n\n useEffect(() => {\n setDraft(fixedDisplayValue);\n }, [fixedDisplayValue]);\n\n const commitDraft = () => {\n onFixedCommit(commitRawToCss(draft));\n };\n\n return (\n <div className={cn(panelChrome.field, \"relative z-[1] flex min-w-0 flex-1 items-center gap-2 overflow-visible px-2 py-1\")}>\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n {label}\n </span>\n {showFixedInput ? (\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={() => {\n commitDraft();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n (e.target as HTMLInputElement).blur();\n }\n }}\n className={cn(\"min-w-[2rem] flex-1 border-0 bg-transparent leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n aria-label={fixedAriaLabel}\n />\n ) : null}\n <PanelFieldCustomSelect\n value={mode}\n options={modeOptions}\n onChange={onModeChange}\n ariaLabel={`${label} sizing mode`}\n className={showFixedInput ? \"w-[5.5rem] shrink-0\" : \"min-w-0 flex-1\"}\n triggerLabel={modeTriggerLabel}\n truncateTrigger={false}\n trailingSlot={<ChevronDown className={panelChrome.icon} aria-hidden strokeWidth={2} />}\n />\n </div>\n );\n}\n\nexport function PanelTextInput({\n value,\n onChange,\n icon,\n className,\n ariaLabel,\n disabled,\n /** When true, only call onChange on blur/Enter so the DOM isn’t rewritten every keystroke (fixes cursor/garbled text). */\n commitOnBlur = false,\n hoverVariableSlot,\n}: {\n value: string;\n onChange: (v: string) => void;\n icon?: React.ReactNode;\n className?: string;\n ariaLabel?: string;\n disabled?: boolean;\n commitOnBlur?: boolean;\n hoverVariableSlot?: ReactNode;\n}) {\n const [draft, setDraft] = useState(value);\n const [focused, setFocused] = useState(false);\n const varSlot = Boolean(hoverVariableSlot);\n\n useEffect(() => {\n if (!focused) setDraft(value);\n }, [value, focused]);\n\n return (\n <div\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 py-1\",\n varSlot && \"group\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n >\n {icon}\n <input\n type=\"text\"\n readOnly={disabled}\n value={commitOnBlur && focused ? draft : value}\n onChange={(e) => {\n if (commitOnBlur) setDraft(e.target.value);\n else onChange(e.target.value);\n }}\n onFocus={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(true);\n setDraft(value);\n }}\n onBlur={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(false);\n onChange(draft);\n }}\n onKeyDown={(e) => {\n if (!commitOnBlur || e.key !== \"Enter\") return;\n (e.target as HTMLInputElement).blur();\n }}\n aria-label={ariaLabel}\n className={cn(\n \"min-w-0 flex-1 border-0 bg-transparent leading-[15.6px] outline-none\",\n panelChrome.body,\n panelChrome.text,\n disabled && \"cursor-not-allowed\",\n )}\n spellCheck={false}\n />\n {varSlot ? <div className=\"flex shrink-0 items-center\">{hoverVariableSlot}</div> : null}\n </div>\n );\n}\n\nfunction hexForColorInput(hexNoHash: string): string {\n const h = hexNoHash\n .replace(/#/g, \"\")\n .replace(/[^0-9a-fA-F]/g, \"\")\n .padEnd(6, \"0\")\n .slice(0, 6);\n return `#${h}`;\n}\n\nexport function PanelSwatchRow({\n hexNoHash,\n opacityPct,\n onHexChange,\n onOpacityPctChange,\n swatchBackground,\n disabled,\n hoverVariableSlot,\n}: {\n hexNoHash: string;\n opacityPct: number;\n onHexChange: (hex6: string) => void;\n onOpacityPctChange: (pct: number) => void;\n swatchBackground: string;\n disabled?: boolean;\n hoverVariableSlot?: ReactNode;\n}) {\n const [hexDraft, setHexDraft] = useState(hexNoHash);\n const [hexFocused, setHexFocused] = useState(false);\n const [opDraft, setOpDraft] = useState(() => String(opacityPct));\n const [opFocused, setOpFocused] = useState(false);\n\n useEffect(() => {\n if (!hexFocused) setHexDraft(hexNoHash);\n }, [hexNoHash, hexFocused]);\n\n useEffect(() => {\n if (!opFocused) setOpDraft(String(opacityPct));\n }, [opacityPct, opFocused]);\n\n const commitHex = useCallback(() => {\n const cleaned = hexDraft\n .replace(/#/g, \"\")\n .replace(/[^0-9a-fA-F]/g, \"\")\n .slice(0, 6);\n if (cleaned.length > 0) onHexChange(cleaned);\n else setHexDraft(hexNoHash);\n }, [hexDraft, hexNoHash, onHexChange]);\n\n const commitOpacity = useCallback(() => {\n const n = Number.parseInt(opDraft.replace(/%/g, \"\").trim(), 10);\n if (!Number.isNaN(n)) onOpacityPctChange(clampPctLocal(n));\n else setOpDraft(String(opacityPct));\n }, [opDraft, onOpacityPctChange, opacityPct]);\n\n const varSlot = Boolean(hoverVariableSlot);\n\n return (\n <div\n data-flux-ui\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex w-full shrink-0 items-center gap-2 overflow-hidden px-2 py-1\",\n varSlot && \"group\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <div className=\"flex shrink-0 items-center gap-2\">\n <label className=\"relative block size-4 shrink-0 cursor-pointer rounded-small\">\n <input\n type=\"color\"\n disabled={disabled}\n value={hexForColorInput(hexNoHash)}\n onChange={(e) => {\n const next = e.target.value.replace(/^#/, \"\").toUpperCase();\n onHexChange(next);\n }}\n className=\"absolute inset-0 h-full w-full cursor-pointer opacity-0\"\n aria-label=\"Pick color\"\n />\n <span\n aria-hidden\n className=\"pointer-events-none absolute inset-0 rounded-small border border-[#202020]\"\n style={{ backgroundColor: swatchBackground }}\n />\n </label>\n <input\n type=\"text\"\n disabled={disabled}\n value={hexFocused ? hexDraft : hexNoHash}\n onFocus={() => {\n setHexFocused(true);\n setHexDraft(hexNoHash);\n }}\n onBlur={() => {\n setHexFocused(false);\n commitHex();\n }}\n onChange={(e) => {\n const next = e.target.value\n .replace(/#/g, \"\")\n .replace(/[^0-9a-fA-F]/g, \"\")\n .slice(0, 6);\n setHexDraft(next);\n }}\n className={cn(\"w-[4.5rem] shrink-0 border-0 bg-transparent uppercase leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n aria-label=\"Color hex\"\n maxLength={6}\n spellCheck={false}\n />\n </div>\n <div className=\"flex min-w-0 flex-1 items-center justify-end gap-1\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n disabled={disabled}\n value={opFocused ? opDraft : `${opacityPct}%`}\n onFocus={() => {\n setOpFocused(true);\n setOpDraft(String(opacityPct));\n }}\n onBlur={() => {\n setOpFocused(false);\n commitOpacity();\n }}\n onChange={(e) => {\n const raw = e.target.value.replace(/%/g, \"\");\n if (raw === \"\" || /^\\d*$/.test(raw)) setOpDraft(raw);\n }}\n className={cn(\"min-w-0 max-w-[5rem] border-0 bg-transparent text-right leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n aria-label=\"Opacity percent\"\n />\n {varSlot ? <div className=\"flex shrink-0 items-center\">{hoverVariableSlot}</div> : null}\n </div>\n </div>\n );\n}\n\nfunction clampPctLocal(n: number): number {\n return Math.min(100, Math.max(0, n));\n}\n\nexport function PanelLabeledMini({\n label,\n value,\n onChange,\n disabled,\n commitOnBlur = false,\n scrubMode,\n hoverVariableSlot,\n}: {\n label: string;\n value: string;\n onChange: (v: string) => void;\n disabled?: boolean;\n commitOnBlur?: boolean;\n scrubMode?: \"px\" | \"unitless\" | \"percent\";\n hoverVariableSlot?: ReactNode;\n}) {\n const [draft, setDraft] = useState(value);\n const [focused, setFocused] = useState(false);\n const { begin, end } = useScrubSession();\n const scrub = useScrubCommit({\n value,\n mode: scrubMode ?? \"px\",\n onCommit: onChange,\n onSessionBegin: begin,\n onSessionEnd: end,\n });\n\n useEffect(() => {\n if (!focused) setDraft(value);\n }, [value, focused]);\n\n const varSlot = Boolean(hoverVariableSlot);\n\n return (\n <div\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex min-w-0 flex-1 items-center gap-1 overflow-hidden px-2 py-1\",\n varSlot && \"group\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {scrubMode && !disabled ? (\n <PanelTooltip text={scrub.scrubAreaProps.title}>\n <span\n className={cn(\n panelChrome.muted,\n panelChrome.body,\n \"shrink-0 leading-[15.6px]\",\n scrub.scrubAreaProps.className,\n \"rounded-small px-0.5\",\n )}\n onPointerDown={scrub.onPointerDown}\n onPointerMove={scrub.onPointerMove}\n onPointerUp={scrub.onPointerUp}\n onPointerCancel={scrub.onPointerCancel}\n >\n {label}\n </span>\n </PanelTooltip>\n ) : (\n <span className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 leading-[15.6px]\")}>{label}</span>\n )}\n <input\n type=\"text\"\n readOnly={disabled}\n value={commitOnBlur && focused ? draft : value}\n onChange={(e) => {\n if (commitOnBlur) setDraft(e.target.value);\n else onChange(e.target.value);\n }}\n onFocus={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(true);\n setDraft(value);\n }}\n onBlur={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(false);\n onChange(draft);\n }}\n onKeyDown={(e) => {\n if (!commitOnBlur || e.key !== \"Enter\") return;\n (e.target as HTMLInputElement).blur();\n }}\n className={cn(\"min-w-0 flex-1 border-0 bg-transparent leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n aria-label={label}\n spellCheck={false}\n />\n </div>\n {varSlot ? <div className=\"flex shrink-0 items-center\">{hoverVariableSlot}</div> : null}\n </div>\n );\n}\n\nexport function PanelIconField({\n icon,\n value,\n onChange,\n ariaLabel,\n disabled,\n /** When true, edits stay local until blur/Enter (avoids fighting the controlled value while typing). */\n commitOnBlur = false,\n suffix,\n scrubMode,\n hoverVariableSlot,\n}: {\n icon: React.ReactNode;\n value: string;\n onChange: (v: string) => void;\n ariaLabel?: string;\n disabled?: boolean;\n commitOnBlur?: boolean;\n suffix?: string;\n scrubMode?: \"px\" | \"unitless\" | \"percent\";\n hoverVariableSlot?: ReactNode;\n}) {\n const [draft, setDraft] = useState(value);\n const [focused, setFocused] = useState(false);\n const { begin, end } = useScrubSession();\n const scrub = useScrubCommit({\n value,\n mode: scrubMode ?? \"px\",\n onCommit: onChange,\n onSessionBegin: begin,\n onSessionEnd: end,\n });\n\n useEffect(() => {\n if (!focused) setDraft(value);\n }, [value, focused]);\n\n const varSlot = Boolean(hoverVariableSlot);\n const iconTip =\n scrubMode && !disabled\n ? ariaLabel\n ? `${ariaLabel} — ${scrub.scrubAreaProps.title}`\n : scrub.scrubAreaProps.title\n : ariaLabel ?? \"\";\n\n return (\n <div\n className={cn(\n panelChrome.field,\n \"relative z-[1] flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2 py-1\",\n varSlot && \"group\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n {scrubMode && !disabled ? (\n <PanelTooltip text={iconTip}>\n <span\n className={cn(\"inline-flex shrink-0 items-center justify-center\", scrub.scrubAreaProps.className)}\n onPointerDown={scrub.onPointerDown}\n onPointerMove={scrub.onPointerMove}\n onPointerUp={scrub.onPointerUp}\n onPointerCancel={scrub.onPointerCancel}\n aria-hidden\n >\n {icon}\n </span>\n </PanelTooltip>\n ) : (\n <PanelTooltip text={iconTip}>\n <span className=\"inline-flex shrink-0 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n </PanelTooltip>\n )}\n <PanelTooltip text={ariaLabel ?? \"\"}>\n <input\n type=\"text\"\n readOnly={disabled}\n value={commitOnBlur && focused ? draft : value}\n onChange={(e) => {\n if (commitOnBlur) setDraft(e.target.value);\n else onChange(e.target.value);\n }}\n onFocus={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(true);\n setDraft(value);\n }}\n onBlur={() => {\n if (!commitOnBlur || disabled) return;\n setFocused(false);\n onChange(draft);\n }}\n onKeyDown={(e) => {\n if (!commitOnBlur || e.key !== \"Enter\") return;\n (e.target as HTMLInputElement).blur();\n }}\n aria-label={ariaLabel}\n className={cn(\"min-w-0 flex-1 border-0 bg-transparent leading-[15.6px] outline-none\", panelChrome.body, panelChrome.text)}\n />\n </PanelTooltip>\n {suffix || varSlot ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {suffix ? <span className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 leading-[15.6px]\")}>{suffix}</span> : null}\n {varSlot ? hoverVariableSlot : null}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function PanelToggleGroup<T extends string>({\n value,\n onChange,\n options,\n disabled,\n}: {\n /** Empty string = no option selected (e.g. `align-self: auto`). */\n value: T | \"\";\n onChange: (v: T) => void;\n options: { value: T; icon: React.ReactNode; title: string }[];\n disabled?: boolean;\n}) {\n return (\n <div className={cn(panelChrome.toggleTrack, disabled && \"cursor-not-allowed opacity-60\")}>\n {options.map((o) => {\n const pressed = value !== \"\" && value === o.value;\n return (\n <PanelTooltip key={o.value} text={o.title}>\n {disabled ? (\n <span className=\"inline-flex shrink-0\">\n <button\n type=\"button\"\n disabled\n onClick={() => onChange(o.value)}\n className={cn(\"flex shrink-0 items-center gap-2 rounded-small p-1\", pressed ? panelChrome.toggleOn : panelChrome.toggleOff)}\n aria-pressed={pressed}\n aria-label={o.title}\n >\n {o.icon}\n </button>\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={() => onChange(o.value)}\n className={cn(\"flex shrink-0 items-center gap-2 rounded-small p-1\", pressed ? panelChrome.toggleOn : panelChrome.toggleOff)}\n aria-pressed={pressed}\n aria-label={o.title}\n >\n {o.icon}\n </button>\n )}\n </PanelTooltip>\n );\n })}\n </div>\n );\n}\n","/**\n * Maps CSS property names (kebab-case) to custom property names that appear\n * in stylesheet values via var(--name), so pickers can prefer vars actually\n * used for that property in the host app.\n */\n\nconst VAR_RE = /var\\(\\s*(--[\\w-]+)\\s*(?:,[^)]*)?\\)/gi;\n\nfunction extractVarNames(value: string): string[] {\n const out: string[] = [];\n let m: RegExpExecArray | null;\n VAR_RE.lastIndex = 0;\n while ((m = VAR_RE.exec(value)) !== null) {\n out.push(m[1].trim());\n }\n return out;\n}\n\nlet cachedMap: Map<string, Set<string>> | null = null;\nlet cachedSheetCount = -1;\n\nfunction walkRules(rules: CSSRuleList, propToVars: Map<string, Set<string>>): void {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSGroupingRule) {\n walkRules(rule.cssRules, propToVars);\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n\n const style = rule.style;\n for (let j = 0; j < style.length; j++) {\n const prop = style[j];\n if (prop.startsWith(\"--\")) continue;\n const val = style.getPropertyValue(prop);\n if (!val.includes(\"var(\")) continue;\n for (const name of extractVarNames(val)) {\n let set = propToVars.get(prop);\n if (!set) {\n set = new Set();\n propToVars.set(prop, set);\n }\n set.add(name);\n }\n }\n }\n}\n\nfunction buildIndex(): Map<string, Set<string>> {\n const propToVars = new Map<string, Set<string>>();\n for (const sheet of document.styleSheets) {\n let rules: CSSRuleList;\n try {\n rules = sheet.cssRules;\n } catch {\n continue;\n }\n walkRules(rules, propToVars);\n }\n return propToVars;\n}\n\nexport function invalidateVariableUsageCache(): void {\n cachedMap = null;\n cachedSheetCount = -1;\n}\n\n/** Custom property names (--foo) that appear in rules for this CSS property. */\nexport function getVariablesUsedForCssProperty(kebabProperty: string): string[] {\n const count = document.styleSheets.length;\n if (!cachedMap || cachedSheetCount !== count) {\n cachedMap = buildIndex();\n cachedSheetCount = count;\n }\n const set = cachedMap.get(kebabProperty);\n return set ? [...set].sort((a, b) => a.localeCompare(b)) : [];\n}\n","/**\n * Lazy token scanner — walks document.styleSheets to discover CSS custom properties\n * and utility class tokens. Scans on-demand per category, cached until stylesheet count changes.\n */\n\nimport { getVariablesUsedForCssProperty, invalidateVariableUsageCache } from \"./variable-usage-index\";\n\nexport type TokenCategory = \"colors\" | \"spacing\" | \"typography\" | \"borders\" | \"effects\" | \"layout\";\nexport type CssFramework = \"tailwind\" | \"css-modules\" | \"custom\" | \"unknown\";\n\nexport interface DesignToken {\n className: string;\n property: string;\n value: string;\n category: TokenCategory;\n}\n\nexport interface CssVariable {\n name: string;\n value: string;\n category: TokenCategory;\n}\n\nexport interface TokenScanResult {\n tokens: DesignToken[];\n variables: CssVariable[];\n framework: CssFramework;\n}\n\nconst PROPERTY_CATEGORY_MAP: Record<string, TokenCategory> = {\n \"color\": \"colors\", \"background-color\": \"colors\", \"border-color\": \"colors\",\n \"outline-color\": \"colors\", \"fill\": \"colors\", \"stroke\": \"colors\",\n \"padding\": \"spacing\", \"padding-top\": \"spacing\", \"padding-right\": \"spacing\",\n \"padding-bottom\": \"spacing\", \"padding-left\": \"spacing\",\n \"margin\": \"spacing\", \"margin-top\": \"spacing\", \"margin-right\": \"spacing\",\n \"margin-bottom\": \"spacing\", \"margin-left\": \"spacing\",\n \"gap\": \"spacing\", \"row-gap\": \"spacing\", \"column-gap\": \"spacing\",\n \"width\": \"spacing\", \"height\": \"spacing\", \"max-width\": \"spacing\",\n \"max-height\": \"spacing\", \"min-width\": \"spacing\", \"min-height\": \"spacing\",\n \"font-size\": \"typography\", \"font-weight\": \"typography\", \"font-family\": \"typography\",\n \"line-height\": \"typography\", \"letter-spacing\": \"typography\",\n \"border-width\": \"borders\", \"border-top-width\": \"borders\", \"border-right-width\": \"borders\",\n \"border-bottom-width\": \"borders\", \"border-left-width\": \"borders\",\n \"border-radius\": \"borders\", \"border-style\": \"borders\",\n \"box-shadow\": \"effects\", \"opacity\": \"effects\", \"filter\": \"effects\",\n \"display\": \"layout\", \"flex-direction\": \"layout\", \"justify-content\": \"layout\",\n \"align-items\": \"layout\", \"overflow\": \"layout\",\n};\n\nfunction getCategoryForProperty(prop: string): TokenCategory | null {\n return PROPERTY_CATEGORY_MAP[prop] ?? null;\n}\n\nlet cachedResult: TokenScanResult | null = null;\nlet cachedSheetCount = -1;\n\nexport function scanTokens(): TokenScanResult {\n const count = document.styleSheets.length;\n if (cachedResult && cachedSheetCount === count) return cachedResult;\n cachedResult = buildTokenRegistry();\n cachedSheetCount = count;\n return cachedResult;\n}\n\nexport function invalidateTokenCache(): void {\n cachedResult = null;\n cachedSheetCount = -1;\n invalidateVariableUsageCache();\n}\n\n/** One-line summary for AI prompts (design-token preamble). */\nexport function summarizeTokenSystem(): string | null {\n if (typeof document === \"undefined\") return null;\n try {\n const { tokens, variables, framework } = scanTokens();\n if (tokens.length === 0 && variables.length === 0) return null;\n const bits: string[] = [];\n if (variables.length > 0) {\n bits.push(`${variables.length} CSS variable${variables.length !== 1 ? \"s\" : \"\"}`);\n }\n if (tokens.length > 0) {\n bits.push(`${tokens.length} scanned utility class${tokens.length !== 1 ? \"es\" : \"\"}`);\n }\n return `${bits.join(\", \")}; framework **${framework}**`;\n } catch {\n return null;\n }\n}\n\nexport function detectFramework(): CssFramework {\n return scanTokens().framework;\n}\n\nexport function getTokensForProperty(cssProperty: string): DesignToken[] {\n const cat = getCategoryForProperty(cssProperty);\n if (!cat) return [];\n return scanTokens().tokens.filter((t) => t.category === cat);\n}\n\nexport function getVariablesForProperty(cssProperty: string): CssVariable[] {\n const cat = getCategoryForProperty(cssProperty);\n if (!cat) return [];\n return scanTokens().variables.filter((v) => v.category === cat);\n}\n\n/**\n * Variables that appear in real CSS rules for this property first, then category fallback.\n */\nexport function getVariablesForPropertySmart(cssPropertyKebab: string): CssVariable[] {\n const usageOrder = getVariablesUsedForCssProperty(cssPropertyKebab);\n const registry = scanTokens().variables;\n const byName = new Map(registry.map((v) => [v.name, v]));\n const primary: CssVariable[] = [];\n const seen = new Set<string>();\n const fallbackCat = getCategoryForProperty(cssPropertyKebab) ?? \"spacing\";\n for (const name of usageOrder) {\n const v = byName.get(name);\n if (v && !seen.has(v.name)) {\n primary.push(v);\n seen.add(v.name);\n } else if (!byName.has(name) && !seen.has(name)) {\n const resolved =\n typeof document !== \"undefined\" ? getComputedStyle(document.documentElement).getPropertyValue(name).trim() : \"\";\n primary.push({ name, value: resolved, category: fallbackCat });\n seen.add(name);\n }\n }\n for (const v of getVariablesForProperty(cssPropertyKebab)) {\n if (!seen.has(v.name)) {\n primary.push(v);\n seen.add(v.name);\n }\n }\n return primary;\n}\n\nfunction buildTokenRegistry(): TokenScanResult {\n const tokens: DesignToken[] = [];\n const variables: CssVariable[] = [];\n const seenClasses = new Set<string>();\n const seenVars = new Set<string>();\n let hasTwVars = false;\n\n const probe = document.createElement(\"div\");\n probe.style.cssText = \"position:fixed;top:-9999px;left:-9999px;visibility:hidden;pointer-events:none;\";\n document.body.appendChild(probe);\n\n try {\n for (const sheet of document.styleSheets) {\n let rules: CSSRuleList;\n try { rules = sheet.cssRules; } catch { continue; }\n scanRules(rules, probe, tokens, variables, seenClasses, seenVars);\n if (!hasTwVars) hasTwVars = detectTailwindVars(rules);\n }\n } finally {\n probe.remove();\n }\n\n const framework = detectCssFramework(hasTwVars, seenClasses);\n return { tokens, variables, framework };\n}\n\nfunction detectTailwindVars(rules: CSSRuleList): boolean {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSGroupingRule) {\n if (detectTailwindVars(rule.cssRules)) return true;\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n for (let j = 0; j < rule.style.length; j++) {\n if (rule.style[j].startsWith(\"--tw-\")) return true;\n }\n }\n return false;\n}\n\nfunction detectCssFramework(hasTwVars: boolean, seenClasses: Set<string>): CssFramework {\n if (hasTwVars) return \"tailwind\";\n const twPattern = /^(p|m|w|h|gap|text|bg|border|rounded|shadow|opacity|font|leading|tracking|flex|grid|z|inset|top|right|bottom|left)([xytrbl])?-/;\n let twCount = 0;\n for (const name of seenClasses) {\n if (twPattern.test(name)) twCount++;\n }\n if (twCount > 10) return \"tailwind\";\n const hashPattern = /^[a-zA-Z_][a-zA-Z0-9_]*__[a-zA-Z0-9]{5,}$/;\n let moduleCount = 0;\n for (const name of seenClasses) {\n if (hashPattern.test(name)) moduleCount++;\n }\n if (moduleCount > 5) return \"css-modules\";\n if (seenClasses.size > 0) return \"custom\";\n return \"unknown\";\n}\n\nfunction isSimpleClassSelector(selector: string): boolean {\n const trimmed = selector.trim();\n return /^\\.[a-zA-Z0-9_-]+$/.test(trimmed) || /^\\\\.[a-zA-Z0-9_-]+$/.test(trimmed);\n}\n\nfunction countAuthoredProperties(style: CSSStyleDeclaration): number {\n const shorthands = new Set<string>();\n for (let i = 0; i < style.length; i++) {\n const prop = style[i];\n if (prop.startsWith(\"--\")) continue;\n const shorthand = (style as unknown as Record<string, unknown>).getPropertyShorthand;\n const sh = typeof shorthand === \"function\" ? (shorthand as (p: string) => string)(prop) : null;\n if (sh) shorthands.add(sh);\n else shorthands.add(prop);\n }\n return shorthands.size;\n}\n\nfunction scanRules(\n rules: CSSRuleList,\n probe: HTMLDivElement,\n tokens: DesignToken[],\n variables: CssVariable[],\n seenClasses: Set<string>,\n seenVars: Set<string>,\n): void {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSGroupingRule) {\n scanRules(rule.cssRules, probe, tokens, variables, seenClasses, seenVars);\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n\n // Collect CSS custom properties from :root\n if (rule.selectorText === \":root\" || rule.selectorText === \":root, :host\") {\n for (let j = 0; j < rule.style.length; j++) {\n const prop = rule.style[j];\n if (!prop.startsWith(\"--\") || seenVars.has(prop)) continue;\n seenVars.add(prop);\n const val = rule.style.getPropertyValue(prop).trim();\n if (!val) continue;\n const cat = guessVariableCategory(prop, val);\n variables.push({ name: prop, value: val, category: cat });\n }\n }\n\n if (!isSimpleClassSelector(rule.selectorText)) continue;\n if (countAuthoredProperties(rule.style) > 1) continue;\n\n const classMatch = rule.selectorText.match(/\\.([a-zA-Z0-9_-]+)/);\n if (!classMatch || seenClasses.has(classMatch[1])) continue;\n const className = classMatch[1];\n seenClasses.add(className);\n\n for (let j = 0; j < rule.style.length; j++) {\n const prop = rule.style[j];\n if (prop.startsWith(\"--\")) continue;\n let val = rule.style.getPropertyValue(prop).trim();\n if (val.includes(\"var(\")) {\n probe.style.cssText = \"position:fixed;top:-9999px;left:-9999px;visibility:hidden;pointer-events:none;\";\n probe.style.setProperty(prop, val);\n val = getComputedStyle(probe).getPropertyValue(prop).trim();\n probe.style.removeProperty(prop);\n }\n if (!val) continue;\n const cat = getCategoryForProperty(prop);\n if (cat) tokens.push({ className, property: prop, value: val, category: cat });\n }\n }\n}\n\nfunction guessVariableCategory(name: string, value: string): TokenCategory {\n const n = name.toLowerCase();\n if (n.includes(\"color\") || n.includes(\"bg\") || n.includes(\"fill\") || n.includes(\"stroke\")) return \"colors\";\n if (n.includes(\"spacing\") || n.includes(\"gap\") || n.includes(\"pad\") || n.includes(\"margin\")) return \"spacing\";\n if (n.includes(\"font\") || n.includes(\"text\") || n.includes(\"leading\") || n.includes(\"tracking\")) return \"typography\";\n if (n.includes(\"radius\") || n.includes(\"border\")) return \"borders\";\n if (n.includes(\"shadow\") || n.includes(\"opacity\") || n.includes(\"blur\")) return \"effects\";\n if (/^#|^rgb|^hsl|^oklch|^color/.test(value.trim())) return \"colors\";\n return \"spacing\";\n}\n","/** Lucide `circle-dot-dashed` — CSS variable / token picker trigger. */\nexport function VariableTokenIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <path d=\"M10.1 2.18a9.93 9.93 0 0 1 3.8 0\" />\n <path d=\"M17.6 3.71a9.95 9.95 0 0 1 2.69 2.7\" />\n <path d=\"M21.82 10.1a9.93 9.93 0 0 1 0 3.8\" />\n <path d=\"M20.29 17.6a9.95 9.95 0 0 1-2.7 2.69\" />\n <path d=\"M13.9 21.82a9.94 9.94 0 0 1-3.8 0\" />\n <path d=\"M6.4 20.29a9.95 9.95 0 0 1-2.69-2.7\" />\n <path d=\"M2.18 13.9a9.93 9.93 0 0 1 0-3.8\" />\n <path d=\"M3.71 6.4a9.95 9.95 0 0 1 2.7-2.69\" />\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n </svg>\n );\n}\n","\"use client\";\n\nimport { Link2 } from \"lucide-react\";\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"./cn\";\nimport { computeFixedMenuPlacement } from \"./floating-menu-position\";\nimport { useEditorMenuPortal } from \"./menu-portal-context\";\nimport { getVariablesForPropertySmart } from \"./token-scanner\";\nimport { VariableTokenIcon } from \"./variable-token-icon\";\n\n/** Token / variable picker: usage-aware list + link / unlink. */\nexport function PanelVariableAffix({\n cssPropertyKebab,\n linkedVar,\n onLink,\n onUnlink,\n disabled,\n /** Compact control for inside a field row; pair with parent `group` + hover reveal. */\n compact = false,\n /** When `compact`, hide token trigger until hover/focus-within or while menu is open; linked state stays visible. */\n revealOnFieldHover = false,\n}: {\n cssPropertyKebab: string;\n linkedVar: string | null;\n onLink: (cssCustomPropertyName: string) => void;\n onUnlink: () => void;\n disabled?: boolean;\n compact?: boolean;\n revealOnFieldHover?: boolean;\n}) {\n const vars = useMemo(() => getVariablesForPropertySmart(cssPropertyKebab).slice(0, 48), [cssPropertyKebab]);\n const [menuOpen, setMenuOpen] = useState(false);\n const [dropBox, setDropBox] = useState<{ top: number; left: number; width: number } | null>(null);\n const summaryRef = useRef<HTMLElement | null>(null);\n const menuRef = useRef<HTMLDivElement | null>(null);\n const menuPortalEl = useEditorMenuPortal();\n\n useLayoutEffect(() => {\n if (!menuOpen) {\n setDropBox(null);\n return;\n }\n const el = summaryRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const width = Math.min(280, Math.max(160, 160));\n const count = vars.length === 0 ? 1 : vars.length;\n const estH = Math.min(count * 36 + 12, 192);\n setDropBox(computeFixedMenuPlacement(r, { menuWidth: width, estimatedHeight: estH, align: \"end\" }));\n }, [menuOpen, vars.length]);\n\n useEffect(() => {\n if (!menuOpen) return;\n const close = () => {\n summaryRef.current?.closest(\"details\")?.removeAttribute(\"open\");\n };\n window.addEventListener(\"scroll\", close, true);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"scroll\", close, true);\n window.removeEventListener(\"resize\", close);\n };\n }, [menuOpen]);\n\n useEffect(() => {\n if (!menuOpen) return;\n const onDocPointer = (e: PointerEvent) => {\n const path = typeof e.composedPath === \"function\" ? e.composedPath() : [];\n if (summaryRef.current && path.includes(summaryRef.current)) return;\n if (menuRef.current && path.includes(menuRef.current)) return;\n summaryRef.current?.closest(\"details\")?.removeAttribute(\"open\");\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") summaryRef.current?.closest(\"details\")?.removeAttribute(\"open\");\n };\n document.addEventListener(\"pointerdown\", onDocPointer);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"pointerdown\", onDocPointer);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [menuOpen]);\n\n if (disabled) return null;\n\n const revealClasses =\n compact && revealOnFieldHover && !linkedVar\n ? cn(\"opacity-0 transition-opacity duration-150\", !menuOpen && \"group-hover:opacity-100 group-focus-within:opacity-100\", menuOpen && \"opacity-100\")\n : undefined;\n\n return (\n <div className={cn(\"flex shrink-0 items-center gap-0.5\", revealClasses)} data-flux-ui data-no-scrub>\n {linkedVar ? (\n <button\n type=\"button\"\n title={`Linked to ${linkedVar} — click to replace with resolved value`}\n aria-label=\"Unlink variable\"\n onClick={() => onUnlink()}\n className={cn(\"rounded-small text-[#93c47d] transition-colors hover:bg-[#2a2a2a]\", compact ? \"p-0.5\" : \"p-1\")}\n >\n <Link2 className={compact ? \"size-3.5\" : \"size-[14px]\"} strokeWidth={2} aria-hidden />\n </button>\n ) : (\n <details className=\"relative\" onToggle={(e) => setMenuOpen((e.target as HTMLDetailsElement).open)}>\n <summary\n ref={(n) => {\n summaryRef.current = n;\n }}\n className={cn(\n \"flex cursor-pointer list-none items-center justify-center rounded-small text-[#7C7C7C] transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\",\n compact ? \"min-h-0 min-w-0 p-0.5\" : \"min-h-0 min-w-0 p-1\",\n \"[&::-webkit-details-marker]:hidden\",\n )}\n title=\"Apply design token (CSS variable)\"\n aria-label=\"Open variable picker\"\n >\n <VariableTokenIcon className={cn(\"shrink-0\", compact && \"scale-[0.92]\")} />\n </summary>\n {menuOpen && dropBox\n ? (() => {\n const menuNode = (\n <div\n ref={menuRef}\n data-flux-variable-menu\n data-flux-ui\n style={{ top: dropBox.top, left: dropBox.left, width: dropBox.width }}\n >\n {vars.length === 0 ? (\n <div className=\"flux-menu-empty\">No variables found</div>\n ) : (\n vars.map((v) => (\n <button\n key={v.name}\n type=\"button\"\n className=\"flux-menu-option\"\n title={v.value ? `${v.name}: ${v.value}` : v.name}\n onClick={(e) => {\n onLink(v.name);\n (e.currentTarget.closest(\"details\") as HTMLDetailsElement | null)?.removeAttribute(\"open\");\n }}\n >\n {v.name}\n </button>\n ))\n )}\n </div>\n );\n return menuPortalEl ? createPortal(menuNode, menuPortalEl) : menuNode;\n })()\n : null}\n </details>\n )}\n </div>\n );\n}\n","\"use client\";\n\n/**\n * Empty state: centered inspect icon + “Select an element to edit” (reference **Editor** empty frame, 277×982).\n */\nimport { DesignEditorToggleIcon } from \"./design-editor-toggle-icon\";\n\nexport function PropertiesEmptyState() {\n return (\n <div className=\"flex min-h-0 flex-1 flex-col items-center justify-center gap-3 px-0 py-6\" data-flux-ui aria-live=\"polite\">\n <DesignEditorToggleIcon size={32} className=\"shrink-0 !fill-none text-[#D9D9D9]\" />\n <p className=\"shrink-0 text-center font-['Inter',system-ui,sans-serif] font-bold text-[#D9D9D9] text-base leading-[15.6px]\">Select an element to edit</p>\n </div>\n );\n}\n","/** Parse first layer of box-shadow into editable parts; compose back. */\n\nexport interface ShadowParts {\n offsetX: string;\n offsetY: string;\n blur: string;\n spread: string;\n color: string;\n inset: boolean;\n}\n\nconst NONE: ShadowParts = {\n offsetX: \"0px\",\n offsetY: \"0px\",\n blur: \"0px\",\n spread: \"0px\",\n color: \"rgba(0, 0, 0, 0.25)\",\n inset: false,\n};\n\nconst COLOR_END = /(rgba?\\([^)]+\\)|hsla?\\([^)]+\\)|#[0-9a-fA-F]{3,8}|[a-z]+)\\s*$/;\n\nfunction firstLayer(shadow: string): string {\n const s = shadow.trim();\n if (!s || s === \"none\") return \"\";\n let depth = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (c === \"(\") depth++;\n else if (c === \")\") depth--;\n else if (c === \",\" && depth === 0) {\n return s.slice(0, i).trim();\n }\n }\n return s;\n}\n\nexport function parseBoxShadow(shadow: string): ShadowParts {\n const layer = firstLayer(shadow);\n if (!layer) return { ...NONE };\n\n let rest = layer;\n let inset = false;\n if (/^inset\\s+/i.test(rest)) {\n inset = true;\n rest = rest.replace(/^inset\\s+/i, \"\");\n }\n\n const colorMatch = rest.match(COLOR_END);\n let color = NONE.color;\n if (colorMatch) {\n color = colorMatch[1].trim();\n rest = rest.slice(0, colorMatch.index).trim();\n }\n\n const tokens = rest\n .split(/\\s+/)\n .filter(Boolean)\n .map((t) => {\n if (/^-?[\\d.]+$/.test(t)) return `${t}px`;\n return t;\n });\n\n const raw = tokens.slice(0, 4);\n const padded = [...raw];\n while (padded.length < 4) padded.push(\"0px\");\n const [offsetX, offsetY, blur, spread] = padded;\n\n return {\n offsetX: normalizeUnit(offsetX),\n offsetY: normalizeUnit(offsetY),\n blur: normalizeUnit(blur),\n spread: normalizeUnit(spread),\n color,\n inset,\n };\n}\n\n/** Normalize a single shadow length token for inline style (digits → px). */\nexport function normalizeShadowLength(v: string): string {\n const t = v.trim();\n if (t === \"\") return \"0px\";\n if (/^-?[\\d.]+$/.test(t)) return `${t}px`;\n return t;\n}\n\nfunction normalizeUnit(v: string): string {\n return normalizeShadowLength(v);\n}\n\nexport function composeBoxShadow(parts: ShadowParts): string {\n const { inset, offsetX, offsetY, blur, spread, color } = parts;\n const prefix = inset ? \"inset \" : \"\";\n return `${prefix}${offsetX} ${offsetY} ${blur} ${spread} ${color}`.trim();\n}\n","/** Maps design-tool sizing modes to CSS width/height values (aligned with Paper Editor layout reference). */\n\nexport type SizingMode = \"fixed\" | \"fill\" | \"fit-container\";\n\n/** Primary W/H modes in the panel. Other CSS keywords exist (`min-content`, `stretch`, `clamp()`, viewport units, etc.) but are not separate menu items — use “More layout & CSS” or classes for those. */\nexport const SIZING_MODE_OPTIONS: { value: SizingMode; label: string }[] = [\n { value: \"fixed\", label: \"Fixed\" },\n { value: \"fill\", label: \"Fill\" },\n { value: \"fit-container\", label: \"Fit\" },\n];\n\n/** Short label on the closed sizing trigger (avoids truncation in narrow rows). */\nexport function sizingModeTriggerLabel(mode: SizingMode): string {\n switch (mode) {\n case \"fill\":\n return \"Fill\";\n case \"fit-container\":\n return \"Fit\";\n default:\n return \"Fixed\";\n }\n}\n\nconst FILL_VALUES = new Set([\"100%\", \"100vw\", \"100dvw\"]);\nconst FIT_CONTAINER_VALUES = new Set([\"max-content\", \"fit-content\", \"min-content\"]);\nconst AUTO_VALUES = new Set([\"auto\", \"initial\", \"inherit\", \"unset\", \"revert\", \"revert-layer\"]);\n\n/**\n * @param computedUsed — resolved value from `getComputedStyle` (often `NNpx`)\n * @param specified — value from inline style `element.style.getPropertyValue(\"width\"|\"height\")` when set\n */\nexport function detectSizingMode(computedUsed: string, axis: \"width\" | \"height\", specified?: string): SizingMode {\n const raw = (specified ?? \"\").trim().toLowerCase();\n if (raw) {\n if (FILL_VALUES.has(raw) || (axis === \"height\" && (raw === \"100vh\" || raw === \"100dvh\"))) return \"fill\";\n if (FIT_CONTAINER_VALUES.has(raw) || AUTO_VALUES.has(raw)) return \"fit-container\";\n return \"fixed\";\n }\n return detectSizingModeFromComputed(computedUsed, axis);\n}\n\nfunction detectSizingModeFromComputed(value: string, axis: \"width\" | \"height\"): SizingMode {\n const v = value.trim().toLowerCase();\n if (AUTO_VALUES.has(v) || v === \"\") return \"fit-container\";\n if (FILL_VALUES.has(v) || (axis === \"height\" && (v === \"100vh\" || v === \"100dvh\"))) return \"fill\";\n if (FIT_CONTAINER_VALUES.has(v)) return \"fit-container\";\n return \"fixed\";\n}\n\nexport function modeToCss(mode: SizingMode, axis: \"width\" | \"height\", fixedValue: string): string {\n switch (mode) {\n case \"fill\":\n return axis === \"height\" ? \"100%\" : \"100%\";\n case \"fit-container\":\n return \"max-content\";\n case \"fixed\":\n return fixedValue.trim() || (axis === \"width\" ? \"100px\" : \"40px\");\n default:\n return \"max-content\";\n }\n}\n\n/** Strip unit for fixed mode display (keep suffix if non-px). */\nexport function extractFixedDisplay(value: string, mode: SizingMode): string {\n if (mode !== \"fixed\") return value;\n return value.trim();\n}\n","/**\n * Persist live preview rules to localStorage for session continuity.\n * Survives full page reload until cleared via reset or empty rules.\n */\n\nimport type { MutableRefObject } from \"react\";\nimport { setElementEditableText } from \"./element-capabilities\";\nimport type { PreviewEngine } from \"./preview-engine\";\nimport type { StyleSnapshot } from \"./use-selection\";\n\nconst STORAGE_KEY = \"flux-preview-session\";\nconst VERSION = 2 as const;\n\ntype PersistedPayload = {\n v: typeof VERSION | 1;\n rules: { selector: string; property: string; value: string }[];\n originals: Record<string, StyleSnapshot>;\n varLinks: Record<string, Record<string, string>>;\n detached: Record<string, { key: string; value: string }[]>;\n /** Selector → current text (inline edit). */\n textOverrides?: Record<string, string>;\n /** Selector → text before first inline edit (for Reset all). */\n textOriginals?: Record<string, string>;\n};\n\nfunction toVarLinksRecord(m: Map<string, Map<keyof StyleSnapshot, string>>): Record<string, Record<string, string>> {\n const out: Record<string, Record<string, string>> = {};\n for (const [sel, inner] of m) {\n out[sel] = Object.fromEntries(inner) as Record<string, string>;\n }\n return out;\n}\n\nfunction fromVarLinksRecord(r: Record<string, Record<string, string>>): Map<string, Map<keyof StyleSnapshot, string>> {\n const m = new Map<string, Map<keyof StyleSnapshot, string>>();\n for (const [sel, obj] of Object.entries(r)) {\n m.set(sel, new Map(Object.entries(obj) as [keyof StyleSnapshot, string][]));\n }\n return m;\n}\n\nexport function persistFluxPreviewState(\n engine: PreviewEngine,\n originals: Map<string, StyleSnapshot>,\n varLinks: Map<string, Map<keyof StyleSnapshot, string>>,\n detached: Map<string, { key: keyof StyleSnapshot; value: string }[]>,\n textOverrides?: Map<string, string>,\n textOriginals?: Map<string, string>,\n): void {\n try {\n const rules = [...engine.getChanges()].map((r) => ({\n selector: r.selector,\n property: r.property,\n value: r.value,\n }));\n const detachedPlain: Record<string, { key: string; value: string }[]> = {};\n for (const [k, arr] of detached) {\n detachedPlain[k] = arr.map((e) => ({ key: e.key as string, value: e.value }));\n }\n const payload: PersistedPayload = {\n v: VERSION,\n rules,\n originals: Object.fromEntries(originals),\n varLinks: toVarLinksRecord(varLinks),\n detached: detachedPlain,\n textOverrides: textOverrides && textOverrides.size > 0 ? Object.fromEntries(textOverrides) : undefined,\n textOriginals: textOriginals && textOriginals.size > 0 ? Object.fromEntries(textOriginals) : undefined,\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(payload));\n } catch {\n /* quota, private mode */\n }\n}\n\nexport function restoreFluxPreviewInto(\n engine: PreviewEngine,\n refs: {\n originals: MutableRefObject<Map<string, StyleSnapshot>>;\n varLinks: MutableRefObject<Map<string, Map<keyof StyleSnapshot, string>>>;\n detached: MutableRefObject<Map<string, { key: keyof StyleSnapshot; value: string }[]>>;\n textOverrides?: MutableRefObject<Map<string, string>>;\n textOriginals?: MutableRefObject<Map<string, string>>;\n },\n): boolean {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (!raw) return false;\n const data = JSON.parse(raw) as PersistedPayload;\n if ((data.v !== VERSION && data.v !== 1) || !Array.isArray(data.rules)) return false;\n\n engine.clearAll();\n for (const r of data.rules) {\n engine.applyChange(r.selector, r.property, r.value);\n }\n\n refs.originals.current = new Map(Object.entries(data.originals ?? {})) as Map<string, StyleSnapshot>;\n refs.varLinks.current = fromVarLinksRecord(data.varLinks ?? {});\n refs.detached.current = new Map(\n Object.entries(data.detached ?? {}).map(([k, arr]) => [\n k,\n (arr ?? []).map((e) => ({ key: e.key as keyof StyleSnapshot, value: e.value })),\n ]),\n );\n\n const textOv = data.textOverrides ?? {};\n const textOr = data.textOriginals ?? {};\n if (refs.textOverrides) {\n refs.textOverrides.current = new Map(Object.entries(textOv));\n }\n if (refs.textOriginals) {\n refs.textOriginals.current = new Map(Object.entries(textOr));\n }\n if (typeof document !== \"undefined\") {\n for (const [sel, text] of Object.entries(textOv)) {\n try {\n const el = document.querySelector(sel);\n if (el) setElementEditableText(el, text);\n } catch {\n /* invalid selector */\n }\n }\n }\n\n return data.rules.length > 0 || Object.keys(textOv).length > 0;\n } catch {\n return false;\n }\n}\n\nexport function clearFluxPreviewStorage(): void {\n try {\n localStorage.removeItem(STORAGE_KEY);\n } catch {\n /* ignore */\n }\n}\n","/**\n * Live preview engine using Constructable Stylesheets when supported,\n * otherwise a single <style> tag in document.head.\n *\n * Applies CSS changes without mutating the host element's inline styles.\n */\n\nimport { finder } from \"@medv/finder\";\n\nexport interface AppliedRule {\n selector: string;\n property: string;\n value: string;\n}\n\nfunction camelToKebab(s: string): string {\n return s.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n}\n\nfunction propertyToKebab(property: string): string {\n return property.includes(\"-\") ? property : camelToKebab(property);\n}\n\nlet adoptableStyleSheetsSupported: boolean | null = null;\n\nfunction canUseConstructableStylesheet(): boolean {\n if (adoptableStyleSheetsSupported !== null) return adoptableStyleSheetsSupported;\n if (typeof CSSStyleSheet === \"undefined\") {\n adoptableStyleSheetsSupported = false;\n return false;\n }\n if (typeof CSSStyleSheet.prototype.replaceSync !== \"function\") {\n adoptableStyleSheetsSupported = false;\n return false;\n }\n if (typeof document === \"undefined\" || !(\"adoptedStyleSheets\" in document)) {\n adoptableStyleSheetsSupported = false;\n return false;\n }\n try {\n const probe = new CSSStyleSheet();\n const before = document.adoptedStyleSheets;\n document.adoptedStyleSheets = [...before, probe];\n document.adoptedStyleSheets = before;\n adoptableStyleSheetsSupported = true;\n return true;\n } catch {\n adoptableStyleSheetsSupported = false;\n return false;\n }\n}\n\nexport class PreviewEngine {\n private sheet: CSSStyleSheet | null = null;\n private fallbackStyle: HTMLStyleElement | null = null;\n private rules: AppliedRule[] = [];\n private attached = false;\n\n constructor() {\n if (canUseConstructableStylesheet()) {\n try {\n this.sheet = new CSSStyleSheet();\n } catch {\n this.sheet = null;\n }\n }\n if (!this.sheet) {\n this.fallbackStyle = document.createElement(\"style\");\n this.fallbackStyle.setAttribute(\"data-flux-preview\", \"\");\n }\n }\n\n attach() {\n if (this.attached) return;\n\n if (this.sheet) {\n try {\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, this.sheet];\n this.attached = true;\n this.flush();\n return;\n } catch {\n this.sheet = null;\n if (!this.fallbackStyle) {\n this.fallbackStyle = document.createElement(\"style\");\n this.fallbackStyle.setAttribute(\"data-flux-preview\", \"\");\n }\n }\n }\n\n if (this.fallbackStyle && !this.fallbackStyle.parentNode) {\n document.head.appendChild(this.fallbackStyle);\n }\n this.attached = true;\n this.flush();\n }\n\n detach() {\n if (!this.attached) return;\n if (this.sheet) {\n try {\n document.adoptedStyleSheets = document.adoptedStyleSheets.filter((s) => s !== this.sheet);\n } catch {\n /* ignore */\n }\n }\n this.fallbackStyle?.remove();\n this.attached = false;\n }\n\n applyChange(selector: string, property: string, value: string) {\n const idx = this.rules.findIndex((r) => r.selector === selector && r.property === property);\n if (idx !== -1) this.rules.splice(idx, 1);\n this.rules.push({ selector, property, value });\n this.flush();\n }\n\n removeChange(selector: string, property: string) {\n const idx = this.rules.findIndex((r) => r.selector === selector && r.property === property);\n if (idx === -1) return;\n this.rules.splice(idx, 1);\n this.flush();\n }\n\n removeAllChanges(selector: string) {\n this.rules = this.rules.filter((r) => r.selector !== selector);\n this.flush();\n }\n\n clearAll() {\n this.rules = [];\n this.flush();\n }\n\n getChanges(): readonly AppliedRule[] {\n return this.rules;\n }\n\n /** Last preview value applied for this selector + property (e.g. `100%` when Fill), or undefined. */\n getPreviewValue(selector: string, property: string): string | undefined {\n const r = this.rules.find((x) => x.selector === selector && x.property === property);\n return r?.value;\n }\n\n destroy() {\n this.detach();\n this.rules = [];\n if (this.sheet) {\n try {\n this.sheet.replaceSync(\"\");\n } catch {\n /* ignore */\n }\n }\n if (this.fallbackStyle) {\n this.fallbackStyle.textContent = \"\";\n }\n }\n\n private flush() {\n if (!this.attached) return;\n\n const parts: string[] = [];\n for (const r of this.rules) {\n const kebab = propertyToKebab(r.property);\n parts.push(`${r.selector} { ${kebab}: ${r.value} !important; }`);\n }\n const css = parts.join(\"\");\n\n if (this.sheet) {\n try {\n this.sheet.replaceSync(css);\n } catch {\n try {\n this.sheet.replaceSync(\"\");\n } catch {\n return;\n }\n for (const block of parts) {\n try {\n this.sheet.insertRule(block, this.sheet.cssRules.length);\n } catch {\n /* invalid rule */\n }\n }\n }\n return;\n }\n\n if (this.fallbackStyle) {\n this.fallbackStyle.textContent = css;\n }\n }\n}\n\n/**\n * Generate a unique CSS selector for an element using @medv/finder.\n * Falls back to a manual path if finder throws (e.g., SVG elements).\n */\nexport function getUniqueSelector(el: Element): string {\n try {\n const root = document.body ?? document.documentElement;\n return finder(el, { root, className: () => false });\n } catch {\n return buildFallbackSelector(el);\n }\n}\n\nfunction buildFallbackSelector(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n const stop = document.body ?? document.documentElement;\n while (current && current !== stop) {\n const tag = current.tagName.toLowerCase();\n if (current.id) {\n parts.unshift(`#${CSS.escape(current.id)}`);\n break;\n }\n const parentEl: Element | null = current.parentElement;\n if (parentEl) {\n const tagName = current.tagName;\n const siblings = Array.from(parentEl.children).filter((c: Element) => c.tagName === tagName);\n if (siblings.length > 1) {\n const idx = siblings.indexOf(current) + 1;\n parts.unshift(`${tag}:nth-of-type(${idx})`);\n } else {\n parts.unshift(tag);\n }\n } else {\n parts.unshift(tag);\n }\n current = current.parentElement;\n }\n return parts.join(\" > \");\n}\n\n/**\n * `parent > :nth-child(n)` so preview rules (e.g. `order`) target the exact direct child.\n * Finder-only selectors often collide for sibling elements; this stays stable for flex/grid children.\n */\nexport function getDirectChildSelector(parent: Element, child: Element): string {\n if (child.parentElement !== parent) {\n return getUniqueSelector(child);\n }\n const pSel = getUniqueSelector(parent);\n for (let i = 0; i < parent.childNodes.length; i++) {\n if (parent.childNodes[i] === child) {\n return `${pSel} > :nth-child(${i + 1})`;\n }\n }\n return getUniqueSelector(child);\n}\n\nconst PREVIEW_TARGET_ATTR = \"data-flux-preview-target\";\n\n/**\n * Preview rules are emitted as `selector { prop: val !important }`. If `selector`\n * matches multiple nodes, **every** match gets the style — not just the selected\n * element. That can restyle unrelated UI (e.g. another `button`, including the\n * Flux floating toggle in the light DOM). Only accept selectors with exactly one\n * match in the document.\n */\nfunction selectorUniquelyTargetsElement(sel: string, el: Element): boolean {\n try {\n const all = document.querySelectorAll(sel);\n return all.length === 1 && all[0] === el;\n } catch {\n return false;\n }\n}\n\n/**\n * Selector used for {@link PreviewEngine} rules. Verifies each candidate with\n * `querySelectorAll(sel).length === 1` and that node is `el`, so injected rules\n * cannot hit multiple elements (e.g. all `button`s). Last resort: a temporary\n * `data-flux-preview-target` id — call {@link removePreviewTargetAttribute} when deselecting.\n */\nexport function getReliableSelectorForPreview(el: Element): {\n selector: string;\n usedAttrFallback: boolean;\n} {\n const root = document.body ?? document.documentElement;\n const seen = new Set<string>();\n const candidates: string[] = [];\n\n const push = (s: string) => {\n if (s && !seen.has(s)) {\n seen.add(s);\n candidates.push(s);\n }\n };\n\n try {\n push(finder(el, { root, className: () => false }));\n } catch {\n /* ignore */\n }\n push(buildFallbackSelector(el));\n const p = el.parentElement;\n if (p) {\n push(getDirectChildSelector(p, el));\n }\n\n for (const s of candidates) {\n if (selectorUniquelyTargetsElement(s, el)) {\n return { selector: s, usedAttrFallback: false };\n }\n }\n\n const id = crypto.randomUUID();\n el.setAttribute(PREVIEW_TARGET_ATTR, id);\n return {\n selector: `[${PREVIEW_TARGET_ATTR}=\"${id}\"]`,\n usedAttrFallback: true,\n };\n}\n\nexport function removePreviewTargetAttribute(el: Element | null | undefined) {\n if (el?.isConnected) el.removeAttribute(PREVIEW_TARGET_ATTR);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { canonicalBackgroundColorForDiff } from \"./color-alpha\";\nimport { getElementEditableText, setElementEditableText } from \"./element-capabilities\";\nimport { persistFluxPreviewState, restoreFluxPreviewInto } from \"./preview-persistence\";\nimport type { FluxStructuralReorder } from \"./drag-reorder-types\";\nimport {\n PreviewEngine,\n getReliableSelectorForPreview,\n removePreviewTargetAttribute,\n} from \"./preview-engine\";\n\nexport interface StyleSnapshot {\n fontFamily: string;\n fontSize: string;\n fontWeight: string;\n lineHeight: string;\n letterSpacing: string;\n color: string;\n textAlign: string;\n width: string;\n height: string;\n padding: string;\n margin: string;\n paddingTop: string;\n paddingRight: string;\n paddingBottom: string;\n paddingLeft: string;\n marginTop: string;\n marginRight: string;\n marginBottom: string;\n marginLeft: string;\n /** CSS `position` (static, relative, absolute, fixed, sticky). */\n position: string;\n /** Inset offsets for positioned layout (`top` / `right` / `bottom` / `left`). */\n top: string;\n right: string;\n bottom: string;\n left: string;\n /** CSS `align-self` — item alignment in flex/grid. */\n alignSelf: string;\n /** CSS `justify-self` — grid item alignment on row axis. */\n justifySelf: string;\n overflow: string;\n display: string;\n flexDirection: string;\n justifyContent: string;\n alignItems: string;\n gap: string;\n rowGap: string;\n columnGap: string;\n gridTemplateColumns: string;\n gridTemplateRows: string;\n backgroundColor: string;\n /** Computed `background-image` (gradients count as fill for `hasFill`-style checks). */\n backgroundImage: string;\n borderTopWidth: string;\n borderRightWidth: string;\n borderBottomWidth: string;\n borderLeftWidth: string;\n borderTopLeftRadius: string;\n borderTopRightRadius: string;\n borderBottomRightRadius: string;\n borderBottomLeftRadius: string;\n borderTopColor: string;\n borderRightColor: string;\n borderBottomColor: string;\n borderLeftColor: string;\n borderTopStyle: string;\n borderRightStyle: string;\n borderBottomStyle: string;\n borderLeftStyle: string;\n borderColor: string;\n borderRadius: string;\n borderStyle: string;\n boxShadow: string;\n opacity: string;\n}\n\n/** Stable order for copy / diff tables (matches `getComputedSnapshot` fields). */\nexport const STYLE_KEYS: (keyof StyleSnapshot)[] = [\n \"fontFamily\", \"fontSize\", \"fontWeight\", \"lineHeight\", \"letterSpacing\",\n \"color\", \"textAlign\", \"width\", \"height\", \"padding\", \"margin\",\n \"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\",\n \"marginTop\", \"marginRight\", \"marginBottom\", \"marginLeft\",\n \"position\", \"top\", \"right\", \"bottom\", \"left\", \"alignSelf\", \"justifySelf\",\n \"overflow\", \"display\", \"flexDirection\", \"justifyContent\", \"alignItems\",\n \"gap\", \"rowGap\", \"columnGap\", \"gridTemplateColumns\", \"gridTemplateRows\",\n \"backgroundColor\",\n \"backgroundImage\",\n \"borderTopWidth\", \"borderRightWidth\", \"borderBottomWidth\", \"borderLeftWidth\",\n \"borderTopLeftRadius\", \"borderTopRightRadius\", \"borderBottomRightRadius\", \"borderBottomLeftRadius\",\n \"borderTopColor\", \"borderRightColor\", \"borderBottomColor\", \"borderLeftColor\",\n \"borderTopStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderLeftStyle\",\n \"borderColor\", \"borderRadius\", \"borderStyle\",\n \"boxShadow\", \"opacity\",\n];\n\nconst CSS_PROP_MAP: Record<keyof StyleSnapshot, string> = {\n fontFamily: \"font-family\", fontSize: \"font-size\", fontWeight: \"font-weight\",\n lineHeight: \"line-height\", letterSpacing: \"letter-spacing\", color: \"color\",\n textAlign: \"text-align\", width: \"width\", height: \"height\",\n padding: \"padding\", margin: \"margin\",\n paddingTop: \"padding-top\", paddingRight: \"padding-right\",\n paddingBottom: \"padding-bottom\", paddingLeft: \"padding-left\",\n marginTop: \"margin-top\", marginRight: \"margin-right\",\n marginBottom: \"margin-bottom\", marginLeft: \"margin-left\",\n position: \"position\",\n top: \"top\",\n right: \"right\",\n bottom: \"bottom\",\n left: \"left\",\n alignSelf: \"align-self\",\n justifySelf: \"justify-self\",\n overflow: \"overflow\", display: \"display\", flexDirection: \"flex-direction\",\n justifyContent: \"justify-content\", alignItems: \"align-items\",\n gap: \"gap\", rowGap: \"row-gap\", columnGap: \"column-gap\",\n gridTemplateColumns: \"grid-template-columns\", gridTemplateRows: \"grid-template-rows\",\n backgroundColor: \"background-color\",\n backgroundImage: \"background-image\",\n borderTopWidth: \"border-top-width\", borderRightWidth: \"border-right-width\",\n borderBottomWidth: \"border-bottom-width\", borderLeftWidth: \"border-left-width\",\n borderTopLeftRadius: \"border-top-left-radius\", borderTopRightRadius: \"border-top-right-radius\",\n borderBottomRightRadius: \"border-bottom-right-radius\", borderBottomLeftRadius: \"border-bottom-left-radius\",\n borderTopColor: \"border-top-color\", borderRightColor: \"border-right-color\",\n borderBottomColor: \"border-bottom-color\", borderLeftColor: \"border-left-color\",\n borderTopStyle: \"border-top-style\", borderRightStyle: \"border-right-style\",\n borderBottomStyle: \"border-bottom-style\", borderLeftStyle: \"border-left-style\",\n borderColor: \"border-color\", borderRadius: \"border-radius\", borderStyle: \"border-style\",\n boxShadow: \"box-shadow\", opacity: \"opacity\",\n};\n\nconst MAX_HISTORY = 100;\n\nexport type DesignEditorElement = Element & { style: CSSStyleDeclaration };\n\nfunction hasCssStyleDeclaration(el: Element): el is DesignEditorElement {\n if (!(\"style\" in el) || el.style == null) return false;\n const st = el.style as unknown;\n return typeof st === \"object\" && \"setProperty\" in (st as object) && typeof (st as CSSStyleDeclaration).setProperty === \"function\";\n}\n\nexport function isStyleableElement(target: EventTarget | null): target is DesignEditorElement {\n return target instanceof Element && hasCssStyleDeclaration(target);\n}\n\nexport function resolveEventTargetToStyleableElement(target: EventTarget | null): DesignEditorElement | null {\n let n: Node | null = target instanceof Node ? target : null;\n while (n) {\n if (n.nodeType === Node.ELEMENT_NODE && isStyleableElement(n)) return n;\n n = n.parentNode;\n }\n return null;\n}\n\n/**\n * Walk into open shadow roots so the hit target matches the visually topmost node\n * (same idea as walking shadow roots for `elementFromPoint`).\n */\nexport function deepElementFromPoint(clientX: number, clientY: number): Element | null {\n let el = document.elementFromPoint(clientX, clientY);\n if (!el) return null;\n while (el.shadowRoot) {\n const inner = el.shadowRoot.elementFromPoint(clientX, clientY);\n if (!inner || inner === el) break;\n el = inner;\n }\n return el;\n}\n\n/** Deepest element under the point, then first styleable ancestor (for inspect hover / click). */\nexport function resolveDeepPointToStyleableElement(clientX: number, clientY: number): DesignEditorElement | null {\n const hit = deepElementFromPoint(clientX, clientY);\n return hit ? resolveEventTargetToStyleableElement(hit) : null;\n}\n\nexport function getClassNameString(el: Element): string {\n if (typeof el.className === \"string\") return el.className;\n return el.getAttribute(\"class\") ?? \"\";\n}\n\nexport function getComputedSnapshot(el: Element): StyleSnapshot {\n const s = window.getComputedStyle(el);\n return {\n fontFamily: s.fontFamily, fontSize: s.fontSize, fontWeight: s.fontWeight,\n lineHeight: s.lineHeight, letterSpacing: s.letterSpacing, color: s.color,\n textAlign: s.textAlign, width: s.width, height: s.height,\n padding: s.padding, margin: s.margin,\n paddingTop: s.paddingTop, paddingRight: s.paddingRight,\n paddingBottom: s.paddingBottom, paddingLeft: s.paddingLeft,\n marginTop: s.marginTop, marginRight: s.marginRight,\n marginBottom: s.marginBottom, marginLeft: s.marginLeft,\n position: s.position,\n top: s.top,\n right: s.right,\n bottom: s.bottom,\n left: s.left,\n alignSelf: s.alignSelf,\n justifySelf: s.justifySelf,\n overflow: s.overflow, display: s.display, flexDirection: s.flexDirection,\n justifyContent: s.justifyContent, alignItems: s.alignItems,\n gap: s.gap, rowGap: s.rowGap, columnGap: s.columnGap,\n gridTemplateColumns: s.gridTemplateColumns, gridTemplateRows: s.gridTemplateRows,\n backgroundColor: s.backgroundColor,\n backgroundImage: s.backgroundImage,\n borderTopWidth: s.borderTopWidth, borderRightWidth: s.borderRightWidth,\n borderBottomWidth: s.borderBottomWidth, borderLeftWidth: s.borderLeftWidth,\n borderTopLeftRadius: s.borderTopLeftRadius, borderTopRightRadius: s.borderTopRightRadius,\n borderBottomRightRadius: s.borderBottomRightRadius, borderBottomLeftRadius: s.borderBottomLeftRadius,\n borderTopColor: s.borderTopColor, borderRightColor: s.borderRightColor,\n borderBottomColor: s.borderBottomColor, borderLeftColor: s.borderLeftColor,\n borderTopStyle: s.borderTopStyle, borderRightStyle: s.borderRightStyle,\n borderBottomStyle: s.borderBottomStyle, borderLeftStyle: s.borderLeftStyle,\n borderColor: s.borderColor, borderRadius: s.borderRadius, borderStyle: s.borderStyle,\n boxShadow: s.boxShadow, opacity: s.opacity,\n };\n}\n\nexport function getElementPath(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n while (current && current !== document.body) {\n let part = current.tagName.toLowerCase();\n if (current.id) part += `#${current.id}`;\n const classStr = getClassNameString(current).trim();\n if (classStr) {\n const classes = classStr.split(/\\s+/).filter(Boolean);\n if (classes.length) part += `.${classes.join(\".\")}`;\n }\n parts.unshift(part);\n current = current.parentElement;\n }\n return parts.join(\" > \");\n}\n\nexport function getElementSelector(el: Element): string {\n if (el.id) return `#${el.id}`;\n const tag = el.tagName.toLowerCase();\n const classes = getClassNameString(el).trim().split(/\\s+/).filter(Boolean).slice(0, 3);\n return classes.length ? `${tag}.${classes.join(\".\")}` : tag;\n}\n\nexport function normalizeLetterSpacingForCss(raw: string): string {\n const t = raw.trim().toLowerCase();\n if (t === \"\" || t === \"normal\" || t === \"initial\") return \"normal\";\n if (t === \"0%\" || t === \"0\" || t === \"0px\") return \"normal\";\n const bare = raw.trim();\n if (bare.endsWith(\".\")) return bare;\n if (/^-?(\\d+\\.?\\d*|\\.\\d+)$/.test(bare) && Number.isFinite(Number(bare))) return `${bare}px`;\n return bare;\n}\n\nexport function normalizeLineHeightForCss(raw: string): string {\n const s = raw.trim();\n if (s === \"\") return \"normal\";\n if (s.toLowerCase() === \"normal\") return \"normal\";\n if (/px|em|rem|%|vh|vw|ex|ch\\b/i.test(s)) return s;\n if (/^-?\\d+\\.\\d+$/.test(s)) return s;\n if (/^-?\\d+$/.test(s)) {\n const n = Number.parseInt(s, 10);\n if (Number.isNaN(n)) return s;\n if (n >= 0 && n <= 3) return s;\n return `${n}px`;\n }\n return s;\n}\n\n/** Normalize values so computed vs snapshot diffs don’t false-positive (e.g. `backgroundImage` missing → \"\"). */\nfunction snapshotValueForDiff(key: keyof StyleSnapshot, s: StyleSnapshot): string {\n const raw = (s[key] as string | undefined) ?? \"\";\n if (key === \"backgroundImage\") {\n const t = raw.trim();\n return t === \"\" ? \"none\" : t;\n }\n if (key === \"backgroundColor\" || key === \"color\") {\n return canonicalBackgroundColorForDiff(raw);\n }\n return raw;\n}\n\n/** Diff computed style vs the original snapshot. */\nexport function buildChangesMap(el: DesignEditorElement, original: StyleSnapshot): Map<keyof StyleSnapshot, { before: string; after: string }> {\n const snapshot = getComputedSnapshot(el);\n const next = new Map<keyof StyleSnapshot, { before: string; after: string }>();\n for (const key of STYLE_KEYS) {\n const before = snapshotValueForDiff(key, original);\n const after = snapshotValueForDiff(key, snapshot);\n if (before !== after) next.set(key, { before, after });\n }\n return next;\n}\n\n/** Reverse `CSS_PROP_MAP` for preview rule property names. */\nexport function kebabCssPropToSnapshotKey(cssProp: string): keyof StyleSnapshot | null {\n for (const [key, kebab] of Object.entries(CSS_PROP_MAP) as [keyof StyleSnapshot, string][]) {\n if (kebab === cssProp) return key;\n }\n return null;\n}\n\n/**\n * Merge computed diffs with **preview sheet** rules for the selected selector.\n * Fixes missing copy rows when `getComputedStyle` matches the old snapshot (e.g. `width: 100%`\n * still resolves to the same pixel width as before) but the authored preview value changed.\n */\nexport function buildMergedChangesForCopy(\n el: DesignEditorElement,\n original: StyleSnapshot,\n engine: PreviewEngine,\n selector: string,\n): Map<keyof StyleSnapshot, { before: string; after: string }> {\n const merged = new Map(buildChangesMap(el, original));\n for (const r of engine.getChanges()) {\n if (r.selector !== selector) continue;\n const key = kebabCssPropToSnapshotKey(r.property);\n if (!key) continue;\n const origVal = snapshotValueForDiff(key, original);\n const ruleVal =\n key === \"backgroundImage\"\n ? (r.value.trim() === \"\" ? \"none\" : r.value.trim())\n : key === \"backgroundColor\" || key === \"color\"\n ? canonicalBackgroundColorForDiff(r.value)\n : r.value;\n if (ruleVal === origVal) continue;\n merged.set(key, { before: origVal, after: ruleVal });\n }\n /** Drop rows where before/after are equivalent after normalization (e.g. `#fff` vs `rgb(255,255,255)`). */\n for (const [k, v] of merged) {\n const snapBefore = { ...original, [k]: v.before } as StyleSnapshot;\n const snapAfter = { ...original, [k]: v.after } as StyleSnapshot;\n if (snapshotValueForDiff(k, snapBefore) === snapshotValueForDiff(k, snapAfter)) {\n merged.delete(k);\n }\n }\n return merged;\n}\n\n/** Map of camelCase style key to kebab-case CSS property name. */\nexport { CSS_PROP_MAP };\n\ninterface HistoryEntry {\n selector: string;\n changes: { property: string; value: string }[];\n}\n\n/** Detached variables row for copy (user unlinked `var(--token)`). */\nexport type DetachedVariableEntry = { key: keyof StyleSnapshot; value: string };\n\n/** One element in a batched copy (`---` between nodes). */\nexport type CopyBatchItem = {\n el: DesignEditorElement;\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>;\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string>;\n detachedVariables: readonly DetachedVariableEntry[];\n};\n\nexport function collectCopyBatchItems(\n engine: PreviewEngine,\n originals: ReadonlyMap<string, StyleSnapshot>,\n variableLinksBySelector: ReadonlyMap<string, ReadonlyMap<keyof StyleSnapshot, string>>,\n detachedBySelector: ReadonlyMap<string, readonly DetachedVariableEntry[]>,\n): CopyBatchItem[] {\n const orderedSelectors: string[] = [];\n const seen = new Set<string>();\n for (const r of engine.getChanges()) {\n if (!seen.has(r.selector)) {\n seen.add(r.selector);\n orderedSelectors.push(r.selector);\n }\n }\n const items: CopyBatchItem[] = [];\n for (const sel of orderedSelectors) {\n let el: Element | null = null;\n try {\n el = document.querySelector(sel);\n } catch {\n continue;\n }\n if (!el || !isStyleableElement(el)) continue;\n const orig = originals.get(sel);\n if (!orig) continue;\n const changes = buildMergedChangesForCopy(el, orig, engine, sel);\n if (changes.size === 0) continue;\n const links = variableLinksBySelector.get(sel) ?? new Map<keyof StyleSnapshot, string>();\n const detached = detachedBySelector.get(sel) ?? [];\n items.push({ el, changes, variableLinks: links, detachedVariables: detached });\n }\n return items;\n}\n\nexport interface UseSelectionReturn {\n selectedElement: DesignEditorElement | null;\n hoveredElement: DesignEditorElement | null;\n originalSnapshot: StyleSnapshot | null;\n currentSnapshot: StyleSnapshot | null;\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>;\n /** Design-token link: property → `--name` (applied as `var(--name)` in preview). */\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string>;\n /** Raw `width` / `height` from preview rules when set (e.g. `100%` for Fill). */\n previewSizeHints: Readonly<{ width?: string; height?: string }>;\n /** Rules in the preview engine (any selector); Copy, global Reset, badge. */\n previewRuleCount: number;\n /** Rules whose selector matches the current selection (diagnostics / future UI). */\n previewRulesForSelectionCount: number;\n /** All elements with pending preview edits (batched copy). */\n getCopyBatchItems: () => CopyBatchItem[];\n /** DOM reorder events recorded for copy (flex/grid siblings). */\n structuralReorders: readonly FluxStructuralReorder[];\n structuralReorderCount: number;\n recordStructuralReorder: (change: FluxStructuralReorder) => void;\n /** After `insertBefore`, refresh computed snapshot / inspector without clearing undo. */\n syncSelectionAfterStructuralChange: () => void;\n selectElement: (el: DesignEditorElement | null) => void;\n updateStyle: (key: keyof StyleSnapshot, value: string) => void;\n linkVariable: (key: keyof StyleSnapshot, cssCustomPropertyName: string) => void;\n unlinkVariable: (key: keyof StyleSnapshot) => void;\n resetStyle: (key: keyof StyleSnapshot) => void;\n resetAll: () => void;\n beginStyleScrub: () => void;\n endStyleScrub: () => void;\n undo: () => void;\n redo: () => void;\n setHoveredElement: (el: DesignEditorElement | null) => void;\n /** When the selected element is a flex container, set `justify-content: space-between` (Layout alignment grid double-click). */\n justifyFlexMainAxisSpaceBetween: () => void;\n /** Commit inline text edit (DOM + session persistence). */\n applyTextContentOverride: (text: string) => void;\n}\n\nfunction normalizeVarName(name: string): string {\n const t = name.trim();\n if (t.startsWith(\"--\")) return t;\n return `--${t}`;\n}\n\nexport function useSelection(): UseSelectionReturn {\n const [selectedElement, setSelectedElement] = useState<DesignEditorElement | null>(null);\n const [hoveredElement, setHoveredElement] = useState<DesignEditorElement | null>(null);\n const [originalSnapshot, setOriginalSnapshot] = useState<StyleSnapshot | null>(null);\n const [currentSnapshot, setCurrentSnapshot] = useState<StyleSnapshot | null>(null);\n const [changes, setChanges] = useState<Map<keyof StyleSnapshot, { before: string; after: string }>>(new Map());\n const [variableLinks, setVariableLinks] = useState<Map<keyof StyleSnapshot, string>>(() => new Map());\n /** Width/height as authored in the preview sheet (`100%`, `max-content`, …) — inline style is often empty. */\n const [previewSizeHints, setPreviewSizeHints] = useState<{ width?: string; height?: string }>({});\n const [previewRuleCount, setPreviewRuleCount] = useState(0);\n const [previewRulesForSelectionCount, setPreviewRulesForSelectionCount] = useState(0);\n const [structuralReorders, setStructuralReorders] = useState<FluxStructuralReorder[]>([]);\n\n const engineRef = useRef<PreviewEngine | null>(null);\n const selectorRef = useRef<string>(\"\");\n /** Element that received `data-flux-preview-target` when no CSS selector matched uniquely; cleared on deselect. */\n const previewTargetAttrElRef = useRef<Element | null>(null);\n /** First-seen original snapshot per selector (for batch copy / diff). */\n const originalSnapshotFirstEditRef = useRef<Map<string, StyleSnapshot>>(new Map());\n const variableLinksBySelectorRef = useRef<Map<string, Map<keyof StyleSnapshot, string>>>(new Map());\n const detachedBySelectorRef = useRef<Map<string, DetachedVariableEntry[]>>(new Map());\n const textOverridesBySelectorRef = useRef<Map<string, string>>(new Map());\n const textOriginalsBySelectorRef = useRef<Map<string, string>>(new Map());\n const undoStackRef = useRef<HistoryEntry[]>([]);\n const redoStackRef = useRef<HistoryEntry[]>([]);\n const styleScrubDepthRef = useRef(0);\n const scrubUndoPushedRef = useRef(false);\n\n const flushPersist = useCallback(() => {\n const eng = engineRef.current;\n if (!eng) return;\n persistFluxPreviewState(\n eng,\n originalSnapshotFirstEditRef.current,\n variableLinksBySelectorRef.current,\n detachedBySelectorRef.current,\n textOverridesBySelectorRef.current,\n textOriginalsBySelectorRef.current,\n );\n }, []);\n\n useEffect(() => {\n const engine = new PreviewEngine();\n engine.attach();\n engineRef.current = engine;\n restoreFluxPreviewInto(engine, {\n originals: originalSnapshotFirstEditRef,\n varLinks: variableLinksBySelectorRef,\n detached: detachedBySelectorRef,\n textOverrides: textOverridesBySelectorRef,\n textOriginals: textOriginalsBySelectorRef,\n });\n setPreviewRuleCount(engine.getChanges().length);\n return () => engine.destroy();\n }, []);\n\n useEffect(() => {\n const sel = selectorRef.current;\n if (!sel || !selectedElement) return;\n variableLinksBySelectorRef.current.set(sel, new Map(variableLinks));\n }, [variableLinks, selectedElement]);\n\n const getCopyBatchItems = useCallback((): CopyBatchItem[] => {\n const engine = engineRef.current;\n if (!engine) return [];\n return collectCopyBatchItems(\n engine,\n originalSnapshotFirstEditRef.current,\n variableLinksBySelectorRef.current,\n detachedBySelectorRef.current,\n );\n }, []);\n\n const recordStructuralReorder = useCallback((change: FluxStructuralReorder) => {\n setStructuralReorders((prev) => {\n const sameOrder = (a: readonly string[], b: readonly string[]) =>\n a.length === b.length && a.every((x, i) => x === b[i]);\n const idx = prev.findIndex((r) => r.containerSelector === change.containerSelector);\n const sessionBaseline = idx === -1 ? change.originalOrder : prev[idx]!.originalOrder;\n if (sameOrder(sessionBaseline, change.newOrder)) {\n if (idx === -1) return prev;\n return prev.filter((_, i) => i !== idx);\n }\n const merged: FluxStructuralReorder = {\n ...change,\n originalOrder: [...sessionBaseline],\n newOrder: [...change.newOrder],\n };\n if (idx === -1) return [...prev, merged];\n return prev.map((r, i) => (i === idx ? merged : r));\n });\n }, []);\n\n const computeLiveChanges = useCallback((el: DesignEditorElement, orig: StyleSnapshot) => {\n const engine = engineRef.current;\n const sel = selectorRef.current;\n if (!engine || !sel) return buildChangesMap(el, orig);\n return buildMergedChangesForCopy(el, orig, engine, sel);\n }, []);\n\n const syncFromDom = useCallback(\n (el: DesignEditorElement, orig: StyleSnapshot | null) => {\n setCurrentSnapshot(getComputedSnapshot(el));\n if (orig) setChanges(computeLiveChanges(el, orig));\n else setChanges(new Map());\n const eng = engineRef.current;\n const sel = selectorRef.current;\n if (eng && sel) {\n setPreviewSizeHints({\n width: eng.getPreviewValue(sel, \"width\"),\n height: eng.getPreviewValue(sel, \"height\"),\n });\n } else {\n setPreviewSizeHints({});\n }\n const allRules = eng?.getChanges() ?? [];\n setPreviewRuleCount(allRules.length);\n setPreviewRulesForSelectionCount(sel ? allRules.filter((r) => r.selector === sel).length : 0);\n },\n [computeLiveChanges],\n );\n\n const syncSelectionAfterStructuralChange = useCallback(() => {\n const el = selectedElement;\n const orig = originalSnapshot;\n if (!el || !orig) return;\n syncFromDom(el, orig);\n }, [selectedElement, originalSnapshot, syncFromDom]);\n\n const selectElement = useCallback(\n (el: DesignEditorElement | null) => {\n undoStackRef.current = [];\n redoStackRef.current = [];\n setVariableLinks(new Map());\n if (!el) {\n removePreviewTargetAttribute(previewTargetAttrElRef.current);\n previewTargetAttrElRef.current = null;\n selectorRef.current = \"\";\n /* Keep originals / variable maps / detached across deselect so preview + localStorage stay consistent. */\n setSelectedElement(null);\n setOriginalSnapshot(null);\n setCurrentSnapshot(null);\n setChanges(new Map());\n setPreviewSizeHints({});\n setPreviewRuleCount(engineRef.current?.getChanges().length ?? 0);\n setPreviewRulesForSelectionCount(0);\n return;\n }\n removePreviewTargetAttribute(previewTargetAttrElRef.current);\n previewTargetAttrElRef.current = null;\n const { selector: previewSel, usedAttrFallback } = getReliableSelectorForPreview(el);\n selectorRef.current = previewSel;\n if (usedAttrFallback) previewTargetAttrElRef.current = el;\n const sel = selectorRef.current;\n const eng = engineRef.current;\n const snapshotLive = getComputedSnapshot(el);\n const hasPreviewForSel = Boolean(eng?.getChanges().some((r) => r.selector === sel));\n const storedOrig = originalSnapshotFirstEditRef.current.get(sel);\n /** Re-selecting while preview rules apply: computed style is already edited — keep the true pre-edit baseline. */\n const baseline =\n hasPreviewForSel && storedOrig != null ? { ...storedOrig } : snapshotLive;\n\n setSelectedElement(el);\n setOriginalSnapshot(baseline);\n const restoredLinks = variableLinksBySelectorRef.current.get(sel);\n if (restoredLinks && restoredLinks.size > 0) {\n setVariableLinks(new Map(restoredLinks));\n }\n syncFromDom(el, baseline);\n },\n [syncFromDom],\n );\n\n const pushUndo = useCallback((overrideSelector?: string) => {\n const engine = engineRef.current;\n if (!engine) return;\n const selector = overrideSelector ?? selectorRef.current;\n const current = engine.getChanges().filter((r) => r.selector === selector);\n undoStackRef.current.push({\n selector,\n changes: current.map((r) => ({ property: r.property, value: r.value })),\n });\n if (undoStackRef.current.length > MAX_HISTORY) undoStackRef.current.shift();\n redoStackRef.current = [];\n }, []);\n\n const beginStyleScrub = useCallback(() => {\n styleScrubDepthRef.current += 1;\n if (styleScrubDepthRef.current === 1 && !scrubUndoPushedRef.current) {\n pushUndo();\n scrubUndoPushedRef.current = true;\n }\n }, [pushUndo]);\n\n const endStyleScrub = useCallback(() => {\n styleScrubDepthRef.current = Math.max(0, styleScrubDepthRef.current - 1);\n if (styleScrubDepthRef.current === 0) {\n scrubUndoPushedRef.current = false;\n flushPersist();\n }\n }, [flushPersist]);\n\n const updateStyle = useCallback(\n (key: keyof StyleSnapshot, value: string) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n const selector = selectorRef.current;\n if (!originalSnapshotFirstEditRef.current.has(selector)) {\n originalSnapshotFirstEditRef.current.set(selector, { ...orig });\n }\n if (styleScrubDepthRef.current === 0) pushUndo();\n setVariableLinks((prev) => {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n const cssProp = CSS_PROP_MAP[key];\n\n /* Shorthand vs longhand: only one wins in CSS; clear conflicting preview rules. */\n if (key === \"margin\") {\n engine.removeChange(selector, \"margin-top\");\n engine.removeChange(selector, \"margin-right\");\n engine.removeChange(selector, \"margin-bottom\");\n engine.removeChange(selector, \"margin-left\");\n } else if (key === \"marginTop\" || key === \"marginRight\" || key === \"marginBottom\" || key === \"marginLeft\") {\n engine.removeChange(selector, \"margin\");\n }\n if (key === \"padding\") {\n engine.removeChange(selector, \"padding-top\");\n engine.removeChange(selector, \"padding-right\");\n engine.removeChange(selector, \"padding-bottom\");\n engine.removeChange(selector, \"padding-left\");\n } else if (key === \"paddingTop\" || key === \"paddingRight\" || key === \"paddingBottom\" || key === \"paddingLeft\") {\n engine.removeChange(selector, \"padding\");\n }\n if (key === \"borderColor\") {\n engine.removeChange(selector, \"border-top-color\");\n engine.removeChange(selector, \"border-right-color\");\n engine.removeChange(selector, \"border-bottom-color\");\n engine.removeChange(selector, \"border-left-color\");\n } else if (\n key === \"borderTopColor\" ||\n key === \"borderRightColor\" ||\n key === \"borderBottomColor\" ||\n key === \"borderLeftColor\"\n ) {\n engine.removeChange(selector, \"border-color\");\n }\n if (key === \"borderRadius\") {\n engine.removeChange(selector, \"border-top-left-radius\");\n engine.removeChange(selector, \"border-top-right-radius\");\n engine.removeChange(selector, \"border-bottom-right-radius\");\n engine.removeChange(selector, \"border-bottom-left-radius\");\n } else if (\n key === \"borderTopLeftRadius\" ||\n key === \"borderTopRightRadius\" ||\n key === \"borderBottomRightRadius\" ||\n key === \"borderBottomLeftRadius\"\n ) {\n engine.removeChange(selector, \"border-radius\");\n }\n if (key === \"borderStyle\") {\n engine.removeChange(selector, \"border-top-style\");\n engine.removeChange(selector, \"border-right-style\");\n engine.removeChange(selector, \"border-bottom-style\");\n engine.removeChange(selector, \"border-left-style\");\n } else if (\n key === \"borderTopStyle\" ||\n key === \"borderRightStyle\" ||\n key === \"borderBottomStyle\" ||\n key === \"borderLeftStyle\"\n ) {\n engine.removeChange(selector, \"border-style\");\n }\n if (key === \"top\") {\n engine.removeChange(selector, \"bottom\");\n } else if (key === \"bottom\") {\n engine.removeChange(selector, \"top\");\n }\n if (key === \"left\") {\n engine.removeChange(selector, \"right\");\n } else if (key === \"right\") {\n engine.removeChange(selector, \"left\");\n }\n\n /* Solid fill must win over gradients/images (same idea as a typical property panel). */\n if (key === \"backgroundColor\") {\n engine.applyChange(selector, \"background-image\", \"none\");\n }\n\n if (key === \"letterSpacing\") {\n engine.applyChange(selector, cssProp, normalizeLetterSpacingForCss(value));\n } else if (key === \"lineHeight\") {\n engine.applyChange(selector, cssProp, normalizeLineHeightForCss(value));\n } else {\n engine.applyChange(selector, cssProp, value);\n }\n\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, pushUndo, syncFromDom, flushPersist],\n );\n\n const justifyFlexMainAxisSpaceBetween = useCallback(() => {\n const el = selectedElement;\n const orig = originalSnapshot;\n if (!el || !orig) return;\n const d = window.getComputedStyle(el).display;\n if (d !== \"flex\" && d !== \"inline-flex\") return;\n updateStyle(\"justifyContent\", \"space-between\");\n }, [selectedElement, originalSnapshot, updateStyle]);\n\n const applyTextContentOverride = useCallback(\n (text: string) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n const sel = selectorRef.current;\n if (!sel) return;\n if (!textOriginalsBySelectorRef.current.has(sel)) {\n textOriginalsBySelectorRef.current.set(sel, getElementEditableText(el));\n }\n setElementEditableText(el, text);\n textOverridesBySelectorRef.current.set(sel, text);\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, syncFromDom, flushPersist],\n );\n\n const linkVariable = useCallback(\n (key: keyof StyleSnapshot, cssCustomPropertyName: string) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n const selector = selectorRef.current;\n if (!originalSnapshotFirstEditRef.current.has(selector)) {\n originalSnapshotFirstEditRef.current.set(selector, { ...orig });\n }\n pushUndo();\n const name = normalizeVarName(cssCustomPropertyName);\n const cssProp = CSS_PROP_MAP[key];\n if (key === \"backgroundColor\") {\n engine.applyChange(selector, \"background-image\", \"none\");\n }\n engine.applyChange(selector, cssProp, `var(${name})`);\n setVariableLinks((prev) => new Map(prev).set(key, name));\n const prevDetached = detachedBySelectorRef.current.get(selector) ?? [];\n detachedBySelectorRef.current.set(\n selector,\n prevDetached.filter((p) => p.key !== key),\n );\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, pushUndo, syncFromDom, flushPersist],\n );\n\n const unlinkVariable = useCallback(\n (key: keyof StyleSnapshot) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n const selector = selectorRef.current;\n if (!originalSnapshotFirstEditRef.current.has(selector)) {\n originalSnapshotFirstEditRef.current.set(selector, { ...orig });\n }\n pushUndo();\n const cssProp = CSS_PROP_MAP[key];\n engine.removeChange(selector, cssProp);\n if (key === \"backgroundColor\") {\n engine.removeChange(selector, \"background-image\");\n }\n setVariableLinks((prev) => {\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n const snap = getComputedSnapshot(el);\n const raw = snap[key];\n if (key === \"letterSpacing\") {\n engine.applyChange(selector, cssProp, normalizeLetterSpacingForCss(raw));\n } else if (key === \"lineHeight\") {\n engine.applyChange(selector, cssProp, normalizeLineHeightForCss(raw));\n } else {\n engine.applyChange(selector, cssProp, raw);\n }\n const prevD = detachedBySelectorRef.current.get(selector) ?? [];\n detachedBySelectorRef.current.set(selector, [...prevD.filter((p) => p.key !== key), { key, value: raw }]);\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, pushUndo, syncFromDom, flushPersist],\n );\n\n const resetStyle = useCallback(\n (key: keyof StyleSnapshot) => {\n const el = selectedElement;\n const orig = originalSnapshot;\n const engine = engineRef.current;\n if (!el || !orig || !engine) return;\n pushUndo();\n const selector = selectorRef.current;\n /* Mirror `updateStyle` shorthand / longhand so reset clears every preview rule that wins in CSS. */\n if (key === \"margin\") {\n engine.removeChange(selector, \"margin-top\");\n engine.removeChange(selector, \"margin-right\");\n engine.removeChange(selector, \"margin-bottom\");\n engine.removeChange(selector, \"margin-left\");\n engine.removeChange(selector, \"margin\");\n } else if (key === \"marginTop\" || key === \"marginRight\" || key === \"marginBottom\" || key === \"marginLeft\") {\n engine.removeChange(selector, \"margin\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"padding\") {\n engine.removeChange(selector, \"padding-top\");\n engine.removeChange(selector, \"padding-right\");\n engine.removeChange(selector, \"padding-bottom\");\n engine.removeChange(selector, \"padding-left\");\n engine.removeChange(selector, \"padding\");\n } else if (key === \"paddingTop\" || key === \"paddingRight\" || key === \"paddingBottom\" || key === \"paddingLeft\") {\n engine.removeChange(selector, \"padding\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"borderColor\") {\n engine.removeChange(selector, \"border-top-color\");\n engine.removeChange(selector, \"border-right-color\");\n engine.removeChange(selector, \"border-bottom-color\");\n engine.removeChange(selector, \"border-left-color\");\n engine.removeChange(selector, \"border-color\");\n } else if (\n key === \"borderTopColor\" ||\n key === \"borderRightColor\" ||\n key === \"borderBottomColor\" ||\n key === \"borderLeftColor\"\n ) {\n engine.removeChange(selector, \"border-color\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"borderRadius\") {\n engine.removeChange(selector, \"border-top-left-radius\");\n engine.removeChange(selector, \"border-top-right-radius\");\n engine.removeChange(selector, \"border-bottom-right-radius\");\n engine.removeChange(selector, \"border-bottom-left-radius\");\n engine.removeChange(selector, \"border-radius\");\n } else if (\n key === \"borderTopLeftRadius\" ||\n key === \"borderTopRightRadius\" ||\n key === \"borderBottomRightRadius\" ||\n key === \"borderBottomLeftRadius\"\n ) {\n engine.removeChange(selector, \"border-radius\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"borderStyle\") {\n engine.removeChange(selector, \"border-top-style\");\n engine.removeChange(selector, \"border-right-style\");\n engine.removeChange(selector, \"border-bottom-style\");\n engine.removeChange(selector, \"border-left-style\");\n engine.removeChange(selector, \"border-style\");\n } else if (\n key === \"borderTopStyle\" ||\n key === \"borderRightStyle\" ||\n key === \"borderBottomStyle\" ||\n key === \"borderLeftStyle\"\n ) {\n engine.removeChange(selector, \"border-style\");\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n } else if (key === \"top\") {\n engine.removeChange(selector, \"bottom\");\n engine.removeChange(selector, \"top\");\n } else if (key === \"bottom\") {\n engine.removeChange(selector, \"top\");\n engine.removeChange(selector, \"bottom\");\n } else if (key === \"left\") {\n engine.removeChange(selector, \"right\");\n engine.removeChange(selector, \"left\");\n } else if (key === \"right\") {\n engine.removeChange(selector, \"left\");\n engine.removeChange(selector, \"right\");\n } else if (key === \"backgroundImage\") {\n engine.removeChange(selector, \"background-image\");\n } else if (key === \"backgroundColor\") {\n engine.removeChange(selector, \"background-color\");\n engine.removeChange(selector, \"background-image\");\n } else {\n engine.removeChange(selector, CSS_PROP_MAP[key]);\n }\n setVariableLinks((prev) => {\n if (!prev.has(key)) return prev;\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n const prevD = detachedBySelectorRef.current.get(selector) ?? [];\n detachedBySelectorRef.current.set(\n selector,\n prevD.filter((p) => p.key !== key),\n );\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, pushUndo, syncFromDom, flushPersist],\n );\n\n /** Clear every preview rule and session maps (global reset, not per-selector). */\n const resetAll = useCallback(() => {\n setStructuralReorders([]);\n const engine = engineRef.current;\n if (!engine) return;\n const hasCss = engine.getChanges().length > 0;\n const hasText = textOverridesBySelectorRef.current.size > 0;\n if (!hasCss && !hasText) return;\n\n undoStackRef.current = [];\n redoStackRef.current = [];\n\n if (hasCss) {\n engine.clearAll();\n }\n originalSnapshotFirstEditRef.current.clear();\n variableLinksBySelectorRef.current.clear();\n detachedBySelectorRef.current.clear();\n setVariableLinks(new Map());\n setPreviewRuleCount(0);\n setPreviewRulesForSelectionCount(0);\n\n for (const [sel, origText] of textOriginalsBySelectorRef.current) {\n try {\n const node = document.querySelector(sel);\n if (node) setElementEditableText(node, origText);\n } catch {\n /* ignore */\n }\n }\n textOverridesBySelectorRef.current.clear();\n textOriginalsBySelectorRef.current.clear();\n\n const el = selectedElement;\n if (el) {\n const live = getComputedSnapshot(el);\n setOriginalSnapshot(live);\n syncFromDom(el, live);\n } else {\n setOriginalSnapshot(null);\n setCurrentSnapshot(null);\n setChanges(new Map());\n setPreviewSizeHints({});\n }\n\n flushPersist();\n }, [selectedElement, syncFromDom, flushPersist]);\n\n const restoreHistoryEntry = useCallback(\n (entry: HistoryEntry) => {\n const engine = engineRef.current;\n const el = selectedElement;\n const orig = originalSnapshot;\n if (!engine || !el || !orig) return;\n engine.removeAllChanges(entry.selector);\n for (const { property, value } of entry.changes) {\n engine.applyChange(entry.selector, property, value);\n }\n syncFromDom(el, orig);\n flushPersist();\n },\n [selectedElement, originalSnapshot, syncFromDom, flushPersist],\n );\n\n const undo = useCallback(() => {\n const engine = engineRef.current;\n if (!engine || !selectedElement || !originalSnapshot) return;\n const stack = undoStackRef.current;\n if (stack.length === 0) return;\n const prev = stack.pop();\n if (!prev) return;\n const current = engine.getChanges().filter((r) => r.selector === prev.selector);\n redoStackRef.current.push({\n selector: prev.selector,\n changes: current.map((r) => ({ property: r.property, value: r.value })),\n });\n if (redoStackRef.current.length > MAX_HISTORY) redoStackRef.current.shift();\n restoreHistoryEntry(prev);\n }, [selectedElement, originalSnapshot, restoreHistoryEntry]);\n\n const redo = useCallback(() => {\n const engine = engineRef.current;\n if (!engine || !selectedElement || !originalSnapshot) return;\n const stack = redoStackRef.current;\n if (stack.length === 0) return;\n const next = stack.pop();\n if (!next) return;\n const current = engine.getChanges().filter((r) => r.selector === next.selector);\n undoStackRef.current.push({\n selector: next.selector,\n changes: current.map((r) => ({ property: r.property, value: r.value })),\n });\n if (undoStackRef.current.length > MAX_HISTORY) undoStackRef.current.shift();\n restoreHistoryEntry(next);\n }, [selectedElement, originalSnapshot, restoreHistoryEntry]);\n\n useEffect(() => {\n if (!selectedElement || !originalSnapshot) {\n setChanges(new Map());\n return;\n }\n setChanges(computeLiveChanges(selectedElement, originalSnapshot));\n }, [selectedElement, originalSnapshot, computeLiveChanges]);\n\n return {\n selectedElement,\n hoveredElement,\n originalSnapshot,\n currentSnapshot,\n changes,\n variableLinks,\n previewSizeHints,\n previewRuleCount,\n previewRulesForSelectionCount,\n getCopyBatchItems,\n structuralReorders,\n structuralReorderCount: structuralReorders.length,\n recordStructuralReorder,\n syncSelectionAfterStructuralChange,\n selectElement,\n updateStyle,\n linkVariable,\n unlinkVariable,\n resetStyle,\n resetAll,\n beginStyleScrub,\n endStyleScrub,\n undo,\n redo,\n setHoveredElement,\n justifyFlexMainAxisSpaceBetween,\n applyTextContentOverride,\n };\n}\n","\"use client\";\n\nimport {\n AlignCenter,\n AlignHorizontalJustifyCenter,\n AlignHorizontalJustifyEnd,\n AlignHorizontalJustifyStart,\n AlignHorizontalSpaceAround,\n AlignLeft,\n AlignRight,\n AlignVerticalJustifyCenter,\n AlignVerticalJustifyEnd,\n AlignVerticalJustifyStart,\n AlignVerticalSpaceAround,\n ArrowDownToLine,\n ArrowLeftRight,\n ArrowUpDown,\n ArrowUpToLine,\n Check,\n Copy,\n CornerUpLeft,\n Eye,\n FoldVertical,\n Ruler,\n Minus,\n Plus,\n Rows3,\n SquareDashed,\n SquareSquare,\n SunDim,\n} from \"lucide-react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"./cn\";\nimport { buildCssFromHexOpacity, parseCssColorToHexOpacity } from \"./color-alpha\";\nimport { CornerRadiusIcon } from \"./corner-radius-icon\";\nimport { elementSupportsTypography, snapshotHasFill } from \"./element-capabilities\";\nimport { CopyPendingBadge } from \"./copy-pending-badge\";\nimport { fontFamilyApplyCss, matchFontSelectValue, useFontFamilyOptions } from \"./font-options\";\nimport { applyFlowMode, detectFlowMode } from \"./layout-flow\";\nimport {\n type SelfAlignToken,\n getParentLayoutKind,\n inferFlexMainAxisFromHorizontalMargins,\n inferFlexMainAxisFromVerticalMargins,\n normalizeSelfAlign,\n selfTokenToCss,\n} from \"./position-alignment\";\nimport {\n PanelAlignmentGrid,\n PanelFlowRow,\n PanelIconField,\n PanelLabeledMini,\n PanelSectionTitle,\n PanelSelect,\n PanelSizingAxis,\n PanelSubsectionTitle,\n PanelSwatchRow,\n PanelTextInput,\n PanelToggleGroup,\n panelChrome,\n} from \"./panel-chrome\";\nimport { PanelTooltip } from \"./panel-tooltip\";\nimport { PanelVariableAffix } from \"./panel-variable-affix\";\nimport { PropertiesEmptyState } from \"./properties-empty-state\";\nimport { type ShadowParts, composeBoxShadow, normalizeShadowLength, parseBoxShadow } from \"./shadow-parse\";\nimport { SIZING_MODE_OPTIONS, type SizingMode, detectSizingMode, modeToCss, sizingModeTriggerLabel } from \"./sizing\";\nimport {\n type DesignEditorElement,\n type StyleSnapshot,\n getElementPath,\n normalizeLetterSpacingForCss,\n normalizeLineHeightForCss,\n} from \"./use-selection\";\n\ninterface PropertiesPanelProps {\n selectedElement: DesignEditorElement | null;\n originalSnapshot: StyleSnapshot | null;\n snapshot: StyleSnapshot | null;\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>;\n onChange: (key: keyof StyleSnapshot, value: string) => void;\n onReset: (key: keyof StyleSnapshot) => void;\n onResetAll: () => void;\n changedKeys: Map<keyof StyleSnapshot, { before: string; after: string }>;\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string>;\n previewSizeHints: Readonly<{ width?: string; height?: string }>;\n /** Rules applied anywhere in the preview engine (Reset all, Copy batch, badge). */\n previewRuleCount: number;\n /** Recorded flex/grid DOM reorders (copy + Reset all). */\n structuralReorderCount?: number;\n onCopyPrompt: () => Promise<boolean>;\n linkVariable: (key: keyof StyleSnapshot, cssCustomPropertyName: string) => void;\n unlinkVariable: (key: keyof StyleSnapshot) => void;\n /** Layout: double-click on the flex alignment grid sets `justify-content: space-between` on the selected flex container. */\n justifyFlexMainAxisSpaceBetween?: () => void;\n}\n\nconst BORDER_STYLES = [\"none\", \"solid\", \"dashed\", \"dotted\", \"double\", \"groove\", \"ridge\", \"inset\", \"outset\"];\n\nconst WEIGHT_OPTIONS: { value: string; label: string }[] = [\n { value: \"100\", label: \"Thin\" },\n { value: \"200\", label: \"Extra light\" },\n { value: \"300\", label: \"Light\" },\n { value: \"400\", label: \"Regular\" },\n { value: \"500\", label: \"Medium\" },\n { value: \"600\", label: \"Semibold\" },\n { value: \"700\", label: \"Bold\" },\n { value: \"800\", label: \"Extra bold\" },\n { value: \"900\", label: \"Black\" },\n { value: \"normal\", label: \"Normal\" },\n { value: \"bold\", label: \"Bold (keyword)\" },\n { value: \"lighter\", label: \"Lighter\" },\n { value: \"bolder\", label: \"Bolder\" },\n];\n\ntype BorderSide = \"all\" | \"top\" | \"right\" | \"bottom\" | \"left\";\n\nfunction formatPxDisplay(css: string): string {\n const m = css.match(/^([\\d.]+)\\s*(px|rem|em)?$/i);\n if (m) return `${m[1]} px`;\n return css;\n}\n\nfunction parsePxInput(raw: string): string {\n const t = raw\n .trim()\n .replace(/\\s*px\\s*$/i, \"\")\n .trim();\n if (t === \"\") return \"0px\";\n if (/^[\\d.]+$/.test(t)) return `${t}px`;\n return raw.trim();\n}\n\nfunction displayGap(gap: string): string {\n const t = gap.trim().toLowerCase();\n if (t === \"normal\" || t === \"\" || t === \"0\" || t === \"0px\") return \"0\";\n const parts = t.split(/\\s+/);\n return stripPxForNumberField(parts[0]);\n}\n\nfunction cssAlignItemsToVerticalControl(v: string): \"top\" | \"middle\" | \"bottom\" {\n if (v === \"center\") return \"middle\";\n if (v === \"flex-end\" || v === \"end\") return \"bottom\";\n return \"top\";\n}\n\nfunction verticalAlignToCssAlignItems(p: \"top\" | \"middle\" | \"bottom\"): string {\n if (p === \"middle\") return \"center\";\n if (p === \"bottom\") return \"flex-end\";\n return \"flex-start\";\n}\n\nfunction stripPxForNumberField(css: string): string {\n return css.replace(/\\s*px\\s*$/i, \"\").trim();\n}\n\n/** Inset fields: show `auto` verbatim; otherwise strip `px` for editing. */\nfunction displayInset(css: string): string {\n const t = css.trim().toLowerCase();\n if (t === \"\" || t === \"auto\") return \"auto\";\n return stripPxForNumberField(css);\n}\n\nfunction commitInsetInput(raw: string): string {\n const t = raw.trim().toLowerCase();\n if (t === \"auto\") return \"auto\";\n return parsePxInput(raw);\n}\n\nfunction ensurePxSize(raw: string): string {\n const t = raw.trim();\n if (t === \"\") return \"16px\";\n if (/^[\\d.]+$/.test(t)) return `${t}px`;\n return t;\n}\n\nfunction commitFixedDimension(raw: string): string {\n const t = raw.trim().replace(/\\s*px\\s*$/i, \"\");\n if (t === \"\" || t === \".\") return \"0px\";\n const n = Number.parseFloat(t);\n if (!Number.isNaN(n) && Number.isFinite(n)) return `${n}px`;\n return ensurePxSize(raw.trim());\n}\n\nfunction linkedSpacingVH(shorthand: string): { v: string; h: string } {\n const parts = shorthand.trim().split(/\\s+/).filter(Boolean);\n const strip = (x: string) => x.replace(/\\s*px\\s*$/i, \"\").trim();\n if (parts.length === 0) return { v: \"0\", h: \"0\" };\n if (parts.length === 1) return { v: strip(parts[0]), h: strip(parts[0]) };\n if (parts.length === 2) return { v: strip(parts[0]), h: strip(parts[1]) };\n if (parts.length === 3) return { v: strip(parts[0]), h: strip(parts[1]) };\n return { v: strip(parts[0]), h: strip(parts[1]) };\n}\n\nfunction paddingLinkedDisplay(s: StyleSnapshot): { v: string; h: string } {\n if (s.padding.trim()) return linkedSpacingVH(s.padding);\n const t = stripPxForNumberField(s.paddingTop);\n const b = stripPxForNumberField(s.paddingBottom);\n const l = stripPxForNumberField(s.paddingLeft);\n const r = stripPxForNumberField(s.paddingRight);\n if (t === b && l === r) return { v: t, h: l };\n return { v: t, h: l };\n}\n\nfunction marginLinkedDisplay(s: StyleSnapshot): { v: string; h: string } {\n if (s.margin.trim()) return linkedSpacingVH(s.margin);\n const t = stripPxForNumberField(s.marginTop);\n const b = stripPxForNumberField(s.marginBottom);\n const l = stripPxForNumberField(s.marginLeft);\n const r = stripPxForNumberField(s.marginRight);\n if (t === b && l === r) return { v: t, h: l };\n return { v: t, h: l };\n}\n\nconst POSITION_TYPE_OPTIONS: { value: string; label: string }[] = [\n { value: \"static\", label: \"Static\" },\n { value: \"relative\", label: \"Relative\" },\n { value: \"absolute\", label: \"Absolute\" },\n { value: \"fixed\", label: \"Fixed\" },\n { value: \"sticky\", label: \"Sticky\" },\n];\n\nconst POSITION_RESET_KEYS = [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"position\",\n \"alignSelf\",\n \"justifySelf\",\n] as const satisfies readonly (keyof StyleSnapshot)[];\n\nconst LAYOUT_RESET_KEYS = [\n \"width\",\n \"height\",\n \"padding\",\n \"margin\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"marginTop\",\n \"marginRight\",\n \"marginBottom\",\n \"marginLeft\",\n \"overflow\",\n \"display\",\n \"flexDirection\",\n \"justifyContent\",\n \"alignItems\",\n \"gap\",\n \"rowGap\",\n \"columnGap\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\",\n] as const satisfies readonly (keyof StyleSnapshot)[];\n\nconst TEXT_RESET_KEYS = [\n \"fontFamily\",\n \"fontWeight\",\n \"fontSize\",\n \"lineHeight\",\n \"letterSpacing\",\n \"textAlign\",\n \"color\",\n] as const satisfies readonly (keyof StyleSnapshot)[];\n\nfunction OnDemandSectionButton({ label, onClick }: { label: string; onClick: () => void }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"flex w-full items-center justify-between gap-2 rounded-small px-0 py-1 transition-colors\",\n panelChrome.title,\n panelChrome.muted,\n \"hover:text-[#D9D9D9]\",\n )}\n >\n <span>{label}</span>\n <Plus className=\"size-[14px] shrink-0\" strokeWidth={2} aria-hidden />\n </button>\n );\n}\n\nfunction SectionHeaderWithReset({\n children,\n hasChange,\n onReset,\n /** Extra controls after Reset (e.g. Background +/−) — same row as Border: title | [flex gap-1]. */\n trailing,\n /** Same label tone as `OnDemandSectionButton` (muted + hover) when aligned with those rows. */\n titleTone = \"default\",\n}: {\n children: React.ReactNode;\n hasChange: boolean;\n onReset: () => void;\n trailing?: React.ReactNode;\n titleTone?: \"default\" | \"muted\";\n}) {\n const showRight = hasChange || Boolean(trailing);\n return (\n <div className=\"flex w-full items-center justify-between gap-2 py-1\">\n <PanelSectionTitle tone={titleTone}>{children}</PanelSectionTitle>\n {showRight ? (\n <div className=\"flex items-center gap-1\">\n {hasChange ? (\n <button type=\"button\" className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 hover:text-[#D9D9D9]\")} onClick={onReset}>\n Reset\n </button>\n ) : null}\n {trailing}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport function PropertiesPanel({\n selectedElement,\n originalSnapshot,\n snapshot,\n changes,\n onChange,\n onReset,\n onResetAll,\n changedKeys,\n variableLinks,\n previewSizeHints,\n previewRuleCount,\n structuralReorderCount = 0,\n onCopyPrompt,\n linkVariable,\n unlinkVariable,\n justifyFlexMainAxisSpaceBetween,\n}: PropertiesPanelProps) {\n const [copied, setCopied] = useState(false);\n const [copyFailed, setCopyFailed] = useState(false);\n const [shadowParts, setShadowParts] = useState<ShadowParts>(() => parseBoxShadow(\"\"));\n const [borderSide, setBorderSide] = useState<BorderSide>(\"all\");\n const [paddingExpanded, setPaddingExpanded] = useState(false);\n const [marginExpanded, setMarginExpanded] = useState(false);\n const [showBorderSection, setShowBorderSection] = useState(false);\n const [showShadowSection, setShowShadowSection] = useState(false);\n const lastSelectionPathRef = useRef<string | null>(null);\n\n const hasChange = useCallback((key: keyof StyleSnapshot) => changedKeys.has(key), [changedKeys]);\n\n const handleAddFill = useCallback(() => {\n onChange(\"backgroundColor\", \"#ffffff\");\n }, [onChange]);\n\n const handleRemoveFill = useCallback(() => {\n onChange(\"backgroundColor\", \"transparent\");\n }, [onChange]);\n\n /** Open on-demand sections when the newly selected node already uses them (otherwise easy to miss behind “+”). */\n useEffect(() => {\n if (!selectedElement || !snapshot) {\n if (!selectedElement) lastSelectionPathRef.current = null;\n return;\n }\n const path = getElementPath(selectedElement);\n if (path === lastSelectionPathRef.current) return;\n lastSelectionPathRef.current = path;\n\n setShowBorderSection(false);\n setShowShadowSection(false);\n\n const bs = snapshot.boxShadow.trim().toLowerCase();\n if (bs && bs !== \"none\" && bs !== \"initial\" && bs !== \"inherit\") setShowShadowSection(true);\n\n const bw = Number.parseFloat(snapshot.borderTopWidth.replace(/px/i, \"\").trim()) || 0;\n if (snapshot.borderStyle && snapshot.borderStyle !== \"none\" && bw > 0) setShowBorderSection(true);\n }, [selectedElement, snapshot]);\n\n const boxShadowValue = snapshot?.boxShadow ?? \"\";\n const lastBoxShadowWrittenRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (boxShadowValue === lastBoxShadowWrittenRef.current) return;\n lastBoxShadowWrittenRef.current = boxShadowValue;\n setShadowParts(parseBoxShadow(boxShadowValue));\n }, [boxShadowValue]);\n\n const updateShadow = useCallback(\n (patch: Partial<ShadowParts>) => {\n const prev = shadowParts;\n const next = { ...prev, ...patch };\n const s = composeBoxShadow(next);\n lastBoxShadowWrittenRef.current = s;\n setShadowParts(next);\n onChange(\"boxShadow\", s);\n },\n [onChange, shadowParts],\n );\n\n const handleCopy = useCallback(async () => {\n setCopied(false);\n setCopyFailed(false);\n const ok = await onCopyPrompt();\n if (ok) {\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n } else {\n setCopyFailed(true);\n window.setTimeout(() => setCopyFailed(false), 2800);\n }\n }, [onCopyPrompt]);\n\n const fontOptions = useFontFamilyOptions(snapshot?.fontFamily);\n const fontSelectValue = useMemo(() => (snapshot ? matchFontSelectValue(snapshot.fontFamily, fontOptions) : \"\"), [snapshot, fontOptions]);\n\n const weightOptions = useMemo(() => {\n if (!snapshot) return WEIGHT_OPTIONS;\n const w = snapshot.fontWeight;\n if (WEIGHT_OPTIONS.some((o) => o.value === w)) return WEIGHT_OPTIONS;\n return [{ value: w, label: w }, ...WEIGHT_OPTIONS];\n }, [snapshot]);\n\n const borderWidthKey = (side: BorderSide): keyof StyleSnapshot => {\n switch (side) {\n case \"top\":\n return \"borderTopWidth\";\n case \"right\":\n return \"borderRightWidth\";\n case \"bottom\":\n return \"borderBottomWidth\";\n case \"left\":\n return \"borderLeftWidth\";\n default:\n return \"borderTopWidth\";\n }\n };\n\n const getBorderWidthDisplay = (): string => {\n if (!snapshot) return \"0 px\";\n if (borderSide === \"all\") {\n return formatPxDisplay(snapshot.borderTopWidth);\n }\n return formatPxDisplay(snapshot[borderWidthKey(borderSide)]);\n };\n\n const setBorderWidthFromInput = (raw: string) => {\n if (!snapshot) return;\n const css = parsePxInput(raw);\n if (borderSide === \"all\") {\n onChange(\"borderTopWidth\", css);\n onChange(\"borderRightWidth\", css);\n onChange(\"borderBottomWidth\", css);\n onChange(\"borderLeftWidth\", css);\n } else {\n onChange(borderWidthKey(borderSide), css);\n }\n };\n\n const shadowColorParts = useMemo(() => parseCssColorToHexOpacity(shadowParts.color), [shadowParts.color]);\n\n if (!snapshot) {\n return <PropertiesEmptyState />;\n }\n\n const hasAnyChange = changedKeys.size > 0;\n const canCopy =\n Boolean(selectedElement) &&\n (hasAnyChange || previewRuleCount > 0 || structuralReorderCount > 0);\n /** Prefer global preview rule count so the badge matches “all pending edits”, not only this node’s diff. */\n const changeCountForBadge =\n previewRuleCount > 0\n ? Math.min(previewRuleCount + structuralReorderCount, 99)\n : structuralReorderCount > 0\n ? Math.min(structuralReorderCount, 99)\n : changedKeys.size > 0\n ? changedKeys.size\n : 0;\n const specifiedWidth = selectedElement?.style.getPropertyValue(\"width\").trim() ?? \"\";\n const specifiedHeight = selectedElement?.style.getPropertyValue(\"height\").trim() ?? \"\";\n const effectiveWidthSpecified = specifiedWidth || previewSizeHints.width || undefined;\n const effectiveHeightSpecified = specifiedHeight || previewSizeHints.height || undefined;\n const widthMode = detectSizingMode(snapshot.width, \"width\", effectiveWidthSpecified);\n const heightMode = detectSizingMode(snapshot.height, \"height\", effectiveHeightSpecified);\n\n const fillParts = parseCssColorToHexOpacity(snapshot.backgroundColor);\n const fillHasVariable = Boolean(variableLinks.get(\"backgroundColor\"));\n const hasFill = snapshotHasFill(snapshot, { fillHasVariable });\n const fillHasPendingChange = hasChange(\"backgroundColor\") || hasChange(\"backgroundImage\");\n const borderColorParts = parseCssColorToHexOpacity(snapshot.borderColor);\n const textColorParts = parseCssColorToHexOpacity(snapshot.color);\n const supportsTypography = elementSupportsTypography(selectedElement);\n\n const textToggleValue: \"left\" | \"center\" | \"right\" = snapshot.textAlign === \"right\" ? \"right\" : snapshot.textAlign === \"center\" ? \"center\" : \"left\";\n const vAlign = cssAlignItemsToVerticalControl(snapshot.alignItems);\n\n const opacityNum = Math.min(1, Math.max(0, Number.parseFloat(snapshot.opacity) || 1));\n const opacityDisplay = `${Math.round(opacityNum * 100)} %`;\n\n const letterDisplay = snapshot.letterSpacing === \"normal\" || snapshot.letterSpacing === \"0px\" ? \"0\" : stripPxForNumberField(snapshot.letterSpacing);\n\n const flowMode = detectFlowMode(snapshot);\n const padLinked = paddingLinkedDisplay(snapshot);\n const marginLinked = marginLinkedDisplay(snapshot);\n const positionHasChange = POSITION_RESET_KEYS.some((k) => hasChange(k));\n const layoutHasChange = LAYOUT_RESET_KEYS.some((k) => hasChange(k));\n\n const parentLayoutKind = useMemo(() => getParentLayoutKind(selectedElement), [selectedElement]);\n\n const alignmentHorizontalToggle = useMemo((): SelfAlignToken | \"auto\" | \"stretch\" => {\n if (parentLayoutKind === \"grid\") return normalizeSelfAlign(snapshot.justifySelf);\n if (parentLayoutKind === \"flex-row\") return inferFlexMainAxisFromHorizontalMargins(snapshot.marginLeft, snapshot.marginRight);\n if (parentLayoutKind === \"flex-col\") return normalizeSelfAlign(snapshot.alignSelf);\n return \"auto\";\n }, [snapshot, parentLayoutKind]);\n\n const alignmentVerticalToggle = useMemo((): SelfAlignToken | \"auto\" | \"stretch\" => {\n if (parentLayoutKind === \"grid\") return normalizeSelfAlign(snapshot.alignSelf);\n if (parentLayoutKind === \"flex-row\") return normalizeSelfAlign(snapshot.alignSelf);\n if (parentLayoutKind === \"flex-col\") return inferFlexMainAxisFromVerticalMargins(snapshot.marginTop, snapshot.marginBottom);\n return \"auto\";\n }, [snapshot, parentLayoutKind]);\n\n const showParentAlignment = parentLayoutKind === \"grid\" || parentLayoutKind === \"flex-row\" || parentLayoutKind === \"flex-col\";\n\n const applyHorizontalAlignment = useCallback(\n (v: SelfAlignToken) => {\n if (parentLayoutKind === \"grid\") {\n onChange(\"justifySelf\", selfTokenToCss(v));\n } else if (parentLayoutKind === \"flex-row\") {\n if (v === \"start\") {\n onChange(\"marginLeft\", \"0px\");\n onChange(\"marginRight\", \"auto\");\n } else if (v === \"center\") {\n onChange(\"marginLeft\", \"auto\");\n onChange(\"marginRight\", \"auto\");\n } else {\n onChange(\"marginLeft\", \"auto\");\n onChange(\"marginRight\", \"0px\");\n }\n } else if (parentLayoutKind === \"flex-col\") {\n onChange(\"alignSelf\", selfTokenToCss(v));\n }\n },\n [onChange, parentLayoutKind],\n );\n\n const applyVerticalAlignment = useCallback(\n (v: SelfAlignToken) => {\n if (parentLayoutKind === \"grid\") {\n onChange(\"alignSelf\", selfTokenToCss(v));\n } else if (parentLayoutKind === \"flex-row\") {\n onChange(\"alignSelf\", selfTokenToCss(v));\n } else if (parentLayoutKind === \"flex-col\") {\n if (v === \"start\") {\n onChange(\"marginTop\", \"0px\");\n onChange(\"marginBottom\", \"auto\");\n } else if (v === \"center\") {\n onChange(\"marginTop\", \"auto\");\n onChange(\"marginBottom\", \"auto\");\n } else {\n onChange(\"marginTop\", \"auto\");\n onChange(\"marginBottom\", \"0px\");\n }\n }\n },\n [onChange, parentLayoutKind],\n );\n\n const hToggleValue: \"\" | SelfAlignToken =\n alignmentHorizontalToggle === \"start\" || alignmentHorizontalToggle === \"center\" || alignmentHorizontalToggle === \"end\"\n ? alignmentHorizontalToggle\n : \"\";\n const vToggleValue: \"\" | SelfAlignToken =\n alignmentVerticalToggle === \"start\" || alignmentVerticalToggle === \"center\" || alignmentVerticalToggle === \"end\"\n ? alignmentVerticalToggle\n : \"\";\n\n const positionSelectValue = POSITION_TYPE_OPTIONS.some((o) => o.value === snapshot.position) ? snapshot.position : \"static\";\n\n return (\n <div className=\"flex flex-col gap-4\" data-flux-ui>\n <div className=\"flex gap-3\" data-flux-ui>\n <button\n type=\"button\"\n data-flux-ui\n onClick={onResetAll}\n disabled={previewRuleCount === 0 && structuralReorderCount === 0}\n className={cn(\n \"flex min-w-0 flex-1 items-center justify-center gap-2 rounded-small bg-[#333333] px-2 py-1\",\n previewRuleCount === 0 && structuralReorderCount === 0 && \"cursor-not-allowed opacity-50\",\n )}\n >\n <CornerUpLeft className=\"size-[14px] shrink-0 text-[#D9D9D9]\" strokeWidth={2} aria-hidden />\n <span className={cn(panelChrome.body, \"text-[#D9D9D9]\")}>Reset</span>\n </button>\n {(() => {\n const copyTip = !selectedElement ? \"Select an element on the page first.\" : \"\";\n const copyBtn = (\n <button\n type=\"button\"\n data-flux-ui\n disabled={!canCopy}\n onClick={() => void handleCopy()}\n aria-live=\"polite\"\n aria-label={\n canCopy && changeCountForBadge > 0\n ? `Copy ${changeCountForBadge} pending change${changeCountForBadge === 1 ? \"\" : \"s\"} to clipboard`\n : \"Copy to clipboard\"\n }\n className={cn(\n \"flex min-w-0 flex-1 items-center justify-center gap-2 rounded-small bg-[#F3F3F3] px-2 py-1\",\n !canCopy && \"cursor-not-allowed opacity-50\",\n )}\n >\n {copied ? (\n <Check className=\"size-[14px] shrink-0 text-[#7C7C7C]\" strokeWidth={2} aria-hidden />\n ) : (\n <Copy className=\"size-[14px] shrink-0 text-[#7C7C7C]\" strokeWidth={2} aria-hidden />\n )}\n <span className={cn(panelChrome.body, \"text-[#202020]\")}>{copyFailed ? \"Copy failed\" : copied ? \"Copied\" : \"Copy\"}</span>\n {!copied && canCopy && changeCountForBadge > 0 ? <CopyPendingBadge count={changeCountForBadge} /> : null}\n </button>\n );\n return copyTip ? (\n <PanelTooltip text={copyTip}>\n <span className=\"inline-flex min-w-0 flex-1 max-w-full\">{copyBtn}</span>\n </PanelTooltip>\n ) : (\n copyBtn\n );\n })()}\n </div>\n\n {/* Position — above Layout (placement vs sizing/flow). */}\n <section className=\"flex flex-col gap-3\">\n <SectionHeaderWithReset\n hasChange={positionHasChange}\n onReset={() => {\n for (const k of POSITION_RESET_KEYS) {\n if (hasChange(k)) onReset(k);\n }\n }}\n >\n Position\n </SectionHeaderWithReset>\n {showParentAlignment ? (\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Alignment</PanelSubsectionTitle>\n <div className=\"flex min-w-0 flex-row gap-2\">\n <div className=\"min-w-0 flex-1\">\n <PanelToggleGroup\n value={hToggleValue}\n onChange={(v) => applyHorizontalAlignment(v)}\n options={[\n {\n value: \"start\",\n title: \"Start\",\n icon: <AlignHorizontalJustifyStart className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n {\n value: \"center\",\n title: \"Center\",\n icon: <AlignHorizontalJustifyCenter className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n {\n value: \"end\",\n title: \"End\",\n icon: <AlignHorizontalJustifyEnd className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n ]}\n />\n </div>\n <div className=\"min-w-0 flex-1\">\n <PanelToggleGroup\n value={vToggleValue}\n onChange={(v) => applyVerticalAlignment(v)}\n options={[\n {\n value: \"start\",\n title: \"Start\",\n icon: <AlignVerticalJustifyStart className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n {\n value: \"center\",\n title: \"Center\",\n icon: <AlignVerticalJustifyCenter className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n {\n value: \"end\",\n title: \"End\",\n icon: <AlignVerticalJustifyEnd className={panelChrome.icon} strokeWidth={2} aria-hidden />,\n },\n ]}\n />\n </div>\n </div>\n </div>\n ) : null}\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Type</PanelSubsectionTitle>\n <PanelSelect\n ariaLabel=\"CSS position\"\n value={positionSelectValue}\n onChange={(v) => onChange(\"position\", v)}\n options={POSITION_TYPE_OPTIONS}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"position\"\n linkedVar={variableLinks.get(\"position\") ?? null}\n onLink={(n) => linkVariable(\"position\", n)}\n onUnlink={() => unlinkVariable(\"position\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n {[\"absolute\", \"fixed\", \"sticky\"].includes(snapshot.position) ? (\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Offsets</PanelSubsectionTitle>\n <p className={cn(panelChrome.muted, panelChrome.body, \"leading-snug\")}>\n Drag the selection on the page when <strong className=\"font-medium text-[#D9D9D9]\">absolute</strong> or{\" \"}\n <strong className=\"font-medium text-[#D9D9D9]\">fixed</strong> to move; or edit values here (use{\" \"}\n <code className=\"text-[11px]\">auto</code>).\n </p>\n <div className=\"grid w-full grid-cols-2 gap-2\">\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Top inset\"\n icon={\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n T\n </span>\n }\n value={displayInset(snapshot.top)}\n onChange={(raw) => onChange(\"top\", commitInsetInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"top\"\n linkedVar={variableLinks.get(\"top\") ?? null}\n onLink={(n) => linkVariable(\"top\", n)}\n onUnlink={() => unlinkVariable(\"top\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Right inset\"\n icon={\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n R\n </span>\n }\n value={displayInset(snapshot.right)}\n onChange={(raw) => onChange(\"right\", commitInsetInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"right\"\n linkedVar={variableLinks.get(\"right\") ?? null}\n onLink={(n) => linkVariable(\"right\", n)}\n onUnlink={() => unlinkVariable(\"right\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Bottom inset\"\n icon={\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n B\n </span>\n }\n value={displayInset(snapshot.bottom)}\n onChange={(raw) => onChange(\"bottom\", commitInsetInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"bottom\"\n linkedVar={variableLinks.get(\"bottom\") ?? null}\n onLink={(n) => linkVariable(\"bottom\", n)}\n onUnlink={() => unlinkVariable(\"bottom\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Left inset\"\n icon={\n <span className={cn(panelChrome.muted, panelChrome.body, \"w-3 shrink-0 text-center leading-[15.6px]\")} aria-hidden>\n L\n </span>\n }\n value={displayInset(snapshot.left)}\n onChange={(raw) => onChange(\"left\", commitInsetInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"left\"\n linkedVar={variableLinks.get(\"left\") ?? null}\n onLink={(n) => linkVariable(\"left\", n)}\n onUnlink={() => unlinkVariable(\"left\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n ) : null}\n </section>\n\n {/* Layout */}\n <section className=\"flex flex-col gap-3\">\n <SectionHeaderWithReset\n hasChange={layoutHasChange}\n onReset={() => {\n for (const k of LAYOUT_RESET_KEYS) {\n if (hasChange(k)) onReset(k);\n }\n }}\n >\n Layout\n </SectionHeaderWithReset>\n\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Flow</PanelSubsectionTitle>\n <PanelFlowRow value={flowMode} onChange={(m) => applyFlowMode(m, onChange)} />\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <PanelSubsectionTitle>Dimensions</PanelSubsectionTitle>\n <div className=\"flex w-full gap-2\">\n <PanelSizingAxis\n label=\"W\"\n mode={widthMode}\n modeTriggerLabel={widthMode === \"fixed\" ? \"\" : sizingModeTriggerLabel(widthMode)}\n modeOptions={SIZING_MODE_OPTIONS}\n onModeChange={(m) => {\n const mode = m as SizingMode;\n if (mode === \"fixed\") {\n const cur = detectSizingMode(snapshot.width, \"width\", effectiveWidthSpecified);\n const prev = cur === \"fixed\" ? snapshot.width : `${Math.round(Number.parseFloat(snapshot.width) || 120)}px`;\n onChange(\"width\", modeToCss(\"fixed\", \"width\", prev));\n } else onChange(\"width\", modeToCss(mode, \"width\", \"\"));\n }}\n showFixedInput={widthMode === \"fixed\"}\n fixedDisplayValue={stripPxForNumberField(snapshot.width)}\n onFixedCommit={(v) => onChange(\"width\", v)}\n commitRawToCss={commitFixedDimension}\n fixedAriaLabel=\"Width value\"\n />\n <PanelSizingAxis\n label=\"H\"\n mode={heightMode}\n modeTriggerLabel={heightMode === \"fixed\" ? \"\" : sizingModeTriggerLabel(heightMode)}\n modeOptions={SIZING_MODE_OPTIONS}\n onModeChange={(m) => {\n const mode = m as SizingMode;\n if (mode === \"fixed\") {\n const cur = detectSizingMode(snapshot.height, \"height\", effectiveHeightSpecified);\n const prev = cur === \"fixed\" ? snapshot.height : `${Math.round(Number.parseFloat(snapshot.height) || 48)}px`;\n onChange(\"height\", modeToCss(\"fixed\", \"height\", prev));\n } else onChange(\"height\", modeToCss(mode, \"height\", \"\"));\n }}\n showFixedInput={heightMode === \"fixed\"}\n fixedDisplayValue={stripPxForNumberField(snapshot.height)}\n onFixedCommit={(v) => onChange(\"height\", v)}\n commitRawToCss={commitFixedDimension}\n fixedAriaLabel=\"Height value\"\n />\n </div>\n {(hasChange(\"width\") || hasChange(\"height\")) && (\n <div className=\"flex flex-wrap gap-2\">\n {hasChange(\"width\") && (\n <button type=\"button\" className={cn(panelChrome.muted, panelChrome.body, \"hover:text-[#D9D9D9]\")} onClick={() => onReset(\"width\")}>\n Reset W\n </button>\n )}\n {hasChange(\"height\") && (\n <button type=\"button\" className={cn(panelChrome.muted, panelChrome.body, \"hover:text-[#D9D9D9]\")} onClick={() => onReset(\"height\")}>\n Reset H\n </button>\n )}\n </div>\n )}\n </div>\n\n {(flowMode === \"flex-column\" || flowMode === \"flex-row\") && (\n <div className=\"flex items-start gap-3\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <PanelSubsectionTitle>Align items</PanelSubsectionTitle>\n <PanelAlignmentGrid\n justifyContent={snapshot.justifyContent}\n alignItems={snapshot.alignItems}\n onJustifyChange={(v) => onChange(\"justifyContent\", v)}\n onAlignChange={(v) => onChange(\"alignItems\", v)}\n onCellDoubleClick={justifyFlexMainAxisSpaceBetween}\n />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <PanelSubsectionTitle>Gap</PanelSubsectionTitle>\n <div className=\"flex min-w-0 items-stretch\">\n <PanelIconField\n commitOnBlur\n scrubMode=\"px\"\n icon={<Rows3 className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n ariaLabel=\"Gap\"\n value={displayGap(snapshot.gap)}\n onChange={(v) => {\n const t = v.trim();\n if (t === \"\" || t === \"0\") {\n onChange(\"gap\", \"0px\");\n return;\n }\n onChange(\"gap\", /^[\\d.]+$/.test(t) ? `${t}px` : t);\n }}\n suffix=\"px\"\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"gap\"\n linkedVar={variableLinks.get(\"gap\") ?? null}\n onLink={(n) => linkVariable(\"gap\", n)}\n onUnlink={() => unlinkVariable(\"gap\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n </div>\n )}\n\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <PanelSubsectionTitle>Padding</PanelSubsectionTitle>\n <PanelTooltip text={paddingExpanded ? \"Link vertical & horizontal padding\" : \"Edit padding per side\"}>\n <button\n type=\"button\"\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n aria-label={paddingExpanded ? \"Link padding\" : \"Expand padding sides\"}\n onClick={() => setPaddingExpanded((e) => !e)}\n >\n <SquareSquare className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />\n </button>\n </PanelTooltip>\n </div>\n {paddingExpanded ? (\n <div className=\"grid grid-cols-2 gap-2\">\n <PanelLabeledMini\n label=\"T\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.paddingTop)}\n onChange={(raw) => onChange(\"paddingTop\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding-top\"\n linkedVar={variableLinks.get(\"paddingTop\") ?? null}\n onLink={(n) => linkVariable(\"paddingTop\", n)}\n onUnlink={() => unlinkVariable(\"paddingTop\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"R\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.paddingRight)}\n onChange={(raw) => onChange(\"paddingRight\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding-right\"\n linkedVar={variableLinks.get(\"paddingRight\") ?? null}\n onLink={(n) => linkVariable(\"paddingRight\", n)}\n onUnlink={() => unlinkVariable(\"paddingRight\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"B\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.paddingBottom)}\n onChange={(raw) => onChange(\"paddingBottom\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding-bottom\"\n linkedVar={variableLinks.get(\"paddingBottom\") ?? null}\n onLink={(n) => linkVariable(\"paddingBottom\", n)}\n onUnlink={() => unlinkVariable(\"paddingBottom\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"L\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.paddingLeft)}\n onChange={(raw) => onChange(\"paddingLeft\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding-left\"\n linkedVar={variableLinks.get(\"paddingLeft\") ?? null}\n onLink={(n) => linkVariable(\"paddingLeft\", n)}\n onUnlink={() => unlinkVariable(\"paddingLeft\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n ) : (\n <div className=\"flex gap-2\">\n <PanelIconField\n scrubMode=\"px\"\n commitOnBlur\n ariaLabel=\"Padding vertical\"\n icon={<AlignVerticalSpaceAround className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={padLinked.v}\n onChange={(raw) => {\n const v = parsePxInput(raw);\n const h = parsePxInput(padLinked.h);\n onChange(\"padding\", `${v} ${h}`);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding\"\n linkedVar={variableLinks.get(\"padding\") ?? null}\n onLink={(n) => linkVariable(\"padding\", n)}\n onUnlink={() => unlinkVariable(\"padding\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelIconField\n scrubMode=\"px\"\n commitOnBlur\n ariaLabel=\"Padding horizontal\"\n icon={<AlignHorizontalSpaceAround className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={padLinked.h}\n onChange={(raw) => {\n const h = parsePxInput(raw);\n const v = parsePxInput(padLinked.v);\n onChange(\"padding\", `${v} ${h}`);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"padding\"\n linkedVar={variableLinks.get(\"padding\") ?? null}\n onLink={(n) => linkVariable(\"padding\", n)}\n onUnlink={() => unlinkVariable(\"padding\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n )}\n </div>\n\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <PanelSubsectionTitle>Margin</PanelSubsectionTitle>\n <PanelTooltip text={marginExpanded ? \"Link vertical & horizontal margin\" : \"Edit margin per side\"}>\n <button\n type=\"button\"\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n aria-label={marginExpanded ? \"Link margin\" : \"Expand margin sides\"}\n onClick={() => setMarginExpanded((e) => !e)}\n >\n <SquareSquare className=\"size-[14px] text-[#D9D9D9]\" strokeWidth={2} aria-hidden />\n </button>\n </PanelTooltip>\n </div>\n {marginExpanded ? (\n <div className=\"grid grid-cols-2 gap-2\">\n <PanelLabeledMini\n label=\"T\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.marginTop)}\n onChange={(raw) => onChange(\"marginTop\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin-top\"\n linkedVar={variableLinks.get(\"marginTop\") ?? null}\n onLink={(n) => linkVariable(\"marginTop\", n)}\n onUnlink={() => unlinkVariable(\"marginTop\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"R\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.marginRight)}\n onChange={(raw) => onChange(\"marginRight\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin-right\"\n linkedVar={variableLinks.get(\"marginRight\") ?? null}\n onLink={(n) => linkVariable(\"marginRight\", n)}\n onUnlink={() => unlinkVariable(\"marginRight\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"B\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.marginBottom)}\n onChange={(raw) => onChange(\"marginBottom\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin-bottom\"\n linkedVar={variableLinks.get(\"marginBottom\") ?? null}\n onLink={(n) => linkVariable(\"marginBottom\", n)}\n onUnlink={() => unlinkVariable(\"marginBottom\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelLabeledMini\n label=\"L\"\n scrubMode=\"px\"\n commitOnBlur\n value={formatPxDisplay(snapshot.marginLeft)}\n onChange={(raw) => onChange(\"marginLeft\", parsePxInput(raw))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin-left\"\n linkedVar={variableLinks.get(\"marginLeft\") ?? null}\n onLink={(n) => linkVariable(\"marginLeft\", n)}\n onUnlink={() => unlinkVariable(\"marginLeft\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n ) : (\n <div className=\"flex gap-2\">\n <PanelIconField\n scrubMode=\"px\"\n commitOnBlur\n ariaLabel=\"Margin vertical\"\n icon={<AlignVerticalSpaceAround className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={marginLinked.v}\n onChange={(raw) => {\n const v = parsePxInput(raw);\n const h = parsePxInput(marginLinked.h);\n onChange(\"margin\", `${v} ${h}`);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin\"\n linkedVar={variableLinks.get(\"margin\") ?? null}\n onLink={(n) => linkVariable(\"margin\", n)}\n onUnlink={() => unlinkVariable(\"margin\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <PanelIconField\n scrubMode=\"px\"\n commitOnBlur\n ariaLabel=\"Margin horizontal\"\n icon={<AlignHorizontalSpaceAround className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={marginLinked.h}\n onChange={(raw) => {\n const h = parsePxInput(raw);\n const v = parsePxInput(marginLinked.v);\n onChange(\"margin\", `${v} ${h}`);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"margin\"\n linkedVar={variableLinks.get(\"margin\") ?? null}\n onLink={(n) => linkVariable(\"margin\", n)}\n onUnlink={() => unlinkVariable(\"margin\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n )}\n </div>\n\n </section>\n\n {/* Text — hidden for replaced / non-text controls (img, video, checkbox inputs, SVG, …). */}\n {supportsTypography ? (\n <section className=\"flex flex-col gap-2\">\n <SectionHeaderWithReset\n hasChange={TEXT_RESET_KEYS.some((k) => hasChange(k))}\n onReset={() => {\n for (const k of TEXT_RESET_KEYS) {\n if (hasChange(k)) onReset(k);\n }\n }}\n >\n Text\n </SectionHeaderWithReset>\n <PanelSelect\n value={fontSelectValue}\n onChange={(v) => {\n const opt = fontOptions.find((o) => o.value === v);\n onChange(\"fontFamily\", opt?.applyCss ?? fontFamilyApplyCss(v));\n }}\n options={fontOptions.map((f) => ({ value: f.value, label: f.label }))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"font-family\"\n linkedVar={variableLinks.get(\"fontFamily\") ?? null}\n onLink={(n) => linkVariable(\"fontFamily\", n)}\n onUnlink={() => unlinkVariable(\"fontFamily\")}\n compact\n revealOnFieldHover\n />\n }\n />\n <div className=\"flex gap-2\">\n <PanelSelect\n value={snapshot.fontWeight}\n onChange={(v) => onChange(\"fontWeight\", v)}\n options={weightOptions.map((o) => ({ value: o.value, label: o.label }))}\n />\n <div className=\"min-w-0 flex-1\">\n <PanelTextInput\n commitOnBlur\n ariaLabel=\"Font size\"\n value={stripPxForNumberField(snapshot.fontSize)}\n onChange={(v) => {\n const t = v.trim();\n if (t === \"\") return;\n onChange(\"fontSize\", ensurePxSize(t));\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"font-size\"\n linkedVar={variableLinks.get(\"fontSize\") ?? null}\n onLink={(n) => linkVariable(\"fontSize\", n)}\n onUnlink={() => unlinkVariable(\"fontSize\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n <div className=\"flex gap-2\">\n <div className=\"min-w-0 flex-1\">\n <PanelIconField\n commitOnBlur\n scrubMode=\"unitless\"\n ariaLabel=\"Line height\"\n icon={<ArrowUpDown className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={stripPxForNumberField(snapshot.lineHeight)}\n onChange={(v) => onChange(\"lineHeight\", normalizeLineHeightForCss(v))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"line-height\"\n linkedVar={variableLinks.get(\"lineHeight\") ?? null}\n onLink={(n) => linkVariable(\"lineHeight\", n)}\n onUnlink={() => unlinkVariable(\"lineHeight\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n <div className=\"min-w-0 flex-1\">\n <PanelIconField\n commitOnBlur\n scrubMode=\"px\"\n ariaLabel=\"Letter spacing\"\n icon={<ArrowLeftRight className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={letterDisplay}\n onChange={(v) => onChange(\"letterSpacing\", normalizeLetterSpacingForCss(v))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"letter-spacing\"\n linkedVar={variableLinks.get(\"letterSpacing\") ?? null}\n onLink={(n) => linkVariable(\"letterSpacing\", n)}\n onUnlink={() => unlinkVariable(\"letterSpacing\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n <div className=\"flex gap-2\">\n <PanelToggleGroup\n value={textToggleValue}\n onChange={(v) => onChange(\"textAlign\", v)}\n options={[\n { value: \"left\", title: \"Align text left\", icon: <AlignLeft className={panelChrome.icon} strokeWidth={2} /> },\n { value: \"center\", title: \"Align text center\", icon: <AlignCenter className={panelChrome.icon} strokeWidth={2} /> },\n { value: \"right\", title: \"Align text right\", icon: <AlignRight className={panelChrome.icon} strokeWidth={2} /> },\n ]}\n />\n <PanelToggleGroup\n value={vAlign}\n onChange={(p) => onChange(\"alignItems\", verticalAlignToCssAlignItems(p))}\n options={[\n { value: \"top\", title: \"Align items to start (cross axis)\", icon: <ArrowUpToLine className={panelChrome.icon} strokeWidth={2} /> },\n { value: \"middle\", title: \"Align items to center (cross axis)\", icon: <FoldVertical className={panelChrome.icon} strokeWidth={2} /> },\n { value: \"bottom\", title: \"Align items to end (cross axis)\", icon: <ArrowDownToLine className={panelChrome.icon} strokeWidth={2} /> },\n ]}\n />\n </div>\n <PanelSwatchRow\n hexNoHash={textColorParts.hex}\n opacityPct={textColorParts.opacityPct}\n swatchBackground={snapshot.color}\n onHexChange={(hex) => onChange(\"color\", buildCssFromHexOpacity(hex, textColorParts.opacityPct))}\n onOpacityPctChange={(pct) => onChange(\"color\", buildCssFromHexOpacity(textColorParts.hex, pct))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"color\"\n linkedVar={variableLinks.get(\"color\") ?? null}\n onLink={(n) => linkVariable(\"color\", n)}\n onUnlink={() => unlinkVariable(\"color\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </section>\n ) : null}\n\n {/* Appearance */}\n <section className=\"flex flex-col gap-2\">\n <SectionHeaderWithReset\n hasChange={hasChange(\"opacity\") || hasChange(\"borderRadius\")}\n onReset={() => {\n if (hasChange(\"opacity\")) onReset(\"opacity\");\n if (hasChange(\"borderRadius\")) onReset(\"borderRadius\");\n }}\n >\n Appearance\n </SectionHeaderWithReset>\n <div className=\"flex gap-2\">\n <div className=\"min-w-0 flex-1\">\n <PanelIconField\n ariaLabel=\"Opacity\"\n commitOnBlur\n scrubMode=\"percent\"\n icon={<SunDim className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={opacityDisplay}\n onChange={(raw) => {\n const n = Number.parseFloat(raw.replace(/%/g, \"\").trim());\n if (!Number.isNaN(n)) onChange(\"opacity\", String(Math.min(1, Math.max(0, n / 100))));\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"opacity\"\n linkedVar={variableLinks.get(\"opacity\") ?? null}\n onLink={(n) => linkVariable(\"opacity\", n)}\n onUnlink={() => unlinkVariable(\"opacity\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n <div className=\"min-w-0 flex-1\">\n <PanelIconField\n ariaLabel=\"Corner radius\"\n commitOnBlur\n scrubMode=\"px\"\n icon={<CornerRadiusIcon className={panelChrome.icon} />}\n value={stripPxForNumberField(snapshot.borderRadius)}\n onChange={(v) => {\n const t = v.trim();\n if (t === \"\") return;\n onChange(\"borderRadius\", /^[\\d.]+$/.test(t) ? `${t}px` : v);\n }}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"border-radius\"\n linkedVar={variableLinks.get(\"borderRadius\") ?? null}\n onLink={(n) => linkVariable(\"borderRadius\", n)}\n onUnlink={() => unlinkVariable(\"borderRadius\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n </div>\n </section>\n\n {/* Background + Border + Shadow: one `gap-2` stack. No `<section>` around the header row — it added uneven block spacing vs `OnDemandSectionButton` siblings. */}\n <div className=\"flex flex-col gap-2\">\n {hasFill ? (\n <div className=\"flex flex-col gap-2\">\n <SectionHeaderWithReset\n hasChange={fillHasPendingChange}\n titleTone=\"muted\"\n onReset={() => {\n if (hasChange(\"backgroundColor\")) onReset(\"backgroundColor\");\n if (hasChange(\"backgroundImage\")) onReset(\"backgroundImage\");\n }}\n trailing={\n <PanelTooltip text=\"Remove background\">\n <button\n type=\"button\"\n title=\"Remove background\"\n aria-label=\"Remove background\"\n onClick={handleRemoveFill}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Minus className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n </PanelTooltip>\n }\n >\n Background\n </SectionHeaderWithReset>\n <PanelSwatchRow\n hexNoHash={fillParts.hex}\n opacityPct={fillParts.opacityPct}\n swatchBackground={snapshot.backgroundColor}\n onHexChange={(hex) => onChange(\"backgroundColor\", buildCssFromHexOpacity(hex, fillParts.opacityPct))}\n onOpacityPctChange={(pct) => onChange(\"backgroundColor\", buildCssFromHexOpacity(fillParts.hex, pct))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"background-color\"\n linkedVar={variableLinks.get(\"backgroundColor\") ?? null}\n onLink={(n) => linkVariable(\"backgroundColor\", n)}\n onUnlink={() => unlinkVariable(\"backgroundColor\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n ) : (\n <SectionHeaderWithReset\n hasChange={fillHasPendingChange}\n titleTone=\"muted\"\n onReset={() => {\n if (hasChange(\"backgroundColor\")) onReset(\"backgroundColor\");\n if (hasChange(\"backgroundImage\")) onReset(\"backgroundImage\");\n }}\n trailing={\n <div className=\"group flex items-center gap-1\">\n <PanelVariableAffix\n cssPropertyKebab=\"background-color\"\n linkedVar={variableLinks.get(\"backgroundColor\") ?? null}\n onLink={(n) => linkVariable(\"backgroundColor\", n)}\n onUnlink={() => unlinkVariable(\"backgroundColor\")}\n compact\n revealOnFieldHover\n />\n <PanelTooltip text=\"Add background\">\n <button\n type=\"button\"\n title=\"Add background\"\n aria-label=\"Add background\"\n onClick={handleAddFill}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Plus className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n </PanelTooltip>\n </div>\n }\n >\n Background\n </SectionHeaderWithReset>\n )}\n\n {/* Border (on-demand, renders in place) */}\n {showBorderSection ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex w-full items-center justify-between gap-2 py-1\">\n <PanelSectionTitle tone=\"muted\">Border</PanelSectionTitle>\n <div className=\"flex items-center gap-1\">\n {(hasChange(\"borderTopWidth\") ||\n hasChange(\"borderRightWidth\") ||\n hasChange(\"borderBottomWidth\") ||\n hasChange(\"borderLeftWidth\") ||\n hasChange(\"borderColor\") ||\n hasChange(\"borderStyle\")) && (\n <button\n type=\"button\"\n className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 hover:text-[#D9D9D9]\")}\n onClick={() => {\n for (const k of [\"borderTopWidth\", \"borderRightWidth\", \"borderBottomWidth\", \"borderLeftWidth\", \"borderColor\", \"borderStyle\"] as const) {\n if (hasChange(k)) onReset(k);\n }\n }}\n >\n Reset\n </button>\n )}\n <button\n type=\"button\"\n title=\"Toggle border visibility\"\n aria-label=\"Toggle border visibility\"\n onClick={() => {\n const hasVisibleBorder = snapshot.borderStyle !== \"none\" && Number.parseFloat(snapshot.borderTopWidth) > 0;\n if (hasVisibleBorder) {\n onChange(\"borderStyle\", \"none\");\n } else {\n onChange(\"borderStyle\", \"solid\");\n if (Number.parseFloat(snapshot.borderTopWidth) === 0) {\n onChange(\"borderTopWidth\", \"1px\");\n onChange(\"borderRightWidth\", \"1px\");\n onChange(\"borderBottomWidth\", \"1px\");\n onChange(\"borderLeftWidth\", \"1px\");\n }\n }\n }}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Eye className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n <button\n type=\"button\"\n title=\"Remove border controls\"\n aria-label=\"Remove border section\"\n onClick={() => setShowBorderSection(false)}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Minus className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <PanelIconField\n commitOnBlur\n ariaLabel=\"Border width\"\n icon={<Ruler className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={getBorderWidthDisplay()}\n onChange={setBorderWidthFromInput}\n />\n <PanelSelect\n ariaLabel=\"Border side\"\n icon={<SquareDashed className={panelChrome.icon} strokeWidth={2} aria-hidden />}\n value={borderSide}\n onChange={(v) => setBorderSide(v as BorderSide)}\n options={[\n { value: \"all\", label: \"All\" },\n { value: \"top\", label: \"Top\" },\n { value: \"right\", label: \"Right\" },\n { value: \"bottom\", label: \"Bottom\" },\n { value: \"left\", label: \"Left\" },\n ]}\n />\n </div>\n <PanelSwatchRow\n hexNoHash={borderColorParts.hex}\n opacityPct={borderColorParts.opacityPct}\n swatchBackground={snapshot.borderColor}\n onHexChange={(hex) => onChange(\"borderColor\", buildCssFromHexOpacity(hex, borderColorParts.opacityPct))}\n onOpacityPctChange={(pct) => onChange(\"borderColor\", buildCssFromHexOpacity(borderColorParts.hex, pct))}\n hoverVariableSlot={\n <PanelVariableAffix\n cssPropertyKebab=\"border-color\"\n linkedVar={variableLinks.get(\"borderColor\") ?? null}\n onLink={(n) => linkVariable(\"borderColor\", n)}\n onUnlink={() => unlinkVariable(\"borderColor\")}\n compact\n revealOnFieldHover\n />\n }\n />\n </div>\n ) : (\n <OnDemandSectionButton label=\"Border\" onClick={() => setShowBorderSection(true)} />\n )}\n\n {/* Shadow & Blur (on-demand, renders in place) */}\n {showShadowSection ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex w-full items-center justify-between gap-2 py-1\">\n <PanelSectionTitle tone=\"muted\">Shadow & Blur</PanelSectionTitle>\n <div className=\"flex items-center gap-1\">\n {hasChange(\"boxShadow\") && (\n <button type=\"button\" className={cn(panelChrome.muted, panelChrome.body, \"shrink-0 hover:text-[#D9D9D9]\")} onClick={() => onReset(\"boxShadow\")}>\n Reset\n </button>\n )}\n <button\n type=\"button\"\n title=\"Remove shadow controls\"\n aria-label=\"Remove shadow section\"\n onClick={() => setShowShadowSection(false)}\n className={cn(panelChrome.muted, \"rounded-small p-1 transition-colors hover:bg-[#2a2a2a] hover:text-[#D9D9D9]\")}\n >\n <Minus className=\"size-[14px]\" strokeWidth={2} aria-hidden />\n </button>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <PanelLabeledMini\n label=\"X\"\n scrubMode=\"px\"\n commitOnBlur\n value={shadowParts.offsetX}\n onChange={(v) => updateShadow({ offsetX: normalizeShadowLength(v) })}\n />\n <PanelLabeledMini\n label=\"Y\"\n scrubMode=\"px\"\n commitOnBlur\n value={shadowParts.offsetY}\n onChange={(v) => updateShadow({ offsetY: normalizeShadowLength(v) })}\n />\n <PanelLabeledMini\n label=\"B\"\n scrubMode=\"px\"\n commitOnBlur\n value={shadowParts.blur}\n onChange={(v) => updateShadow({ blur: normalizeShadowLength(v) })}\n />\n <PanelLabeledMini\n label=\"S\"\n scrubMode=\"px\"\n commitOnBlur\n value={shadowParts.spread}\n onChange={(v) => updateShadow({ spread: normalizeShadowLength(v) })}\n />\n </div>\n <PanelSwatchRow\n hexNoHash={shadowColorParts.hex}\n opacityPct={shadowColorParts.opacityPct}\n swatchBackground={shadowParts.color}\n onHexChange={(hex) => updateShadow({ color: buildCssFromHexOpacity(hex, shadowColorParts.opacityPct) })}\n onOpacityPctChange={(pct) => updateShadow({ color: buildCssFromHexOpacity(shadowColorParts.hex, pct) })}\n />\n </div>\n ) : (\n <OnDemandSectionButton label=\"Shadow & Blur\" onClick={() => setShowShadowSection(true)} />\n )}\n </div>\n </div>\n );\n}\n","import { finder } from \"@medv/finder\";\n\nfunction buildFallbackSelector(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n\n while (current && current !== document.body) {\n let part = current.tagName.toLowerCase();\n if (current.id) {\n parts.unshift(`#${current.id}`);\n break;\n }\n const parent = current.parentElement;\n if (parent) {\n const siblings = Array.from(parent.children).filter((c) => c.tagName === current!.tagName);\n if (siblings.length > 1) {\n const index = siblings.indexOf(current) + 1;\n part += `:nth-of-type(${index})`;\n }\n }\n parts.unshift(part);\n current = parent;\n }\n\n return parts.join(\" > \");\n}\n\n/** Unique selector for structural copy (CSS selector via `@medv/finder` + fallback). */\nexport function getDragReorderSelector(element: Element): string {\n try {\n return finder(element, {\n root: document.body,\n className: (name: string) => {\n if (name.startsWith(\"_\") || name.startsWith(\"css-\")) return false;\n if (/^[a-z]{1,3}[A-Za-z0-9_]{8,}$/.test(name)) return false;\n return true;\n },\n seedMinLength: 1,\n optimizedMinLength: 2,\n threshold: 1000,\n });\n } catch {\n return buildFallbackSelector(element);\n }\n}\n","/** React fiber helpers for drag reorder detection (array vs static child heuristics). */\n\nexport function getFiber(element: Element): unknown {\n const key = Object.keys(element).find((k) => k.startsWith(\"__reactFiber$\"));\n return key ? (element as Record<string, unknown>)[key] : null;\n}\n\nfunction isFrameworkInternal(name: string): boolean {\n if (name.startsWith(\"_\")) return true;\n if (/^(Fragment|Suspense|StrictMode|Profiler|Lazy|Memo|Forward)/.test(name)) return true;\n if (/(?:Provider|Consumer|Context|Boundary|Handler|Root|Wrapper)$/.test(name)) return true;\n if (/(?:Router|Layout|Template|Loading|Segment|Fallback|Reload|Manager|Metadata|Viewport|Head|Script|Link)/.test(name))\n return true;\n if (/^(Home|App|Page|Main|Index|Default|View|Screen|Dashboard|Root)$/.test(name)) return true;\n if (name.length <= 2) return true;\n return false;\n}\n\nexport function getReactComponentHierarchy(element: Element): string[] {\n const fiber = getFiber(element) as {\n type?: unknown;\n elementType?: { displayName?: string; name?: string };\n return?: unknown;\n } | null;\n if (!fiber) return [];\n\n const components: string[] = [];\n let current: typeof fiber = fiber;\n\n while (current) {\n const t = current.type;\n if (typeof t === \"function\" || typeof t === \"object\") {\n const rec = t as { displayName?: string; name?: string };\n const name =\n rec?.displayName ||\n rec?.name ||\n (current.elementType as { displayName?: string; name?: string } | undefined)?.displayName ||\n (current.elementType as { displayName?: string; name?: string } | undefined)?.name;\n if (name && !isFrameworkInternal(name)) components.push(name);\n }\n current = current.return as typeof fiber;\n }\n\n return components;\n}\n\nexport function getReactSource(element: Element): {\n fileName: string;\n lineNumber: number;\n columnNumber?: number;\n} | null {\n const fiber = getFiber(element) as {\n _debugSource?: { fileName: string; lineNumber: number; columnNumber?: number };\n _debugOwner?: { _debugSource?: { fileName: string; lineNumber: number; columnNumber?: number } };\n return?: unknown;\n } | null;\n if (!fiber) return null;\n\n let current: typeof fiber = fiber;\n while (current) {\n if (current._debugSource) {\n return {\n fileName: current._debugSource.fileName,\n lineNumber: current._debugSource.lineNumber,\n columnNumber: current._debugSource.columnNumber,\n };\n }\n if (current._debugOwner?._debugSource) {\n return {\n fileName: current._debugOwner._debugSource.fileName,\n lineNumber: current._debugOwner._debugSource.lineNumber,\n columnNumber: current._debugOwner._debugSource.columnNumber,\n };\n }\n current = current.return as typeof fiber;\n }\n\n return null;\n}\n","/**\n * Drag-to-reorder: pointer handling, ghost, drop indicator, DOM insertBefore.\n * Visuals mount on `document.body` so they sit below the Flux panel (z-index 9999).\n */\n\nimport type { FluxStructuralReorder, ReorderableContainer, ReorderChild } from \"./drag-reorder-types\";\nimport { getDragReorderSelector } from \"./drag-reorder-selector\";\nimport { getReactComponentHierarchy } from \"./drag-reorder-fiber\";\n\nconst DRAG_THRESHOLD = 5;\nconst FLUX_DRAG_Z = 9998;\n\nexport interface ReorderCallbacks {\n onDragStart: () => void;\n onDragCancel: () => void;\n onReorder: (change: FluxStructuralReorder) => void;\n}\n\ninterface DragState {\n draggedChild: ReorderChild;\n container: ReorderableContainer;\n startX: number;\n startY: number;\n ghost: HTMLElement;\n indicator: HTMLElement;\n dropIndex: number;\n horizontal: boolean;\n active: boolean;\n}\n\nexport function createReorderController(\n callbacks: ReorderCallbacks,\n options?: { mountRoot?: ParentNode },\n): { startDrag: (child: ReorderChild, container: ReorderableContainer, startX: number, startY: number) => void; destroy: () => void } {\n let state: DragState | null = null;\n const mountRoot = options?.mountRoot ?? document.body;\n\n function startDrag(child: ReorderChild, container: ReorderableContainer, startX: number, startY: number) {\n const computed = getComputedStyle(container.container);\n const direction = computed.flexDirection;\n const horizontal =\n direction === \"row\" || direction === \"row-reverse\" || container.layout === \"grid\";\n\n const ghost = document.createElement(\"div\");\n ghost.setAttribute(\"data-flux-drag-ghost\", \"\");\n ghost.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: ${FLUX_DRAG_Z};\n opacity: 0.85;\n border-radius: 8px;\n border: 2px solid #3b82f6;\n background: rgba(59, 130, 246, 0.08);\n transition: none;\n display: none;\n `;\n const rect = child.element.getBoundingClientRect();\n ghost.style.width = `${rect.width}px`;\n ghost.style.height = `${rect.height}px`;\n mountRoot.appendChild(ghost);\n\n const indicator = document.createElement(\"div\");\n indicator.setAttribute(\"data-flux-drop-indicator\", \"\");\n indicator.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: ${FLUX_DRAG_Z};\n background: #3b82f6;\n border-radius: 2px;\n display: none;\n `;\n if (horizontal) {\n indicator.style.width = \"3px\";\n indicator.style.height = `${rect.height}px`;\n } else {\n indicator.style.height = \"3px\";\n indicator.style.width = `${rect.width}px`;\n }\n mountRoot.appendChild(indicator);\n\n state = {\n draggedChild: child,\n container,\n startX,\n startY,\n ghost,\n indicator,\n dropIndex: child.index,\n horizontal,\n active: false,\n };\n\n document.addEventListener(\"pointermove\", handlePointerMove, true);\n document.addEventListener(\"pointerup\", handlePointerUp, true);\n document.addEventListener(\"pointercancel\", handlePointerUp, true);\n }\n\n function handlePointerMove(e: PointerEvent) {\n if (!state) return;\n e.preventDefault();\n e.stopPropagation();\n\n const dx = e.clientX - state.startX;\n const dy = e.clientY - state.startY;\n\n if (!state.active) {\n if (Math.abs(dx) + Math.abs(dy) < DRAG_THRESHOLD) return;\n state.active = true;\n state.ghost.style.display = \"\";\n callbacks.onDragStart();\n (state.draggedChild.element as HTMLElement).style.opacity = \"0.3\";\n }\n\n const rect = state.draggedChild.element.getBoundingClientRect();\n state.ghost.style.left = `${rect.left + dx}px`;\n state.ghost.style.top = `${rect.top + dy}px`;\n\n const children = state.container.children;\n let newDropIndex = state.draggedChild.index;\n\n for (let i = 0; i < children.length; i++) {\n if (i === state.draggedChild.index) continue;\n const childRect = children[i].element.getBoundingClientRect();\n const midX = childRect.left + childRect.width / 2;\n const midY = childRect.top + childRect.height / 2;\n\n if (state.horizontal) {\n if (e.clientX < midX && i < state.draggedChild.index) {\n newDropIndex = i;\n break;\n }\n if (e.clientX > midX && i > state.draggedChild.index) {\n newDropIndex = i;\n }\n } else {\n if (e.clientY < midY && i < state.draggedChild.index) {\n newDropIndex = i;\n break;\n }\n if (e.clientY > midY && i > state.draggedChild.index) {\n newDropIndex = i;\n }\n }\n }\n\n state.dropIndex = newDropIndex;\n\n if (newDropIndex !== state.draggedChild.index) {\n state.indicator.style.display = \"\";\n const targetChild = children[newDropIndex];\n const targetRect = targetChild.element.getBoundingClientRect();\n\n if (state.horizontal) {\n const x = newDropIndex < state.draggedChild.index ? targetRect.left - 3 : targetRect.right;\n state.indicator.style.left = `${x}px`;\n state.indicator.style.top = `${targetRect.top}px`;\n state.indicator.style.height = `${targetRect.height}px`;\n } else {\n const y = newDropIndex < state.draggedChild.index ? targetRect.top - 3 : targetRect.bottom;\n state.indicator.style.left = `${targetRect.left}px`;\n state.indicator.style.top = `${y}px`;\n state.indicator.style.width = `${targetRect.width}px`;\n }\n } else {\n state.indicator.style.display = \"none\";\n }\n }\n\n function handlePointerUp(e: PointerEvent) {\n if (!state) return;\n e.preventDefault();\n e.stopPropagation();\n\n document.removeEventListener(\"pointermove\", handlePointerMove, true);\n document.removeEventListener(\"pointerup\", handlePointerUp, true);\n document.removeEventListener(\"pointercancel\", handlePointerUp, true);\n\n (state.draggedChild.element as HTMLElement).style.opacity = \"\";\n state.ghost.remove();\n state.indicator.remove();\n\n if (!state.active || state.dropIndex === state.draggedChild.index) {\n state = null;\n callbacks.onDragCancel();\n return;\n }\n\n const containerInfo = state.container;\n const originalOrder = containerInfo.children.map((c) => c.label);\n\n const newChildren = [...containerInfo.children];\n const [moved] = newChildren.splice(state.draggedChild.index, 1);\n newChildren.splice(state.dropIndex, 0, moved);\n const newOrder = newChildren.map((c) => c.label);\n\n const draggedEl = state.draggedChild.element;\n const targetEl = containerInfo.children[state.dropIndex].element;\n if (state.dropIndex < state.draggedChild.index) {\n containerInfo.container.insertBefore(draggedEl, targetEl);\n } else {\n const nextSibling = targetEl.nextElementSibling;\n if (nextSibling) {\n containerInfo.container.insertBefore(draggedEl, nextSibling);\n } else {\n containerInfo.container.appendChild(draggedEl);\n }\n }\n\n const childSources =\n containerInfo.childrenType === \"static\"\n ? containerInfo.children\n .filter((c) => c.sourceFile)\n .map((c) => ({\n label: c.label,\n sourceFile: c.sourceFile!,\n }))\n : undefined;\n\n const change: FluxStructuralReorder = {\n type: \"reorder\",\n containerSelector: getDragReorderSelector(containerInfo.container),\n containerComponents: getReactComponentHierarchy(containerInfo.container),\n containerSourceFile: containerInfo.sourceFile,\n childrenType: containerInfo.childrenType,\n originalOrder,\n newOrder,\n childSources,\n timestamp: Date.now(),\n };\n\n state = null;\n callbacks.onReorder(change);\n }\n\n function destroy() {\n if (state) {\n (state.draggedChild.element as HTMLElement).style.opacity = \"\";\n state.ghost.remove();\n state.indicator.remove();\n document.removeEventListener(\"pointermove\", handlePointerMove, true);\n document.removeEventListener(\"pointerup\", handlePointerUp, true);\n document.removeEventListener(\"pointercancel\", handlePointerUp, true);\n state = null;\n }\n }\n\n return { startDrag, destroy };\n}\n","/**\n * Detects flex/grid parents with 2+ visible children and classifies array vs static children.\n */\n\nimport type { ReorderableContainer, ReorderChild } from \"./drag-reorder-types\";\nimport { getFiber, getReactSource } from \"./drag-reorder-fiber\";\n\nfunction getDirectText(el: Element): string {\n const parts: string[] = [];\n for (const node of el.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.trim();\n if (text) parts.push(text);\n }\n }\n if (parts.length === 0 && el.children.length > 0) {\n const first = el.children[0];\n for (const node of first.childNodes) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent?.trim();\n if (text) {\n parts.push(text);\n break;\n }\n }\n }\n }\n return parts.join(\" \").slice(0, 40);\n}\n\nfunction getChildLabel(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const text = getDirectText(el);\n const cls =\n el.className && typeof el.className === \"string\" ? el.className.trim().split(/\\s+/).slice(0, 2).join(\".\") : \"\";\n\n if (text) return `<${tag}> \"${text}\"`;\n if (cls) return `<${tag}.${cls}>`;\n return `<${tag}>`;\n}\n\nfunction getDirectComponentName(element: Element): string | null {\n const fiber = getFiber(element) as {\n return?: {\n type?: unknown;\n elementType?: { displayName?: string; name?: string };\n return?: unknown;\n };\n } | null;\n if (!fiber) return null;\n\n let current = fiber.return;\n while (current) {\n const t = current.type;\n if (typeof t === \"function\" || typeof t === \"object\") {\n const rec = t as { displayName?: string; name?: string };\n const name =\n rec?.displayName ||\n rec?.name ||\n (current.elementType as { displayName?: string; name?: string } | undefined)?.displayName ||\n (current.elementType as { displayName?: string; name?: string } | undefined)?.name;\n if (name && name.length > 2 && !name.startsWith(\"_\")) return name;\n }\n current = current.return;\n }\n return null;\n}\n\nexport function detectChildrenType(container: Element): \"array\" | \"static\" {\n const children = Array.from(container.children);\n if (children.length < 2) return \"static\";\n\n const fibers = children.map(getFiber).filter(Boolean);\n if (fibers.length === 0) return \"static\";\n\n const sourceLines = new Map<string, number>();\n let withKeys = 0;\n\n for (const fiber of fibers) {\n const f = fiber as { _debugSource?: { fileName: string; lineNumber: number }; key?: unknown };\n const src = f._debugSource;\n if (src) {\n const key = `${src.fileName}:${src.lineNumber}`;\n sourceLines.set(key, (sourceLines.get(key) || 0) + 1);\n }\n if (f.key !== null) withKeys++;\n }\n\n const maxShared = Math.max(...sourceLines.values(), 0);\n if (maxShared >= fibers.length * 0.7) return \"array\";\n\n if (withKeys >= fibers.length * 0.7 && sourceLines.size <= 2) return \"array\";\n\n return \"static\";\n}\n\nexport function detectReorderableContainer(element: Element): ReorderableContainer | null {\n const parent = element.parentElement;\n if (!parent) return null;\n\n const computed = getComputedStyle(parent);\n const display = computed.display;\n\n let layout: \"flex\" | \"grid\";\n if (display === \"flex\" || display === \"inline-flex\") {\n layout = \"flex\";\n } else if (display === \"grid\" || display === \"inline-grid\") {\n layout = \"grid\";\n } else {\n return null;\n }\n\n const domChildren = Array.from(parent.children).filter((child) => {\n const cs = getComputedStyle(child);\n return cs.display !== \"none\" && cs.visibility !== \"hidden\";\n });\n if (domChildren.length < 2) return null;\n\n const childrenType = detectChildrenType(parent);\n\n const children: ReorderChild[] = domChildren.map((child, index) => ({\n element: child,\n index,\n label: getChildLabel(child),\n sourceFile: getReactSource(child),\n componentName: getDirectComponentName(child),\n }));\n\n return {\n container: parent,\n layout,\n childrenType,\n children,\n sourceFile: getReactSource(parent),\n };\n}\n","/**\n * Drag-to-reposition for `position: absolute | fixed`.\n * Uses pointer capture on the drag zone, live `!important` inline preview, commits px values on release.\n */\n\nexport type InsetKey = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface RepositionCallbacks {\n onDragStart: () => void;\n /** Called when pointer up with no meaningful movement (under ~0.5px per axis). */\n onDragCancel: () => void;\n onCommit: (patch: Partial<Record<InsetKey, string>>) => void;\n}\n\nexport function detectInsetAxes(el: Element): {\n vertical: \"top\" | \"bottom\";\n horizontal: \"left\" | \"right\";\n} {\n const cs = getComputedStyle(el);\n const t = cs.top;\n const b = cs.bottom;\n const l = cs.left;\n const r = cs.right;\n const tNum = parseFloat(t);\n const bNum = parseFloat(b);\n const lNum = parseFloat(l);\n const rNum = parseFloat(r);\n\n let vertical: \"top\" | \"bottom\";\n if (t === \"auto\" && b !== \"auto\") vertical = \"bottom\";\n else if (b === \"auto\" && t !== \"auto\") vertical = \"top\";\n else if (t !== \"auto\" && b !== \"auto\" && !Number.isNaN(tNum) && !Number.isNaN(bNum)) {\n vertical = tNum <= bNum ? \"top\" : \"bottom\";\n } else {\n vertical = \"top\";\n }\n\n let horizontal: \"left\" | \"right\";\n if (l === \"auto\" && r !== \"auto\") horizontal = \"right\";\n else if (r === \"auto\" && l !== \"auto\") horizontal = \"left\";\n else if (l !== \"auto\" && r !== \"auto\" && !Number.isNaN(lNum) && !Number.isNaN(rNum)) {\n horizontal = lNum <= rNum ? \"left\" : \"right\";\n } else {\n horizontal = \"left\";\n }\n return { vertical, horizontal };\n}\n\nexport function isCanvasRepositionable(el: Element): boolean {\n const p = getComputedStyle(el).position;\n return p === \"absolute\" || p === \"fixed\";\n}\n\ninterface RepositionState {\n el: HTMLElement;\n zone: HTMLElement;\n insetAxes: ReturnType<typeof detectInsetAxes>;\n startX: number;\n startY: number;\n startTop: number;\n startLeft: number;\n startRight: number;\n startBottom: number;\n pointerId: number;\n}\n\nexport function createRepositionController(callbacks: RepositionCallbacks): {\n startDrag: (\n el: HTMLElement,\n zone: HTMLElement,\n insetAxes: ReturnType<typeof detectInsetAxes>,\n pointerId: number,\n startX: number,\n startY: number,\n ) => void;\n destroy: () => void;\n} {\n let state: RepositionState | null = null;\n\n function removeListeners() {\n document.removeEventListener(\"pointermove\", handleMove, true);\n document.removeEventListener(\"pointerup\", handleUp, true);\n document.removeEventListener(\"pointercancel\", handleUp, true);\n }\n\n function handleMove(e: PointerEvent) {\n if (!state) return;\n e.preventDefault();\n const rawDx = e.clientX - state.startX;\n const rawDy = e.clientY - state.startY;\n const el = state.el;\n const ax = state.insetAxes;\n if (ax.vertical === \"top\") {\n el.style.setProperty(\"top\", `${Math.round(state.startTop + rawDy)}px`, \"important\");\n } else {\n el.style.setProperty(\"bottom\", `${Math.round(state.startBottom - rawDy)}px`, \"important\");\n }\n if (ax.horizontal === \"left\") {\n el.style.setProperty(\"left\", `${Math.round(state.startLeft + rawDx)}px`, \"important\");\n } else {\n el.style.setProperty(\"right\", `${Math.round(state.startRight - rawDx)}px`, \"important\");\n }\n }\n\n function handleUp(e: PointerEvent) {\n if (!state) return;\n e.preventDefault();\n const s = state;\n state = null;\n removeListeners();\n\n const el = s.el;\n try {\n el.releasePointerCapture(s.pointerId);\n } catch {\n /* ignore */\n }\n el.style.removeProperty(\"top\");\n el.style.removeProperty(\"bottom\");\n el.style.removeProperty(\"left\");\n el.style.removeProperty(\"right\");\n\n const totalDx = e.clientX - s.startX;\n const totalDy = e.clientY - s.startY;\n const ax = s.insetAxes;\n const patch: Partial<Record<InsetKey, string>> = {};\n if (Math.abs(totalDy) > 0.5) {\n if (ax.vertical === \"top\") {\n patch.top = `${Math.round(s.startTop + totalDy)}px`;\n } else {\n patch.bottom = `${Math.round(s.startBottom - totalDy)}px`;\n }\n }\n if (Math.abs(totalDx) > 0.5) {\n if (ax.horizontal === \"left\") {\n patch.left = `${Math.round(s.startLeft + totalDx)}px`;\n } else {\n patch.right = `${Math.round(s.startRight - totalDx)}px`;\n }\n }\n if (Object.keys(patch).length === 0) {\n callbacks.onDragCancel();\n } else {\n callbacks.onCommit(patch);\n }\n }\n\n function startDrag(\n el: HTMLElement,\n zone: HTMLElement,\n insetAxes: ReturnType<typeof detectInsetAxes>,\n pointerId: number,\n startX: number,\n startY: number,\n ) {\n const cs = getComputedStyle(el);\n state = {\n el,\n zone,\n insetAxes,\n startX,\n startY,\n startTop: parseFloat(cs.top) || 0,\n startLeft: parseFloat(cs.left) || 0,\n startRight: parseFloat(cs.right) || 0,\n startBottom: parseFloat(cs.bottom) || 0,\n pointerId,\n };\n try {\n zone.setPointerCapture(pointerId);\n } catch {\n /* ignore */\n }\n callbacks.onDragStart();\n document.addEventListener(\"pointermove\", handleMove, true);\n document.addEventListener(\"pointerup\", handleUp, true);\n document.addEventListener(\"pointercancel\", handleUp, true);\n }\n\n function destroy() {\n if (!state) return;\n const el = state.el;\n const pid = state.pointerId;\n removeListeners();\n try {\n el.releasePointerCapture(pid);\n } catch {\n /* ignore */\n }\n el.style.removeProperty(\"top\");\n el.style.removeProperty(\"bottom\");\n el.style.removeProperty(\"left\");\n el.style.removeProperty(\"right\");\n state = null;\n }\n\n return { startDrag, destroy };\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { createReorderController } from \"./drag-reorder-controller\";\nimport { detectReorderableContainer } from \"./drag-reorder-detect\";\nimport type { FluxStructuralReorder, ReorderableContainer } from \"./drag-reorder-types\";\nimport {\n createRepositionController,\n detectInsetAxes,\n isCanvasRepositionable,\n type InsetKey,\n} from \"./drag-reposition-controller\";\nimport type { DesignEditorElement } from \"./use-selection\";\n\nconst FLUX_ZONE_Z = 9998;\n\nexport type InsetCommitPatch = Partial<Record<InsetKey, string>>;\n\nexport interface CanvasDragHandlesProps {\n enabled: boolean;\n selectedElement: DesignEditorElement | null;\n onReorder: (change: FluxStructuralReorder) => void;\n onRepositionCommit: (patch: InsetCommitPatch) => void;\n onDragStart: () => void;\n onDragEnd: () => void;\n}\n\n/** @deprecated Use `CanvasDragHandles` */\nexport const DragReorderHandles = CanvasDragHandles;\n/** @deprecated Use `CanvasDragHandlesProps` */\nexport type DragReorderHandlesProps = CanvasDragHandlesProps;\n\n/**\n * Canvas drag: **absolute/fixed** → reposition; otherwise flex/grid sibling reorder when applicable.\n * Pointer capture on the drag zone; `cursor: move` vs `grab` / `grabbing`.\n */\nexport function CanvasDragHandles({\n enabled,\n selectedElement,\n onReorder,\n onRepositionCommit,\n onDragStart,\n onDragEnd,\n}: CanvasDragHandlesProps) {\n const [container, setContainer] = useState<ReorderableContainer | null>(null);\n const [mode, setMode] = useState<\"reposition\" | \"reorder\" | null>(null);\n\n const reorderControllerRef = useRef<ReturnType<typeof createReorderController> | null>(null);\n const repositionControllerRef = useRef<ReturnType<typeof createRepositionController> | null>(null);\n const dragZoneRef = useRef<HTMLElement | null>(null);\n\n const onReorderRef = useRef(onReorder);\n const onRepositionCommitRef = useRef(onRepositionCommit);\n const onDragStartRef = useRef(onDragStart);\n const onDragEndRef = useRef(onDragEnd);\n\n onReorderRef.current = onReorder;\n onRepositionCommitRef.current = onRepositionCommit;\n onDragStartRef.current = onDragStart;\n onDragEndRef.current = onDragEnd;\n\n useEffect(() => {\n if (!enabled || !selectedElement) {\n setMode(null);\n setContainer(null);\n return;\n }\n if (isCanvasRepositionable(selectedElement)) {\n setMode(\"reposition\");\n setContainer(null);\n return;\n }\n setMode(\"reorder\");\n setContainer(detectReorderableContainer(selectedElement));\n }, [enabled, selectedElement]);\n\n useEffect(() => {\n function teardownZone() {\n if (dragZoneRef.current) {\n dragZoneRef.current.remove();\n dragZoneRef.current = null;\n }\n reorderControllerRef.current?.destroy();\n reorderControllerRef.current = null;\n repositionControllerRef.current?.destroy();\n repositionControllerRef.current = null;\n }\n\n if (!enabled || !selectedElement || !mode) {\n teardownZone();\n return;\n }\n\n if (mode === \"reposition\") {\n const el = selectedElement as HTMLElement;\n const controller = createRepositionController({\n onDragStart: () => onDragStartRef.current(),\n onDragCancel: () => {\n const z = dragZoneRef.current;\n if (z) {\n z.style.pointerEvents = \"auto\";\n z.style.cursor = \"move\";\n }\n onDragEndRef.current();\n },\n onCommit: (patch) => {\n const z = dragZoneRef.current;\n if (z) {\n z.style.pointerEvents = \"auto\";\n z.style.cursor = \"move\";\n }\n onRepositionCommitRef.current(patch);\n onDragEndRef.current();\n },\n });\n repositionControllerRef.current = controller;\n\n const zone = document.createElement(\"div\");\n zone.setAttribute(\"data-flux-drag-zone\", \"\");\n zone.setAttribute(\"data-flux-drag-mode\", \"reposition\");\n zone.style.cssText = `\n position: fixed;\n z-index: ${FLUX_ZONE_Z};\n cursor: move;\n pointer-events: auto;\n user-select: none;\n touch-action: none;\n background: transparent;\n `;\n document.body.appendChild(zone);\n dragZoneRef.current = zone;\n\n function updatePosition() {\n const r = el.getBoundingClientRect();\n zone.style.left = `${r.left}px`;\n zone.style.top = `${r.top}px`;\n zone.style.width = `${r.width}px`;\n zone.style.height = `${r.height}px`;\n }\n updatePosition();\n\n const onPointerDown = (e: PointerEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n zone.style.pointerEvents = \"none\";\n const axes = detectInsetAxes(el);\n controller.startDrag(el, zone, axes, e.pointerId, e.clientX, e.clientY);\n };\n zone.addEventListener(\"pointerdown\", onPointerDown);\n\n let raf: number | null = null;\n function scheduleUpdate() {\n if (raf !== null) return;\n raf = requestAnimationFrame(() => {\n raf = null;\n updatePosition();\n });\n }\n\n window.addEventListener(\"scroll\", scheduleUpdate, { capture: true, passive: true });\n window.addEventListener(\"resize\", scheduleUpdate, { passive: true });\n\n return () => {\n zone.removeEventListener(\"pointerdown\", onPointerDown);\n teardownZone();\n window.removeEventListener(\"scroll\", scheduleUpdate, true);\n window.removeEventListener(\"resize\", scheduleUpdate);\n if (raf !== null) cancelAnimationFrame(raf);\n };\n }\n\n if (mode === \"reorder\") {\n if (!container) {\n teardownZone();\n return;\n }\n\n const childIndex = container.children.findIndex((c) => c.element === selectedElement);\n const dragChild =\n childIndex !== -1\n ? container.children[childIndex]\n : container.children.find((c) => c.element.contains(selectedElement));\n\n if (!dragChild) {\n teardownZone();\n return;\n }\n\n const controller = createReorderController({\n onDragStart: () => onDragStartRef.current(),\n onDragCancel: () => {\n if (dragZoneRef.current) {\n dragZoneRef.current.style.pointerEvents = \"auto\";\n dragZoneRef.current.style.cursor = \"grab\";\n }\n onDragEndRef.current();\n },\n onReorder: (change) => {\n if (dragZoneRef.current) {\n dragZoneRef.current.style.pointerEvents = \"auto\";\n dragZoneRef.current.style.cursor = \"grab\";\n }\n onDragEndRef.current();\n onReorderRef.current(change);\n if (selectedElement) {\n setContainer(detectReorderableContainer(selectedElement));\n }\n },\n });\n reorderControllerRef.current = controller;\n\n const zone = document.createElement(\"div\");\n zone.setAttribute(\"data-flux-drag-zone\", \"\");\n zone.setAttribute(\"data-flux-drag-mode\", \"reorder\");\n zone.style.cssText = `\n position: fixed;\n z-index: ${FLUX_ZONE_Z};\n cursor: grab;\n pointer-events: auto;\n user-select: none;\n touch-action: none;\n background: transparent;\n `;\n document.body.appendChild(zone);\n dragZoneRef.current = zone;\n\n function updatePosition() {\n const r = dragChild.element.getBoundingClientRect();\n zone.style.left = `${r.left}px`;\n zone.style.top = `${r.top}px`;\n zone.style.width = `${r.width}px`;\n zone.style.height = `${r.height}px`;\n }\n updatePosition();\n\n const onPointerDown = (e: PointerEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n try {\n zone.setPointerCapture(e.pointerId);\n } catch {\n /* ignore */\n }\n zone.style.cursor = \"grabbing\";\n zone.style.pointerEvents = \"none\";\n controller.startDrag(dragChild, container, e.clientX, e.clientY);\n };\n zone.addEventListener(\"pointerdown\", onPointerDown);\n\n let raf: number | null = null;\n function scheduleUpdate() {\n if (raf !== null) return;\n raf = requestAnimationFrame(() => {\n raf = null;\n updatePosition();\n });\n }\n\n window.addEventListener(\"scroll\", scheduleUpdate, { capture: true, passive: true });\n window.addEventListener(\"resize\", scheduleUpdate, { passive: true });\n\n return () => {\n zone.removeEventListener(\"pointerdown\", onPointerDown);\n teardownZone();\n window.removeEventListener(\"scroll\", scheduleUpdate, true);\n window.removeEventListener(\"resize\", scheduleUpdate);\n if (raf !== null) cancelAnimationFrame(raf);\n };\n }\n\n return teardownZone;\n }, [enabled, mode, container, selectedElement]);\n\n return null;\n}\n","/**\n * Border-box dimensions in viewport CSS pixels, rounded for the overlay label.\n */\nexport function formatSelectionDimensions(width: number, height: number): string {\n return `${Math.round(width)} × ${Math.round(height)}`;\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { elementSupportsInlineTextEdit } from \"./element-capabilities\";\nimport {\n type DesignEditorElement,\n deepElementFromPoint,\n getClassNameString,\n getElementPath,\n resolveDeepPointToStyleableElement,\n resolveEventTargetToStyleableElement,\n} from \"./use-selection\";\nimport { formatSelectionDimensions } from \"./format-selection-dimensions\";\nimport { subscribeViewportLayoutSync } from \"./viewport-layout-sync\";\n\n/**\n * Wired by `installFluxRadixMintInspectVars()` — Mint 9 selected, Mint 8 hover (@radix-ui/colors).\n */\nconst INSPECTOR_BORDER_SELECTED = \"2px solid var(--flux-mint-9, #86ead4)\";\n\nconst INSPECTOR_RING_BASE: Omit<CSSProperties, \"border\" | \"backgroundColor\"> = {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"6px\",\n pointerEvents: \"none\",\n /** Snap to viewport on scroll; animating top/left feels like the ring “floats” behind the content. */\n transitionProperty: \"width, height\",\n transitionDuration: \"25ms\",\n transitionTimingFunction: \"ease-out\",\n};\n\nconst INSPECTOR_RING_STYLE_SELECTED: CSSProperties = {\n ...INSPECTOR_RING_BASE,\n border: INSPECTOR_BORDER_SELECTED,\n backgroundColor: \"transparent\",\n};\n\n/** Softer hover (feedback-style) — selection stays crisp mint 9. */\nconst INSPECTOR_RING_STYLE_HOVER: CSSProperties = {\n ...INSPECTOR_RING_BASE,\n border: \"1px solid color-mix(in srgb, var(--flux-mint-8, #4cbba5) 50%, transparent)\",\n backgroundColor: \"color-mix(in srgb, var(--flux-mint-8, #4cbba5) 7%, transparent)\",\n transitionProperty: \"width, height, opacity\",\n};\n\n/** Portaled menus live on `document.body` / `[data-flux-editor-menu-layer]` — ignore for pick & hover. */\nfunction isFluxFloatingUiInEventPath(e: MouseEvent): boolean {\n const path = typeof e.composedPath === \"function\" ? e.composedPath() : [];\n for (const n of path) {\n if (!(n instanceof Element)) continue;\n if (\n n.hasAttribute(\"data-flux-select-menu\") ||\n n.hasAttribute(\"data-flux-variable-menu\") ||\n n.hasAttribute(\"data-flux-editor-menu-layer\")\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isFluxFloatingUiAtPoint(clientX: number, clientY: number): boolean {\n const top = deepElementFromPoint(clientX, clientY);\n return Boolean(\n top?.closest(\"[data-flux-select-menu], [data-flux-variable-menu], [data-flux-editor-menu-layer]\"),\n );\n}\n\nfunction safeBoundingRect(el: Element): DOMRect | null {\n if (!el.isConnected) return null;\n try {\n return el.getBoundingClientRect();\n } catch {\n return null;\n }\n}\n\nfunction positionDimensionBadge(label: HTMLDivElement, rect: DOMRect): void {\n const viewportH = window.innerHeight;\n const labelY = rect.bottom + 4 + 20 < viewportH ? rect.bottom + 4 : rect.top - 24;\n label.style.top = `${labelY}px`;\n label.style.left = `${rect.left + rect.width / 2}px`;\n label.style.transform = \"translateX(-50%)\";\n}\n\nconst SELECTION_DIMENSION_BADGE_STYLE: CSSProperties = {\n position: \"absolute\",\n boxSizing: \"border-box\",\n color: \"#fff\",\n fontSize: 11,\n fontFamily: \"'Inter', system-ui, sans-serif\",\n padding: \"2px 6px\",\n borderRadius: 3,\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n zIndex: 1,\n /** Dimension badge (inspector) */\n backgroundColor: \"#0D99FF\",\n display: \"none\",\n};\n\nconst INTERACTIVE_PAGE_SELECTOR =\n \"button, a, input, select, textarea, [role='button'], [onclick], summary, [contenteditable='true']\";\n\ninterface SelectionOverlayProps {\n enabled: boolean;\n /** Capture-phase `pointerdown` + stricter click blocking for buttons/links/inputs (playground / opt-in). */\n blockPageInteractions?: boolean;\n selectedElement: DesignEditorElement | null;\n hoveredElement: DesignEditorElement | null;\n onSelect: (el: DesignEditorElement | null) => void;\n onHover: (el: DesignEditorElement | null) => void;\n /** Double-click the current selection to edit text in place (when supported). */\n onRequestInlineTextEdit?: () => void;\n}\n\nexport function SelectionOverlay({\n enabled,\n blockPageInteractions = false,\n selectedElement,\n hoveredElement,\n onSelect,\n onHover,\n onRequestInlineTextEdit,\n}: SelectionOverlayProps) {\n const overlayRef = useRef<HTMLDivElement>(null);\n const hoverOutlineRef = useRef<HTMLDivElement>(null);\n const selectOutlineRef = useRef<HTMLDivElement>(null);\n const selectDimensionsRef = useRef<HTMLDivElement>(null);\n /** After scroll stops, show hover chrome again (calm scroll). */\n const [hoverScrollIdle, setHoverScrollIdle] = useState(true);\n const moveRafRef = useRef<number>(0);\n const latestPointerRef = useRef<{ x: number; y: number } | null>(null);\n\n useEffect(() => {\n const scrollTimerRef = { current: undefined as ReturnType<typeof setTimeout> | undefined };\n const onScroll = () => {\n setHoverScrollIdle(false);\n if (scrollTimerRef.current) clearTimeout(scrollTimerRef.current);\n scrollTimerRef.current = setTimeout(() => {\n setHoverScrollIdle(true);\n scrollTimerRef.current = undefined;\n }, 150);\n };\n document.addEventListener(\"scroll\", onScroll, { capture: true, passive: true });\n return () => {\n document.removeEventListener(\"scroll\", onScroll, true);\n if (scrollTimerRef.current) clearTimeout(scrollTimerRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n const overlay = overlayRef.current;\n if (!overlay) return;\n\n const isEditorElement = (el: Element | null): boolean => {\n if (!el) return false;\n return Boolean(el.closest(\"[data-flux-ui]\") || el.closest(\"[data-flux-editor-host]\"));\n };\n\n const handleClick = (e: MouseEvent) => {\n if (isFluxFloatingUiInEventPath(e)) return;\n const path0 = (e.composedPath()[0] ?? e.target) as EventTarget | undefined;\n const pathEl = path0 instanceof Element ? path0 : path0 instanceof Node ? path0.parentElement : null;\n if (pathEl) {\n const hitInteractive = pathEl.closest(INTERACTIVE_PAGE_SELECTOR);\n if (\n blockPageInteractions &&\n hitInteractive &&\n !isEditorElement(hitInteractive) &&\n !hitInteractive.closest(\"[data-flux-editor-host]\")\n ) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n const hit = deepElementFromPoint(e.clientX, e.clientY);\n if (!hit || overlay.contains(hit)) return;\n const el = resolveEventTargetToStyleableElement(hit);\n if (!el) return;\n if (isEditorElement(el)) return;\n if (\n e.detail === 2 &&\n selectedElement &&\n onRequestInlineTextEdit &&\n (el === selectedElement || selectedElement.contains(el)) &&\n elementSupportsInlineTextEdit(selectedElement)\n ) {\n e.preventDefault();\n e.stopPropagation();\n onRequestInlineTextEdit();\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n onSelect(el);\n };\n\n const handlePointerDown = (e: PointerEvent) => {\n if (!blockPageInteractions) return;\n if (isFluxFloatingUiInEventPath(e as unknown as MouseEvent)) return;\n const path0 = (e.composedPath()[0] ?? e.target) as EventTarget | undefined;\n const pathEl = path0 instanceof Element ? path0 : path0 instanceof Node ? path0.parentElement : null;\n if (!pathEl) return;\n if (isEditorElement(pathEl) || pathEl.closest(\"[data-flux-editor-host]\")) return;\n const hitInteractive = pathEl.closest(INTERACTIVE_PAGE_SELECTOR);\n if (hitInteractive && !isEditorElement(hitInteractive)) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const runHoverHitTest = (clientX: number, clientY: number) => {\n if (isFluxFloatingUiAtPoint(clientX, clientY)) {\n onHover(null);\n return;\n }\n const topEl = deepElementFromPoint(clientX, clientY);\n if (isEditorElement(topEl) || topEl?.hasAttribute(\"data-flux-editor-host\")) {\n onHover(null);\n return;\n }\n const el = resolveDeepPointToStyleableElement(clientX, clientY);\n if (!el || overlay.contains(el) || isEditorElement(el)) {\n onHover(null);\n return;\n }\n onHover(el);\n };\n\n const handleMouseMove = (e: MouseEvent) => {\n latestPointerRef.current = { x: e.clientX, y: e.clientY };\n if (moveRafRef.current) return;\n moveRafRef.current = requestAnimationFrame(() => {\n moveRafRef.current = 0;\n const p = latestPointerRef.current;\n if (!p) return;\n runHoverHitTest(p.x, p.y);\n });\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n const ae = document.activeElement;\n if (ae instanceof Element && isEditorElement(ae)) return;\n onSelect(null);\n };\n\n document.addEventListener(\"click\", handleClick, true);\n document.addEventListener(\"mousemove\", handleMouseMove, { passive: true });\n window.addEventListener(\"keydown\", handleKeyDown);\n if (blockPageInteractions) {\n document.addEventListener(\"pointerdown\", handlePointerDown, true);\n }\n\n return () => {\n document.removeEventListener(\"click\", handleClick, true);\n document.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"keydown\", handleKeyDown);\n if (blockPageInteractions) {\n document.removeEventListener(\"pointerdown\", handlePointerDown, true);\n }\n if (moveRafRef.current) {\n cancelAnimationFrame(moveRafRef.current);\n moveRafRef.current = 0;\n }\n };\n }, [enabled, blockPageInteractions, onSelect, onHover, onRequestInlineTextEdit, selectedElement]);\n\n useEffect(() => {\n const outline = hoverOutlineRef.current;\n if (!outline || !hoveredElement || hoveredElement === selectedElement) return;\n const update = () => {\n if (!hoverScrollIdle) {\n outline.style.display = \"none\";\n outline.style.opacity = \"0\";\n return;\n }\n const rect = safeBoundingRect(hoveredElement);\n if (!rect || (rect.width === 0 && rect.height === 0)) {\n outline.style.display = \"none\";\n return;\n }\n outline.style.opacity = \"1\";\n outline.style.top = `${rect.top}px`;\n outline.style.left = `${rect.left}px`;\n outline.style.width = `${rect.width}px`;\n outline.style.height = `${rect.height}px`;\n outline.style.display = \"block\";\n };\n const observer = new ResizeObserver(update);\n try {\n observer.observe(hoveredElement);\n } catch {\n outline.style.display = \"none\";\n }\n const unsubLayout = subscribeViewportLayoutSync(hoveredElement, update);\n return () => {\n observer.disconnect();\n unsubLayout();\n };\n }, [hoveredElement, selectedElement, hoverScrollIdle]);\n\n useEffect(() => {\n const outline = selectOutlineRef.current;\n const label = selectDimensionsRef.current;\n if (!outline || !selectedElement) return;\n const update = () => {\n const rect = safeBoundingRect(selectedElement);\n if (!rect || (rect.width === 0 && rect.height === 0)) {\n outline.style.display = \"none\";\n if (label) label.style.display = \"none\";\n return;\n }\n outline.style.top = `${rect.top}px`;\n outline.style.left = `${rect.left}px`;\n outline.style.width = `${rect.width}px`;\n outline.style.height = `${rect.height}px`;\n outline.style.display = \"block\";\n if (label) {\n label.textContent = formatSelectionDimensions(rect.width, rect.height);\n positionDimensionBadge(label, rect);\n label.style.display = \"block\";\n }\n };\n const observer = new ResizeObserver(update);\n try {\n observer.observe(selectedElement);\n } catch {\n outline.style.display = \"none\";\n if (label) label.style.display = \"none\";\n }\n const unsubLayout = subscribeViewportLayoutSync(selectedElement, update);\n return () => {\n observer.disconnect();\n unsubLayout();\n if (selectDimensionsRef.current) selectDimensionsRef.current.style.display = \"none\";\n };\n }, [selectedElement]);\n\n if (!enabled) return null;\n\n return (\n <div\n ref={overlayRef}\n className=\"flux-overlay\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9998,\n pointerEvents: \"none\",\n cursor: \"crosshair\",\n }}\n aria-hidden\n >\n {hoveredElement && hoveredElement !== selectedElement && (\n <div ref={hoverOutlineRef} className=\"flux-hover-outline\" style={INSPECTOR_RING_STYLE_HOVER} />\n )}\n {selectedElement && (\n <>\n <div ref={selectOutlineRef} className=\"flux-select-outline\" style={INSPECTOR_RING_STYLE_SELECTED} />\n <div\n ref={selectDimensionsRef}\n className=\"flux-select-dimensions\"\n style={SELECTION_DIMENSION_BADGE_STYLE}\n aria-hidden\n />\n </>\n )}\n </div>\n );\n}\n\nexport function Breadcrumb({ element, className }: { element: Element | null; className?: string }) {\n if (!element) return null;\n const path = getElementPath(element);\n const tag = element.tagName.toLowerCase();\n const id = element.id;\n const classes = getClassNameString(element).trim().split(/\\s+/).filter(Boolean).slice(0, 2).join(\".\");\n const label = id ? `${tag}#${id}` : classes ? `${tag}.${classes}` : tag;\n return (\n <div className={className ?? \"truncate font-mono text-[11px] text-[#71717a]\"} title={path}>\n {label}\n </div>\n );\n}\n","import { mint } from \"@radix-ui/colors\";\n\nconst STYLE_ID = \"flux-radix-mint-inspector\";\n\n/**\n * Injects `--flux-mint-8` / `--flux-mint-9` from [@radix-ui/colors](https://www.npmjs.com/package/@radix-ui/colors)\n * for the selection overlay (hover = mint 8, selected = mint 9).\n */\nexport function installFluxRadixMintInspectVars(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n\n const css = `\n:root {\n --flux-mint-8: ${mint.mint8};\n --flux-mint-9: ${mint.mint9};\n}\n`.trim();\n\n const el = document.createElement(\"style\");\n el.id = STYLE_ID;\n el.textContent = css;\n document.head.appendChild(el);\n}\n","/**\n * Styles for select / variable menus that portal to `document.body`.\n * Tailwind in the shadow panel does not apply to light-DOM portaled nodes.\n *\n * Pattern matches Radix / Floating UI: overlays mount outside clipped or\n * `pointer-events: none` ancestors so hit-testing and clicks behave normally.\n */\n\nconst STYLE_ID = \"flux-editor-floating-menu-css\";\n\nexport const FLOATING_MENU_CSS = `\n[data-flux-select-menu],\n[data-flux-variable-menu] {\n position: fixed;\n z-index: 10002;\n max-height: 12rem;\n overflow-y: auto;\n border-radius: 6px;\n border: 1px solid #444;\n background-color: #2a2a2a;\n padding: 4px 0;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.35);\n pointer-events: auto;\n font-family: 'Inter', system-ui, sans-serif;\n font-size: 12px;\n line-height: 15.6px;\n color: #d9d9d9;\n -webkit-font-smoothing: antialiased;\n box-sizing: border-box;\n}\n[data-flux-variable-menu] {\n max-width: 14rem;\n}\n[data-flux-select-menu] .flux-menu-option,\n[data-flux-variable-menu] .flux-menu-option {\n display: block;\n width: 100%;\n box-sizing: border-box;\n padding: 4px 8px;\n margin: 0;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n line-height: 15.6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[data-flux-select-menu] .flux-menu-option:hover,\n[data-flux-variable-menu] .flux-menu-option:hover {\n background-color: #333;\n}\n[data-flux-select-menu] .flux-menu-option.is-active,\n[data-flux-variable-menu] .flux-menu-option.is-active {\n background-color: #202020;\n}\n[data-flux-variable-menu] .flux-menu-empty {\n padding: 6px 8px;\n color: #7c7c7c;\n font-size: 12px;\n}\n@keyframes flux-tooltip-in {\n from { opacity: 0; transform: scale(0.97); }\n to { opacity: 1; transform: scale(1); }\n}\n/* Tooltips portal to document.body; shadow-injected Tailwind does not apply — match panel rounded-small token (8px). */\n.flux-tooltip-content {\n border-radius: 8px;\n box-sizing: border-box;\n}\n.flux-tooltip-content[data-state=\"delayed-open\"],\n.flux-tooltip-content[data-state=\"instant-open\"] {\n animation: flux-tooltip-in 150ms cubic-bezier(0.215, 0.61, 0.355, 1) both;\n}\n`;\n\nexport function installFluxFloatingMenuStyles(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const el = document.createElement(\"style\");\n el.id = STYLE_ID;\n el.textContent = FLOATING_MENU_CSS;\n document.head.appendChild(el);\n}\n","export const editorStyles = \".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.-right-0{right:0}.-right-1{right:-.25rem}.-top-0{top:0}.-top-1{top:-.25rem}.bottom-2{bottom:.5rem}.left-0{left:0}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-4{right:1rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-2{top:.5rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-\\\\[10003\\\\]{z-index:10003}.z-\\\\[1\\\\]{z-index:1}.z-\\\\[9997\\\\]{z-index:9997}.z-\\\\[9998\\\\]{z-index:9998}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.-mt-px{margin-top:-1px}.mb-2{margin-bottom:.5rem}.ml-px{margin-left:1px}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.box-border{box-sizing:border-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-3{width:.75rem;height:.75rem}.size-3\\\\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-9{width:2.25rem;height:2.25rem}.size-\\\\[14px\\\\]{width:14px;height:14px}.size-\\\\[5px\\\\]{width:5px;height:5px}.h-3{height:.75rem}.h-4{height:1rem}.h-9{height:2.25rem}.h-full{height:100%}.max-h-48{max-height:12rem}.min-h-0{min-height:0}.w-0{width:0}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-\\\\[4\\\\.5rem\\\\]{width:4.5rem}.w-\\\\[5\\\\.5rem\\\\]{width:5.5rem}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\\\\[2rem\\\\]{min-width:2rem}.min-w-full{min-width:100%}.max-w-\\\\[5rem\\\\]{max-width:5rem}.max-w-\\\\[min\\\\(18rem\\\\2c calc\\\\(100vw-20px\\\\)\\\\)\\\\]{max-width:min(18rem,calc(100vw - 20px))}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.scale-\\\\[0\\\\.92\\\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\\\\[0\\\\.92\\\\]{--tw-scale-x:0.92;--tw-scale-y:0.92}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-col-resize{cursor:col-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\\\\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\\\\[13px\\\\]{gap:13px}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-small{border-radius:8px}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-\\\\[\\\\#202020\\\\]{--tw-border-opacity:1;border-color:rgb(32 32 32/var(--tw-border-opacity,1))}.border-\\\\[\\\\#444\\\\]{--tw-border-opacity:1;border-color:rgb(68 68 68/var(--tw-border-opacity,1))}.border-\\\\[\\\\#555\\\\]{--tw-border-opacity:1;border-color:rgb(85 85 85/var(--tw-border-opacity,1))}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity,1))}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity,1))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.bg-\\\\[\\\\#202020\\\\]{--tw-bg-opacity:1;background-color:rgb(32 32 32/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#2a2a2a\\\\]{--tw-bg-opacity:1;background-color:rgb(42 42 42/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#333333\\\\]{--tw-bg-opacity:1;background-color:rgb(51 51 51/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#555\\\\]{--tw-bg-opacity:1;background-color:rgb(85 85 85/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#F3F3F3\\\\]{--tw-bg-opacity:1;background-color:rgb(243 243 243/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity,1))}.bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity,1))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.\\\\!fill-none{fill:none!important}.p-0{padding:0}.p-0\\\\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\\\\.5{padding:.375rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-0\\\\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-top:0;padding-bottom:0}.py-0\\\\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pr-0{padding-right:0}.pr-10{padding-right:2.5rem}.pr-11{padding-right:2.75rem}.pr-6{padding-right:1.5rem}.pr-7{padding-right:1.75rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-\\\\[\\\\'Inter\\\\'\\\\2c system-ui\\\\2c sans-serif\\\\]{font-family:Inter,system-ui,sans-serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\\\\[11px\\\\]{font-size:11px}.text-\\\\[12px\\\\]{font-size:12px}.text-\\\\[7px\\\\]{font-size:7px}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\\\\[14px\\\\]{line-height:14px}.leading-\\\\[15\\\\.6px\\\\]{line-height:15.6px}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-tight{letter-spacing:-.025em}.text-\\\\[\\\\#202020\\\\]{--tw-text-opacity:1;color:rgb(32 32 32/var(--tw-text-opacity,1))}.text-\\\\[\\\\#333333\\\\]{--tw-text-opacity:1;color:rgb(51 51 51/var(--tw-text-opacity,1))}.text-\\\\[\\\\#71717a\\\\]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-\\\\[\\\\#7C7C7C\\\\]{--tw-text-opacity:1;color:rgb(124 124 124/var(--tw-text-opacity,1))}.text-\\\\[\\\\#93c47d\\\\]{--tw-text-opacity:1;color:rgb(147 196 125/var(--tw-text-opacity,1))}.text-\\\\[\\\\#D9D9D9\\\\],.text-\\\\[\\\\#d9d9d9\\\\]{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity,1))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity,1))}.text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity,1))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.\\\\!outline{outline-style:solid!important}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\\\[transform\\\\]{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-opacity{transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\\\\[font-synthesis\\\\:none\\\\]{font-synthesis:none}*,:after,:before{box-sizing:border-box;margin:0}button,input,select,textarea{font:inherit;color:inherit;background:transparent;border:none;padding:0;margin:0;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}select{cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.hover\\\\:bg-\\\\[\\\\#2a2a2a\\\\]:hover{--tw-bg-opacity:1;background-color:rgb(42 42 42/var(--tw-bg-opacity,1))}.hover\\\\:bg-\\\\[\\\\#333333\\\\]:hover{--tw-bg-opacity:1;background-color:rgb(51 51 51/var(--tw-bg-opacity,1))}.hover\\\\:text-\\\\[\\\\#D9D9D9\\\\]:hover{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.hover\\\\:brightness-110:hover{--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus-visible\\\\:outline:focus-visible{outline-style:solid}.focus-visible\\\\:outline-2:focus-visible{outline-width:2px}.focus-visible\\\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\\\:outline-\\\\[\\\\#D9D9D9\\\\]\\\\/40:focus-visible{outline-color:hsla(0,0%,85%,.4)}.active\\\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:focus-within .group-focus-within\\\\:opacity-100{opacity:1}.group:hover .group-hover\\\\:opacity-100{opacity:1}.\\\\[\\\\&\\\\:\\\\:-webkit-details-marker\\\\]\\\\:hidden::-webkit-details-marker{display:none}.\\\\[\\\\&_svg\\\\]\\\\:-mt-px svg{margin-top:-1px}.\\\\[\\\\&_svg\\\\]\\\\:\\\\!fill-none svg{fill:none!important}\";\n","/**\n * Shadow DOM mount for the editor panel.\n * Creates a host element with an open shadow root, injects the compiled\n * Tailwind CSS, and returns the container to render into via createPortal.\n *\n * Menus portal to a **light-DOM** `menuLayer` on `document.body` (not inside the\n * shadow host). The host uses `pointer-events: none` so the page stays pickable;\n * browsers often skip hit-testing shadow descendants for clicks, which broke\n * menu buttons when menus lived under that host (same idea as Radix Popper content).\n */\n\nimport { installFluxRadixMintInspectVars } from \"./install-flux-radix-mint\";\nimport { installFluxFloatingMenuStyles } from \"./floating-menu-styles\";\nimport { editorStyles } from \"./editor-styles\";\n\nexport interface ShadowMount {\n host: HTMLDivElement;\n container: HTMLDivElement;\n /** Light-DOM sibling on `body` for portaled menus — outside shadow host so clicks hit menu targets. */\n menuLayer: HTMLDivElement;\n}\n\nexport function mountShadowPanel(): ShadowMount {\n const host = document.createElement(\"div\");\n host.setAttribute(\"data-flux-editor-host\", \"\");\n host.style.cssText = \"position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;pointer-events:none;\";\n document.body.appendChild(host);\n\n const shadow = host.attachShadow({ mode: \"open\" });\n\n const style = document.createElement(\"style\");\n style.textContent = editorStyles;\n shadow.appendChild(style);\n\n const container = document.createElement(\"div\");\n container.style.cssText = \"position:absolute;inset:0;pointer-events:none;cursor:default;z-index:0;\";\n shadow.appendChild(container);\n\n installFluxFloatingMenuStyles();\n installFluxRadixMintInspectVars();\n\n const menuLayer = document.createElement(\"div\");\n menuLayer.setAttribute(\"data-flux-editor-menu-layer\", \"\");\n menuLayer.setAttribute(\"data-flux-ui\", \"\");\n menuLayer.style.cssText = \"position:fixed;inset:0;z-index:10001;pointer-events:none;overflow:visible;\";\n document.body.appendChild(menuLayer);\n\n return { host, container, menuLayer };\n}\n\nexport function unmountShadowPanel(host: HTMLDivElement, menuLayer: HTMLDivElement): void {\n host.remove();\n menuLayer.remove();\n}\n","\"use client\";\n\nimport { X } from \"lucide-react\";\nimport { Breadcrumb } from \"./selection-overlay\";\nimport type { DesignEditorElement } from \"./use-selection\";\n\ninterface ToolbarProps {\n selectedElement: DesignEditorElement | null;\n /** Panel close — parent supplies iris exit origin (e.g. floating toggle), not the ✕ hit target. */\n onClose: () => void;\n}\n\nconst titleClass = \"truncate font-['Inter',system-ui,sans-serif] text-[12px] leading-[14px] text-[#D9D9D9]\";\n\nexport function Toolbar({ selectedElement, onClose }: ToolbarProps) {\n return (\n <header data-flux-ui className=\"flex shrink-0 items-start justify-between gap-0 px-3 pt-3 pb-2\">\n <div className=\"h-4 min-w-0 flex-1\">\n {selectedElement ? <Breadcrumb element={selectedElement} className={titleClass} /> : <div className={titleClass}>Element name</div>}\n </div>\n <button\n type=\"button\"\n onPointerDown={(e) => {\n if (e.button !== 0) return;\n e.preventDefault();\n onClose();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClose();\n }\n }}\n className=\"shrink-0 rounded-small p-0.5 text-[#D9D9D9] transition-colors hover:bg-[#333333]\"\n title=\"Close panel\"\n aria-label=\"Close panel\"\n >\n <X size={16} strokeWidth={2} aria-hidden />\n </button>\n </header>\n );\n}\n","/**\n * Traces winning CSS rules for properties.\n */\n\nexport interface StyleSource {\n property: string;\n value: string;\n selector: string;\n origin: \"inline\" | \"stylesheet\" | \"user-agent\";\n stylesheet?: string;\n important: boolean;\n mediaQuery?: string;\n}\n\nconst LONGHAND_TO_SHORTHAND: Record<string, string> = {\n \"padding-top\": \"padding\",\n \"padding-right\": \"padding\",\n \"padding-bottom\": \"padding\",\n \"padding-left\": \"padding\",\n \"margin-top\": \"margin\",\n \"margin-right\": \"margin\",\n \"margin-bottom\": \"margin\",\n \"margin-left\": \"margin\",\n \"border-top-width\": \"border-width\",\n \"border-right-width\": \"border-width\",\n \"border-bottom-width\": \"border-width\",\n \"border-left-width\": \"border-width\",\n \"border-top-color\": \"border-color\",\n \"border-right-color\": \"border-color\",\n \"border-bottom-color\": \"border-color\",\n \"border-left-color\": \"border-color\",\n \"border-top-style\": \"border-style\",\n \"border-right-style\": \"border-style\",\n \"border-bottom-style\": \"border-style\",\n \"border-left-style\": \"border-style\",\n \"border-top-left-radius\": \"border-radius\",\n \"border-top-right-radius\": \"border-radius\",\n \"border-bottom-left-radius\": \"border-radius\",\n \"border-bottom-right-radius\": \"border-radius\",\n gap: \"gap\",\n \"row-gap\": \"gap\",\n \"column-gap\": \"gap\",\n};\n\nexport function camelToKebab(s: string): string {\n return s.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n}\n\nfunction formatSheetName(href: string): string {\n if (href === \"embedded\") return \"embedded\";\n try {\n const url = new URL(href);\n return url.pathname.replace(/^\\/_next\\/static\\/css\\//, \"\").replace(/^\\//, \"\");\n } catch {\n return href.slice(0, 80);\n }\n}\n\nfunction walkRules(\n rules: CSSRuleList,\n element: Element,\n properties: string[],\n result: Map<string, StyleSource[]>,\n sheetName: string,\n mediaQuery?: string,\n): void {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSMediaRule) {\n walkRules(rule.cssRules, element, properties, result, sheetName, rule.conditionText);\n continue;\n }\n if (!(rule instanceof CSSStyleRule)) continue;\n try {\n if (!element.matches(rule.selectorText)) continue;\n } catch {\n continue;\n }\n const style = rule.style;\n for (const prop of properties) {\n const kebab = camelToKebab(prop);\n let value = style.getPropertyValue(kebab);\n let matchedProperty = kebab;\n if (!value) {\n const shorthand = LONGHAND_TO_SHORTHAND[kebab];\n if (shorthand) {\n value = style.getPropertyValue(shorthand);\n matchedProperty = shorthand;\n }\n }\n if (value) {\n const src: StyleSource = {\n property: matchedProperty,\n value: value.trim(),\n selector: rule.selectorText,\n origin: \"stylesheet\",\n stylesheet: sheetName,\n important: style.getPropertyPriority(matchedProperty) === \"important\",\n };\n if (mediaQuery) src.mediaQuery = mediaQuery;\n result.get(prop)?.push(src);\n }\n }\n }\n}\n\n/**\n * All matching rules per camelCase property, ordered inline first then !important.\n */\nexport function findStyleSources(element: Element, properties: string[]): Map<string, StyleSource[]> {\n const result = new Map<string, StyleSource[]>();\n for (const prop of properties) {\n result.set(prop, []);\n }\n\n if (element instanceof HTMLElement) {\n const inlineStyle = element.style;\n for (const prop of properties) {\n const kebab = camelToKebab(prop);\n let value = inlineStyle.getPropertyValue(kebab);\n let matchedProperty = kebab;\n if (!value) {\n const shorthand = LONGHAND_TO_SHORTHAND[kebab];\n if (shorthand) {\n value = inlineStyle.getPropertyValue(shorthand);\n matchedProperty = shorthand;\n }\n }\n if (value) {\n result.get(prop)?.push({\n property: matchedProperty,\n value: value.trim(),\n selector: \"[inline]\",\n origin: \"inline\",\n important: inlineStyle.getPropertyPriority(matchedProperty) === \"important\",\n });\n }\n }\n }\n\n for (const sheet of document.styleSheets) {\n try {\n const sheetLabel = sheet.href ? formatSheetName(sheet.href) : \"embedded\";\n walkRules(sheet.cssRules, element, properties, result, sheetLabel);\n } catch {\n /* cross-origin or inaccessible */\n }\n }\n\n for (const [, sources] of result) {\n sources.sort((a, b) => {\n if (a.origin === \"inline\" && b.origin !== \"inline\") return -1;\n if (b.origin === \"inline\" && a.origin !== \"inline\") return 1;\n if (a.important && !b.important) return -1;\n if (b.important && !a.important) return 1;\n return 0;\n });\n }\n\n return result;\n}\n\n/** One-line “winning rule” summary for copy output. */\nexport function formatStyleSourceSummary(sources: StyleSource[]): string {\n if (sources.length === 0) return \"unknown\";\n const winner = sources[0];\n if (winner.origin === \"inline\") return \"inline style\";\n let result = `\\`${winner.selector}\\``;\n if (winner.stylesheet) result += ` in \\`${winner.stylesheet}\\``;\n if (winner.mediaQuery) result += ` @media(${winner.mediaQuery})`;\n if (winner.important) result += \" !important\";\n return result;\n}\n","/**\n * Per-property token / variable / stylesheet context for copy enrichment.\n */\n\nimport { findStyleSources } from \"./style-source\";\nimport { getTokensForProperty, scanTokens } from \"./token-scanner\";\nimport type { StyleSnapshot } from \"./use-selection\";\n\nconst MAX_ALTERNATIVES = 3;\nconst MAX_CSS_VARS = 2;\n\n/** Same shape as `CollapsedChangeRow` in `use-copy-prompt` (avoid circular imports). */\nexport type CollapseRowInput = {\n sortKey:\n | keyof StyleSnapshot\n | \"__borderWidthAll\"\n | \"__borderRadiusAll\"\n | \"__borderColorAll\"\n | \"__borderStyleAll\";\n label: string;\n cssProp: string;\n before: string;\n after: string;\n variableLink?: string;\n};\n\nexport type RecommendedToken = {\n type: \"css-variable\" | \"utility-class\";\n name: string;\n value: string;\n exact: boolean;\n distance?: string;\n};\n\nexport type EnrichedCollapsedRow = CollapseRowInput & {\n snapshotKey: keyof StyleSnapshot;\n recommended?: RecommendedToken;\n alternatives: RecommendedToken[];\n cssVariableNames: string[];\n conflicts: import(\"./style-source\").StyleSource[];\n winningSource?: import(\"./style-source\").StyleSource;\n};\n\nfunction valuesRoughlyEqual(a: string, b: string): boolean {\n const x = a.trim().toLowerCase().replace(/\\s+/g, \"\");\n const y = b.trim().toLowerCase().replace(/\\s+/g, \"\");\n if (!x || !y) return false;\n return x === y || x.includes(y) || y.includes(x);\n}\n\nfunction snapshotKeyForRow(row: CollapseRowInput): keyof StyleSnapshot {\n if (row.sortKey === \"__borderWidthAll\") return \"borderTopWidth\";\n if (row.sortKey === \"__borderRadiusAll\") return \"borderTopLeftRadius\";\n if (row.sortKey === \"__borderColorAll\") return \"borderTopColor\";\n if (row.sortKey === \"__borderStyleAll\") return \"borderTopStyle\";\n return row.sortKey as keyof StyleSnapshot;\n}\n\nconst SKIP_CSS_VAR_VALUE_MATCH = new Set([\"top\", \"right\", \"bottom\", \"left\", \"transform\"]);\n\nfunction findCssVarNamesForValue(cssPropKebab: string, targetValue: string): string[] {\n if (SKIP_CSS_VAR_VALUE_MATCH.has(cssPropKebab)) return [];\n const names: string[] = [];\n try {\n const { variables } = scanTokens();\n const t = targetValue.trim().toLowerCase();\n const root = document.documentElement;\n for (const v of variables) {\n const resolved = getComputedStyle(root).getPropertyValue(v.name).trim();\n const r = resolved.trim().toLowerCase();\n if (r && (r === t || valuesRoughlyEqual(resolved, targetValue))) {\n names.push(v.name);\n if (names.length >= MAX_CSS_VARS) break;\n }\n }\n } catch {\n /* ignore */\n }\n return names;\n}\n\nexport function enrichChangeRows(\n element: Element,\n rows: CollapseRowInput[],\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string> | undefined,\n): EnrichedCollapsedRow[] {\n return rows.map((row) => {\n const snapshotKey = snapshotKeyForRow(row);\n const link = row.variableLink ?? variableLinks?.get(snapshotKey);\n let recommended: RecommendedToken | undefined;\n if (link) {\n const n = link.startsWith(\"--\") ? link : `--${link}`;\n recommended = {\n type: \"css-variable\",\n name: `var(${n})`,\n value: row.after,\n exact: true,\n };\n }\n\n const tokens = (() => {\n try {\n return getTokensForProperty(row.cssProp);\n } catch {\n return [];\n }\n })();\n\n if (!recommended && tokens.length > 0) {\n let best = tokens.find((t) => t.value.trim().toLowerCase() === row.after.trim().toLowerCase());\n let exact = Boolean(best);\n if (!best) {\n best = tokens.find((t) => valuesRoughlyEqual(t.value, row.after)) ?? tokens[0];\n exact = best ? valuesRoughlyEqual(best.value, row.after) : false;\n }\n if (best) {\n recommended = {\n type: \"utility-class\",\n name: `.${best.className}`,\n value: best.value,\n exact,\n distance: exact ? undefined : `nearest: ${best.value} vs ${row.after}`,\n };\n }\n }\n\n const cssVarNames = findCssVarNamesForValue(row.cssProp, row.after);\n if (!recommended && cssVarNames.length > 0) {\n recommended = {\n type: \"css-variable\",\n name: `var(${cssVarNames[0]})`,\n value: row.after,\n exact: true,\n };\n }\n\n const alternatives: RecommendedToken[] = [];\n const recName = recommended?.name;\n for (const t of tokens) {\n if (alternatives.length >= MAX_ALTERNATIVES) break;\n const cand = `.${t.className}`;\n if (cand === recName) continue;\n const ex = t.value.trim().toLowerCase() === row.after.trim().toLowerCase();\n alternatives.push({\n type: \"utility-class\",\n name: cand,\n value: t.value,\n exact: ex,\n distance: ex ? undefined : undefined,\n });\n }\n\n let winningSource: import(\"./style-source\").StyleSource | undefined;\n let conflicts: import(\"./style-source\").StyleSource[] = [];\n try {\n const camel = String(snapshotKey);\n const map = findStyleSources(element, [camel]);\n const list = map.get(camel) ?? [];\n if (list.length > 0) {\n winningSource = list[0];\n conflicts = list.slice(1, 4);\n }\n } catch {\n /* ignore */\n }\n\n return {\n ...row,\n snapshotKey,\n recommended,\n alternatives,\n cssVariableNames: cssVarNames,\n conflicts,\n winningSource,\n };\n });\n}\n","/**\n * React fiber traversal for extracting component hierarchy and source file locations.\n * Works with React 18+ dev builds that attach `__reactFiber$` to DOM nodes.\n */\n\nexport interface ReactComponentInfo {\n components: string[];\n sourceFile: { fileName: string; lineNumber: number; columnNumber?: number } | null;\n}\n\nexport function getFiberFromElement(el: Element): unknown {\n const elAny = el as unknown as Record<string, unknown>;\n for (const key of Object.keys(elAny)) {\n if (key.startsWith(\"__reactFiber$\")) return elAny[key];\n }\n return null;\n}\n\nfunction normalizeSourceFilePath(fileName: string): string {\n let path = fileName.replace(/^file:\\/\\//, \"\");\n path = path.replace(/^\\/([A-Za-z]:\\/)/, \"$1\");\n const inNodeModules = path.split(\"/node_modules/\");\n if (inNodeModules.length > 1) {\n path = `node_modules/${inNodeModules[inNodeModules.length - 1]}`;\n }\n const projectMarker = \"/able/\";\n const i = path.indexOf(projectMarker);\n if (i !== -1) return path.slice(i + projectMarker.length);\n return path.replace(/\\\\/g, \"/\");\n}\n\nfunction isProjectSourceFile(file: string): boolean {\n const f = file.replace(/\\\\/g, \"/\");\n if (!f || f.startsWith(\"node_modules/\") || f.includes(\"/node_modules/\")) return false;\n if (f.includes(\".next/\") || f.includes(\"__next\") || f.includes(\"next/dist\") || f.includes(\"@vercel/\")) return false;\n return (\n f.startsWith(\"app/\") ||\n f.startsWith(\"components/\") ||\n f.startsWith(\"lib/\") ||\n f.startsWith(\"pages/\") ||\n f.startsWith(\"src/\") ||\n f.includes(\"/app/\") ||\n f.includes(\"/components/\") ||\n f.includes(\"/lib/\") ||\n f.includes(\"/pages/\") ||\n f.includes(\"/src/\")\n );\n}\n\nfunction isBoilerplateStackFile(file: string): boolean {\n const f = file.replace(/\\\\/g, \"/\");\n return f.includes(\"components/ui/\") || f.includes(\"components/providers/\") ||\n f.includes(\"components/theme/\") || f.includes(\"components/click-sound/\");\n}\n\nfunction readDebugSource(fiber: Record<string, unknown>): { fileName: string; lineNumber: number; columnNumber?: number } | null {\n const ds = fiber._debugSource as { fileName?: string; lineNumber?: number; columnNumber?: number } | undefined;\n if (ds?.fileName != null && ds.lineNumber != null) {\n return { fileName: ds.fileName, lineNumber: ds.lineNumber, columnNumber: ds.columnNumber };\n }\n const info = fiber._debugInfo;\n if (info != null && typeof info === \"object\" && !Array.isArray(info)) {\n const row = info as Record<string, unknown>;\n const fileName = row.fileName ?? row.filename;\n const lineNumber = row.lineNumber ?? row.line;\n if (typeof fileName === \"string\" && typeof lineNumber === \"number\") {\n return { fileName, lineNumber, columnNumber: typeof row.columnNumber === \"number\" ? row.columnNumber : undefined };\n }\n }\n return null;\n}\n\nfunction componentNameFromType(type: unknown): string | null {\n if (type == null || typeof type === \"string\") return null;\n if (typeof type === \"function\") {\n const fn = type as { name?: string; displayName?: string };\n const n = fn.displayName || fn.name;\n return n && !n.startsWith(\"_\") ? n : \"Anonymous\";\n }\n if (typeof type === \"object\") {\n const o = type as Record<string, unknown>;\n if (typeof o.render === \"function\") {\n const r = o.render as { name?: string; displayName?: string };\n return r.displayName || r.name || \"ForwardRef\";\n }\n if (o.type != null) return componentNameFromType(o.type);\n }\n return null;\n}\n\nconst REACT_STACK_SKIP_NAMES = new Set([\n \"OuterLayoutRouter\", \"InnerLayoutRouter\", \"SegmentStateProvider\",\n \"RenderFromTemplateContext\", \"ScrollAndFocusHandler\", \"InnerScrollAndFocusHandler\",\n \"ErrorBoundary\", \"LoadingBoundary\", \"HTTPAccessFallbackBoundary\",\n \"HTTPAccessFallbackErrorBoundary\", \"RedirectBoundary\", \"RedirectErrorBoundary\",\n \"SegmentViewNode\", \"ViewportBoundary\", \"MetadataBoundary\", \"OutletBoundary\",\n \"Providers\", \"ViewTransitions\", \"TooltipProvider\", \"TooltipProviderProvider\",\n \"AppThemeProvider\", \"ClickSoundProvider\", \"DesignEditor\",\n]);\n\nfunction isNoiseComponentName(name: string): boolean {\n if (name.length === 1 && /^[A-Za-z]$/.test(name)) return true;\n if (name.endsWith(\"Provider\")) return true;\n return false;\n}\n\nexport function getExactSourceLocation(el: Element): string | null {\n let fiber: unknown = getFiberFromElement(el);\n while (fiber && typeof fiber === \"object\") {\n const f = fiber as Record<string, unknown>;\n const debugSource = readDebugSource(f);\n if (debugSource) {\n const file = normalizeSourceFilePath(debugSource.fileName);\n if (isProjectSourceFile(file)) {\n const col = debugSource.columnNumber != null ? `:${debugSource.columnNumber}` : \"\";\n return `${file}:${debugSource.lineNumber}${col}`;\n }\n }\n fiber = f.return;\n }\n return null;\n}\n\nexport function getReactComponentStack(el: Element): string | null {\n if (typeof window === \"undefined\") return null;\n const fiber = getFiberFromElement(el);\n if (!fiber || typeof fiber !== \"object\") return null;\n\n const fromProject: string[] = [];\n const fallback: string[] = [];\n let f: unknown = fiber;\n let depth = 0;\n while (f && typeof f === \"object\" && depth++ < 64) {\n const node = f as Record<string, unknown>;\n const name = componentNameFromType(node.type);\n if (!name || REACT_STACK_SKIP_NAMES.has(name) || isNoiseComponentName(name)) {\n f = node.return;\n continue;\n }\n const ds = readDebugSource(node);\n if (ds) {\n const file = normalizeSourceFilePath(ds.fileName);\n if (isProjectSourceFile(file) && !isBoilerplateStackFile(file)) fromProject.push(name);\n if (file.startsWith(\"node_modules/\") || (isProjectSourceFile(file) && isBoilerplateStackFile(file))) {\n f = node.return;\n continue;\n }\n }\n fallback.push(name);\n f = node.return;\n }\n if (fromProject.length > 0) return fromProject.reverse().join(\" > \");\n if (fallback.length === 0) return null;\n return fallback.slice(0, 14).reverse().join(\" > \");\n}\n\nexport function getReactComponentInfo(el: Element): ReactComponentInfo {\n const stack = getReactComponentStack(el);\n const source = getExactSourceLocation(el);\n return {\n components: stack ? stack.split(\" > \") : [],\n sourceFile: source ? parseSourceLocation(source) : null,\n };\n}\n\nfunction parseSourceLocation(s: string): { fileName: string; lineNumber: number; columnNumber?: number } {\n const parts = s.split(\":\");\n const fileName = parts.slice(0, -1).join(\":\").replace(/:$/, \"\") || parts[0];\n const lineNumber = Number.parseInt(parts[parts.length - 1], 10) || 1;\n return { fileName: fileName.replace(/:$/, \"\"), lineNumber };\n}\n","\"use client\";\n\nimport { enrichChangeRows, type EnrichedCollapsedRow, type RecommendedToken } from \"./change-enrichment\";\nimport { getUniqueSelector } from \"./preview-engine\";\nimport { formatStyleSourceSummary } from \"./style-source\";\nimport { detectFramework, summarizeTokenSystem } from \"./token-scanner\";\nimport type { FluxStructuralReorder } from \"./drag-reorder-types\";\nimport type { CopyBatchItem, DesignEditorElement, DetachedVariableEntry, StyleSnapshot } from \"./use-selection\";\nimport {\n STYLE_KEYS,\n CSS_PROP_MAP,\n getClassNameString,\n getComputedSnapshot,\n getElementPath,\n getElementSelector,\n} from \"./use-selection\";\nimport { getExactSourceLocation, getReactComponentStack } from \"./react-info\";\n\nconst PSEUDO_STATES = [\":hover\", \":focus\", \":active\", \":focus-visible\", \":focus-within\"] as const;\n\nfunction parsePseudoState(selector: string): { base: string; pseudoState: string | null } {\n for (const pseudo of PSEUDO_STATES) {\n if (selector.endsWith(pseudo)) {\n return { base: selector.slice(0, -pseudo.length), pseudoState: pseudo.slice(1) };\n }\n }\n return { base: selector, pseudoState: null };\n}\n\n/** Selector scope line for copy output (standard detail). */\nexport function describeSelectorScope(selector: string): string | null {\n const { base } = parsePseudoState(selector.trim());\n if (!base || typeof document === \"undefined\") return null;\n\n const noParen = base.replace(/\\([^)]*\\)/g, \"\");\n const hasDescendant = /[.\\])\\w]\\s+[.\\[:]/.test(noParen);\n const hasChild = /[.\\])\\w]\\s*>\\s*[.\\[:]/.test(noParen);\n\n if (base.startsWith(\".\") || base.startsWith(\":\") || base.startsWith(\"[\")) {\n try {\n const count = document.querySelectorAll(base).length;\n const countStr = count > 0 ? `, ${count} element${count > 1 ? \"s\" : \"\"}` : \"\";\n if (hasDescendant || hasChild) {\n return `ancestor-scoped${countStr}`;\n }\n if (count > 0) {\n return `class-scoped${countStr}`;\n }\n } catch {\n /* fall through */\n }\n if (hasDescendant || hasChild) return \"ancestor-scoped\";\n return \"class-scoped\";\n }\n\n if (base.startsWith(\"#\")) return \"id-scoped, unique\";\n if (base.includes(\">\")) return \"element-specific\";\n return null;\n}\n\nfunction getNthOfTypeIndex(el: Element): number {\n const parent = el.parentElement;\n if (!parent) return 1;\n const tag = el.tagName.toLowerCase();\n let n = 0;\n for (const child of parent.children) {\n if (child.tagName.toLowerCase() === tag) {\n n++;\n if (child === el) return n;\n }\n }\n return 1;\n}\n\nfunction getPreciseSelector(el: Element): string {\n if (el.id) return `#${CSS.escape(el.id)}`;\n const tag = el.tagName.toLowerCase();\n const n = getNthOfTypeIndex(el);\n const classes = (getClassNameString(el).trim().match(/\\S+/g) ?? []).slice(0, 2);\n const suffix = classes.length ? `.${classes.join(\".\")}` : \"\";\n return `${tag}:nth-of-type(${n})${suffix}`;\n}\n\nfunction pathWithLeafNthOfType(fullPath: string, el: Element): string {\n const parts = fullPath.split(\" > \");\n if (parts.length === 0) return fullPath;\n const tag = el.tagName.toLowerCase();\n const n = getNthOfTypeIndex(el);\n const last = parts[parts.length - 1];\n if (last.includes(\"nth-of-type\")) return fullPath;\n const re = new RegExp(`^${tag}(?=(\\\\.|#|$))`);\n parts[parts.length - 1] = re.test(last) ? last.replace(re, `${tag}:nth-of-type(${n})`) : `${tag}:nth-of-type(${n})`;\n return parts.join(\" > \");\n}\n\nfunction truncateText(s: string, max: number): string {\n const t = s.replace(/\\s+/g, \" \").trim();\n if (t.length <= max) return t;\n return `${t.slice(0, max - 1)}\\u2026`;\n}\n\nconst PROP_LABELS: Record<string, string> = {\n fontFamily: \"font-family\",\n fontSize: \"font-size\",\n fontWeight: \"font-weight\",\n lineHeight: \"line-height\",\n letterSpacing: \"letter-spacing\",\n color: \"color\",\n textAlign: \"text-align\",\n width: \"width\",\n height: \"height\",\n padding: \"padding\",\n margin: \"margin\",\n paddingTop: \"padding-top\",\n paddingRight: \"padding-right\",\n paddingBottom: \"padding-bottom\",\n paddingLeft: \"padding-left\",\n marginTop: \"margin-top\",\n marginRight: \"margin-right\",\n marginBottom: \"margin-bottom\",\n marginLeft: \"margin-left\",\n position: \"position\",\n top: \"top\",\n right: \"right\",\n bottom: \"bottom\",\n left: \"left\",\n alignSelf: \"align-self\",\n justifySelf: \"justify-self\",\n overflow: \"overflow\",\n display: \"display\",\n flexDirection: \"flex-direction\",\n justifyContent: \"justify-content\",\n alignItems: \"align-items\",\n gap: \"gap\",\n rowGap: \"row-gap\",\n columnGap: \"column-gap\",\n gridTemplateColumns: \"grid-template-columns\",\n gridTemplateRows: \"grid-template-rows\",\n backgroundColor: \"background-color\",\n backgroundImage: \"background-image\",\n borderTopWidth: \"border-top-width\",\n borderRightWidth: \"border-right-width\",\n borderBottomWidth: \"border-bottom-width\",\n borderLeftWidth: \"border-left-width\",\n borderTopLeftRadius: \"border-top-left-radius\",\n borderTopRightRadius: \"border-top-right-radius\",\n borderBottomRightRadius: \"border-bottom-right-radius\",\n borderBottomLeftRadius: \"border-bottom-left-radius\",\n borderTopColor: \"border-top-color\",\n borderRightColor: \"border-right-color\",\n borderBottomColor: \"border-bottom-color\",\n borderLeftColor: \"border-left-color\",\n borderTopStyle: \"border-top-style\",\n borderRightStyle: \"border-right-style\",\n borderBottomStyle: \"border-bottom-style\",\n borderLeftStyle: \"border-left-style\",\n borderColor: \"border-color\",\n borderRadius: \"border-radius\",\n borderStyle: \"border-style\",\n boxShadow: \"box-shadow\",\n opacity: \"opacity\",\n __borderWidthAll: \"border-width\",\n __borderRadiusAll: \"border-radius\",\n __borderColorAll: \"border-color\",\n __borderStyleAll: \"border-style\",\n};\n\nfunction shortenPathSegment(segment: string): string {\n if (segment.length <= 44) return segment;\n const hash = segment.indexOf(\"#\");\n if (hash !== -1) {\n const beforeId = segment.slice(0, hash);\n const id = segment.slice(hash);\n const dot = beforeId.indexOf(\".\");\n return dot === -1 ? segment : `${beforeId.slice(0, dot)}${id}`;\n }\n const dot = segment.indexOf(\".\");\n return dot === -1 ? segment : segment.slice(0, dot);\n}\n\nfunction abbreviateDomPath(full: string, maxLen = 160): string {\n const parts = full.split(\" > \").map(shortenPathSegment);\n const joined = parts.join(\" > \");\n if (joined.length <= maxLen) return joined;\n if (parts.length <= 4) return joined;\n return `\\u2026 > ${parts.slice(-5).join(\" > \")}`;\n}\n\nfunction escapeMdCell(s: string): string {\n return s.replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \");\n}\n\nfunction formatStylingApproach(approach: string): string {\n switch (approach) {\n case \"tailwind\":\n return \"Tailwind CSS (modify utility classes)\";\n case \"css-modules\":\n return \"CSS Modules (modify `.module.css` file)\";\n case \"css-in-js\":\n return \"CSS-in-JS / Emotion (modify style object)\";\n case \"styled-components\":\n return \"styled-components (modify template literal)\";\n case \"plain-css\":\n return \"Plain CSS (modify stylesheet)\";\n case \"custom\":\n return \"Custom / mixed CSS\";\n default:\n return approach;\n }\n}\n\n/** Recommended token / class hints (Token column). */\nfunction formatRecommendedCell(rec?: RecommendedToken): string {\n if (!rec) return \"\\u2014\";\n const quoted = `\\`${rec.name}\\``;\n if (!rec.exact && rec.distance) return `${quoted} (${rec.distance})`;\n return quoted;\n}\n\nexport type CollapsedSyntheticKey =\n | \"__borderWidthAll\"\n | \"__borderRadiusAll\"\n | \"__borderColorAll\"\n | \"__borderStyleAll\";\n\nexport type CollapsedChangeRow = {\n sortKey: keyof StyleSnapshot | CollapsedSyntheticKey;\n label: string;\n cssProp: string;\n before: string;\n after: string;\n variableLink?: string;\n};\n\nfunction tryCollapseFourEqualSides(\n m: Map<keyof StyleSnapshot, { before: string; after: string }>,\n keys: (keyof StyleSnapshot)[],\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string> | undefined,\n out: CollapsedChangeRow,\n): boolean {\n if (!keys.every((k) => m.has(k)) || keys.some((k) => variableLinks?.has(k))) return false;\n const rows = keys.map((k) => m.get(k)).filter((v): v is { before: string; after: string } => v != null);\n if (\n rows.length !== 4 ||\n new Set(rows.map((r) => r.before)).size !== 1 ||\n new Set(rows.map((r) => r.after)).size !== 1\n ) {\n return false;\n }\n for (const k of keys) m.delete(k);\n Object.assign(out, {\n before: rows[0].before,\n after: rows[0].after,\n variableLink: undefined,\n });\n return true;\n}\n\n/** Collapse matching longhands into one row in the changes table. */\nexport function collapseChangesForPrompt(\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>,\n variableLinks: ReadonlyMap<keyof StyleSnapshot, string> | undefined,\n): CollapsedChangeRow[] {\n const m = new Map(changes);\n const synthetics: CollapsedChangeRow[] = [];\n\n const padLong: (keyof StyleSnapshot)[] = [\"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\"];\n if (padLong.every((k) => m.has(k)) && !padLong.some((k) => variableLinks?.has(k))) {\n const rows = padLong.map((k) => m.get(k)).filter((v): v is { before: string; after: string } => v != null);\n if (\n rows.length === 4 &&\n new Set(rows.map((r) => r.before)).size === 1 &&\n new Set(rows.map((r) => r.after)).size === 1\n ) {\n for (const k of padLong) m.delete(k);\n m.set(\"padding\", { before: rows[0].before, after: rows[0].after });\n }\n }\n\n const marLong: (keyof StyleSnapshot)[] = [\"marginTop\", \"marginRight\", \"marginBottom\", \"marginLeft\"];\n if (marLong.every((k) => m.has(k)) && !marLong.some((k) => variableLinks?.has(k))) {\n const rows = marLong.map((k) => m.get(k)).filter((v): v is { before: string; after: string } => v != null);\n if (\n rows.length === 4 &&\n new Set(rows.map((r) => r.before)).size === 1 &&\n new Set(rows.map((r) => r.after)).size === 1\n ) {\n for (const k of marLong) m.delete(k);\n m.set(\"margin\", { before: rows[0].before, after: rows[0].after });\n }\n }\n\n const bw: CollapsedChangeRow = {\n sortKey: \"__borderWidthAll\",\n label: PROP_LABELS.__borderWidthAll,\n cssProp: \"border-width\",\n before: \"\",\n after: \"\",\n };\n if (\n tryCollapseFourEqualSides(\n m,\n [\"borderTopWidth\", \"borderRightWidth\", \"borderBottomWidth\", \"borderLeftWidth\"],\n variableLinks,\n bw,\n )\n ) {\n synthetics.push(bw);\n }\n\n const br: CollapsedChangeRow = {\n sortKey: \"__borderRadiusAll\",\n label: PROP_LABELS.__borderRadiusAll,\n cssProp: \"border-radius\",\n before: \"\",\n after: \"\",\n };\n if (\n tryCollapseFourEqualSides(\n m,\n [\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\",\n \"borderBottomRightRadius\",\n \"borderBottomLeftRadius\",\n ],\n variableLinks,\n br,\n )\n ) {\n synthetics.push(br);\n }\n\n const bc: CollapsedChangeRow = {\n sortKey: \"__borderColorAll\",\n label: PROP_LABELS.__borderColorAll,\n cssProp: \"border-color\",\n before: \"\",\n after: \"\",\n };\n if (\n tryCollapseFourEqualSides(\n m,\n [\"borderTopColor\", \"borderRightColor\", \"borderBottomColor\", \"borderLeftColor\"],\n variableLinks,\n bc,\n )\n ) {\n synthetics.push(bc);\n }\n\n const bs: CollapsedChangeRow = {\n sortKey: \"__borderStyleAll\",\n label: PROP_LABELS.__borderStyleAll,\n cssProp: \"border-style\",\n before: \"\",\n after: \"\",\n };\n if (\n tryCollapseFourEqualSides(\n m,\n [\"borderTopStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderLeftStyle\"],\n variableLinks,\n bs,\n )\n ) {\n synthetics.push(bs);\n }\n\n const out: CollapsedChangeRow[] = [];\n for (const [k, v] of m) {\n out.push({\n sortKey: k,\n label: PROP_LABELS[k] ?? String(k),\n cssProp: CSS_PROP_MAP[k],\n before: v.before,\n after: v.after,\n variableLink: variableLinks?.get(k),\n });\n }\n out.push(...synthetics);\n return sortCollapsedRows(out);\n}\n\nfunction sortOrderIndex(sortKey: CollapsedChangeRow[\"sortKey\"], order: Map<keyof StyleSnapshot, number>): number {\n if (sortKey === \"__borderWidthAll\") return order.get(\"borderTopWidth\") ?? 99;\n if (sortKey === \"__borderRadiusAll\") return order.get(\"borderTopLeftRadius\") ?? 99;\n if (sortKey === \"__borderColorAll\") return order.get(\"borderTopColor\") ?? 99;\n if (sortKey === \"__borderStyleAll\") return order.get(\"borderTopStyle\") ?? 99;\n return order.get(sortKey as keyof StyleSnapshot) ?? 999;\n}\n\nfunction sortCollapsedRows(rows: CollapsedChangeRow[]): CollapsedChangeRow[] {\n const order = new Map(STYLE_KEYS.map((k, i) => [k, i]));\n return rows.sort((a, b) => sortOrderIndex(a.sortKey, order) - sortOrderIndex(b.sortKey, order));\n}\n\n/** Resolution context block (winning rule + alternatives). */\nfunction formatResolutionContextFromEnriched(rows: EnrichedCollapsedRow[]): string | null {\n const entries: string[] = [];\n for (const row of rows) {\n const hasAlt = row.alternatives.length > 0;\n const hasVars = row.cssVariableNames.length > 0;\n const hasConf = row.conflicts.length > 0;\n const hasWin = Boolean(row.winningSource);\n if (!row.recommended && !hasAlt && !hasVars && !hasConf && !hasWin) continue;\n\n const lines: string[] = [];\n lines.push(`**\\`${row.label}\\`** \\`${row.before}\\` \\u2192 \\`${row.after}\\``);\n\n if (row.winningSource) {\n lines.push(`- Source: ${formatStyleSourceSummary([row.winningSource])}`);\n }\n if (row.recommended) {\n const r = row.recommended;\n const label = r.exact ? \"exact\" : r.distance || \"fuzzy\";\n lines.push(`- Recommended: \\`${r.name}\\` (${label}, \\`${escapeMdCell(r.value)}\\`)`);\n }\n if (hasAlt) {\n lines.push(\n `- Alternatives: ${row.alternatives.map((a) => `\\`${a.name}\\` (\\`${escapeMdCell(a.value)}\\`)`).join(\", \")}`,\n );\n }\n if (hasVars) {\n lines.push(`- CSS vars: ${row.cssVariableNames.map((v) => `\\`var(${v})\\``).join(\", \")}`);\n }\n if (hasConf) {\n for (const c of row.conflicts) {\n const imp = c.important ? \", !important\" : \"\";\n lines.push(`- Competing rule: \\`${escapeMdCell(c.selector)}\\` (\\`${escapeMdCell(c.value)}\\`${imp})`);\n }\n }\n entries.push(lines.join(\"\\n\"));\n }\n if (entries.length === 0) return null;\n return `### Resolution context\\n\\n${entries.join(\"\\n\\n\")}\\n`;\n}\n\nfunction buildSharedHeaderLines(elementCount: number): {\n lines: string[];\n framework: ReturnType<typeof detectFramework>;\n} {\n const lines: string[] = [];\n lines.push(\"Apply these visual changes to the source code:\\n\");\n lines.push(`# Visual Changes (${elementCount} element${elementCount !== 1 ? \"s\" : \"\"})`);\n lines.push(\"\");\n lines.push(\"**Environment:**\");\n const url = typeof window !== \"undefined\" ? window.location.href : \"\";\n if (url) lines.push(`- URL: ${url}`);\n if (typeof window !== \"undefined\") {\n lines.push(`- Viewport: ${window.innerWidth}\\u00d7${window.innerHeight}`);\n lines.push(`- Device Pixel Ratio: ${window.devicePixelRatio}`);\n lines.push(`- Timestamp: ${new Date().toISOString()}`);\n }\n lines.push(\"\");\n\n let framework: ReturnType<typeof detectFramework> = \"unknown\";\n try {\n const tokenSummary = summarizeTokenSystem();\n if (tokenSummary) {\n lines.push(`> **Design tokens detected:** ${tokenSummary}`);\n lines.push(\"\");\n }\n framework = detectFramework();\n } catch {\n /* ignore scan failures */\n }\n if (framework === \"tailwind\") {\n lines.push(\n \"> **Framework:** Tailwind CSS detected. Apply all changes using Tailwind utility classes \\u2014 do NOT use inline styles or raw CSS values. When a class swap is suggested, replace the old class with the new one in the JSX/HTML.\",\n );\n lines.push(\"\");\n } else if (framework === \"css-modules\") {\n lines.push(\n \"> **Framework:** CSS Modules\\u2013style hashed classes detected. Prefer edits in the co-located `.module.css` (or equivalent) when matching selectors.\",\n );\n lines.push(\"\");\n }\n return { lines, framework };\n}\n\nfunction buildElementSectionLines(\n item: CopyBatchItem,\n framework: ReturnType<typeof detectFramework>,\n): string[] {\n const el = item.el;\n const changes = item.changes;\n const links = item.variableLinks;\n const detached = item.detachedVariables;\n\n const tag = el.tagName.toLowerCase();\n const textHeadline = truncateText(el.textContent ?? \"\", 60);\n const selectorLoose = getElementSelector(el);\n let selectorPrimary = selectorLoose;\n try {\n selectorPrimary = getUniqueSelector(el);\n } catch {\n selectorPrimary = selectorLoose;\n }\n const selectorPrecise = getPreciseSelector(el);\n const pathRaw = getElementPath(el);\n const pathFull = pathWithLeafNthOfType(pathRaw, el);\n const pathAbbrev = abbreviateDomPath(pathFull);\n const classes = getClassNameString(el).trim();\n const textPreview = truncateText(el.textContent ?? \"\", 180);\n const nth = getNthOfTypeIndex(el);\n const source = getExactSourceLocation(el);\n const reactStack = getReactComponentStack(el);\n\n const lines: string[] = [];\n lines.push(`## \\`<${tag}>\\`${textHeadline ? ` \"${textHeadline.replace(/\"/g, \"'\")}\"` : \"\"}`);\n lines.push(\"\");\n\n if (source) {\n lines.push(`**Source:** \\`${source.replace(/`/g, \"'\")}\\``);\n } else {\n lines.push(\n \"**Source:** *(not mapped \\u2014 React dev metadata may omit `_debugSource` in this build. Use **Component** + **DOM Path** below.)*\",\n );\n }\n\n if (reactStack) {\n lines.push(`**Component:** ${reactStack.replace(/ > /g, \" \\u2192 \").replace(/`/g, \"'\")}`);\n }\n\n if (framework !== \"unknown\") {\n lines.push(`**Styling:** ${formatStylingApproach(framework)}`);\n }\n\n const pathShown = pathFull.length > 720 ? `${pathFull.slice(0, 717)}\\u2026` : pathFull;\n lines.push(`**DOM Path:** \\`${pathShown.replace(/`/g, \"'\")}\\``);\n if (pathAbbrev !== pathFull && pathAbbrev.length < pathFull.length) {\n lines.push(`**DOM Path (abbrev):** \\`${pathAbbrev.replace(/`/g, \"'\")}\\``);\n }\n\n const { base: baseSelector, pseudoState } = parsePseudoState(selectorPrimary);\n const selectorNotes: string[] = [];\n if (pseudoState) selectorNotes.push(`${pseudoState} state`);\n const scope = describeSelectorScope(selectorPrimary);\n if (scope) selectorNotes.push(scope);\n const selSuffix = selectorNotes.length > 0 ? ` (${selectorNotes.join(\", \")})` : \"\";\n lines.push(`**Selector:** \\`${baseSelector.replace(/`/g, \"'\")}\\`${selSuffix}`);\n\n const noParen = baseSelector.replace(/\\([^)]*\\)/g, \"\");\n const isAncestorSelector =\n /\\.[a-zA-Z][\\w-]*\\s+\\.[a-zA-Z]/.test(noParen) || /\\.[a-zA-Z][\\w-]*\\s*>\\s*\\.[a-zA-Z]/.test(noParen);\n if (isAncestorSelector) {\n const parts = baseSelector.split(/\\s+(?=[.#\\[:])/).filter(Boolean);\n if (parts.length >= 2) {\n const ancestorPart = parts.slice(0, -1).join(\" \");\n const elementPart = parts[parts.length - 1];\n lines.push(`**Ancestor context:** \\`${ancestorPart}\\` \\u2014 change only applies inside this ancestor`);\n lines.push(`**Target element:** \\`${elementPart}\\` \\u2014 the element being styled`);\n }\n } else {\n const compoundClasses = baseSelector.match(/\\.[a-zA-Z0-9_-]+/g);\n if (compoundClasses && compoundClasses.length > 1) {\n const breakdown = compoundClasses.map((c) => {\n const cls = c.slice(1);\n try {\n const count = document.querySelectorAll(c).length;\n return `\\`.${cls}\\` (${count})`;\n } catch {\n return `\\`.${cls}\\``;\n }\n });\n lines.push(`**Target classes:** ${breakdown.join(\" \\u2192 \")} \\u2014 apply where all are present`);\n }\n }\n\n lines.push(\n `**Sibling disambiguation:** \\`${selectorPrecise.replace(/`/g, \"'\")}\\` *(leaf \\`:nth-of-type(${nth})\\` among same-tag siblings)*`,\n );\n if (selectorLoose !== selectorPrimary) {\n lines.push(`**Selector (alternate):** \\`${selectorLoose.replace(/`/g, \"'\")}\\``);\n }\n\n lines.push(`**Text:** \\`${textPreview.replace(/`/g, \"'\")}\\``);\n if (classes) lines.push(`**Classes:** \\`${classes.replace(/`/g, \"'\")}\\``);\n\n lines.push(\"\");\n lines.push(\"### Changes\");\n lines.push(\"\");\n lines.push(\"| Property | Before | After | Token |\");\n lines.push(\"| --- | --- | --- | --- |\");\n\n if (changes.size === 0) {\n lines.push(\n \"| \\u2014 | \\u2014 | \\u2014 | *No tracked edits for this node in the batch (computed vs snapshot).* |\",\n );\n lines.push(\"\");\n lines.push(\"### Current computed styles\");\n lines.push(\"\");\n lines.push(\"| Property | Value |\");\n lines.push(\"| --- | --- |\");\n const snap = getComputedSnapshot(el);\n const snapshotKeys: (keyof StyleSnapshot)[] = [\n \"fontFamily\",\n \"fontSize\",\n \"fontWeight\",\n \"lineHeight\",\n \"letterSpacing\",\n \"color\",\n \"textAlign\",\n \"width\",\n \"height\",\n \"padding\",\n \"margin\",\n ];\n for (const key of snapshotKeys) {\n const label = PROP_LABELS[key] ?? String(key);\n lines.push(`| ${escapeMdCell(label)} | \\`${escapeMdCell(snap[key])}\\` |`);\n }\n } else {\n lines.push(\"\");\n lines.push(\n \"> Rows use **preview sheet** values where relevant (e.g. `width: 100%`) even when computed pixels match the pre-edit snapshot.\",\n );\n lines.push(\"\");\n\n const collapsed = collapseChangesForPrompt(changes, links);\n const enriched = enrichChangeRows(el, collapsed, links);\n for (const row of enriched) {\n const afterShown = row.variableLink\n ? `var(${row.variableLink.startsWith(\"--\") ? row.variableLink : `--${row.variableLink}`})`\n : row.after;\n const tokenCell = formatRecommendedCell(row.recommended);\n lines.push(\n `| \\`${escapeMdCell(row.label)}\\` | \\`${escapeMdCell(row.before)}\\` | \\`${escapeMdCell(afterShown)}\\` | ${tokenCell} |`,\n );\n }\n\n if (detached.length > 0) {\n lines.push(\"\");\n lines.push(\"### Detached Variables\");\n lines.push(\"\");\n lines.push(\n \"The following properties had their design token/variable binding removed. Hardcode the current values \\u2014 do not use the token class or CSS variable:\",\n );\n lines.push(\"\");\n lines.push(\"| Property | Current Value |\");\n lines.push(\"| --- | --- |\");\n for (const { key, value } of detached) {\n const kebab = CSS_PROP_MAP[key];\n lines.push(`| \\`${escapeMdCell(kebab)}\\` | \\`${escapeMdCell(value)}\\` |`);\n }\n }\n\n const res = formatResolutionContextFromEnriched(enriched);\n if (res) {\n lines.push(\"\");\n lines.push(res);\n }\n }\n\n return lines;\n}\n\nfunction buildSuggestedFooterLines(\n framework: ReturnType<typeof detectFramework>,\n anySource: boolean,\n): string[] {\n const lines: string[] = [];\n lines.push(\"\");\n lines.push(\"### Suggested agent steps\");\n lines.push(\"\");\n if (anySource) {\n lines.push(\n \"1. For **each** element section above, open **Source** when present and confirm the JSX/HTML node using **Text**, **DOM Path**, and **Sibling disambiguation**.\",\n );\n } else {\n lines.push(\n \"1. For **each** section, locate the node from **URL** + **DOM Path** + **Text** + **Classes** (search under `app/`, `components/`, `pages/`, or `src/`).\",\n );\n }\n if (framework === \"tailwind\") {\n lines.push(\n \"2. Map each **After** to Tailwind utilities using **Token** and **Resolution context**; replace classes in JSX/HTML as needed.\",\n );\n } else {\n lines.push(\"2. Apply **After** on each node (utilities, inline `style`, or stylesheet) using **Before** to find the old declaration.\");\n }\n lines.push(\"3. Do not change sibling instances unless the selector intentionally matches multiple nodes.\");\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"*From Flux.*\");\n return lines;\n}\n\nfunction formatStructuralReordersMarkdown(reorders: FluxStructuralReorder[]): string {\n const lines: string[] = [];\n for (let i = 0; i < reorders.length; i++) {\n const r = reorders[i];\n lines.push(`### Structural reorder ${i + 1}`);\n lines.push(\"\");\n lines.push(`- **Container selector:** \\`${escapeMdCell(r.containerSelector)}\\``);\n if (r.containerComponents.length > 0) {\n lines.push(\n `- **Component hierarchy:** ${r.containerComponents.map((c) => `\\`${escapeMdCell(c)}\\``).join(\" → \")}`,\n );\n }\n if (r.containerSourceFile) {\n const s = r.containerSourceFile;\n lines.push(`- **Container source:** \\`${escapeMdCell(s.fileName)}:${s.lineNumber}\\``);\n }\n lines.push(\n `- **Children strategy:** ${r.childrenType === \"array\" ? \"array-driven (likely `.map()`)\" : \"static JSX siblings\"}`,\n );\n lines.push(`- **Child order before:** ${r.originalOrder.map((x) => `\\`${escapeMdCell(x)}\\``).join(\", \")}`);\n lines.push(`- **Child order after:** ${r.newOrder.map((x) => `\\`${escapeMdCell(x)}\\``).join(\", \")}`);\n if (r.childSources?.length) {\n lines.push(\"\");\n lines.push(\"| Child label | Source file |\");\n lines.push(\"| --- | --- |\");\n for (const cs of r.childSources) {\n lines.push(\n `| \\`${escapeMdCell(cs.label)}\\` | \\`${escapeMdCell(`${cs.sourceFile.fileName}:${cs.sourceFile.lineNumber}`)}\\` |`,\n );\n }\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n}\n\nfunction buildStructuralOnlyPrompt(reorders: FluxStructuralReorder[]): string {\n const lines: string[] = [];\n lines.push(\"Apply these structural changes to the source code:\\n\");\n lines.push(\"# Structural changes\");\n lines.push(\"\");\n lines.push(\"**Environment:**\");\n const url = typeof window !== \"undefined\" ? window.location.href : \"\";\n if (url) lines.push(`- URL: ${url}`);\n if (typeof window !== \"undefined\") {\n lines.push(`- Viewport: ${window.innerWidth}\\u00d7${window.innerHeight}`);\n lines.push(`- Device Pixel Ratio: ${window.devicePixelRatio}`);\n lines.push(`- Timestamp: ${new Date().toISOString()}`);\n }\n lines.push(\"\");\n lines.push(formatStructuralReordersMarkdown(reorders));\n lines.push(\"\");\n lines.push(\"### Suggested agent steps\");\n lines.push(\"\");\n lines.push(\"1. Locate the **container** using **Container selector** and **Component hierarchy**.\");\n lines.push(\n \"2. If **Children strategy** is array-driven, reorder the backing array or `.map()` input; if static JSX, reorder sibling elements in source.\",\n );\n lines.push(\"3. Use **Child order before / after** to match DOM siblings to source.\");\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"*From Flux.*\");\n return lines.join(\"\\n\");\n}\n\n/** Style + optional DOM reorder sections for clipboard. */\nexport function buildCombinedCopyPrompt(\n items: CopyBatchItem[],\n structuralReorders: readonly FluxStructuralReorder[],\n): string {\n if (items.length === 0 && structuralReorders.length === 0) return \"No changes recorded.\\n\";\n\n if (items.length === 0) {\n return buildStructuralOnlyPrompt(structuralReorders);\n }\n\n const base = buildBatchPrompt(items);\n if (structuralReorders.length === 0) return base;\n\n const structuralMd = formatStructuralReordersMarkdown(structuralReorders);\n const marker = \"### Suggested agent steps\";\n const idx = base.indexOf(marker);\n if (idx === -1) {\n return `${base}\\n\\n${structuralMd}\\n`;\n }\n return `${base.slice(0, idx) + structuralMd}\\n\\n${base.slice(idx)}`;\n}\n\n/** Batched copy: shared header + `---` between elements. */\nexport function buildBatchPrompt(items: CopyBatchItem[]): string {\n if (items.length === 0) return \"No changes recorded.\\n\";\n\n const { lines: head, framework } = buildSharedHeaderLines(items.length);\n const body: string[] = [];\n for (let i = 0; i < items.length; i++) {\n if (i > 0) {\n body.push(\"---\");\n body.push(\"\");\n }\n body.push(...buildElementSectionLines(items[i], framework));\n }\n const anySource = items.some((it) => Boolean(getExactSourceLocation(it.el)));\n const tail = buildSuggestedFooterLines(framework, anySource);\n return [...head, ...body, ...tail].join(\"\\n\");\n}\n\nexport function buildPrompt(\n el: DesignEditorElement,\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>,\n opts?: {\n variableLinks?: ReadonlyMap<keyof StyleSnapshot, string>;\n detachedVariables?: readonly DetachedVariableEntry[];\n },\n): string {\n return buildBatchPrompt([\n {\n el,\n changes,\n variableLinks: opts?.variableLinks ?? new Map(),\n detachedVariables: opts?.detachedVariables ?? [],\n },\n ]);\n}\n\nexport async function writeTextToClipboard(text: string): Promise<boolean> {\n if (typeof window === \"undefined\") return false;\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n /* try fallback */\n }\n try {\n const ta = document.createElement(\"textarea\");\n ta.value = text;\n ta.setAttribute(\"readonly\", \"\");\n ta.style.position = \"fixed\";\n ta.style.left = \"-9999px\";\n ta.style.top = \"0\";\n ta.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(ta);\n ta.focus();\n ta.select();\n ta.setSelectionRange(0, text.length);\n const ok = document.execCommand(\"copy\");\n ta.remove();\n return ok;\n } catch {\n return false;\n }\n}\n\nexport async function copyBatchPromptToClipboard(items: CopyBatchItem[]): Promise<boolean> {\n return writeTextToClipboard(buildBatchPrompt(items));\n}\n\nexport async function copyCombinedPromptToClipboard(\n items: CopyBatchItem[],\n structuralReorders: readonly FluxStructuralReorder[],\n): Promise<boolean> {\n return writeTextToClipboard(buildCombinedCopyPrompt(items, structuralReorders));\n}\n\nexport async function copyPromptToClipboard(\n el: DesignEditorElement,\n changes: Map<keyof StyleSnapshot, { before: string; after: string }>,\n opts?: {\n variableLinks?: ReadonlyMap<keyof StyleSnapshot, string>;\n detachedVariables?: readonly DetachedVariableEntry[];\n },\n): Promise<boolean> {\n return copyBatchPromptToClipboard([\n {\n el,\n changes,\n variableLinks: opts?.variableLinks ?? new Map(),\n detachedVariables: opts?.detachedVariables ?? [],\n },\n ]);\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/** Mirrors Framer Motion's `useReducedMotion` — prefers `matchMedia` over hooking into FM. */\nexport function usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const sync = () => setReduced(mq.matches);\n sync();\n mq.addEventListener(\"change\", sync);\n return () => mq.removeEventListener(\"change\", sync);\n }, []);\n return reduced;\n}\n","export const fluxHostStyles = \".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.-right-0{right:0}.-right-1{right:-.25rem}.-top-0{top:0}.-top-1{top:-.25rem}.bottom-2{bottom:.5rem}.left-0{left:0}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-4{right:1rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-2{top:.5rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-\\\\[10003\\\\]{z-index:10003}.z-\\\\[1\\\\]{z-index:1}.z-\\\\[9997\\\\]{z-index:9997}.z-\\\\[9998\\\\]{z-index:9998}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.-mt-px{margin-top:-1px}.mb-2{margin-bottom:.5rem}.ml-px{margin-left:1px}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.box-border{box-sizing:border-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.inline-grid{display:inline-grid}.hidden{display:none}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-3{width:.75rem;height:.75rem}.size-3\\\\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-9{width:2.25rem;height:2.25rem}.size-\\\\[14px\\\\]{width:14px;height:14px}.size-\\\\[5px\\\\]{width:5px;height:5px}.h-3{height:.75rem}.h-4{height:1rem}.h-9{height:2.25rem}.h-full{height:100%}.max-h-48{max-height:12rem}.min-h-0{min-height:0}.w-0{width:0}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-\\\\[4\\\\.5rem\\\\]{width:4.5rem}.w-\\\\[5\\\\.5rem\\\\]{width:5.5rem}.w-full{width:100%}.min-w-0{min-width:0}.min-w-\\\\[2rem\\\\]{min-width:2rem}.min-w-full{min-width:100%}.max-w-\\\\[5rem\\\\]{max-width:5rem}.max-w-\\\\[min\\\\(18rem\\\\2c calc\\\\(100vw-20px\\\\)\\\\)\\\\]{max-width:min(18rem,calc(100vw - 20px))}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.scale-\\\\[0\\\\.92\\\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\\\\[0\\\\.92\\\\]{--tw-scale-x:0.92;--tw-scale-y:0.92}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-col-resize{cursor:col-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\\\\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\\\\[13px\\\\]{gap:13px}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-small{border-radius:8px}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-\\\\[\\\\#202020\\\\]{--tw-border-opacity:1;border-color:rgb(32 32 32/var(--tw-border-opacity,1))}.border-\\\\[\\\\#444\\\\]{--tw-border-opacity:1;border-color:rgb(68 68 68/var(--tw-border-opacity,1))}.border-\\\\[\\\\#555\\\\]{--tw-border-opacity:1;border-color:rgb(85 85 85/var(--tw-border-opacity,1))}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity,1))}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity,1))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.bg-\\\\[\\\\#202020\\\\]{--tw-bg-opacity:1;background-color:rgb(32 32 32/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#2a2a2a\\\\]{--tw-bg-opacity:1;background-color:rgb(42 42 42/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#333333\\\\]{--tw-bg-opacity:1;background-color:rgb(51 51 51/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#555\\\\]{--tw-bg-opacity:1;background-color:rgb(85 85 85/var(--tw-bg-opacity,1))}.bg-\\\\[\\\\#F3F3F3\\\\]{--tw-bg-opacity:1;background-color:rgb(243 243 243/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-zinc-300{--tw-bg-opacity:1;background-color:rgb(212 212 216/var(--tw-bg-opacity,1))}.bg-zinc-400{--tw-bg-opacity:1;background-color:rgb(161 161 170/var(--tw-bg-opacity,1))}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.\\\\!fill-none{fill:none!important}.p-0{padding:0}.p-0\\\\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\\\\.5{padding:.375rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-0\\\\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0{padding-top:0;padding-bottom:0}.py-0\\\\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pr-0{padding-right:0}.pr-10{padding-right:2.5rem}.pr-11{padding-right:2.75rem}.pr-6{padding-right:1.5rem}.pr-7{padding-right:1.75rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-\\\\[\\\\'Inter\\\\'\\\\2c system-ui\\\\2c sans-serif\\\\]{font-family:Inter,system-ui,sans-serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\\\\[11px\\\\]{font-size:11px}.text-\\\\[12px\\\\]{font-size:12px}.text-\\\\[7px\\\\]{font-size:7px}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\\\\[14px\\\\]{line-height:14px}.leading-\\\\[15\\\\.6px\\\\]{line-height:15.6px}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-tight{letter-spacing:-.025em}.text-\\\\[\\\\#202020\\\\]{--tw-text-opacity:1;color:rgb(32 32 32/var(--tw-text-opacity,1))}.text-\\\\[\\\\#333333\\\\]{--tw-text-opacity:1;color:rgb(51 51 51/var(--tw-text-opacity,1))}.text-\\\\[\\\\#71717a\\\\]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-\\\\[\\\\#7C7C7C\\\\]{--tw-text-opacity:1;color:rgb(124 124 124/var(--tw-text-opacity,1))}.text-\\\\[\\\\#93c47d\\\\]{--tw-text-opacity:1;color:rgb(147 196 125/var(--tw-text-opacity,1))}.text-\\\\[\\\\#D9D9D9\\\\],.text-\\\\[\\\\#d9d9d9\\\\]{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity,1))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity,1))}.text-zinc-800{--tw-text-opacity:1;color:rgb(39 39 42/var(--tw-text-opacity,1))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.\\\\!outline{outline-style:solid!important}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\\\[transform\\\\]{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-opacity{transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\\\\[font-synthesis\\\\:none\\\\]{font-synthesis:none}.hover\\\\:bg-\\\\[\\\\#2a2a2a\\\\]:hover{--tw-bg-opacity:1;background-color:rgb(42 42 42/var(--tw-bg-opacity,1))}.hover\\\\:bg-\\\\[\\\\#333333\\\\]:hover{--tw-bg-opacity:1;background-color:rgb(51 51 51/var(--tw-bg-opacity,1))}.hover\\\\:text-\\\\[\\\\#D9D9D9\\\\]:hover{--tw-text-opacity:1;color:rgb(217 217 217/var(--tw-text-opacity,1))}.hover\\\\:brightness-110:hover{--tw-brightness:brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus-visible\\\\:outline:focus-visible{outline-style:solid}.focus-visible\\\\:outline-2:focus-visible{outline-width:2px}.focus-visible\\\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\\\:outline-\\\\[\\\\#D9D9D9\\\\]\\\\/40:focus-visible{outline-color:hsla(0,0%,85%,.4)}.active\\\\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:focus-within .group-focus-within\\\\:opacity-100{opacity:1}.group:hover .group-hover\\\\:opacity-100{opacity:1}.\\\\[\\\\&\\\\:\\\\:-webkit-details-marker\\\\]\\\\:hidden::-webkit-details-marker{display:none}.\\\\[\\\\&_svg\\\\]\\\\:-mt-px svg{margin-top:-1px}.\\\\[\\\\&_svg\\\\]\\\\:\\\\!fill-none svg{fill:none!important}\";\n","\"use client\";\n\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { createPortal, flushSync } from \"react-dom\";\nimport { DesignEditorToggleIcon } from \"./design-editor-toggle-icon\";\nimport { BoxModelOverlay } from \"./box-model-overlay\";\nimport { PropertiesPanel } from \"./properties-panel\";\nimport { ScrubSessionContext } from \"./scrub-session-context\";\nimport { CanvasDragHandles, type InsetCommitPatch } from \"./canvas-drag-handles\";\nimport { SelectionOverlay } from \"./selection-overlay\";\nimport { type ShadowMount, mountShadowPanel, unmountShadowPanel } from \"./shadow-mount\";\nimport { Toolbar } from \"./toolbar\";\nimport { EditorMenuPortalContext } from \"./menu-portal-context\";\nimport { getElementEditableText, setElementEditableText } from \"./element-capabilities\";\nimport { copyCombinedPromptToClipboard, writeTextToClipboard } from \"./use-copy-prompt\";\nimport { FluxTooltipProvider } from \"./panel-tooltip\";\nimport { getElementPath, type DesignEditorElement, type StyleSnapshot, useSelection } from \"./use-selection\";\nimport { usePrefersReducedMotion } from \"./use-prefers-reduced-motion\";\nimport { fluxHostStyles } from \"./host-styles\";\n\nconst MIN_WIDTH = 240;\nconst MAX_WIDTH = 560;\nconst DEFAULT_WIDTH = 277;\n\n/** Horizontal inset from viewport edges for the docked panel (`right: 8` + left breathing room). */\nconst PANEL_VIEWPORT_MARGIN_PX = 16;\n\n/** Must match floating open button: `right-2 bottom-2` + `size-11` (8px + 44px). */\nconst EDITOR_TOGGLE_INSET_PX = 8;\nconst EDITOR_TOGGLE_SIZE_PX = 44;\n\n/** Same easing as portfolio `theme-reveal` (`components/theme` view transition). */\nconst THEME_REVEAL_EASE: [number, number, number, number] = [0.4, 0, 0.2, 1];\n/** Iris collapse: quick takeoff so close doesn’t “hang” at full size (exit-only). */\nconst IRIS_EXIT_EASE: [number, number, number, number] = [0.2, 0, 0, 1];\n\nfunction readThemeTransitionDurationSeconds(): number {\n if (typeof document === \"undefined\") return 1;\n const raw = getComputedStyle(document.documentElement).getPropertyValue(\"--theme-transition-duration\").trim() || \"1s\";\n if (raw.endsWith(\"ms\")) return Math.max(0, Number.parseFloat(raw) / 1000);\n if (raw.endsWith(\"s\")) return Math.max(0, Number.parseFloat(raw));\n const n = Number.parseFloat(raw);\n return Number.isFinite(n) ? n : 1;\n}\n\n/**\n * Viewport point → panel-local px for `clip-path: circle(... at x y)`.\n * Not clamped so the iris center matches the open/close origin (e.g. toggle button).\n */\n/**\n * Width available for fixed UI — use the tighter of layout client width and `visualViewport`\n * (browser zoom often shrinks the visual viewport more than `clientWidth` alone).\n */\nfunction layoutViewportWidth(): number {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") return 0;\n const client = document.documentElement.clientWidth;\n const inner = window.innerWidth;\n const base = client > 0 ? client : inner;\n const vv = window.visualViewport?.width;\n if (vv != null && vv > 0 && Number.isFinite(vv)) {\n return Math.min(base, vv);\n }\n return base > 0 ? base : inner;\n}\n\nfunction layoutViewportHeight(): number {\n if (typeof document === \"undefined\" || typeof window === \"undefined\") return 0;\n const client = document.documentElement.clientHeight;\n const inner = window.innerHeight;\n const base = client > 0 ? client : inner;\n const vv = window.visualViewport?.height;\n if (vv != null && vv > 0 && Number.isFinite(vv)) {\n return Math.min(base, vv);\n }\n return base > 0 ? base : inner;\n}\n\nfunction viewportToPanelClipOrigin(clientX: number, clientY: number, panelWidth: number): { ox: number; oy: number } {\n if (typeof window === \"undefined\") return { ox: panelWidth * 0.85, oy: 200 };\n const vw = layoutViewportWidth();\n const panelLeft = vw - panelWidth - 8;\n const panelTop = 8;\n return {\n ox: clientX - panelLeft,\n oy: clientY - panelTop,\n };\n}\n\n/** Toggle isn’t mounted while the panel is open — use the same geometry as the button CSS. */\nfunction getEditorToggleViewportCenter(): { x: number; y: number } {\n if (typeof window === \"undefined\") return { x: 0, y: 0 };\n const vw = layoutViewportWidth();\n const vh = layoutViewportHeight();\n const half = EDITOR_TOGGLE_SIZE_PX / 2;\n return {\n x: vw - EDITOR_TOGGLE_INSET_PX - half,\n y: vh - EDITOR_TOGGLE_INSET_PX - half,\n };\n}\n\nfunction defaultExitViewport(): { x: number; y: number } {\n if (typeof window === \"undefined\") return { x: 0, y: 0 };\n return getEditorToggleViewportCenter();\n}\n\n/** Don’t steal ⌘./Ctrl+. while typing in form fields or contenteditable (host page or shadow DOM). */\nfunction isEditableShortcutTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\n return false;\n}\n\nfunction isPeriodShortcutKey(e: KeyboardEvent): boolean {\n return e.key === \".\" || e.code === \"Period\";\n}\n\nexport type DesignEditorProps = {\n /**\n * When true, the editor mounts in production builds.\n * Default is **development only** (`process.env.NODE_ENV === \"development\"`).\n */\n force?: boolean;\n /**\n * Classic margin / border / padding overlay bands on the selected node.\n * Default **false** — only the mint selection ring is shown unless you opt in.\n */\n showBoxModel?: boolean;\n /**\n * When the overlay is active, block default actions on interactive page nodes (buttons, links, inputs, …)\n * via capture-phase listeners. Opt-in for host apps (e.g. playgrounds); default **false**.\n */\n blockPageInteractions?: boolean;\n};\n\n/** True in dev for Next/Webpack (`process`) and Vite (`import.meta.env`) — `process` is often undefined in Vite’s browser bundle. */\nfunction isBundlerDevelopmentMode(): boolean {\n if (typeof process !== \"undefined\" && process.env?.NODE_ENV === \"development\") {\n return true;\n }\n try {\n const env = (import.meta as ImportMeta & { env?: { DEV?: boolean; MODE?: string } }).env;\n if (env?.DEV === true) return true;\n if (env?.MODE === \"development\") return true;\n } catch {\n /* import.meta unavailable */\n }\n return false;\n}\n\nfunction isDesignEditorAllowed(force: boolean): boolean {\n if (force) return true;\n return isBundlerDevelopmentMode();\n}\n\nfunction DesignEditorImpl({\n showBoxModel,\n blockPageInteractions,\n}: {\n showBoxModel: boolean;\n blockPageInteractions: boolean;\n}) {\n const [enabled, setEnabled] = useState(false);\n /** True while the panel DOM stays mounted for the iris **close** animation after `enabled` became false. */\n const [isExiting, setIsExiting] = useState(false);\n const [width, setWidth] = useState(DEFAULT_WIDTH);\n /** Bumps on resize / visualViewport so we re-clamp panel width at high browser zoom. */\n const [layoutW, setLayoutW] = useState(0);\n const resizeRef = useRef<{ startX: number; startWidth: number } | null>(null);\n const mountRef = useRef<ShadowMount | null>(null);\n const editorToggleRef = useRef<HTMLButtonElement | null>(null);\n /** Viewport coords for enter iris (set from the open toggle). */\n const openClipVpRef = useRef(defaultExitViewport());\n /** Viewport coords for exit iris — `flushSync` updates this before `setEnabled(false)` so exit sees the right `at` with no microtask delay. */\n const [exitClipVp, setExitClipVp] = useState<{ x: number; y: number } | null>(null);\n const [portalTarget, setPortalTarget] = useState<HTMLDivElement | null>(null);\n const [menuPortalTarget, setMenuPortalTarget] = useState<HTMLDivElement | null>(null);\n /** Double-click selection → contenteditable / focus field until blur or Escape. */\n const [inlineTextSession, setInlineTextSession] = useState<DesignEditorElement | null>(null);\n const inlineEditSnapshotRef = useRef<{ el: DesignEditorElement; original: string } | null>(null);\n\n useEffect(() => {\n const mount = mountShadowPanel();\n mountRef.current = mount;\n setPortalTarget(mount.container);\n setMenuPortalTarget(mount.menuLayer);\n return () => {\n unmountShadowPanel(mount.host, mount.menuLayer);\n mountRef.current = null;\n setPortalTarget(null);\n setMenuPortalTarget(null);\n };\n }, []);\n\n /** Pre-built Tailwind utilities for light-DOM Flux UI — consumers do not add Flux to their Tailwind `content`. */\n useEffect(() => {\n const id = \"flux-host-tailwind\";\n if (typeof document === \"undefined\" || document.getElementById(id)) return;\n const el = document.createElement(\"style\");\n el.id = id;\n el.setAttribute(\"data-flux-host-tailwind\", \"\");\n el.textContent = fluxHostStyles;\n document.head.appendChild(el);\n }, []);\n\n /** Light-DOM open toggle: host Tailwind/CSS must not recolor this (arbitrary `bg-[#202020]` can fail to generate or lose to global `button` rules). */\n useEffect(() => {\n const id = \"flux-floating-toggle-host-styles\";\n if (document.getElementById(id)) return;\n const el = document.createElement(\"style\");\n el.id = id;\n el.textContent = `\nbutton[data-flux-floating-toggle] {\n background-color: #202020 !important;\n color: #d9d9d9 !important;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2), 0 4px 16px rgba(0,0,0,0.1) !important;\n}\nbutton[data-flux-floating-toggle]:hover {\n background-color: #2a2a2a !important;\n}\n`;\n document.head.appendChild(el);\n }, []);\n\n useLayoutEffect(() => {\n const sync = () => setLayoutW(layoutViewportWidth());\n sync();\n window.addEventListener(\"resize\", sync);\n const vv = window.visualViewport;\n vv?.addEventListener(\"resize\", sync);\n return () => {\n window.removeEventListener(\"resize\", sync);\n vv?.removeEventListener(\"resize\", sync);\n };\n }, []);\n\n const handleResizeStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n resizeRef.current = { startX: e.clientX, startWidth: width };\n },\n [width],\n );\n\n useEffect(() => {\n if (!enabled) return;\n const handleMove = (e: MouseEvent) => {\n if (!resizeRef.current) return;\n const dx = resizeRef.current.startX - e.clientX;\n const lw = layoutViewportWidth();\n const cap = Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, lw - PANEL_VIEWPORT_MARGIN_PX));\n const next = Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, resizeRef.current.startWidth + dx));\n setWidth(Math.min(next, cap));\n };\n const handleUp = () => {\n resizeRef.current = null;\n };\n window.addEventListener(\"mousemove\", handleMove);\n window.addEventListener(\"mouseup\", handleUp);\n return () => {\n window.removeEventListener(\"mousemove\", handleMove);\n window.removeEventListener(\"mouseup\", handleUp);\n };\n }, [enabled]);\n\n useEffect(() => {\n if (enabled) {\n document.body.style.cursor = \"crosshair\";\n return () => {\n document.body.style.cursor = \"\";\n };\n }\n }, [enabled]);\n\n const syncOpenClipFromToggle = useCallback((fromEl?: HTMLButtonElement | null) => {\n const el = fromEl ?? editorToggleRef.current;\n if (el) {\n const r = el.getBoundingClientRect();\n openClipVpRef.current = { x: r.left + r.width / 2, y: r.top + r.height / 2 };\n } else {\n openClipVpRef.current = defaultExitViewport();\n }\n }, []);\n\n const openFromToggle = useCallback((fromEl?: HTMLButtonElement | null) => {\n syncOpenClipFromToggle(fromEl);\n setEnabled(true);\n }, [syncOpenClipFromToggle]);\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (!isPeriodShortcutKey(e)) return;\n if (!(e.metaKey || e.ctrlKey)) return;\n if (e.shiftKey || e.altKey) return;\n if (e.repeat) return;\n if (isEditableShortcutTarget(e.target)) return;\n e.preventDefault();\n if (enabled) {\n flushSync(() => {\n setExitClipVp(getEditorToggleViewportCenter());\n });\n flushSync(() => {\n setIsExiting(true);\n });\n flushSync(() => {\n setEnabled(false);\n });\n } else {\n openFromToggle();\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [enabled, openFromToggle]);\n\n const {\n selectedElement,\n hoveredElement,\n currentSnapshot,\n originalSnapshot,\n changes,\n variableLinks,\n previewSizeHints,\n previewRuleCount,\n structuralReorders,\n getCopyBatchItems,\n recordStructuralReorder,\n syncSelectionAfterStructuralChange,\n beginStyleScrub,\n endStyleScrub,\n selectElement,\n updateStyle,\n linkVariable,\n unlinkVariable,\n resetStyle,\n resetAll,\n setHoveredElement,\n justifyFlexMainAxisSpaceBetween,\n applyTextContentOverride,\n } = useSelection();\n\n const handleRequestInlineTextEdit = useCallback(() => {\n if (selectedElement) setInlineTextSession(selectedElement);\n }, [selectedElement]);\n\n useEffect(() => {\n if (!inlineTextSession) return;\n const el = inlineTextSession;\n const original = getElementEditableText(el);\n inlineEditSnapshotRef.current = { el, original };\n let finished = false;\n const isField = el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement;\n\n const finish = (commit: boolean) => {\n if (finished) return;\n finished = true;\n el.removeEventListener(\"blur\", onBlur);\n el.removeEventListener(\"keydown\", onKeyDown);\n if (!isField) (el as HTMLElement).contentEditable = \"false\";\n if (commit) {\n applyTextContentOverride(getElementEditableText(el));\n } else {\n setElementEditableText(el, original);\n }\n inlineEditSnapshotRef.current = null;\n setInlineTextSession(null);\n };\n\n const onBlur = () => finish(true);\n const onKeyDown = (e: Event) => {\n const ke = e as KeyboardEvent;\n if (ke.key === \"Escape\") {\n ke.preventDefault();\n finish(false);\n }\n };\n\n const htmlEl = el as HTMLElement;\n if (isField) {\n htmlEl.focus();\n (el as HTMLInputElement | HTMLTextAreaElement).select();\n } else {\n htmlEl.contentEditable = \"true\";\n htmlEl.focus();\n const range = document.createRange();\n range.selectNodeContents(el);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n\n el.addEventListener(\"blur\", onBlur);\n el.addEventListener(\"keydown\", onKeyDown);\n return () => {\n if (!finished) {\n setElementEditableText(el, original);\n if (!isField) (el as HTMLElement).contentEditable = \"false\";\n el.removeEventListener(\"blur\", onBlur);\n el.removeEventListener(\"keydown\", onKeyDown);\n inlineEditSnapshotRef.current = null;\n }\n };\n }, [inlineTextSession, applyTextContentOverride]);\n\n useEffect(() => {\n const snap = inlineEditSnapshotRef.current;\n if (!snap || !inlineTextSession) return;\n if (selectedElement !== snap.el) {\n setElementEditableText(snap.el, snap.original);\n if (!(snap.el instanceof HTMLInputElement || snap.el instanceof HTMLTextAreaElement)) {\n (snap.el as HTMLElement).contentEditable = \"false\";\n }\n inlineEditSnapshotRef.current = null;\n setInlineTextSession(null);\n }\n }, [selectedElement, inlineTextSession]);\n\n const handleRepositionCommit = useCallback(\n (patch: InsetCommitPatch) => {\n beginStyleScrub();\n for (const [k, v] of Object.entries(patch)) {\n if (v !== undefined) updateStyle(k as keyof StyleSnapshot, v);\n }\n endStyleScrub();\n syncSelectionAfterStructuralChange();\n },\n [beginStyleScrub, endStyleScrub, updateStyle, syncSelectionAfterStructuralChange],\n );\n\n const scrubCtx = useMemo(() => ({ begin: beginStyleScrub, end: endStyleScrub }), [beginStyleScrub, endStyleScrub]);\n\n const handleCopyPrompt = useCallback(async () => {\n const items = getCopyBatchItems();\n if (items.length === 0 && structuralReorders.length === 0) {\n return writeTextToClipboard(\"No changes recorded.\\n\");\n }\n return copyCombinedPromptToClipboard(items, structuralReorders);\n }, [getCopyBatchItems, structuralReorders]);\n\n const reduceMotion = usePrefersReducedMotion();\n const panelRef = useRef<HTMLDivElement>(null);\n const panelVisible = enabled || isExiting;\n const irisOpenDoneRef = useRef(false);\n const exitAnimStartedRef = useRef(false);\n /** Pin with `right`, not `left: calc(100vw - …)` — avoids overlap with page content when browser zoom changes `100vw` vs layout width. */\n const themeRevealDuration = useMemo(() => readThemeTransitionDurationSeconds(), []);\n\n /** Never wider than viewport minus margins (fixes overlap at 150%+ browser zoom). */\n const effectiveWidth = useMemo(() => {\n const lw = layoutW > 0 ? layoutW : layoutViewportWidth();\n if (lw <= PANEL_VIEWPORT_MARGIN_PX) return MIN_WIDTH;\n const cap = Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, lw - PANEL_VIEWPORT_MARGIN_PX));\n return Math.min(width, cap);\n }, [width, layoutW]);\n\n const openO = viewportToPanelClipOrigin(openClipVpRef.current.x, openClipVpRef.current.y, effectiveWidth);\n const exitVpForClip = exitClipVp ?? defaultExitViewport();\n const closeO = viewportToPanelClipOrigin(exitVpForClip.x, exitVpForClip.y, effectiveWidth);\n\n const easeReveal = `cubic-bezier(${THEME_REVEAL_EASE.join(\",\")})`;\n const easeExit = `cubic-bezier(${IRIS_EXIT_EASE.join(\",\")})`;\n\n useEffect(() => {\n if (!enabled) irisOpenDoneRef.current = false;\n }, [enabled]);\n\n useEffect(() => {\n if (!isExiting) exitAnimStartedRef.current = false;\n }, [isExiting]);\n\n /** Iris open: circle(0) → circle(150vmax). CSS transitions — not View Transitions API (better React fit; see MDN for document-level SPA). */\n useLayoutEffect(() => {\n if (!panelVisible || !enabled || isExiting) return;\n if (irisOpenDoneRef.current) return;\n const el = panelRef.current;\n if (!el) return;\n irisOpenDoneRef.current = true;\n if (reduceMotion) {\n el.style.transition = \"\";\n el.style.clipPath = \"none\";\n return;\n }\n el.style.transition = \"none\";\n el.style.clipPath = `circle(0px at ${openO.ox}px ${openO.oy}px)`;\n const id = requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.style.transition = `clip-path ${themeRevealDuration}s ${easeReveal}`;\n el.style.clipPath = `circle(150vmax at ${openO.ox}px ${openO.oy}px)`;\n });\n });\n return () => cancelAnimationFrame(id);\n }, [\n panelVisible,\n enabled,\n isExiting,\n reduceMotion,\n themeRevealDuration,\n easeReveal,\n openO.ox,\n openO.oy,\n ]);\n\n /** Iris close: expanded → circle(0) at close origin. */\n useLayoutEffect(() => {\n if (!isExiting || enabled) return;\n if (exitAnimStartedRef.current) return;\n const el = panelRef.current;\n if (!el) return;\n exitAnimStartedRef.current = true;\n if (reduceMotion) {\n el.style.transition = \"\";\n el.style.clipPath = `circle(0px at ${closeO.ox}px ${closeO.oy}px)`;\n queueMicrotask(() => {\n setIsExiting(false);\n setExitClipVp(null);\n });\n return;\n }\n el.style.transition = \"none\";\n el.style.clipPath = `circle(150vmax at ${openO.ox}px ${openO.oy}px)`;\n void el.offsetHeight;\n el.style.transition = `clip-path ${themeRevealDuration}s ${easeExit}`;\n el.style.clipPath = `circle(0px at ${closeO.ox}px ${closeO.oy}px)`;\n }, [isExiting, enabled, reduceMotion, themeRevealDuration, easeExit, openO.ox, openO.oy, closeO.ox, closeO.oy]);\n\n const onPanelTransitionEnd = useCallback(\n (e: React.TransitionEvent<HTMLDivElement>) => {\n if (e.propertyName !== \"clip-path\") return;\n if (!isExiting || enabled || reduceMotion) return;\n setIsExiting(false);\n setExitClipVp(null);\n },\n [isExiting, enabled, reduceMotion],\n );\n\n const panelContent = (\n <>\n {panelVisible && (\n <div\n ref={panelRef}\n data-flux-ui\n onTransitionEnd={onPanelTransitionEnd}\n style={{\n position: \"fixed\",\n top: 8,\n right: 8,\n bottom: 8,\n width: effectiveWidth,\n zIndex: 9999,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n borderRadius: 12,\n backgroundColor: \"#202020\",\n fontFamily: \"'Inter', system-ui, sans-serif\",\n color: \"#D9D9D9\",\n colorScheme: \"dark\",\n WebkitFontSmoothing: \"antialiased\",\n pointerEvents: \"auto\",\n willChange: reduceMotion ? undefined : \"clip-path\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 10,\n height: \"100%\",\n width: 8,\n cursor: \"col-resize\",\n }}\n onMouseDown={handleResizeStart}\n aria-hidden\n />\n <Toolbar\n selectedElement={selectedElement}\n onClose={() => {\n flushSync(() => {\n setExitClipVp(getEditorToggleViewportCenter());\n });\n flushSync(() => {\n setIsExiting(true);\n });\n flushSync(() => {\n setEnabled(false);\n });\n }}\n />\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto px-3 pb-3\">\n <PropertiesPanel\n key={selectedElement ? getElementPath(selectedElement) : \"none\"}\n selectedElement={selectedElement}\n originalSnapshot={originalSnapshot}\n snapshot={currentSnapshot}\n changes={changes}\n onChange={updateStyle}\n onReset={resetStyle}\n onResetAll={resetAll}\n changedKeys={changes}\n variableLinks={variableLinks}\n previewSizeHints={previewSizeHints}\n previewRuleCount={previewRuleCount}\n structuralReorderCount={structuralReorders.length}\n onCopyPrompt={handleCopyPrompt}\n linkVariable={linkVariable}\n unlinkVariable={unlinkVariable}\n justifyFlexMainAxisSpaceBetween={justifyFlexMainAxisSpaceBetween}\n />\n </div>\n </div>\n )}\n </>\n );\n\n return (\n <>\n {!enabled && (\n <button\n ref={editorToggleRef}\n type=\"button\"\n data-flux-ui\n data-flux-floating-toggle\n onPointerDown={(e) => {\n if (e.button !== 0) return;\n e.preventDefault();\n openFromToggle(e.currentTarget);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openFromToggle(e.currentTarget as HTMLButtonElement);\n }\n }}\n className=\"fixed bottom-2 right-2 z-[9998] flex size-11 shrink-0 items-center justify-center rounded-full border-0 p-0 transition-[transform] active:scale-95 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#D9D9D9]/40 [&_svg]:-mt-px [&_svg]:!fill-none\"\n aria-label=\"Open design editor — ⌘. or Ctrl+.\"\n title=\"Open design editor (⌘. · Ctrl+.)\"\n >\n <DesignEditorToggleIcon size={20} className=\"shrink-0\" />\n </button>\n )}\n\n {enabled && (\n <SelectionOverlay\n enabled={enabled}\n blockPageInteractions={blockPageInteractions}\n selectedElement={selectedElement}\n hoveredElement={hoveredElement}\n onSelect={selectElement}\n onHover={setHoveredElement}\n onRequestInlineTextEdit={handleRequestInlineTextEdit}\n />\n )}\n\n {enabled && (\n <CanvasDragHandles\n enabled={enabled}\n selectedElement={selectedElement}\n onReorder={(change) => {\n recordStructuralReorder(change);\n syncSelectionAfterStructuralChange();\n }}\n onRepositionCommit={handleRepositionCommit}\n onDragStart={() => setHoveredElement(null)}\n onDragEnd={() => {}}\n />\n )}\n\n {showBoxModel && enabled && <BoxModelOverlay enabled={Boolean(selectedElement)} target={selectedElement} />}\n\n {portalTarget &&\n createPortal(\n <EditorMenuPortalContext.Provider value={menuPortalTarget}>\n <ScrubSessionContext.Provider value={scrubCtx}>\n <FluxTooltipProvider>{panelContent}</FluxTooltipProvider>\n </ScrubSessionContext.Provider>\n </EditorMenuPortalContext.Provider>,\n portalTarget,\n )}\n </>\n );\n}\n\n/**\n * Visual design editor overlay. **Does not render in production** unless `force` is set.\n */\nexport function DesignEditor({\n force = false,\n showBoxModel = false,\n blockPageInteractions = false,\n}: DesignEditorProps) {\n if (!isDesignEditorAllowed(force)) return null;\n return (\n <DesignEditorImpl showBoxModel={showBoxModel} blockPageInteractions={blockPageInteractions} />\n );\n}\n"]}