weevar 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/engine/fiber.ts","../src/engine/hydration.ts","../src/engine/hitTest.ts","../src/engine/animationPause.ts","../src/engine/autoScroll.ts","../src/engine/layoutContext.ts","../src/engine/domLabel.ts","../src/engine/elementChildren.ts","../src/engine/identity.ts","../src/engine/layoutTypeFromParent.ts","../src/engine/layoutChangeFromReorder.ts","../src/engine/layoutChangeMove.ts","../src/engine/dropTargets.ts","../src/engine/flexOrderPreview.ts","../src/engine/insertionBar.ts","../src/engine/pendingMove.ts","../src/engine/pendingReorder.ts","../src/prompts/generate.ts","../src/prompts/generateBatched.ts","../src/engine/reorderTarget.ts","../src/engine/resolveIdentity.ts","../src/version.ts","../src/overlay/overlayStyles.ts","../src/overlay/PromptPanel.tsx","../src/overlay/WeevarShadowApp.tsx","../src/react/WeevarDev.tsx"],"names":["mid","prev","simpleHash","useState","useRef","triggerTop","useEffect","target","ordered","jsxs","jsx","HideTrayIcon","GlobeIcon","useCallback"],"mappings":"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AA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;ACgBpB,SAAS,WAAA,CAAY;AAAA,EAC1B,U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","file":"react.dev.mjs","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * React Fiber access is internal and may break across React versions (TRD §5).\n * Supports React 17–19 style keys on DOM nodes.\n */\n\nexport type FiberNode = any;\n\nexport function getFiberFromDOM(node: Element): FiberNode | null {\n const key = Object.keys(node).find(\n (k) => k.startsWith(\"__reactFiber$\") || k.startsWith(\"__reactInternalInstance$\"),\n );\n return key ? (node as any)[key] ?? null : null;\n}\n\nfunction getTypeName(type: unknown): string | undefined {\n if (typeof type === \"string\") return type;\n if (typeof type === \"function\") return type.name || \"Anonymous\";\n if (typeof type === \"object\" && type && \"displayName\" in type) {\n return String((type as { displayName?: string }).displayName || \"\");\n }\n if (typeof type === \"symbol\") return type.toString();\n return undefined;\n}\n\nfunction readDebugSource(fiber: FiberNode): { file: string; line: number; col: number } | undefined {\n const s = fiber?._debugSource;\n if (!s) return undefined;\n return {\n file: String(s.fileName ?? s.file ?? \"\"),\n line: Number(s.lineNumber ?? s.line ?? 0),\n col: Number(s.columnNumber ?? s.column ?? 0),\n };\n}\n\n/** Meaningful component/host tags along the return chain (best-effort). */\nconst TAG_HOST_PORTAL = 4;\nconst TAG_HOST_COMPONENT = 5;\nconst TAG_FUNCTION_COMPONENT = 0;\nconst TAG_CLASS_COMPONENT = 1;\nconst TAG_MEMO = 14;\nconst TAG_FORWARD_REF = 11;\nconst TAG_SIMPLE_MEMO = 15;\n\nfunction isSegmentFiber(fiber: FiberNode): boolean {\n const t = fiber?.tag;\n return (\n t === TAG_HOST_COMPONENT ||\n t === TAG_FUNCTION_COMPONENT ||\n t === TAG_CLASS_COMPONENT ||\n t === TAG_MEMO ||\n t === TAG_FORWARD_REF ||\n t === TAG_SIMPLE_MEMO\n );\n}\n\nexport function buildFiberPath(el: Element): import(\"./layoutTypes\").FiberPathSegment[] {\n const out: import(\"./layoutTypes\").FiberPathSegment[] = [];\n let fiber = getFiberFromDOM(el);\n if (!fiber) return out;\n\n const stack: import(\"./layoutTypes\").FiberPathSegment[] = [];\n let cur: FiberNode | null = fiber;\n while (cur) {\n if (isSegmentFiber(cur)) {\n const name = getTypeName(cur.type);\n const source = readDebugSource(cur);\n stack.push({\n componentName: name,\n key: cur.key ?? null,\n index: typeof cur.index === \"number\" ? cur.index : 0,\n source,\n });\n }\n cur = cur.return;\n }\n stack.reverse();\n return stack;\n}\n\n/** True if this DOM node’s fiber chain includes a React host portal (TRD portal hint). */\nexport function elementRendersViaPortalHost(el: Element): boolean {\n let fiber = getFiberFromDOM(el);\n if (!fiber) return false;\n let cur: FiberNode | null = fiber;\n while (cur) {\n if (cur.tag === TAG_HOST_PORTAL) return true;\n cur = cur.return;\n }\n return false;\n}\n\nexport function getNearestHostComponentName(el: Element): string | undefined {\n const path = buildFiberPath(el);\n for (let i = path.length - 1; i >= 0; i--) {\n const n = path[i]?.componentName;\n if (n && n !== \"Fragment\" && /^[A-Z]/.test(n)) return n;\n }\n return path[path.length - 1]?.componentName;\n}\n","import { getFiberFromDOM } from \"./fiber\";\n\n/** Heuristic: React has mounted (fiber on #root or its first child — dev builds). */\nexport function isLikelyReactHydrated(): boolean {\n const root = document.getElementById(\"root\");\n if (!root) return true;\n if (getFiberFromDOM(root)) return true;\n const first = root.firstElementChild;\n return first ? Boolean(getFiberFromDOM(first)) : false;\n}\n\nexport async function waitForReactHydration(timeoutMs = 5000): Promise<void> {\n const t0 = performance.now();\n while (performance.now() - t0 < timeoutMs) {\n if (isLikelyReactHydrated()) return;\n await new Promise<void>((r) => requestAnimationFrame(() => r()));\n }\n}\n","export const WEEVAR_HOST_ID = \"__weevar_host__\";\nexport const WEEVAR_BOOT_DOT_CLASS = \"__weevar_boot_dot__\";\n\nexport function isInsideWeevarOverlay(el: Node | null): boolean {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;\n const element = el as Element;\n const root = element.getRootNode();\n if (root instanceof ShadowRoot && root.host?.id === WEEVAR_HOST_ID) return true;\n if ((element as HTMLElement).id === WEEVAR_HOST_ID) return true;\n return false;\n}\n\n/** Topmost element under point that belongs to the host app (not Weevar chrome). */\nexport function hitTestHostPage(x: number, y: number): Element | null {\n const raw = document.elementFromPoint(x, y);\n if (!raw || isInsideWeevarOverlay(raw)) return null;\n if ((raw as HTMLElement).classList?.contains(WEEVAR_BOOT_DOT_CLASS)) return null;\n\n let cur: Element | null = raw;\n while (cur) {\n if (cur.id === WEEVAR_HOST_ID) return null;\n const parent = cur.parentElement;\n if (!parent && cur.parentNode instanceof ShadowRoot) {\n cur = (cur.parentNode as ShadowRoot).host;\n continue;\n }\n cur = parent;\n }\n return raw;\n}\n\n/**\n * Same as {@link hitTestHostPage}, but temporarily hides the Weevar host so\n * `elementFromPoint` can see nodes underneath the overlay during drag.\n */\nexport function hitTestHostPageUnderOverlay(x: number, y: number): Element | null {\n const host = document.getElementById(WEEVAR_HOST_ID) as HTMLElement | null;\n const prev = host?.style.visibility;\n if (host) host.style.visibility = \"hidden\";\n try {\n const raw = document.elementFromPoint(x, y);\n if (!raw || (raw as HTMLElement).classList?.contains(WEEVAR_BOOT_DOT_CLASS)) return null;\n if (isInsideWeevarOverlay(raw)) return null;\n\n let cur: Element | null = raw;\n while (cur) {\n if (cur.id === WEEVAR_HOST_ID) return null;\n const parent = cur.parentElement;\n if (!parent && cur.parentNode instanceof ShadowRoot) {\n cur = (cur.parentNode as ShadowRoot).host;\n continue;\n }\n cur = parent;\n }\n return raw;\n } finally {\n if (host) host.style.visibility = prev ?? \"\";\n }\n}\n","const CLASS = \"__weevar_pause_anim__\";\nlet refCount = 0;\nlet styleEl: HTMLStyleElement | null = null;\n\n/** Pauses CSS transitions/animations on the host page during drag (TRD §8). */\nexport function pushPauseHostAnimations(): () => void {\n if (!styleEl) {\n styleEl = document.createElement(\"style\");\n styleEl.textContent = `.${CLASS} * { transition: none !important; animation-play-state: paused !important; }`;\n document.head.appendChild(styleEl);\n }\n document.documentElement.classList.add(CLASS);\n refCount++;\n return () => {\n refCount = Math.max(0, refCount - 1);\n if (refCount === 0) document.documentElement.classList.remove(CLASS);\n };\n}\n","/** TRD §6: gentle viewport-edge autoscroll during drag. */\nexport function autoScrollForPoint(clientX: number, clientY: number): void {\n // Scroll only when the cursor is very close to the viewport edge.\n const edgeZone = 20;\n // Keep speed intentionally low for controllable drop targeting.\n const maxSpeed = 6;\n const viewportW = window.innerWidth;\n const viewportH = window.innerHeight;\n let viewportDx = 0;\n let viewportDy = 0;\n\n const leftViewport = clientX;\n const rightViewport = viewportW - clientX;\n const topViewport = clientY;\n const bottomViewport = viewportH - clientY;\n\n if (leftViewport < edgeZone) {\n viewportDx = -edgeSpeed(edgeZone - leftViewport, edgeZone, maxSpeed);\n } else if (rightViewport < edgeZone) {\n viewportDx = edgeSpeed(edgeZone - rightViewport, edgeZone, maxSpeed);\n }\n\n if (topViewport < edgeZone) {\n viewportDy = -edgeSpeed(edgeZone - topViewport, edgeZone, maxSpeed);\n } else if (bottomViewport < edgeZone) {\n viewportDy = edgeSpeed(edgeZone - bottomViewport, edgeZone, maxSpeed);\n }\n\n if (viewportDx === 0 && viewportDy === 0) return;\n window.scrollBy(viewportDx, viewportDy);\n}\n\nfunction edgeSpeed(depth: number, margin: number, maxSpeed: number): number {\n const t = Math.max(0, Math.min(1, depth / margin));\n // Gentle cubic ramp keeps movement smooth and easy to stop.\n return maxSpeed * t * t * t;\n}\n","export function layoutTypeLabel(parent: Element): string {\n const cs = getComputedStyle(parent);\n const d = cs.display;\n if (d === \"flex\" || d === \"inline-flex\")\n return `flex-${cs.flexDirection || \"row\"}`;\n if (d === \"grid\" || d === \"inline-grid\") return \"grid\";\n if (d === \"block\") return \"block\";\n return d || \"flow\";\n}\n\nexport function buildAncestorPath(el: Element, maxDepth = 8): string {\n const segments: string[] = [];\n let cur: Element | null = el;\n let depth = 0;\n while (cur && cur !== document.documentElement && depth < maxDepth) {\n segments.unshift(shortElementLabel(cur));\n cur = cur.parentElement;\n depth++;\n }\n return segments.join(\" › \");\n}\n\nfunction shortElementLabel(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const cl = (el as HTMLElement).classList;\n if (!cl?.length) return tag;\n const first = cl[0];\n if (!first) return tag;\n if (first.length > 20) return `${tag}.${first.slice(0, 17)}…`;\n return `${tag}.${first}`;\n}\n","/** Label for hover: `div.flex.gap-4` style (PRD A.3) */\nexport function getDomLabel(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const classes = (el as HTMLElement).classList;\n if (!classes || classes.length === 0) return tag;\n const parts = [tag];\n for (let i = 0; i < classes.length; i++) {\n parts.push(classes[i]!);\n if (parts.join(\".\").length > 48) break;\n }\n return parts.join(\".\");\n}\n","export function elementChildren(parent: Element): Element[] {\n return Array.from(parent.children).filter(\n (n): n is Element => n.nodeType === Node.ELEMENT_NODE,\n );\n}\n","import { getDomLabel } from \"./domLabel\";\nimport { elementChildren } from \"./elementChildren\";\nimport {\n buildFiberPath,\n elementRendersViaPortalHost,\n getNearestHostComponentName,\n} from \"./fiber\";\nimport type { DomPathSegment, ElementIdentity } from \"./layoutTypes\";\nimport { parseDataWvSource } from \"./parseDataWvSource\";\n\nfunction simpleHash(s: string): string {\n let h = 0;\n for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) | 0;\n return String(h);\n}\n\nfunction domPathFromBody(el: Element): DomPathSegment[] {\n const chain: Element[] = [];\n let cur: Element | null = el;\n while (cur && cur !== document.body) {\n chain.push(cur);\n cur = cur.parentElement;\n }\n chain.reverse();\n return chain.map((node) => {\n const parent = node.parentElement;\n const idx =\n parent && node !== document.body ? elementChildren(parent).indexOf(node) : 0;\n const classes = (node as HTMLElement).classList\n ? Array.from((node as HTMLElement).classList)\n : [];\n return {\n tag: node.tagName.toLowerCase(),\n index: Math.max(0, idx),\n classes: classes.slice(0, 4),\n };\n });\n}\n\nexport function buildElementIdentity(el: Element): ElementIdentity {\n const classes = (el as HTMLElement).classList\n ? Array.from((el as HTMLElement).classList)\n : [];\n const text = (el.textContent ?? \"\").trim().slice(0, 120);\n const textSnippet = text.slice(0, 30);\n const fiberPath = buildFiberPath(el);\n const debugFromFiber = [...fiberPath].reverse().find((s) => s.source)?.source;\n const fromAttr = parseDataWvSource(el);\n const source = fromAttr ?? debugFromFiber;\n const testId = el.getAttribute(\"data-testid\") ?? undefined;\n const componentName = getNearestHostComponentName(el);\n const inPortal = elementRendersViaPortalHost(el);\n\n return {\n fiberPath: fiberPath.length ? fiberPath : undefined,\n source,\n domPath: domPathFromBody(el),\n tag: el.tagName.toLowerCase(),\n classList: classes,\n contentHash: simpleHash(text),\n textSnippet: textSnippet || undefined,\n label: componentName ? `<${componentName}>` : getDomLabel(el),\n componentName,\n testId,\n inPortal,\n };\n}\n","import type { LayoutType } from \"./layoutTypes\";\n\nexport function readLayoutType(parent: Element): LayoutType {\n const cs = getComputedStyle(parent);\n return {\n display: cs.display,\n flexDirection: cs.flexDirection || undefined,\n };\n}\n","import { buildElementIdentity } from \"./identity\";\nimport { readLayoutType } from \"./layoutTypeFromParent\";\nimport type { LayoutChange } from \"./layoutTypes\";\n\nexport function buildReorderLayoutChange(\n parent: Element,\n dragged: Element,\n fromIndex: number,\n toIndex: number,\n orderedElements: Element[],\n): LayoutChange {\n const siblings = orderedElements.map((el) => buildElementIdentity(el));\n return {\n kind: \"reorder\",\n target: buildElementIdentity(dragged),\n parent: buildElementIdentity(parent),\n fromIndex,\n toIndex,\n siblings,\n layoutType: readLayoutType(parent),\n };\n}\n","import { buildElementIdentity } from \"./identity\";\nimport { readLayoutType } from \"./layoutTypeFromParent\";\nimport type { LayoutChangeMove } from \"./layoutTypes\";\n\nexport function buildMoveLayoutChange(\n dragged: Element,\n fromParent: Element,\n toParent: Element,\n fromIndex: number,\n toIndex: number,\n orderedInTarget: Element[],\n): LayoutChangeMove {\n return {\n kind: \"move\",\n target: buildElementIdentity(dragged),\n fromParent: buildElementIdentity(fromParent),\n toParent: buildElementIdentity(toParent),\n fromIndex,\n toIndex,\n siblings: orderedInTarget.map((el) => buildElementIdentity(el)),\n destinationSiblings: orderedInTarget.map((el) => buildElementIdentity(el)),\n fromLayoutType: readLayoutType(fromParent),\n toLayoutType: readLayoutType(toParent),\n };\n}\n","import { elementChildren } from \"./elementChildren\";\n\nfunction isVisible(el: Element): boolean {\n const r = el.getClientRects();\n if (!r || r.length === 0) return false;\n const cs = getComputedStyle(el);\n if (cs.display === \"none\" || cs.visibility === \"hidden\" || Number(cs.opacity) === 0)\n return false;\n return true;\n}\n\nexport function isValidDropContainer(candidate: Element, dragged: Element): boolean {\n if (!(candidate instanceof Element)) return false;\n if (candidate === dragged) return false;\n if (dragged.contains(candidate)) return false;\n if (!isVisible(candidate)) return false;\n\n const cs = getComputedStyle(candidate);\n if (cs.display === \"contents\") return false;\n\n const d = cs.display;\n const isLayout =\n d === \"flex\" ||\n d === \"inline-flex\" ||\n d === \"grid\" ||\n d === \"inline-grid\" ||\n d === \"block\" ||\n d === \"inline-block\";\n\n if (!isLayout) return false;\n\n return true;\n}\n\n/** Walk from hit target upward to find a valid drop parent for `dragged`. */\nexport function findDropParent(hit: Element | null, dragged: Element): Element | null {\n let cur: Element | null = hit;\n while (cur && cur !== document.body) {\n if (isValidDropContainer(cur, dragged)) return cur;\n cur = cur.parentElement;\n }\n return null;\n}\n","const ORDER_PROP = \"order\";\n\nexport class FlexOrderPreview {\n private readonly previous = new Map<Element, string | null>();\n\n apply(ordered: Element[]): void {\n ordered.forEach((el, i) => {\n const hel = el as HTMLElement;\n const desired = String(i);\n const current = hel.style.getPropertyValue(ORDER_PROP);\n if (current === desired) return;\n if (!this.previous.has(el)) {\n this.previous.set(el, hel.style.getPropertyValue(ORDER_PROP));\n }\n hel.style.setProperty(ORDER_PROP, desired);\n });\n }\n\n clear(): void {\n for (const [el, prev] of this.previous) {\n const hel = el as HTMLElement;\n if (prev === null || prev === \"\") hel.style.removeProperty(ORDER_PROP);\n else hel.style.setProperty(ORDER_PROP, prev);\n }\n this.previous.clear();\n }\n}\n","type Bar = { left: number; top: number; width: number; height: number };\n\nexport function insertionBarBetween(\n ordered: globalThis.Element[],\n insertBeforeIndex: number,\n row: boolean,\n): Bar | null {\n if (ordered.length === 0) return null;\n const thick = 3;\n const pad = 2;\n\n if (insertBeforeIndex <= 0) {\n const r = ordered[0]!.getBoundingClientRect();\n if (row) {\n return {\n left: r.left - thick - 2,\n top: r.top - pad,\n width: thick,\n height: r.height + pad * 2,\n };\n }\n return {\n left: r.left - pad,\n top: r.top - thick - 2,\n width: r.width + pad * 2,\n height: thick,\n };\n }\n\n if (insertBeforeIndex >= ordered.length) {\n const r = ordered[ordered.length - 1]!.getBoundingClientRect();\n if (row) {\n return {\n left: r.right + 2,\n top: r.top - pad,\n width: thick,\n height: r.height + pad * 2,\n };\n }\n return {\n left: r.left - pad,\n top: r.bottom + 2,\n width: r.width + pad * 2,\n height: thick,\n };\n }\n\n const r0 = ordered[insertBeforeIndex - 1]!.getBoundingClientRect();\n const r1 = ordered[insertBeforeIndex]!.getBoundingClientRect();\n if (row) {\n const mid = (r0.right + r1.left) / 2;\n const top = Math.min(r0.top, r1.top) - pad;\n const bottom = Math.max(r0.bottom, r1.bottom) + pad;\n return { left: mid - thick / 2, top, width: thick, height: bottom - top };\n }\n const mid = (r0.bottom + r1.top) / 2;\n const left = Math.min(r0.left, r1.left) - pad;\n const right = Math.max(r0.right, r1.right) + pad;\n return { left, top: mid - thick / 2, width: right - left, height: thick };\n}\n","import { elementChildren } from \"./elementChildren\";\nimport type { PendingReorder } from \"./pendingReorder\";\n\nexport function createPendingCrossMove(\n dragged: Element,\n fromParent: Element,\n toParent: Element,\n desiredToOrder: Element[],\n): PendingReorder {\n const snapFrom = Array.from(fromParent.childNodes);\n const snapTo = Array.from(toParent.childNodes);\n\n function matchesTo(): boolean {\n const cur = elementChildren(toParent);\n if (cur.length !== desiredToOrder.length) return false;\n return cur.every((el, i) => el === desiredToOrder[i]);\n }\n\n function applyTo(): void {\n for (const el of desiredToOrder) toParent.appendChild(el);\n }\n\n applyTo();\n\n const obs = new MutationObserver(() => {\n if (!matchesTo()) applyTo();\n });\n obs.observe(toParent, { childList: true });\n if (fromParent !== toParent) obs.observe(fromParent, { childList: true });\n\n function revert(): void {\n obs.disconnect();\n while (fromParent.firstChild) fromParent.removeChild(fromParent.firstChild);\n for (const n of snapFrom) fromParent.appendChild(n);\n if (toParent !== fromParent) {\n while (toParent.firstChild) toParent.removeChild(toParent.firstChild);\n for (const n of snapTo) toParent.appendChild(n);\n }\n }\n\n return {\n disconnect: () => obs.disconnect(),\n revert,\n };\n}\n","import { elementChildren } from \"./elementChildren\";\n\nexport type PendingReorder = {\n revert: () => void;\n disconnect: () => void;\n};\n\n/**\n * Applies DOM order for `desired` element children and re-applies if React mutates `parent`'s childList.\n */\nexport function createPendingReorder(\n parent: Element,\n desired: Element[],\n): PendingReorder {\n const snapshot = Array.from(parent.childNodes);\n\n function currentElements(): Element[] {\n return elementChildren(parent);\n }\n\n function matches(): boolean {\n const cur = currentElements();\n if (cur.length !== desired.length) return false;\n return cur.every((el, i) => el === desired[i]);\n }\n\n function applyDesired(): void {\n for (const el of desired) parent.appendChild(el);\n }\n\n applyDesired();\n\n const observer = new MutationObserver(() => {\n if (!matches()) applyDesired();\n });\n observer.observe(parent, { childList: true });\n\n function revert(): void {\n observer.disconnect();\n while (parent.firstChild) parent.removeChild(parent.firstChild);\n for (const n of snapshot) parent.appendChild(n);\n }\n\n return {\n disconnect: () => observer.disconnect(),\n revert,\n };\n}\n","import type {\n ElementIdentity,\n GeneratedPrompt,\n LayoutChange,\n LayoutType,\n TargetTool,\n WeevarRuntimeConfig,\n} from \"../engine/layoutTypes\";\n\ntype PromptOptions = {\n targetTool: TargetTool | \"cursor\";\n config?: WeevarRuntimeConfig;\n};\n\nfunction lineText(line: number): string {\n return `line ${line}`;\n}\n\nfunction formatLocation(source?: { file: string; line: number; col: number }): string {\n if (!source) return \"\";\n return `${source.file}:${source.line}`;\n}\n\nfunction ordinal(n: number): string {\n const mod10 = n % 10;\n const mod100 = n % 100;\n if (mod10 === 1 && mod100 !== 11) return `${n}st`;\n if (mod10 === 2 && mod100 !== 12) return `${n}nd`;\n if (mod10 === 3 && mod100 !== 13) return `${n}rd`;\n return `${n}th`;\n}\n\nfunction cssTagRef(id: ElementIdentity): string {\n if (!id.classList.length) return `<${id.tag}>`;\n return `<${id.tag}.${id.classList.join(\".\")}>`;\n}\n\nfunction baseRef(id: ElementIdentity): string {\n if (id.componentName) return `<${id.componentName}>`;\n return cssTagRef(id);\n}\n\nfunction withDisambiguation(id: ElementIdentity, force = false): string {\n const root = baseRef(id);\n if (!force && id.componentName) return root;\n if (id.textSnippet) return `${root.replace(/>$/, \"\")} \"${id.textSnippet}\">`;\n if (id.classList.length && id.componentName) return `${root.replace(/>$/, \"\")}.${id.classList[0]}>`;\n return root;\n}\n\nfunction jsxRef(id: ElementIdentity): string {\n return `${withDisambiguation(id).replace(/>$/, \"\")} />`;\n}\n\nfunction domPathTail(id: ElementIdentity, segments = 3): string {\n const tail = id.domPath?.slice(-segments) ?? [];\n if (!tail.length) return \"\";\n return tail.map((s) => `${s.tag}[${s.index}]`).join(\">\");\n}\n\n/**\n * Non-lossy identifier for short prompts:\n * keeps human-readable symbol + concrete source/path anchors for deterministic edits.\n */\nfunction strictRef(id: ElementIdentity): string {\n const core = withDisambiguation(id, true);\n const src = id.source ? `${id.source.file}:${id.source.line}` : \"source:unknown\";\n const path = domPathTail(id);\n const hash = `h:${id.contentHash}`;\n return path ? `${core} {src:${src}; dom:${path}; ${hash}}` : `${core} {src:${src}; ${hash}}`;\n}\n\nfunction displacementAnchor(siblings: ElementIdentity[], toIndex: number): string {\n if (!siblings.length || siblings.length === 1) return \"as the only child\";\n if (toIndex <= 0) return \"first\";\n if (toIndex >= siblings.length - 1) return \"last\";\n const prev = siblings[toIndex - 1];\n return `after ${baseRef(prev)}`;\n}\n\nfunction detailedAnchor(siblings: ElementIdentity[], toIndex: number): string {\n if (!siblings.length || siblings.length === 1) return \"only child\";\n if (toIndex <= 0) return \"first child\";\n if (toIndex >= siblings.length - 1) {\n const prev = siblings[siblings.length - 2];\n return `last child, after ${jsxRef(prev)}`;\n }\n const prev = siblings[toIndex - 1];\n return `after ${jsxRef(prev)}`;\n}\n\nfunction formatLayoutType(layout: LayoutType): string {\n if (layout.display.includes(\"flex\")) {\n return layout.flexDirection ? `flex-${layout.flexDirection}` : \"flex\";\n }\n return layout.display;\n}\n\nfunction moveSiblings(change: Extract<LayoutChange, { kind: \"move\" }>): ElementIdentity[] {\n return change.destinationSiblings ?? change.siblings ?? [];\n}\n\nfunction buildSiblingRenderData(siblings: ElementIdentity[]) {\n const counts = new Map<string, number>();\n for (const s of siblings) {\n const k = baseRef(s);\n counts.set(k, (counts.get(k) ?? 0) + 1);\n }\n return siblings.map((s) => {\n const k = baseRef(s);\n const repeated = (counts.get(k) ?? 0) > 1;\n return withDisambiguation(s, repeated);\n });\n}\n\nfunction hasMissingSource(change: LayoutChange): boolean {\n if (change.kind === \"reorder\") return !change.target.source || !change.parent.source;\n return !change.target.source || !change.fromParent.source || !change.toParent.source;\n}\n\nfunction shortReorder(change: Extract<LayoutChange, { kind: \"reorder\" }>): string {\n const parentRef = strictRef(change.parent);\n const targetRef = strictRef(change.target);\n const file = change.parent.source?.file;\n const targetLine = change.target.source?.line;\n const anchor = displacementAnchor(change.siblings, change.toIndex);\n const pos = `child index ${change.toIndex} (position ${change.toIndex + 1}; ${anchor})`;\n const where = file ? ` in ${file}` : \"\";\n const line = targetLine ? ` (${lineText(targetLine)})` : \"\";\n const order = buildSiblingRenderData(change.siblings)\n .map((s, i) => `${i}: ${s}`)\n .join(\" | \");\n return `Reorder children of ${parentRef}${where}: move ${targetRef}${line} from child index ${change.fromIndex} (position ${change.fromIndex + 1}) to ${pos}. Resulting order: ${order}. Preserve all props and styles.`;\n}\n\nfunction shortMove(change: Extract<LayoutChange, { kind: \"move\" }>): string {\n const targetRef = strictRef(change.target);\n const fromRef = strictRef(change.fromParent);\n const toRef = strictRef(change.toParent);\n const fromLoc = formatLocation(change.fromParent.source);\n const toLoc = formatLocation(change.toParent.source);\n const siblings = moveSiblings(change);\n const anchor = displacementAnchor(siblings, change.toIndex);\n const shortAnchor =\n anchor === \"as the only child\"\n ? \"as the only child\"\n : anchor === \"first\"\n ? \"as the first child\"\n : anchor === \"last\"\n ? \"as the last child\"\n : `as ${anchor}`;\n const targetLine = change.target.source?.line;\n const line = targetLine ? ` (${lineText(targetLine)})` : \"\";\n const order = buildSiblingRenderData(siblings)\n .map((s, i) => `${i}: ${s}`)\n .join(\" | \");\n return `Move ${targetRef}${line} from ${fromRef}${fromLoc ? ` (${fromLoc})` : \"\"} (child index ${change.fromIndex}) into ${toRef}${toLoc ? ` (${toLoc})` : \"\"} at child index ${change.toIndex} (${shortAnchor}). Destination order after move: ${order}. Preserve all props.`;\n}\n\nfunction detailedReorder(change: Extract<LayoutChange, { kind: \"reorder\" }>, tool: PromptOptions[\"targetTool\"]): string {\n const file = change.parent.source?.file ?? \"unknown file\";\n const containerLine = change.parent.source?.line;\n const targetLine = change.target.source?.line;\n const refs = buildSiblingRenderData(change.siblings);\n const showPath = tool !== \"codex\";\n const lines = change.siblings\n .map((s, i) => {\n const moved = s === change.target ? \" ← moved\" : \"\";\n const loc = s.source\n ? showPath\n ? ` ${formatLocation(s.source)}`\n : ` line ${s.source.line}`\n : \"\";\n return `${i + 1}. ${refs[i]}${loc}${moved}`;\n })\n .join(\"\\n\");\n const heading = `# Reorder within ${baseRef(change.parent)}`;\n const fileLine = `**File:** ${file}`;\n const classSnippet = change.parent.classList.length\n ? ` — \\`<${change.parent.tag} className=\"${change.parent.classList.join(\" \")}\">\\``\n : \"\";\n const container = `**Container:** ${baseRef(change.parent)}${containerLine ? ` at line ${containerLine}` : \"\"}${classSnippet}`;\n const layout = `**Layout:** ${formatLayoutType(change.layoutType)}`;\n const move = [\n \"## Move\",\n `${jsxRef(change.target)}${targetLine ? ` (${lineText(targetLine)})` : \"\"}`,\n `From: index ${change.fromIndex} (${ordinal(change.fromIndex + 1)} child)`,\n `To: index ${change.toIndex} (${detailedAnchor(change.siblings, change.toIndex)})`,\n ].join(\"\\n\");\n const constraints = [\n \"## Constraints\",\n `- Preserve all props on ${baseRef(change.target)}`,\n `- Don't modify the ${formatLayoutType(change.layoutType)} layout`,\n \"- Don't introduce wrapper elements\",\n \"- Don't touch other components in this file\",\n ].join(\"\\n\");\n\n const parts = [heading, \"\", fileLine, container, layout, \"\", move, \"\", \"## New child order\", lines, \"\", constraints];\n if (tool === \"generic\") {\n parts.push(\"\", \"## Current code\", \"<!-- TODO: include source snippet -->\");\n }\n if (hasMissingSource(change)) {\n parts.push(\"\", \"_Tip: install `@weevar/vite-plugin` for source-accurate prompts._\");\n }\n return parts.join(\"\\n\");\n}\n\nfunction detailedMove(change: Extract<LayoutChange, { kind: \"move\" }>, tool: PromptOptions[\"targetTool\"]): string {\n const siblings = moveSiblings(change);\n const refs = buildSiblingRenderData(siblings);\n const showPath = tool !== \"codex\";\n const lines = siblings\n .map((s, i) => {\n const moved = s === change.target ? \" (moved)\" : \"\";\n const loc = s.source\n ? showPath\n ? ` ${formatLocation(s.source)}`\n : ` line ${s.source.line}`\n : \"\";\n return `${i + 1}. ${refs[i]}${loc}${moved}`;\n })\n .join(\"\\n\");\n const source = `**Source:** ${baseRef(change.fromParent)}${change.fromParent.source ? ` in ${formatLocation(change.fromParent.source)}` : \"\"} (${formatLayoutType(change.fromLayoutType)} layout)`;\n const destination = `**Destination:** ${baseRef(change.toParent)}${change.toParent.source ? ` in ${formatLocation(change.toParent.source)}` : \"\"} (${formatLayoutType(change.toLayoutType)} layout)`;\n const anchor = displacementAnchor(siblings, change.toIndex);\n const move = [\n \"## Move\",\n `${jsxRef(change.target)}${change.target.source ? ` at ${formatLocation(change.target.source)}` : \"\"}`,\n `Remove from: ${baseRef(change.fromParent)}, index ${change.fromIndex}`,\n `Insert into: ${baseRef(change.toParent)}, index ${change.toIndex} (${anchor})`,\n ].join(\"\\n\");\n const constraints = [\n \"## Constraints\",\n `- Preserve all props on ${baseRef(change.target)}`,\n `- Don't modify ${baseRef(change.fromParent)} beyond removing the element`,\n `- Don't modify ${baseRef(change.toParent)}'s layout or styling`,\n \"- Don't introduce wrapper elements\",\n ].join(\"\\n\");\n\n const parts = [\n `# Move ${baseRef(change.target)} across containers`,\n \"\",\n source,\n destination,\n \"\",\n move,\n \"\",\n \"## Destination order after move\",\n lines || \"1. (destination children unavailable)\",\n \"\",\n constraints,\n ];\n if (tool === \"generic\") {\n parts.push(\"\", \"## Current code\", \"<!-- TODO: include source snippet -->\");\n }\n if (hasMissingSource(change)) {\n parts.push(\"\", \"_Tip: install `@weevar/vite-plugin` for source-accurate prompts._\");\n }\n return parts.join(\"\\n\");\n}\n\nexport function generatePrompt(\n change: LayoutChange,\n options: PromptOptions,\n): GeneratedPrompt | null {\n if (change.kind === \"reorder\" && change.fromIndex === change.toIndex) return null;\n if (\n change.kind === \"move\" &&\n change.fromParent === change.toParent &&\n change.fromIndex === change.toIndex\n )\n return null;\n\n const targetTool = options.targetTool === \"cursor\" ? \"codex\" : options.targetTool;\n const short = change.kind === \"reorder\" ? shortReorder(change) : shortMove(change);\n const detailed =\n change.kind === \"reorder\"\n ? detailedReorder(change, targetTool)\n : detailedMove(change, targetTool);\n\n return {\n short,\n detailed,\n meta: {\n targetTool,\n timestamp: Date.now(),\n change,\n },\n };\n}\n\nexport function promptBody(p: GeneratedPrompt, len: \"short\" | \"detailed\"): string {\n return len === \"short\" ? p.short : p.detailed;\n}\n","import type { GeneratedPrompt, MoveSession, TargetTool } from \"../engine/layoutTypes\";\nimport { generatePrompt } from \"./generate\";\n\nfunction stripShortConstraint(short: string): string {\n return short.replace(/\\s+Preserve[^.]*\\.\\s*$/i, \"\").trim();\n}\n\nfunction stripDetailedHeadingAndConstraints(detailed: string): string {\n const noHeading = detailed.replace(/^#\\s+[^\\n]+\\n+/, \"\");\n return noHeading.replace(/\\n## Constraints[\\s\\S]*$/m, \"\").trim();\n}\n\nfunction firstFilePath(changeText: string): string | undefined {\n const m = changeText.match(/\\*\\*File:\\*\\*\\s+([^\\n]+)/);\n return m?.[1]?.trim();\n}\n\nfunction maybeOmitRepeatedFileForCodex(\n sectionBody: string,\n tool: TargetTool,\n prevFile?: string,\n): { body: string; file?: string } {\n const file = firstFilePath(sectionBody);\n if (tool !== \"codex\") return { body: sectionBody, file };\n if (!file || !prevFile || file !== prevFile) return { body: sectionBody, file };\n return {\n body: sectionBody.replace(/\\*\\*File:\\*\\*[^\\n]*\\n?/m, \"\").trim(),\n file,\n };\n}\n\nexport function generateBatchedPrompt(\n session: MoveSession,\n options: { targetTool: TargetTool },\n): GeneratedPrompt | null {\n if (!session.changes.length) return null;\n if (session.changes.length === 1) {\n return generatePrompt(session.changes[0].change, { targetTool: options.targetTool });\n }\n\n const sorted = [...session.changes].sort((a, b) => a.ordinal - b.ordinal);\n const perMove = sorted\n .map((c) => ({\n ordinal: c.ordinal,\n p: generatePrompt(c.change, { targetTool: options.targetTool }),\n }))\n .filter((x): x is { ordinal: number; p: GeneratedPrompt } => Boolean(x.p));\n\n if (!perMove.length) return null;\n\n const shortItems = perMove\n .map((x) => `${x.ordinal}. ${stripShortConstraint(x.p.short)}.`)\n .join(\"\\n\\n\");\n const short =\n `${perMove.length} layout changes (apply in order; each step's positions are relative to the state after prior steps):\\n\\n` +\n `${shortItems}\\n\\n` +\n `Preserve all props and styles. Don't introduce wrapper elements.`;\n\n let prevFile: string | undefined;\n const sections = perMove\n .map((x) => {\n const body = stripDetailedHeadingAndConstraints(x.p.detailed);\n const adjusted = maybeOmitRepeatedFileForCodex(body, options.targetTool, prevFile);\n prevFile = adjusted.file ?? prevFile;\n const withGeneric =\n options.targetTool === \"generic\"\n ? `${adjusted.body}\\n\\n<!-- TODO: include source snippets -->`\n : adjusted.body;\n return `## ${x.ordinal}. ${withGeneric}`;\n })\n .join(\"\\n\\n---\\n\\n\");\n\n const detailed =\n `# Multi-step layout change (${perMove.length} moves)\\n\\n` +\n `Apply these changes in the order listed below. Each section's positions and\\n` +\n `indices are relative to the state of the page **after the preceding sections\\n` +\n `have been applied**, not the original state.\\n\\n` +\n `---\\n\\n` +\n `${sections}\\n\\n` +\n `---\\n\\n` +\n `## Global constraints\\n\\n` +\n `- Preserve all props on every moved element\\n` +\n `- Don't introduce wrapper elements anywhere\\n` +\n `- Don't modify any layout, spacing, or styling on the containers\\n` +\n `- Apply changes strictly in the order listed. Each section's indices reflect\\n` +\n `the state *after* prior sections are applied\\n` +\n `- If a move references a position that doesn't exist in your current view of\\n` +\n `the file, the prior sections may not have been applied yet — apply them in\\n` +\n `order before continuing`;\n\n return {\n short,\n detailed,\n meta: {\n targetTool: options.targetTool,\n timestamp: Date.now(),\n change: perMove[perMove.length - 1].p.meta.change,\n },\n };\n}\n","import { elementChildren } from \"./elementChildren\";\n\nexport function reorderImmutable<T>(arr: readonly T[], from: number, to: number): T[] {\n const a = arr.slice() as T[];\n const [item] = a.splice(from, 1);\n a.splice(to, 0, item!);\n return a;\n}\n\n/**\n * Insertion index for `dragged` into `parent` (0..n). If `dragged` is not yet a child of `parent`,\n * append index is `elementChildren(parent).length`.\n */\nexport function computeDropIndex(\n parent: Element,\n dragged: Element,\n clientX: number,\n clientY: number,\n): number {\n const kids = elementChildren(parent);\n const inParent = kids.includes(dragged);\n const others = inParent ? kids.filter((k) => k !== dragged) : kids.slice();\n\n if (others.length === 0) return 0;\n\n const cs = getComputedStyle(parent);\n const flexDir = cs.flexDirection || \"row\";\n const isRowAxis =\n cs.display.includes(\"flex\") &&\n (flexDir === \"row\" || flexDir === \"row-reverse\");\n const pos = isRowAxis ? clientX : clientY;\n\n let insert = others.length;\n for (let i = 0; i < others.length; i++) {\n const r = others[i]!.getBoundingClientRect();\n const mid = isRowAxis ? r.left + r.width / 2 : r.top + r.height / 2;\n if (pos < mid) {\n insert = i;\n break;\n }\n }\n\n if (insert >= others.length) {\n return inParent ? kids.length - 1 : kids.length;\n }\n\n const anchor = others[insert]!;\n return kids.indexOf(anchor);\n}\n\n/** @deprecated use computeDropIndex */\nexport function computeReorderDomIndex(\n parent: Element,\n dragged: Element,\n clientX: number,\n clientY: number,\n): number {\n return computeDropIndex(parent, dragged, clientX, clientY);\n}\n\n/** Element order after moving `dragged` to `targetIndex` within the same parent. */\nexport function orderAfterMove(\n parent: Element,\n dragged: Element,\n targetIndex: number,\n): Element[] {\n const kids = elementChildren(parent);\n const from = kids.indexOf(dragged);\n if (from === -1) return kids;\n let to = targetIndex;\n if (to < 0) to = 0;\n if (to > kids.length - 1) to = kids.length - 1;\n return reorderImmutable(kids, from, to);\n}\n\n/** Order after inserting `dragged` into `parent` at `targetIndex` (possibly from another parent). */\nexport function orderAfterInsert(\n parent: Element,\n dragged: Element,\n targetIndex: number,\n): Element[] {\n const cur = elementChildren(parent).filter((k) => k !== dragged);\n const next = cur.slice();\n let i = Math.min(Math.max(0, targetIndex), next.length);\n next.splice(i, 0, dragged);\n return next;\n}\n\nexport function parentSupportsFlexOrderPreview(parent: Element): boolean {\n return getComputedStyle(parent).display.includes(\"flex\");\n}\n","import { elementChildren } from \"./elementChildren\";\nimport { buildFiberPath } from \"./fiber\";\nimport type { ElementIdentity } from \"./layoutTypes\";\nimport { parseDataWvSource } from \"./parseDataWvSource\";\n\nfunction simpleHash(s: string): string {\n let h = 0;\n for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) | 0;\n return String(h);\n}\n\nfunction resolveDomPath(identity: ElementIdentity): Element | null {\n let cur: Element | null = document.body;\n for (const seg of identity.domPath) {\n if (!cur) return null;\n const kids = elementChildren(cur);\n const next = kids[seg.index];\n if (!next || next.tagName.toLowerCase() !== seg.tag) return null;\n cur = next;\n }\n return cur;\n}\n\nfunction resolveBySource(identity: ElementIdentity): Element | null {\n if (!identity.source) return null;\n const nodes = document.querySelectorAll(\"[data-wv-source]\");\n for (let i = 0; i < nodes.length; i++) {\n const el = nodes[i] as Element;\n const loc = parseDataWvSource(el);\n if (\n loc &&\n loc.file === identity.source.file &&\n loc.line === identity.source.line &&\n loc.col === identity.source.col\n )\n return el;\n }\n return null;\n}\n\nfunction resolveByFiberPathFingerprint(identity: ElementIdentity): Element | null {\n if (!identity.fiberPath?.length) return null;\n const want = JSON.stringify(identity.fiberPath);\n const max = 6000;\n let seen = 0;\n const tree = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);\n let n = tree.nextNode() as Element | null;\n while (n && seen < max) {\n seen++;\n try {\n const p = buildFiberPath(n);\n if (!p.length) {\n n = tree.nextNode() as Element | null;\n continue;\n }\n if (JSON.stringify(p) !== want) {\n n = tree.nextNode() as Element | null;\n continue;\n }\n if (n.tagName.toLowerCase() === identity.tag && matchesIdentity(n, identity)) return n;\n } catch {\n /* ignore fiber read errors */\n }\n n = tree.nextNode() as Element | null;\n }\n return null;\n}\n\nfunction resolveByContentScan(identity: ElementIdentity): Element | null {\n const tag = identity.tag.toUpperCase();\n const want = identity.contentHash;\n const max = 4000;\n let seen = 0;\n const walk = (root: Element) => {\n const stack: Element[] = [root];\n while (stack.length && seen < max) {\n const el = stack.pop()!;\n seen++;\n if (el.tagName !== tag) {\n for (let i = el.children.length - 1; i >= 0; i--)\n stack.push(el.children[i] as Element);\n continue;\n }\n const text = (el.textContent ?? \"\").trim().slice(0, 120);\n if (simpleHash(text) !== want) {\n for (let i = el.children.length - 1; i >= 0; i--)\n stack.push(el.children[i] as Element);\n continue;\n }\n const cl = (el as HTMLElement).classList;\n const cls = cl ? Array.from(cl) : [];\n if (identity.classList.length && cls.join(\" \") !== identity.classList.join(\" \")) {\n for (let i = el.children.length - 1; i >= 0; i--)\n stack.push(el.children[i] as Element);\n continue;\n }\n return el;\n }\n return null;\n };\n return walk(document.body);\n}\n\n/**\n * TRD §5 resolution order: fiber path fingerprint → source attribute → DOM path → content scan.\n */\nexport function resolveElementIdentity(identity: ElementIdentity): Element | null {\n const byFiber = resolveByFiberPathFingerprint(identity);\n if (byFiber) return byFiber;\n\n const bySource = resolveBySource(identity);\n if (bySource && matchesIdentity(bySource, identity)) return bySource;\n\n const byDom = resolveDomPath(identity);\n if (byDom && matchesIdentity(byDom, identity)) return byDom;\n\n return resolveByContentScan(identity);\n}\n\nfunction matchesIdentity(el: Element, identity: ElementIdentity): boolean {\n if (el.tagName.toLowerCase() !== identity.tag) return false;\n const text = (el.textContent ?? \"\").trim().slice(0, 120);\n if (simpleHash(text) !== identity.contentHash) return false;\n return true;\n}\n","declare const __WEEVAR_VERSION__: string;\n\n/** Semver from `package.json`, injected at bundle time. */\nexport const WEEVAR_VERSION: string = __WEEVAR_VERSION__;\n\n/** Display label shown in tray footers (`v1.2.3`). */\nexport function weevarVersionLabel(): string {\n return `v${WEEVAR_VERSION}`;\n}\n","/** Injected into Shadow DOM (PRD/TRD visual spec) */\nexport const OVERLAY_CSS = `\n@import url(\"https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400&display=swap\");\n\n:root {\n --weevar-dark: #111113;\n --wv-bg: #0f1115;\n --wv-panel: #1a1d24;\n --wv-border: #2a2e38;\n --wv-accent: #0099ff;\n --wv-success: #00c896;\n --wv-danger: #ff4d4f;\n --wv-ui: 13px Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n --wv-mono: 12px Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n}\n\n* { box-sizing: border-box; }\n\n.wv-root {\n position: fixed;\n inset: 0;\n pointer-events: none;\n font: var(--wv-ui);\n color: #e8eaed;\n}\n\n.wv-root,\n.wv-root * {\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n}\n\n.wv-pe { pointer-events: auto; }\n\n.wv-dot {\n position: fixed;\n right: 12px;\n bottom: 12px;\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: var(--wv-accent);\n opacity: 0.55;\n border: none;\n padding: 0;\n cursor: pointer;\n pointer-events: auto;\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n z-index: 5;\n}\n.wv-dot:hover { opacity: 0.9; }\n\n.wv-toolbar {\n position: fixed;\n top: 12px;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n gap: 12px;\n height: 36px;\n padding: 0 12px;\n border-radius: 6px;\n background: rgba(15, 17, 21, 0.72);\n border: 1px solid var(--wv-border);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n pointer-events: auto;\n z-index: 20;\n}\n\n.wv-toolbar-status {\n font-size: 13px;\n color: #c9cdd4;\n max-width: min(420px, 50vw);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.wv-toolbar-actions {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.wv-toolbar-link {\n border: none;\n background: transparent;\n color: #c9cdd4;\n font-size: 12px;\n cursor: pointer;\n padding: 0 2px;\n}\n.wv-toolbar-link:hover { color: #e8eaed; text-decoration: underline; }\n\n.wv-toolbar-generate {\n height: 26px;\n border-radius: 6px;\n border: 1px solid var(--wv-accent);\n background: var(--wv-accent);\n color: #0b0d10;\n font-size: 12px;\n font-weight: 600;\n padding: 0 10px;\n cursor: pointer;\n}\n.wv-toolbar-generate:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.wv-toolbar-close {\n margin-left: auto;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n border: 1px solid var(--wv-border);\n background: var(--wv-panel);\n color: #e8eaed;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n line-height: 1;\n}\n.wv-toolbar-close:hover {\n border-color: var(--wv-accent);\n color: var(--wv-accent);\n}\n\n.wv-outline {\n position: fixed;\n pointer-events: none;\n border: 2px solid rgba(0, 153, 255, 0.6);\n background: rgba(0, 153, 255, 0.05);\n border-radius: 2px;\n z-index: 2;\n}\n\n.wv-outline-selected {\n border-color: var(--wv-accent);\n background: rgba(0, 153, 255, 0.06);\n}\n\n.wv-label {\n position: fixed;\n pointer-events: none;\n z-index: 3;\n font: 11px var(--wv-mono);\n background: rgba(15, 17, 21, 0.92);\n color: #e8eaed;\n padding: 3px 6px;\n border-radius: 4px;\n border: 1px solid var(--wv-border);\n max-width: min(360px, 70vw);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wv-cursor-label {\n position: fixed;\n pointer-events: none;\n z-index: 31;\n display: inline-flex;\n height: 24px;\n padding: 5px 10px;\n justify-content: center;\n align-items: flex-start;\n gap: 10px;\n border-radius: 8px;\n background: rgba(17, 17, 19, 0.9);\n color: var(--weevar-light, #EBEBEB);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n max-width: 210px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n.wv-markers {\n position: fixed;\n pointer-events: none;\n z-index: 4;\n}\n\n.wv-corner {\n position: absolute;\n width: 4px;\n height: 4px;\n background: var(--wv-accent);\n}\n\n.wv-drag-handle {\n position: fixed;\n width: 24px;\n height: 24px;\n padding: 5px 10px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 8px;\n border: none;\n background: rgba(17, 17, 19, 0.9);\n pointer-events: auto;\n cursor: grab;\n z-index: 6;\n display: flex;\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n}\n.wv-drag-handle:active { cursor: grabbing; }\n.wv-drag-handle svg { width: 16px; height: 16px; display: block; flex: 0 0 auto; }\n\n.wv-selected-top {\n position: fixed;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n z-index: 7;\n pointer-events: none;\n}\n\n.wv-selected-top .wv-drag-handle {\n position: static;\n pointer-events: auto;\n}\n\n.wv-selected-label {\n display: inline-flex;\n height: 24px;\n padding: 5px 10px;\n justify-content: center;\n align-items: flex-start;\n gap: 10px;\n border-radius: 8px;\n background: rgba(17, 17, 19, 0.9);\n color: var(--weevar-light, #EBEBEB);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wv-action-panel {\n position: fixed;\n width: 240px;\n padding: 10px;\n border-radius: 6px;\n background: rgba(26, 29, 36, 0.95);\n border: 1px solid var(--wv-border);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n pointer-events: auto;\n z-index: 7;\n}\n\n.wv-action-title {\n font-size: 11px;\n color: #9aa0a6;\n margin-bottom: 6px;\n}\n\n.wv-path {\n font: 11px var(--wv-mono);\n color: #e8eaed;\n word-break: break-all;\n}\n\n.wv-pill {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n color: #c9cdd4;\n}\n\n.wv-hint {\n margin-top: 8px;\n font-size: 11px;\n color: #9aa0a6;\n}\n\n.wv-insertion-bar {\n position: fixed;\n pointer-events: none;\n z-index: 8;\n background: var(--wv-accent);\n border-radius: 1px;\n animation: wv-pulse 0.8s ease-in-out infinite;\n}\n\n@keyframes wv-pulse {\n 0%, 100% { opacity: 0.55; }\n 50% { opacity: 1; }\n}\n\n.wv-drag-preview {\n position: fixed;\n z-index: 9;\n max-width: 200px;\n max-height: 120px;\n padding: 6px 8px;\n border-radius: 6px;\n border: 1px solid var(--wv-accent);\n background: rgba(26, 29, 36, 0.92);\n color: #e8eaed;\n font: 11px var(--wv-mono);\n pointer-events: none;\n box-shadow: 0 4px 16px rgba(0,0,0,0.35);\n transform: translate(14px, 14px);\n}\n\n.wv-prompt-drawer {\n position: fixed;\n top: 48px;\n right: 0;\n bottom: 0;\n width: 380px;\n max-width: 100vw;\n background: var(--wv-panel);\n border-left: 1px solid var(--wv-border);\n box-shadow: -8px 0 24px rgba(0,0,0,0.35);\n z-index: 30;\n display: flex;\n flex-direction: column;\n padding: 14px;\n gap: 10px;\n animation: wv-slide-in 0.12s ease-out;\n}\n\n.wv-settings-drawer {\n position: fixed;\n top: 48px;\n right: 0;\n bottom: 0;\n width: 380px;\n max-width: 100vw;\n background: var(--wv-panel);\n border-left: 1px solid var(--wv-border);\n box-shadow: -8px 0 24px rgba(0,0,0,0.35);\n z-index: 30;\n display: flex;\n flex-direction: column;\n padding: 14px;\n gap: 16px;\n animation: wv-slide-in 0.12s ease-out;\n}\n\n.wv-settings-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 2px;\n}\n\n.wv-settings-close {\n width: 28px;\n height: 28px;\n border-radius: 8px;\n border: 1px solid var(--wv-border);\n background: transparent;\n color: #e8eaed;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wv-settings-section {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.wv-settings-content {\n display: flex;\n flex-direction: column;\n gap: 20px;\n overflow: auto;\n min-height: 0;\n padding: 14px 16px;\n box-sizing: border-box;\n}\n\n.wv-settings-label-row {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n padding: 0 2px;\n color: var(--weevar-grey300, #868689);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n\n.wv-settings-label-inline {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.wv-settings-info-icon {\n color: #484848;\n transform: rotate(180deg);\n}\n\n.wv-settings-help-wrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n cursor: help;\n}\n\n.wv-settings-tool-list {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 1px;\n align-self: stretch;\n border-radius: 12px;\n overflow: hidden;\n}\n\n.wv-settings-row {\n border: none;\n border-bottom: solid var(--weevar-dark, #111113);\n border-bottom-width: 1px;\n background: rgba(235, 235, 235, 0.05);\n color: #A4A4A4;\n padding: 11px 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n cursor: pointer;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n\n.wv-settings-row:last-child {\n border-bottom: none;\n}\n\n.wv-settings-toggle-svg {\n display: block;\n width: 20px;\n height: 20px;\n flex: 0 0 auto;\n}\n\n.wv-settings-toggle-svg-on {\n width: 24px;\n height: 24px;\n filter: drop-shadow(0 0 1.5px rgba(53, 199, 89, 0.55));\n}\n\n.wv-settings-seg {\n display: flex;\n border-radius: 999px;\n overflow: hidden;\n border: 1px solid rgba(235, 235, 235, 0.04);\n}\n\n.wv-settings-seg-on,\n.wv-settings-seg-off {\n flex: 1;\n width: 100%;\n padding: 8px 0;\n cursor: pointer;\n border: none;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n line-height: 100%;\n}\n\n.wv-settings-seg-off {\n background: rgba(235, 235, 235, 0.05);\n color: #A4A4A4;\n font-weight: 400;\n}\n\n.wv-settings-seg-on {\n background: #EBEBEB;\n color: var(--weevar-dark, #111113);\n font-weight: 500;\n}\n\n.wv-settings-foot {\n color: #58585d;\n font-size: 10px;\n}\n\n@keyframes wv-slide-in {\n from { transform: translateX(12px); opacity: 0.85; }\n to { transform: translateX(0); opacity: 1; }\n}\n\n/* Fixed slot next to dock: crossfade / slide when switching tray type */\n.wv-tray-stack {\n position: fixed;\n width: 250px;\n height: 340px;\n z-index: 25;\n pointer-events: auto;\n}\n.wv-tray-stack-layer {\n position: absolute;\n inset: 0;\n opacity: 0;\n transform: translateX(12px);\n transition:\n opacity 0.28s cubic-bezier(0.22, 1, 0.36, 1),\n transform 0.28s cubic-bezier(0.22, 1, 0.36, 1);\n pointer-events: none;\n}\n/* Hidden layers sit above the visible one in DOM order; .wv-pe on asides would still\n capture clicks unless every descendant is non-interactive. */\n.wv-tray-stack-layer:not(.wv-tray-stack-layer--visible) * {\n pointer-events: none !important;\n}\n.wv-tray-stack-layer--visible {\n opacity: 1;\n transform: translateX(0);\n pointer-events: auto;\n animation: wv-tray-draw-out 0.28s cubic-bezier(0.22, 1, 0.36, 1);\n}\n.wv-tray-stack .wv-summary-tray,\n.wv-tray-stack .wv-prompt-drawer {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n width: auto;\n height: auto;\n margin: 0;\n animation: none;\n}\n\n@keyframes wv-tray-draw-out {\n from {\n opacity: 0;\n transform: translateX(12px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.wv-prompt-header {\n font-size: 14px;\n font-weight: 600;\n color: #e8eaed;\n}\n\n.wv-schematic {\n height: 80px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n overflow: hidden;\n}\n\n.wv-schematic-inner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n height: 100%;\n padding: 8px;\n}\n\n.wv-schematic-col { flex: 1; min-width: 0; }\n.wv-schematic-title { font-size: 10px; color: #9aa0a6; margin-bottom: 4px; }\n.wv-schematic-row { display: flex; gap: 4px; flex-wrap: wrap; }\n.wv-schematic-cell {\n flex: 1 1 18px;\n min-width: 18px;\n height: 22px;\n border-radius: 4px;\n border: 1px solid var(--wv-border);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n color: #c9cdd4;\n background: #12151c;\n}\n.wv-schematic-hot {\n border-color: var(--wv-accent);\n color: #e8eaed;\n}\n.wv-schematic-arrow { color: #9aa0a6; font-size: 12px; padding: 0 2px; }\n\n.wv-tabs {\n display: flex;\n gap: 6px;\n}\n.wv-tab {\n flex: 1;\n height: 30px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n color: #c9cdd4;\n cursor: pointer;\n font-size: 12px;\n}\n.wv-tab-on {\n border-color: var(--wv-accent);\n color: #e8eaed;\n}\n\n.wv-prompt-body {\n flex: 1;\n min-height: 120px;\n max-height: 40vh;\n overflow: auto;\n margin: 0;\n padding: 10px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: #0f1115;\n color: #e8eaed;\n font: 12px var(--wv-mono);\n white-space: pre-wrap;\n}\n\n.wv-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 11px;\n color: #9aa0a6;\n}\n.wv-select {\n height: 32px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n color: #e8eaed;\n padding: 0 8px;\n}\n\n.wv-prompt-actions {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n.wv-btn {\n height: 32px;\n padding: 0 12px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n color: #e8eaed;\n cursor: pointer;\n font-size: 12px;\n}\n.wv-btn-primary {\n background: var(--wv-accent);\n border-color: var(--wv-accent);\n color: #0b0d10;\n font-weight: 600;\n}\n.wv-btn-danger {\n border-color: rgba(255, 77, 79, 0.45);\n color: #ff8588;\n}\n\n.wv-drop-zone {\n position: fixed;\n pointer-events: none;\n border: 1px dashed rgba(0, 153, 255, 0.45);\n background: rgba(0, 153, 255, 0.06);\n z-index: 7;\n border-radius: 6px;\n}\n\n.wv-badge {\n position: fixed;\n width: 22px;\n height: 22px;\n border-radius: 999px;\n background: #35c759;\n color: #fff;\n border: none;\n font-size: 12px;\n font-weight: 700;\n line-height: 22px;\n text-align: center;\n pointer-events: none;\n z-index: 10;\n}\n\n.wv-toast {\n position: fixed;\n left: 50%;\n bottom: 80px;\n transform: translateX(-50%);\n max-width: min(420px, 92vw);\n padding: 10px 14px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: rgba(15, 17, 21, 0.95);\n color: #e8eaed;\n font-size: 12px;\n z-index: 40;\n box-shadow: 0 4px 16px rgba(0,0,0,0.35);\n}\n\n.wv-fixed-hint {\n color: #ffb84d;\n}\n\n.wv-panel-note {\n font-size: 12px;\n color: #c9cdd4;\n border-left: 2px solid var(--wv-border);\n padding-left: 8px;\n}\n\n/* Figma overlay redesign overrides */\n.wv-tool-button {\n position: fixed;\n right: 20px;\n bottom: 20px;\n width: 50px;\n height: 50px;\n padding: 14px;\n border: none;\n border-radius: 999px;\n background: var(--weevar-dark, #111113);\n color: #EBEBEB;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n.wv-tool-button::after {\n content: attr(data-tooltip);\n position: absolute;\n z-index: 40;\n pointer-events: none;\n left: 50%;\n top: calc(100% - 4px);\n transform: translateX(-50%);\n display: inline-flex;\n padding: 4px 8px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #2D2D31;\n color: rgba(241, 241, 241, 0.7);\n text-align: center;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.12s ease;\n}\n.wv-tool-button[data-tooltip-align=\"left\"]::after {\n left: 0;\n transform: none;\n}\n.wv-tool-button[data-tooltip-align=\"right\"]::after {\n left: auto;\n right: 0;\n transform: none;\n}\n.wv-tool-button:hover::after {\n opacity: 1;\n visibility: visible;\n transition-delay: 1.6s;\n}\n.wv-tool-button[data-tooltip-suppress=\"true\"]::after {\n opacity: 0 !important;\n visibility: hidden !important;\n transition-delay: 0s !important;\n}\n.wv-tool-button-logo { width: 18px; height: 18px; color: #EBEBEB; }\n.wv-tool-button-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n width: 22px;\n height: 22px;\n border-radius: 999px;\n background: #35c759;\n color: #fff;\n border: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 700;\n line-height: 22px;\n text-align: center;\n pointer-events: none;\n z-index: 12;\n}\n\n.wv-dock {\n position: fixed;\n right: 20px;\n bottom: 20px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n z-index: 26;\n pointer-events: auto;\n}\n\n.wv-toolbar {\n position: static;\n transform: none;\n width: 50px;\n height: 282px;\n border-radius: 100px;\n background: var(--weevar-dark, #111113);\n border: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: 10px 8px;\n cursor: grab;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n.wv-toolbar:active { cursor: grabbing; }\n\n.wv-tool-icon {\n width: 34px;\n height: 34px;\n border-radius: 999px;\n border: none;\n background: transparent;\n color: #EBEBEB;\n font-size: 14px;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n}\n.wv-tool-icon-on { background: rgba(235, 235, 235, 0.08); color: #EBEBEB; }\n.wv-tool-icon:hover:not(:disabled) { background: rgba(235, 235, 235, 0.08); color: #EBEBEB; }\n.wv-tool-icon:disabled {\n opacity: 0.16;\n cursor: not-allowed;\n}\n.wv-tool-icon:disabled:hover {\n cursor: not-allowed;\n}\n\n.wv-toolbar-close {\n margin-left: 0;\n width: 50px;\n height: 50px;\n border-radius: 999px;\n border: none;\n background: var(--weevar-dark, #111113);\n color: #EBEBEB;\n font-size: 22px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n\n.wv-tool-icon svg,\n.wv-toolbar-close svg {\n display: block;\n flex: 0 0 auto;\n width: 18px;\n height: 18px;\n margin: auto;\n}\n\n.wv-icon-pointer,\n.wv-icon-prompt {\n width: 20px !important;\n height: 20px !important;\n}\n\n.wv-summary-tray,\n.wv-prompt-drawer {\n position: fixed;\n right: 78px;\n bottom: 20px;\n width: 250px;\n height: 340px;\n border-radius: 24px;\n background: var(--weevar-dark, #111113);\n border: 1px solid rgba(235, 235, 235,0.04);\n padding: 8px 0 6px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n z-index: 25;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n\n.wv-tray-head,\n.wv-tray-foot {\n flex: 0 0 auto;\n height: 24px;\n padding: 6px 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--weevar-grey200, #58585D);\n font: 400 10px Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n}\n.wv-tray-head,\n.wv-tray-foot {\n position: relative;\n}\n.wv-tray-head {\n margin-bottom: 6px;\n}\n.wv-tray-foot {\n margin-top: 6px;\n}\n.wv-tray-head::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n bottom: -6px;\n border-bottom: 1px solid var(--weevar-transparent, rgba(235, 235, 235, 0.05));\n}\n.wv-tray-foot::before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: -6px;\n border-top: 1px solid var(--weevar-transparent, rgba(235, 235, 235, 0.05));\n}\n.wv-tray-logo { color: #EBEBEB; display: block; width: 48px; height: 10px; }\n.wv-tray-hide-icon { display: block; width: 12px; height: 12px; color: #58585d; }\n.wv-tray-hide-btn {\n border: none;\n background: transparent;\n padding: 0;\n width: 12px;\n height: 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: #58585d;\n cursor: pointer;\n}\n\n.wv-toolbar-tooltip {\n position: fixed;\n z-index: 40;\n pointer-events: none;\n display: inline-flex;\n padding: 4px 8px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #2D2D31;\n color: rgba(241, 241, 241, 0.7);\n text-align: center;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n\n.wv-settings-helper-tooltip {\n position: fixed;\n z-index: 41;\n pointer-events: none;\n transform: translateY(-50%);\n display: flex;\n width: 140px;\n padding: 5px 10px;\n align-items: center;\n gap: 10px;\n border-radius: 8px;\n background: #2D2D31;\n color: rgba(241, 241, 241, 0.7);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 140%;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n.wv-tray-content {\n flex: 1 1 auto;\n min-height: 0;\n overflow: hidden;\n padding-bottom: 2px;\n}\n.wv-tray-content-summary {\n flex: 1 1 auto;\n min-height: 0;\n overflow: hidden;\n padding: 16px 16px 16px;\n box-sizing: border-box;\n}\n.wv-summary-content {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n justify-content: space-between;\n}\n.wv-summary-heading {\n display: flex;\n flex-direction: column;\n gap: 8px;\n line-height: 1;\n align-items: flex-start;\n width: 100%;\n}\n.wv-summary-kicker {\n color: #868689;\n text-align: left;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n width: 100%;\n}\n.wv-summary-title {\n color: #EBEBEB;\n text-align: left;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 24px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n width: 100%;\n}\n.wv-summary-main {\n display: flex;\n flex-direction: column;\n gap: 24px;\n margin: 0;\n}\n.wv-tray-content-selection {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow: hidden;\n min-height: 0;\n padding: 14px 16px;\n box-sizing: border-box;\n}\n.wv-tray-content-selection .wv-tray-card {\n margin: 0;\n}\n.wv-selection-path-card {\n flex: 0 0 auto;\n padding: 10px;\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.wv-selection-path-card .wv-selection-path-text {\n display: block;\n min-width: 0;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--weevar-grey300, #868689);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 120%;\n}\n.wv-selection-css-card {\n flex: 1 1 auto;\n min-height: 0;\n padding: 0;\n overflow: hidden;\n}\n.wv-selection-css-scroll-wrap {\n position: relative;\n height: 100%;\n padding: 0;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.wv-selection-css-scroll {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n padding: 0;\n box-sizing: border-box;\n scrollbar-width: none;\n}\n.wv-selection-css-scroll::-webkit-scrollbar {\n width: 0;\n}\n.wv-selection-css-line {\n font-family: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 170%;\n margin-bottom: 6px;\n padding: 0 10px;\n word-break: break-word;\n}\n.wv-selection-css-line:first-child { padding-top: 10px; }\n.wv-selection-css-line:last-child { padding-bottom: 10px; margin-bottom: 0; }\n.wv-selection-css-key { color: #AAA0FA; }\n.wv-selection-css-value { color: #868689; }\n.wv-selection-css-sep { color: #868689; }\n.wv-selection-css-key,\n.wv-selection-css-value,\n.wv-selection-css-sep {\n font-family: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace !important;\n font-size: 11px !important;\n font-style: normal !important;\n font-weight: 400 !important;\n line-height: 170% !important;\n}\n.wv-tray-foot span {\n color: var(--weevar-grey200, #58585D);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n.wv-tray-card {\n margin: 12px 16px 0;\n border-radius: 12px;\n background: rgba(235, 235, 235,0.05);\n min-height: 0;\n}\n.wv-overview-card {\n height: 110px;\n border-radius: 12px;\n background: transparent;\n display: grid;\n grid-template-columns: 1fr 1px 1fr;\n align-items: stretch;\n position: relative;\n overflow: hidden;\n margin: 0;\n width: 100%;\n}\n.wv-overview-divider {\n width: 1px;\n margin: 0;\n background: #111113;\n z-index: 1;\n}\n.wv-overview-stat {\n background: #18181A;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: space-between;\n padding: 14px 14px 18px;\n gap: 0;\n z-index: 1;\n}\n.wv-overview-orb {\n width: 44px;\n height: 44px;\n border-radius: 999px;\n border: 1px solid #3C3C41;\n background: transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.wv-overview-orb--moved {\n position: relative;\n}\n.wv-overview-orb--moved::before {\n content: \"\";\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 999px;\n background: #35C759;\n}\n.wv-overview-orb-value {\n position: absolute;\n inset: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: #111113;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 16px;\n font-weight: 500;\n line-height: 100%;\n}\n.wv-overview-orb--tool svg {\n width: 32px;\n height: 32px;\n}\n.wv-overview-orb--tool::before {\n content: \"\";\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 999px;\n background: #FFCC02;\n}\n.wv-overview-orb--tool {\n position: relative;\n}\n.wv-overview-orb--tool svg {\n position: relative;\n z-index: 1;\n width: 14px;\n height: 14px;\n display: block;\n}\n.wv-overview-label {\n color: var(--weevar-grey300, #868689);\n text-align: center;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n white-space: nowrap;\n}\n.wv-doc-card {\n margin: 0;\n flex: 0 0 auto;\n border-radius: 12px;\n background: transparent;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 0;\n color: #EBEBEB;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n line-height: 100%;\n}\n.wv-doc-icon {\n width: 24px;\n height: 30px;\n display: grid;\n place-items: center;\n flex: 0 0 auto;\n}\n.wv-doc-icon svg { width: 24px; height: 30px; display: block; }\n.wv-doc-copy {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1 1 auto;\n}\n.wv-doc-title {\n color: #EBEBEB;\n text-align: left;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n.wv-doc-site {\n color: #868689;\n text-align: left;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n.wv-doc-go {\n margin-left: auto;\n width: 30px;\n height: 30px;\n min-width: 30px;\n min-height: 30px;\n padding: 4px;\n border: none;\n border-radius: 999px;\n background: rgba(235, 235, 235,0.1);\n color: #EBEBEB;\n display: grid;\n place-items: center;\n line-height: 0;\n cursor: pointer;\n flex-shrink: 0;\n}\n.wv-doc-go svg {\n width: 14px;\n height: 14px;\n display: block;\n color: #EBEBEB;\n}\n\n.wv-prompt-drawer {\n top: auto;\n left: auto;\n bottom: 20px;\n}\n.wv-prompt-content {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n height: 100%;\n min-height: 0;\n padding: 0 16px;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.wv-prompt-drawer .wv-tray-content {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n padding-top: 14px;\n padding-bottom: 14px;\n}\n.wv-prompt-drawer .wv-tray-head {\n margin-bottom: 0;\n}\n.wv-prompt-drawer .wv-tray-foot {\n margin-top: 0;\n}\n.wv-prompt-card {\n flex: 1 1 auto;\n min-height: 0;\n border-radius: 12px;\n background: rgba(235, 235, 235,0.05);\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.wv-prompt-card-scroll {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n padding-top: 10px;\n padding-right: 0;\n padding-bottom: 10px;\n padding-left: 10px;\n box-sizing: border-box;\n scrollbar-width: none;\n}\n.wv-prompt-card-scroll::-webkit-scrollbar {\n width: 0;\n height: 0;\n}\n.wv-prompt-scrollbar {\n position: absolute;\n top: 0;\n right: 2px;\n bottom: 0;\n width: 4px;\n pointer-events: none;\n}\n.wv-prompt-scrollbar-thumb {\n position: absolute;\n right: 0;\n width: 4px;\n border-radius: 999px;\n background: #111113;\n}\n.wv-prompt-card-title {\n color: #EBEBEB;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 100%;\n margin-bottom: 12px;\n padding-right: 10px;\n}\n.wv-prompt-card-body {\n margin: 0;\n padding-right: 10px;\n color: #868689;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 11px;\n line-height: 170%;\n}\n.wv-prompt-copy-btn {\n flex: 0 0 auto;\n padding: 8px 0;\n border-radius: 999px;\n border: none;\n background: rgba(235, 235, 235,0.05);\n color: #EBEBEB;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n cursor: pointer;\n}\n.wv-prompt-copy-btn:disabled {\n color: #EBEBEB;\n opacity: 0.35;\n cursor: not-allowed;\n}\n.wv-prompt-copy-btn:disabled:hover {\n cursor: not-allowed;\n}\n.wv-prompt-copy-btn.wv-prompt-copy-btn-on {\n color: var(--weevar-green, #7be5a3);\n}\n.wv-prompt-copy-btn svg {\n width: 12px;\n height: 12px;\n}\n.wv-prompt-copy-btn span {\n color: inherit;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n\n.wv-badge {\n background: #35c759;\n color: #fff;\n border: none;\n width: 22px;\n height: 22px;\n line-height: 22px;\n z-index: 12;\n}\n\n/* Final Figma polish overrides */\n:root { --wv-accent: #7be5a3; }\n.wv-outline {\n border-radius: 4px !important;\n border: 1.5px solid var(--weevar-green, #7BE5A3) !important;\n background: rgba(123, 229, 163, 0.04) !important;\n}\n.wv-outline-selected {\n border-radius: 4px !important;\n border: 1.5px solid var(--weevar-green, #7BE5A3) !important;\n background: rgba(123, 229, 163, 0.04) !important;\n}\n.wv-label { background: rgba(22, 22, 30, 0.9); border: none; border-radius: 8px; padding: 5px 10px; color: #EBEBEB; }\n.wv-drag-handle { background: rgba(22, 22, 30, 0.9); border: none; border-radius: 8px; }\n.wv-handle-grid { background-image: radial-gradient(circle, #EBEBEB 1px, transparent 1px); }\n.wv-toast { background: rgba(22, 22, 30, 0.96); border: none; border-radius: 10px; color: #EBEBEB; }\n.wv-tool-icon { color: #d6d6da; }\n.wv-tool-icon-on { background: rgba(235, 235, 235, 0.08); color: #EBEBEB; }\n.wv-tool-icon:hover:not(:disabled) { background: rgba(235, 235, 235, 0.08); color: #EBEBEB; }\n.wv-tool-icon:disabled {\n opacity: 0.16;\n cursor: not-allowed;\n}\n.wv-tool-icon:disabled:hover {\n cursor: not-allowed;\n}\n.wv-summary-tray, .wv-prompt-drawer { border: none; }\n.wv-tray-head .wv-tray-logo { width: 48px; height: 10px; }\n.wv-doc-card { font-size: 12px; }\n.wv-prompt-header { display: block; margin: 0 16px; font-size: 12px; font-weight: 400; color: #EBEBEB; }\n.wv-tabs { display: none; }\n.wv-field { display: none; }\n.wv-prompt-actions { display: grid; grid-template-columns: 1fr; margin: 0 16px; }\n.wv-btn { border-radius: 999px; border: none; background: rgba(235, 235, 235,0.05); color: #EBEBEB; height: 28px; font-size: 10px; }\n.wv-btn:not(.wv-btn-primary), .wv-btn-danger { display: none; }\n.wv-btn-primary { font-weight: 400; }\n`;\n","import { useEffect, useRef, useState, type CSSProperties } from \"react\";\nimport type { WeevarRuntimeConfig } from \"../engine/layoutTypes\";\nimport { weevarVersionLabel } from \"../version\";\n\ntype Props = {\n promptText: string;\n canCopy: boolean;\n runtimeConfig?: WeevarRuntimeConfig;\n onCopy: () => void | Promise<void>;\n onClose: () => void;\n warningNote?: string | null;\n copyFlash: boolean;\n style?: CSSProperties;\n /** When stacked with other trays, hide from a11y tree while off-screen */\n hidden?: boolean;\n};\n\nexport function PromptPanel({\n promptText,\n canCopy,\n runtimeConfig: _runtimeConfig,\n onCopy,\n onClose,\n warningNote,\n copyFlash,\n style,\n hidden = false,\n}: Props) {\n void _runtimeConfig; // reserved for future panel-local template hooks\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const [scrollThumb, setScrollThumb] = useState<{ top: number; height: number; visible: boolean }>({\n top: 0,\n height: 0,\n visible: false,\n });\n\n useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n\n const update = () => {\n const client = el.clientHeight;\n const scroll = el.scrollHeight;\n const maxScroll = scroll - client;\n if (maxScroll <= 0 || client <= 0) {\n setScrollThumb({ top: 0, height: 0, visible: false });\n return;\n }\n const trackInset = 10;\n const trackHeight = Math.max(0, client - trackInset * 2);\n const height = Math.max(20, (client / scroll) * trackHeight);\n const ratio = el.scrollTop / maxScroll;\n const travel = Math.max(0, trackHeight - height);\n const top = trackInset + ratio * travel;\n setScrollThumb({ top, height, visible: true });\n };\n\n update();\n el.addEventListener(\"scroll\", update, { passive: true });\n window.addEventListener(\"resize\", update);\n return () => {\n el.removeEventListener(\"scroll\", update);\n window.removeEventListener(\"resize\", update);\n };\n }, [promptText, copyFlash]);\n\n return (\n <aside\n className=\"wv-prompt-drawer wv-pe\"\n role=\"dialog\"\n aria-label=\"Generated prompt\"\n style={style}\n aria-hidden={hidden}\n >\n <div className=\"wv-tray-head\">\n <PromptLogo />\n <button type=\"button\" className=\"wv-tray-hide-btn\" aria-label=\"Hide tray\" onClick={onClose}>\n <HideTrayIcon />\n </button>\n </div>\n <div className=\"wv-tray-content wv-prompt-content\">\n <div className=\"wv-prompt-card\">\n <div ref={scrollRef} className=\"wv-prompt-card-scroll\">\n <div className=\"wv-prompt-card-title\">Prompt</div>\n <pre className=\"wv-prompt-card-body\">{promptText}</pre>\n </div>\n {scrollThumb.visible ? (\n <div className=\"wv-prompt-scrollbar\" aria-hidden>\n <div\n className=\"wv-prompt-scrollbar-thumb\"\n style={{ top: scrollThumb.top, height: scrollThumb.height }}\n />\n </div>\n ) : null}\n </div>\n <button\n type=\"button\"\n className={`wv-prompt-copy-btn ${copyFlash ? \"wv-prompt-copy-btn-on\" : \"\"}`}\n onClick={() => void onCopy()}\n disabled={!canCopy}\n >\n {copyFlash ? <CopySuccessIcon /> : <CopyIcon />}\n <span>{copyFlash ? \"Copied\" : \"Copy\"}</span>\n </button>\n {warningNote ? <div className=\"wv-panel-note\">{warningNote}</div> : null}\n </div>\n <div className=\"wv-tray-foot\">\n <span>{weevarVersionLabel()}</span>\n <GlobeIcon />\n </div>\n </aside>\n );\n}\n\nfunction PromptLogo() {\n return (\n <svg\n className=\"wv-tray-logo\"\n width=\"48\"\n height=\"10\"\n viewBox=\"0 0 48 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Weevar\"\n >\n <path d=\"M2.16888 9.97264C1.66872 9.97264 1.2504 9.76288 0.913931 9.34336C0.577459 8.92385 0.409223 8.34929 0.409223 7.6197C0.409223 7.24578 0.450145 6.82627 0.531989 6.36115C0.613834 5.88691 0.709319 5.40812 0.818445 4.92476C0.927571 4.4414 1.02306 3.98997 1.1049 3.57045C1.18675 3.14181 1.22767 2.78614 1.22767 2.50342C1.22767 2.30278 1.20039 2.14774 1.14582 2.0383C1.09126 1.91974 0.991228 1.86047 0.845727 1.86047C0.736601 1.86047 0.609287 1.91062 0.463786 2.01094C0.318284 2.11126 0.209158 2.30734 0.136408 2.59918L0 2.54446C0 1.76015 0.17733 1.13999 0.531989 0.683995C0.895743 0.227998 1.38226 0 1.99155 0C2.56446 0 2.96004 0.186959 3.1783 0.560876C3.40564 0.934793 3.51931 1.40447 3.51931 1.9699C3.51931 2.38942 3.47385 2.8363 3.38291 3.31053C3.30106 3.78477 3.20558 4.25901 3.09645 4.73324C2.98733 5.19836 2.88729 5.63155 2.79635 6.03283C2.71451 6.43411 2.67359 6.76699 2.67359 7.03146C2.67359 7.42362 2.77362 7.6197 2.97368 7.6197C3.0919 7.6197 3.25105 7.53762 3.45111 7.37346C3.65118 7.20018 3.86033 6.96762 4.07859 6.67579C4.30593 6.37483 4.52418 6.03739 4.73334 5.66347C4.9425 5.28044 5.11983 4.87916 5.26533 4.45964C5.24714 4.25901 5.2335 4.06749 5.22441 3.88509C5.21531 3.69357 5.21077 3.52485 5.21077 3.37893C5.21077 2.64934 5.27897 2.0611 5.41538 1.61423C5.56088 1.16735 5.74276 0.839033 5.96101 0.629275C6.17926 0.419517 6.40206 0.314637 6.62941 0.314637C6.94769 0.314637 7.23415 0.492476 7.48877 0.848153C7.7434 1.19471 7.87072 1.66895 7.87072 2.27086C7.87072 2.64478 7.80251 3.0643 7.6661 3.52941C7.5297 3.98541 7.30235 4.47332 6.98407 4.99316C6.95678 5.77747 7.04318 6.41131 7.24324 6.89466C7.44331 7.37802 7.69339 7.6197 7.99348 7.6197C8.18445 7.6197 8.38906 7.52394 8.60732 7.33242C8.83466 7.13178 9.04382 6.85819 9.23479 6.51163C9.42576 6.15595 9.58036 5.74555 9.69858 5.28044C9.82589 4.81532 9.88955 4.31829 9.88955 3.78933C9.88955 3.47925 9.86681 3.15549 9.82134 2.81806C9.78497 2.48062 9.73495 2.15686 9.67129 1.84678C9.61673 1.53671 9.55762 1.28135 9.49396 1.08071C9.49396 0.925672 9.55762 0.770634 9.68494 0.615595C9.82134 0.451437 9.99413 0.314637 10.2033 0.205198C10.4124 0.086639 10.6261 0.0273594 10.8444 0.0273594C11.0627 0.0273594 11.2718 0.104879 11.4719 0.259918C11.6719 0.414957 11.8356 0.688555 11.9629 1.08071C12.0903 1.46375 12.1539 2.01094 12.1539 2.7223C12.1539 3.71637 12.0266 4.65116 11.772 5.52668C11.5173 6.39307 11.1718 7.15914 10.7353 7.8249C10.3079 8.49065 9.83498 9.01505 9.31663 9.39808C8.79829 9.772 8.27084 9.95896 7.73431 9.95896C7.26143 9.95896 6.87039 9.81304 6.5612 9.5212C6.25201 9.22937 6.01103 8.83721 5.83824 8.34473C5.66546 7.85226 5.54269 7.30506 5.46994 6.70315C5.14256 7.48746 4.7879 8.12129 4.40596 8.60465C4.02402 9.07889 3.64208 9.42544 3.26014 9.64432C2.8782 9.8632 2.51445 9.97264 2.16888 9.97264Z\" fill=\"currentColor\" />\n <path d=\"M15.4244 10C14.7605 10 14.2104 9.86776 13.7739 9.60328C13.3374 9.32969 13.01 8.97401 12.7917 8.53625C12.5735 8.08938 12.4643 7.61058 12.4643 7.09986C12.4643 6.61651 12.5553 6.13315 12.7372 5.64979C12.9281 5.15732 13.2009 4.71044 13.5556 4.30917C13.9194 3.90789 14.3559 3.58413 14.8651 3.33789C15.3835 3.09166 15.9655 2.96854 16.6111 2.96854C17.4114 2.96854 17.9934 3.15093 18.3572 3.51573C18.73 3.87141 18.9164 4.30461 18.9164 4.81532C18.9164 5.25308 18.7982 5.65891 18.5618 6.03283C18.3344 6.39763 18.0298 6.69403 17.6478 6.92202C17.2659 7.1409 16.8476 7.25034 16.3929 7.25034C16.1564 7.25034 15.9155 7.21386 15.6699 7.1409C15.4244 7.06794 15.1834 6.95394 14.947 6.79891C14.9924 7.36434 15.1561 7.77474 15.438 8.0301C15.7199 8.28545 16.0564 8.41313 16.4474 8.41313C16.7203 8.41313 16.9931 8.36297 17.2659 8.26265C17.5387 8.15321 17.7888 8.01642 18.0161 7.85226C18.2526 7.67898 18.4344 7.49658 18.5618 7.30506L18.6572 7.37346C18.6572 7.8477 18.5572 8.25353 18.3572 8.59097C18.1662 8.91929 17.9116 9.18833 17.5933 9.39808C17.275 9.60784 16.9249 9.76288 16.5429 9.8632C16.1701 9.9544 15.7972 10 15.4244 10ZM15.7381 6.30643C16.0291 6.30643 16.2656 6.22435 16.4474 6.06019C16.6293 5.88691 16.7657 5.68627 16.8567 5.45828C16.9476 5.23028 16.9931 5.02964 16.9931 4.85636C16.9931 4.6466 16.934 4.47332 16.8157 4.33653C16.6975 4.19061 16.5338 4.11765 16.3247 4.11765C16.161 4.11765 15.9791 4.17693 15.779 4.29549C15.5881 4.41404 15.4153 4.61924 15.2607 4.91108C15.1061 5.1938 15.0061 5.59052 14.9606 6.10123C15.2516 6.23803 15.5108 6.30643 15.7381 6.30643Z\" fill=\"currentColor\" />\n <path d=\"M22.5378 10C21.874 10 21.3238 9.86776 20.8873 9.60328C20.4508 9.32969 20.1234 8.97401 19.9052 8.53625C19.6869 8.08938 19.5778 7.61058 19.5778 7.09986C19.5778 6.61651 19.6687 6.13315 19.8506 5.64979C20.0416 5.15732 20.3144 4.71044 20.669 4.30917C21.0328 3.90789 21.4693 3.58413 21.9786 3.33789C22.4969 3.09166 23.0789 2.96854 23.7246 2.96854C24.5248 2.96854 25.1068 3.15093 25.4706 3.51573C25.8434 3.87141 26.0299 4.30461 26.0299 4.81532C26.0299 5.25308 25.9116 5.65891 25.6752 6.03283C25.4479 6.39763 25.1432 6.69403 24.7613 6.92202C24.3793 7.1409 23.961 7.25034 23.5063 7.25034C23.2699 7.25034 23.0289 7.21386 22.7834 7.1409C22.5378 7.06794 22.2968 6.95394 22.0604 6.79891C22.1059 7.36434 22.2696 7.77474 22.5515 8.0301C22.8334 8.28545 23.1698 8.41313 23.5609 8.41313C23.8337 8.41313 24.1065 8.36297 24.3793 8.26265C24.6521 8.15321 24.9022 8.01642 25.1296 7.85226C25.366 7.67898 25.5479 7.49658 25.6752 7.30506L25.7707 7.37346C25.7707 7.8477 25.6707 8.25353 25.4706 8.59097C25.2796 8.91929 25.025 9.18833 24.7067 9.39808C24.3884 9.60784 24.0383 9.76288 23.6564 9.8632C23.2835 9.9544 22.9107 10 22.5378 10ZM22.8516 6.30643C23.1426 6.30643 23.379 6.22435 23.5609 6.06019C23.7428 5.88691 23.8792 5.68627 23.9701 5.45828C24.061 5.23028 24.1065 5.02964 24.1065 4.85636C24.1065 4.6466 24.0474 4.47332 23.9292 4.33653C23.811 4.19061 23.6473 4.11765 23.4381 4.11765C23.2744 4.11765 23.0926 4.17693 22.8925 4.29549C22.7015 4.41404 22.5287 4.61924 22.3741 4.91108C22.2195 5.1938 22.1195 5.59052 22.074 6.10123C22.365 6.23803 22.6242 6.30643 22.8516 6.30643Z\" fill=\"currentColor\" />\n <path d=\"M28.751 9.95896C28.2235 9.95896 27.8052 9.82216 27.496 9.54856C27.1868 9.26585 27.0322 8.83265 27.0322 8.24897C27.0322 7.91154 27.0732 7.5513 27.155 7.16826C27.246 6.78523 27.3323 6.44323 27.4142 6.14227C27.496 5.85043 27.5597 5.59508 27.6052 5.3762C27.6597 5.15732 27.687 4.9886 27.687 4.87004C27.687 4.72412 27.6552 4.61924 27.5915 4.5554C27.5279 4.49156 27.4506 4.45964 27.3596 4.45964C27.1414 4.45964 26.9595 4.56452 26.814 4.77428L26.7594 4.71956C26.7685 4.40948 26.8686 4.12677 27.0595 3.87141C27.2505 3.60693 27.496 3.39717 27.7961 3.24213C28.0962 3.0871 28.4009 3.00958 28.7101 3.00958C29.0556 3.00958 29.3512 3.11446 29.5967 3.32421C29.8422 3.52485 29.9559 3.84405 29.9377 4.28181C29.9286 4.47332 29.8923 4.715 29.8286 5.00684C29.774 5.29868 29.6967 5.64523 29.5967 6.04651C29.533 6.30187 29.4648 6.59371 29.3921 6.92202C29.3284 7.24122 29.2966 7.53306 29.2966 7.79754C29.2966 7.99818 29.3284 8.15777 29.3921 8.27633C29.4558 8.39489 29.5603 8.45417 29.7058 8.45417C29.8968 8.45417 30.106 8.34929 30.3333 8.13953C30.5697 7.92066 30.7744 7.56954 30.9471 7.08618C31.1199 6.59371 31.22 5.94163 31.2472 5.12996C31.2745 4.5098 31.2336 4.05837 31.1245 3.77565V3.70725C31.2063 3.57957 31.3291 3.45645 31.4928 3.33789C31.6656 3.21933 31.8565 3.12357 32.0657 3.05062C32.2748 2.96854 32.4704 2.9275 32.6522 2.9275C32.9432 2.9275 33.1888 3.06886 33.3888 3.35157C33.598 3.63429 33.6889 4.12677 33.6617 4.829C33.6435 5.50388 33.5207 6.11491 33.2934 6.66211C33.0751 7.2093 32.7886 7.6881 32.434 8.0985C32.0793 8.50889 31.6883 8.85089 31.2609 9.12449C30.8426 9.39808 30.4152 9.60784 29.9786 9.75376C29.5421 9.89056 29.1329 9.95896 28.751 9.95896Z\" fill=\"currentColor\" />\n <path d=\"M39.2501 9.97264C38.9318 9.97264 38.6545 9.86776 38.418 9.658C38.1816 9.44824 38.0634 9.10625 38.0634 8.63201C38.0634 8.58641 38.0634 8.54081 38.0634 8.49521C38.0634 8.44961 38.0679 8.40401 38.077 8.35841C37.8042 8.90561 37.495 9.31145 37.1494 9.57592C36.8129 9.83128 36.4719 9.95896 36.1264 9.95896C35.8081 9.95896 35.508 9.84952 35.2261 9.63064C34.9442 9.40264 34.7168 9.06977 34.544 8.63201C34.3713 8.19425 34.2849 7.6653 34.2849 7.04514C34.2849 6.40675 34.3713 5.83675 34.544 5.33516C34.7259 4.83356 34.9624 4.40948 35.2534 4.06293C35.5444 3.71637 35.8626 3.45645 36.2082 3.28317C36.5538 3.10078 36.8902 3.00958 37.2176 3.00958C37.5814 3.00958 37.9088 3.12358 38.1998 3.35157C38.4908 3.57045 38.6908 3.92157 38.8 4.40492C38.8272 4.24989 38.8454 4.10853 38.8545 3.98085C38.8727 3.85317 38.8818 3.76653 38.8818 3.72093C38.8909 3.47469 39.0137 3.29229 39.2501 3.17373C39.4956 3.05518 39.7639 2.9959 40.0549 2.9959C40.3095 2.9959 40.5505 3.04606 40.7779 3.14637C41.0052 3.24669 41.1598 3.41541 41.2416 3.65253L41.2689 3.73461C41.1598 3.98085 41.0507 4.27725 40.9415 4.6238C40.8324 4.97036 40.7324 5.33516 40.6415 5.71819C40.5505 6.09211 40.4778 6.46147 40.4232 6.82627C40.3686 7.18194 40.3414 7.49658 40.3414 7.77018C40.3414 8.07114 40.3732 8.28089 40.4368 8.39945C40.5005 8.50889 40.5778 8.56361 40.6687 8.56361C40.8233 8.56361 40.9643 8.45417 41.0916 8.23529L41.2007 8.29001C41.2007 8.60009 41.1007 8.88281 40.9006 9.13817C40.7006 9.39353 40.4505 9.59872 40.1504 9.75376C39.8503 9.89968 39.5502 9.97264 39.2501 9.97264ZM37.0267 8.23529C37.2631 8.23529 37.5223 8.02554 37.8042 7.60602C38.0952 7.17738 38.3453 6.56635 38.5544 5.77291C38.5726 5.69083 38.5908 5.61332 38.609 5.54036C38.6272 5.45828 38.6408 5.38076 38.6499 5.3078C38.5044 4.97036 38.3498 4.73324 38.1861 4.59644C38.0315 4.45052 37.8769 4.37756 37.7223 4.37756C37.495 4.37756 37.2813 4.50068 37.0812 4.74692C36.8902 4.98404 36.7311 5.285 36.6038 5.64979C36.4856 6.01459 36.4265 6.37939 36.4265 6.74419C36.4265 7.24578 36.481 7.6197 36.5901 7.86594C36.7084 8.11218 36.8539 8.23529 37.0267 8.23529Z\" fill=\"currentColor\" />\n <path d=\"M43.5804 9.95896C43.253 9.95896 42.962 9.82672 42.7074 9.56224C42.4528 9.28865 42.3254 8.90561 42.3254 8.41313C42.3254 8.17601 42.3527 7.90698 42.4073 7.60602C42.4619 7.30506 42.5255 6.99954 42.5983 6.68947C42.671 6.37027 42.7347 6.07387 42.7892 5.80027C42.8438 5.51756 42.8711 5.285 42.8711 5.1026C42.8711 4.91108 42.8347 4.7606 42.762 4.65116C42.6983 4.5326 42.6119 4.47332 42.5028 4.47332C42.33 4.47332 42.1527 4.59188 41.9708 4.829L41.8889 4.77428C41.8798 4.62836 41.9117 4.45508 41.9844 4.25445C42.0572 4.05381 42.1709 3.86229 42.3254 3.67989C42.48 3.48837 42.6756 3.32877 42.912 3.20109C43.1575 3.07342 43.444 3.00958 43.7714 3.00958C44.2533 3.00958 44.6035 3.15093 44.8217 3.43365C45.04 3.70725 45.1491 4.04013 45.1491 4.43228C45.1491 4.49612 45.1445 4.56452 45.1354 4.63748C45.1354 4.70132 45.1309 4.76516 45.1218 4.829C45.4492 4.23621 45.7902 3.78477 46.1449 3.47469C46.5086 3.15549 46.8451 2.9959 47.1543 2.9959C47.4453 2.9959 47.659 3.1099 47.7954 3.33789C47.9318 3.56589 48 3.83949 48 4.15869C48 4.45052 47.9409 4.74692 47.8227 5.04788C47.7135 5.34884 47.5453 5.59964 47.318 5.80027C47.0997 5.99179 46.8314 6.08299 46.5132 6.07387L46.4586 6.04651C46.4495 5.80939 46.3722 5.62243 46.2267 5.48564C46.0812 5.34884 45.9175 5.28044 45.7356 5.28044C45.4901 5.28044 45.2582 5.40356 45.04 5.64979C44.8308 5.89603 44.7262 6.25171 44.7262 6.71683C44.7262 6.99954 44.758 7.30506 44.8217 7.63338C44.8854 7.9617 44.9172 8.23985 44.9172 8.46785C44.9172 8.74145 44.8535 8.99225 44.7262 9.22025C44.5989 9.44824 44.4352 9.63064 44.2352 9.76744C44.0351 9.89512 43.8168 9.95896 43.5804 9.95896Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction HideTrayIcon() {\n return (\n <svg\n className=\"wv-tray-hide-icon\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <g clipPath=\"url(#wv-hide-tray-clip-prompt)\">\n <path d=\"M4 11L4 1M3 11L9 11C10.1046 11 11 10.1046 11 9L11 3C11 1.89543 10.1046 1 9 1L3 1C1.89543 1 1 1.89543 1 3L1 9C1 10.1046 1.89543 11 3 11Z\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n </g>\n <defs>\n <clipPath id=\"wv-hide-tray-clip-prompt\">\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0 12) rotate(-90)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nfunction CopyIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M8 6.45V8.55C8 10.3 7.3 11 5.55 11H3.45C1.7 11 1 10.3 1 8.55V6.45C1 4.7 1.7 4 3.45 4H5.55C7.3 4 8 4.7 8 6.45Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11 3.45V5.55C11 7.3 10.3 8 8.55 8H8V6.45C8 4.7 7.3 4 5.55 4H4V3.45C4 1.7 4.7 1 6.45 1H8.55C10.3 1 11 1.7 11 3.45Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nfunction CopySuccessIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M11 5.55V3.45C11 1.7 10.3 1 8.55 1H6.45C4.7 1 4 1.7 4 3.45V4H5.55C7.3 4 8 4.7 8 6.45V8H8.55C10.3 8 11 7.3 11 5.55Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M8 8.55V6.45C8 4.7 7.3 4 5.55 4H3.45C1.7 4 1 4.7 1 6.45V8.55C1 10.3 1.7 11 3.45 11H5.55C7.3 11 8 10.3 8 8.55Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M3.04004 7.4999L4.01504 8.4749L5.96004 6.5249\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nfunction GlobeIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <path d=\"M4 12h16M12 4c2.5 2.2 2.5 13.8 0 16M12 4c-2.5 2.2-2.5 13.8 0 16\" />\n </svg>\n );\n}\n","import type { CSSProperties } from \"react\";\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { pushPauseHostAnimations } from \"../engine/animationPause\";\nimport { autoScrollForPoint } from \"../engine/autoScroll\";\nimport {\n WEEVAR_BOOT_DOT_CLASS,\n hitTestHostPage,\n isInsideWeevarOverlay,\n} from \"../engine/hitTest\";\nimport { buildAncestorPath } from \"../engine/layoutContext\";\nimport { buildReorderLayoutChange } from \"../engine/layoutChangeFromReorder\";\nimport { buildMoveLayoutChange } from \"../engine/layoutChangeMove\";\nimport { findDropParent } from \"../engine/dropTargets\";\nimport { buildElementIdentity } from \"../engine/identity\";\nimport type {\n BatchedChange,\n ElementIdentity,\n GeneratedPrompt,\n LayoutChange,\n MoveSession,\n PromptLength,\n TargetTool,\n WeevarRuntimeConfig,\n} from \"../engine/layoutTypes\";\nimport { elementChildren } from \"../engine/elementChildren\";\nimport { FlexOrderPreview } from \"../engine/flexOrderPreview\";\nimport { insertionBarBetween } from \"../engine/insertionBar\";\nimport { createPendingCrossMove } from \"../engine/pendingMove\";\nimport { createPendingReorder, type PendingReorder } from \"../engine/pendingReorder\";\nimport { promptBody } from \"../engine/prompts\";\nimport { generateBatchedPrompt } from \"../prompts/generateBatched\";\nimport {\n computeDropIndex,\n orderAfterInsert,\n orderAfterMove,\n parentSupportsFlexOrderPreview,\n} from \"../engine/reorderTarget\";\nimport { resolveElementIdentity } from \"../engine/resolveIdentity\";\nimport { weevarVersionLabel } from \"../version\";\nimport { OVERLAY_CSS } from \"./overlayStyles\";\nimport { PromptPanel } from \"./PromptPanel\";\n\ntype FrameRects = { hover: DOMRect | null; selected: DOMRect | null };\n\ntype DragBar = { left: number; top: number; width: number; height: number };\n\nfunction sameDragBar(a: DragBar | null, b: DragBar | null): boolean {\n if (a == null && b == null) return true;\n if (a == null || b == null) return false;\n return a.left === b.left && a.top === b.top && a.width === b.width && a.height === b.height;\n}\n\nfunction sameDropZoneRect(a: DOMRect | null, b: DOMRect | null): boolean {\n if (a == null && b == null) return true;\n if (a == null || b == null) return false;\n return a.left === b.left && a.top === b.top && a.width === b.width && a.height === b.height;\n}\n\ntype DragSession = {\n dragged: Element;\n sourceParent: Element;\n fromIndex: number;\n dropParent: Element;\n dropIndex: number;\n preview: FlexOrderPreview;\n resumeAnimations: () => void;\n prevOpacity: string;\n pointerId: number;\n ghostEl: HTMLElement | null;\n grabOffsetX: number;\n grabOffsetY: number;\n};\n\ntype PanelState = {\n change: LayoutChange;\n prompt: GeneratedPrompt;\n len: PromptLength;\n tool: TargetTool;\n copyFlash: boolean;\n mode?: \"single\" | \"batched\";\n};\n\ntype BadgeRender = {\n ordinal: number;\n displayOrdinal: number;\n rect: DOMRect;\n};\n\ntype PointerSelectionInfo = {\n path: string;\n};\n\ntype RuntimeChangeRefs = {\n target: Element;\n fromParent: Element;\n toParent: Element;\n};\n\nconst POINTER_CURSOR_DATA_URI = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(\n '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.80294 4.62999L15.8359 6.98999C19.3159 8.35199 21.0559 9.03299 20.9989 10.113C20.9409 11.193 19.1249 11.689 15.4929 12.679C14.4119 12.974 13.8709 13.121 13.4959 13.496C13.1209 13.871 12.9739 14.412 12.6789 15.493C11.6889 19.125 11.1929 20.941 10.1129 20.999C9.03294 21.057 8.35294 19.316 6.99094 15.836L4.62994 9.80299C3.20394 6.15899 2.48994 4.33799 3.41394 3.41399C4.33794 2.49099 6.15894 3.20399 9.80294 4.62999Z\" fill=\"#16161E\" stroke=\"#EBEBEB\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/></svg>',\n)}\") 3 3, auto`;\n\n\nfunction identityBadgeKey(id: ElementIdentity): string {\n if (id.fiberPath?.length) return `fiber:${JSON.stringify(id.fiberPath)}`;\n if (id.source) {\n return `src:${id.source.file}:${id.source.line}:${id.source.col}|tag:${id.tag}|hash:${id.contentHash}|txt:${id.textSnippet ?? \"\"}`;\n }\n const cls = id.classList.join(\".\");\n const txt = id.textSnippet ?? \"\";\n const name = id.componentName ?? \"\";\n return `el:${name}|${id.tag}|${cls}|${txt}|hash:${id.contentHash}`;\n}\n\nfunction mergePromptChange(base: LayoutChange, next: LayoutChange): LayoutChange {\n if (next.kind === \"move\") {\n if (base.kind === \"move\") {\n return {\n ...next,\n target: base.target,\n fromParent: base.fromParent,\n fromIndex: base.fromIndex,\n fromLayoutType: base.fromLayoutType,\n };\n }\n return {\n kind: \"move\",\n target: base.target,\n fromParent: base.parent,\n toParent: next.toParent,\n fromIndex: base.fromIndex,\n toIndex: next.toIndex,\n destinationSiblings: next.destinationSiblings ?? next.siblings,\n siblings: next.destinationSiblings ?? next.siblings,\n fromLayoutType: base.layoutType,\n toLayoutType: next.toLayoutType,\n };\n }\n\n if (base.kind === \"move\") {\n return {\n ...base,\n target: base.target,\n toParent: next.parent,\n toIndex: next.toIndex,\n destinationSiblings: next.siblings,\n siblings: next.siblings,\n toLayoutType: next.layoutType,\n };\n }\n\n return {\n ...next,\n target: base.target,\n parent: base.parent,\n fromIndex: base.fromIndex,\n };\n}\n\nfunction compressSessionForPrompt(session: MoveSession): MoveSession {\n const out: BatchedChange[] = [];\n const byTarget = new Map<string, number>();\n for (const entry of session.changes) {\n const key = identityBadgeKey(entry.change.target);\n const idx = byTarget.get(key);\n if (idx == null) {\n out.push({ ...entry });\n byTarget.set(key, out.length - 1);\n continue;\n }\n const prev = out[idx];\n if (!prev) continue;\n out[idx] = {\n ...entry,\n ordinal: prev.ordinal,\n change: mergePromptChange(prev.change, entry.change),\n badgeAnchor: prev.badgeAnchor,\n capturedAt: prev.capturedAt,\n };\n }\n const changes = out.map((c, i) => ({ ...c, ordinal: i + 1 }));\n return { ...session, changes };\n}\n\nfunction truncateLabel(input: string): string {\n const s = input.trim().replace(/\\s+/g, \" \");\n if (s.length <= 20) return s;\n return `${s.slice(0, 20)}...`;\n}\n\nfunction buildSpecificElementLabel(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const classList = Array.from((el as HTMLElement).classList ?? []);\n const classPart = classList.length ? `.${classList.slice(0, 2).join(\".\")}` : \"\";\n const directText = Array.from(el.childNodes)\n .filter((n) => n.nodeType === Node.TEXT_NODE)\n .map((n) => n.textContent ?? \"\")\n .join(\" \")\n .trim();\n const textLikeTags = new Set([\n \"p\",\n \"span\",\n \"a\",\n \"label\",\n \"small\",\n \"strong\",\n \"em\",\n \"b\",\n \"i\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"li\",\n \"blockquote\",\n \"code\",\n \"pre\",\n \"button\",\n ]);\n const textPart = (directText || (el.textContent ?? \"\").trim()).replace(/\\s+/g, \" \").trim();\n const raw = textLikeTags.has(tag) && textPart ? `${tag}: \"${textPart}\"` : `${tag}${classPart}`;\n return truncateLabel(raw || tag);\n}\n\nfunction rectsEqual(a: DOMRect | null, b: DOMRect | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.x === b.x &&\n a.y === b.y &&\n a.width === b.width &&\n a.height === b.height\n );\n}\n\ntype Props = {\n sessionOn: boolean;\n setSessionOn: (next: boolean) => void;\n disabled?: boolean;\n config?: WeevarRuntimeConfig;\n};\n\nexport function WeevarShadowApp({\n sessionOn,\n setSessionOn,\n disabled,\n config,\n}: Props) {\n const [activeTool, setActiveTool] = useState<\"summary\" | \"pointer\">(\"summary\");\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [settingsTool, setSettingsTool] = useState<TargetTool>(\"claude-code\");\n const [settingsLen, setSettingsLen] = useState<PromptLength>(\"short\");\n\n const DOCK_WIDTH = 50;\n const DOCK_HEIGHT = 340;\n const TRIGGER_SIZE = 50;\n const TRIGGER_OFFSET_Y = DOCK_HEIGHT - TRIGGER_SIZE; // close button aligns with trigger button area\n\n type DockPos = { left: number; top: number };\n const clampDockPos = useCallback((pos: DockPos): DockPos => {\n const w = window.innerWidth;\n const h = window.innerHeight;\n return {\n left: Math.max(0, Math.min(pos.left, w - DOCK_WIDTH)),\n top: Math.max(0, Math.min(pos.top, h - DOCK_HEIGHT)),\n };\n }, []);\n\n const getDefaultDockPos = useCallback((): DockPos => {\n if (typeof window === \"undefined\") return { left: 0, top: 0 };\n // matches CSS right:20 bottom:20 for the dock (with width 50, height ~302).\n return {\n left: window.innerWidth - 20 - DOCK_WIDTH,\n top: window.innerHeight - 20 - DOCK_HEIGHT,\n };\n }, []);\n\n const [dockPos, setDockPos] = useState<DockPos>(() => getDefaultDockPos());\n const [triggerAtTop, setTriggerAtTop] = useState(false);\n const dockRef = useRef<HTMLDivElement | null>(null);\n const triggerBtnRef = useRef<HTMLButtonElement | null>(null);\n const dockDragRef = useRef<\n | null\n | {\n pointerId: number;\n mode: \"dock\" | \"trigger\";\n grabX: number;\n grabY: number;\n moved: boolean;\n startX: number;\n startY: number;\n }\n >(null);\n const triggerDragMovedRef = useRef(false);\n const resolveDockFromTrigger = useCallback(\n (triggerLeft: number, triggerTop: number) => {\n const topCandidate = clampDockPos({ left: triggerLeft, top: triggerTop });\n const bottomCandidate = clampDockPos({\n left: triggerLeft,\n top: triggerTop - TRIGGER_OFFSET_Y,\n });\n\n const topTriggerTop = topCandidate.top;\n const bottomTriggerTop = bottomCandidate.top + TRIGGER_OFFSET_Y;\n const topDelta = Math.abs(topTriggerTop - triggerTop);\n const bottomDelta = Math.abs(bottomTriggerTop - triggerTop);\n const useTop = topDelta <= bottomDelta;\n return {\n dock: useTop ? topCandidate : bottomCandidate,\n triggerAtTop: useTop,\n };\n },\n [TRIGGER_OFFSET_Y, clampDockPos],\n );\n\n const triggerTop = dockPos.top + (triggerAtTop ? 0 : TRIGGER_OFFSET_Y);\n const triggerTooltipAlign = useMemo(() => {\n const vw = window.innerWidth;\n const triggerCenterX = dockPos.left + TRIGGER_SIZE / 2;\n if (triggerCenterX < 100) return \"left\";\n if (triggerCenterX > vw - 100) return \"right\";\n return \"center\";\n }, [dockPos.left, TRIGGER_SIZE]);\n\n const hoverRef = useRef<Element | null>(null);\n const selectedRef = useRef<Element | null>(null);\n const selectedIdentityRef = useRef<ElementIdentity | null>(null);\n const pendingRef = useRef<PendingReorder | null>(null);\n const runtimeChangeRefsRef = useRef<Map<number, RuntimeChangeRefs>>(new Map());\n const dragSessionRef = useRef<DragSession | null>(null);\n const dragHandleRef = useRef<HTMLDivElement | null>(null);\n const panelRef = useRef<PanelState | null>(null);\n const dragMoveRaf = useRef<number | null>(null);\n const pendingDragEv = useRef<PointerEvent | null>(null);\n const forcedCursorTargetRef = useRef<HTMLElement | SVGElement | null>(null);\n const forcedCursorPrevValueRef = useRef<string>(\"\");\n const forcedCursorPrevPriorityRef = useRef<string>(\"\");\n const [rev, setRev] = useState(0);\n const bump = useCallback(() => setRev((n) => n + 1), []);\n\n const [isDragging, setIsDragging] = useState(false);\n const [dragUi, setDragUi] = useState<{ bar: DragBar | null } | null>(null);\n const dragOverlayEmitRef = useRef<{ bar: DragBar | null; zone: DOMRect | null } | null>(\n null,\n );\n const [dropZoneRect, setDropZoneRect] = useState<DOMRect | null>(null);\n const [toast, setToast] = useState<string | null>(null);\n const [pointerPos, setPointerPos] = useState<{ x: number; y: number } | null>(null);\n const [pointerInPage, setPointerInPage] = useState(false);\n\n const [panel, setPanel] = useState<PanelState | null>(null);\n panelRef.current = panel;\n const [promptOpen, setPromptOpen] = useState(false);\n /** When true, summary / pointer-property trays stay hidden until user re-opens from dock or picks an element. */\n const [traysDismissed, setTraysDismissed] = useState(false);\n const [moveSession, setMoveSession] = useState<MoveSession | null>(null);\n const [redoChanges, setRedoChanges] = useState<BatchedChange[]>([]);\n const [badgeTick, setBadgeTick] = useState(0);\n const [isTriggerDragging, setIsTriggerDragging] = useState(false);\n const [toolbarTooltip, setToolbarTooltip] = useState<{\n text: string;\n x: number;\n y: number;\n } | null>(null);\n const [helperTooltip, setHelperTooltip] = useState<{\n text: string;\n x: number;\n y: number;\n } | null>(null);\n const toolbarTooltipDelayRef = useRef<number | null>(null);\n const toolbarTooltipPendingRef = useRef<{ text: string; x: number; y: number } | null>(null);\n\n const framesRef = useRef<FrameRects>({ hover: null, selected: null });\n const [frames, setFrames] = useState<FrameRects>({\n hover: null,\n selected: null,\n });\n\n const readFrames = useCallback((): FrameRects => {\n const hover = hoverRef.current?.getBoundingClientRect() ?? null;\n const selected = selectedRef.current?.getBoundingClientRect() ?? null;\n return { hover, selected };\n }, []);\n\n useLayoutEffect(() => {\n if (!sessionOn || disabled || activeTool !== \"pointer\") return;\n let id = 0;\n const tick = () => {\n // During drag, flex preview mutates sibling layout every frame — polling rects here\n // forces React updates + layout thrash and freezes the main thread.\n if (!dragSessionRef.current) {\n const next = readFrames();\n const prev = framesRef.current;\n if (\n !rectsEqual(next.hover, prev.hover) ||\n !rectsEqual(next.selected, prev.selected)\n ) {\n framesRef.current = next;\n setFrames(next);\n }\n }\n id = requestAnimationFrame(tick);\n };\n id = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(id);\n }, [sessionOn, disabled, activeTool, readFrames]);\n\n useEffect(() => {\n if (!sessionOn || !moveSession?.changes.length) return;\n const tick = () => {\n setBadgeTick((n) => (n + 1) % 100000);\n };\n // Avoid a 60fps rerender loop; badges only need occasional refresh.\n const intervalId = window.setInterval(tick, 250);\n window.addEventListener(\"resize\", tick);\n window.addEventListener(\"scroll\", tick, true);\n return () => {\n window.clearInterval(intervalId);\n window.removeEventListener(\"resize\", tick);\n window.removeEventListener(\"scroll\", tick, true);\n };\n }, [sessionOn, moveSession?.changes.length]);\n\n const disposePending = useCallback((revert: boolean) => {\n const p = pendingRef.current;\n if (!p) return;\n if (revert) p.revert();\n else p.disconnect();\n pendingRef.current = null;\n }, []);\n\n const cancelDrag = useCallback(() => {\n if (dragMoveRaf.current != null) {\n cancelAnimationFrame(dragMoveRaf.current);\n dragMoveRaf.current = null;\n }\n pendingDragEv.current = null;\n const s = dragSessionRef.current;\n if (!s) return;\n dragSessionRef.current = null;\n s.preview.clear();\n (s.dragged as HTMLElement).style.opacity = s.prevOpacity;\n s.ghostEl?.remove();\n s.resumeAnimations();\n try {\n dragHandleRef.current?.releasePointerCapture(s.pointerId);\n } catch {\n /* noop */\n }\n setIsDragging(false);\n dragOverlayEmitRef.current = null;\n setDragUi(null);\n setDropZoneRect(null);\n bump();\n }, [bump]);\n\n const clearSelection = useCallback(() => {\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n hoverRef.current = null;\n framesRef.current = { hover: null, selected: null };\n setFrames({ hover: null, selected: null });\n bump();\n }, [bump]);\n\n const startDockDrag = useCallback(\n (e: React.PointerEvent<HTMLElement>) => {\n if (e.button !== 0) return;\n if (isDragging || dragSessionRef.current) return;\n if (e.target !== e.currentTarget) return;\n e.preventDefault();\n e.stopPropagation();\n\n const dockEl = dockRef.current;\n if (!dockEl) return;\n const rect = dockEl.getBoundingClientRect();\n\n dockDragRef.current = {\n pointerId: e.pointerId,\n mode: \"dock\",\n grabX: e.clientX - rect.left,\n grabY: e.clientY - rect.top,\n moved: false,\n startX: e.clientX,\n startY: e.clientY,\n };\n\n try {\n e.currentTarget.setPointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n },\n [isDragging],\n );\n\n const onDockDragMove = useCallback(\n (e: React.PointerEvent<HTMLElement>) => {\n const d = dockDragRef.current;\n if (!d || d.pointerId !== e.pointerId || d.mode !== \"dock\") return;\n\n const dist = Math.hypot(e.clientX - d.startX, e.clientY - d.startY);\n if (!d.moved && dist > 4) d.moved = true;\n\n setDockPos(\n clampDockPos({\n left: e.clientX - d.grabX,\n top: e.clientY - d.grabY,\n }),\n );\n },\n [clampDockPos],\n );\n\n const stopDockDrag = useCallback((e: React.PointerEvent<HTMLElement>) => {\n const d = dockDragRef.current;\n if (!d || d.pointerId !== e.pointerId || d.mode !== \"dock\") return;\n dockDragRef.current = null;\n }, []);\n\n const startTriggerDockDrag = useCallback(\n (e: React.PointerEvent<HTMLButtonElement>) => {\n if (e.button !== 0) return;\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n\n const btn = triggerBtnRef.current;\n if (!btn) return;\n const rect = btn.getBoundingClientRect();\n\n triggerDragMovedRef.current = false;\n setIsTriggerDragging(true);\n dockDragRef.current = {\n pointerId: e.pointerId,\n mode: \"trigger\",\n grabX: e.clientX - rect.left,\n grabY: e.clientY - rect.top,\n moved: false,\n startX: e.clientX,\n startY: e.clientY,\n };\n\n try {\n e.currentTarget.setPointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n },\n [disabled],\n );\n\n const onTriggerDockDragMove = useCallback(\n (e: React.PointerEvent<HTMLButtonElement>) => {\n const d = dockDragRef.current;\n if (!d || d.pointerId !== e.pointerId || d.mode !== \"trigger\") return;\n\n const dist = Math.hypot(e.clientX - d.startX, e.clientY - d.startY);\n if (!d.moved && dist > 4) {\n d.moved = true;\n triggerDragMovedRef.current = true;\n }\n\n const triggerLeft = e.clientX - d.grabX;\n const nextTriggerTop = e.clientY - d.grabY;\n const resolved = resolveDockFromTrigger(triggerLeft, nextTriggerTop);\n setTriggerAtTop(resolved.triggerAtTop);\n setDockPos(resolved.dock);\n },\n [resolveDockFromTrigger],\n );\n\n const stopTriggerDockDrag = useCallback((e: React.PointerEvent<HTMLButtonElement>) => {\n const d = dockDragRef.current;\n if (!d || d.pointerId !== e.pointerId || d.mode !== \"trigger\") return;\n dockDragRef.current = null;\n setIsTriggerDragging(false);\n }, []);\n\n useEffect(() => {\n if (!sessionOn) {\n setActiveTool(\"summary\");\n return;\n }\n if (activeTool === \"pointer\" || !dragSessionRef.current) return;\n cancelDrag();\n }, [sessionOn, activeTool, cancelDrag]);\n\n const appendBatchedChange = useCallback((change: LayoutChange, refs: RuntimeChangeRefs) => {\n setRedoChanges([]);\n setMoveSession((prev) => {\n const base: MoveSession = prev ?? { changes: [], startedAt: Date.now() };\n const nextOrdinal = base.changes.length + 1;\n const capturedAt = Date.now();\n const entry: BatchedChange = {\n ordinal: nextOrdinal,\n change,\n badgeAnchor: change.target,\n capturedAt,\n };\n runtimeChangeRefsRef.current.set(capturedAt, refs);\n const changes = [...base.changes, entry].map((c, i) => ({ ...c, ordinal: i + 1 }));\n if (changes.length > 20) {\n // eslint-disable-next-line no-console\n console.warn(\"[weevar] More than 20 batched changes captured.\");\n }\n return { ...base, changes };\n });\n }, []);\n\n const dismissAllTrays = useCallback(() => {\n setPromptOpen(false);\n setSettingsOpen(false);\n setTraysDismissed(true);\n }, []);\n\n const applyChangeToDom = useCallback((change: LayoutChange, refs?: RuntimeChangeRefs) => {\n if (change.kind === \"reorder\") {\n const parent = refs?.toParent ?? resolveElementIdentity(change.parent);\n const target = refs?.target ?? resolveElementIdentity(change.target);\n if (!parent || !target) return null;\n const ordered = orderAfterMove(parent, target, change.toIndex);\n return createPendingReorder(parent, ordered);\n }\n\n const target = refs?.target ?? resolveElementIdentity(change.target);\n const toParent = refs?.toParent ?? resolveElementIdentity(change.toParent);\n if (!target || !toParent) return null;\n const currentParent = target.parentElement;\n if (!currentParent) return null;\n\n if (currentParent === toParent) {\n const ordered = orderAfterMove(currentParent, target, change.toIndex);\n return createPendingReorder(currentParent, ordered);\n }\n\n const ordered = orderAfterInsert(toParent, target, change.toIndex);\n return createPendingCrossMove(target, currentParent, toParent, ordered);\n }, []);\n\n const applyInverseChangeToDom = useCallback((change: LayoutChange, refs?: RuntimeChangeRefs) => {\n if (change.kind === \"reorder\") {\n const parent = refs?.fromParent ?? resolveElementIdentity(change.parent);\n const target = refs?.target ?? resolveElementIdentity(change.target);\n if (!parent || !target) return null;\n const ordered = orderAfterMove(parent, target, change.fromIndex);\n return createPendingReorder(parent, ordered);\n }\n\n const target = refs?.target ?? resolveElementIdentity(change.target);\n const fromParent = refs?.fromParent ?? resolveElementIdentity(change.fromParent);\n if (!target || !fromParent) return null;\n const currentParent = target.parentElement;\n if (!currentParent) return null;\n\n if (currentParent === fromParent) {\n const ordered = orderAfterMove(fromParent, target, change.fromIndex);\n return createPendingReorder(fromParent, ordered);\n }\n\n const ordered = orderAfterInsert(fromParent, target, change.fromIndex);\n return createPendingCrossMove(target, currentParent, fromParent, ordered);\n }, []);\n\n const clearMoveSession = useCallback(() => {\n // Delete should fully restore the live page state from before this session,\n // so roll back all captured changes in reverse order.\n disposePending(false);\n if (moveSession?.changes.length) {\n for (let i = moveSession.changes.length - 1; i >= 0; i--) {\n const entry = moveSession.changes[i];\n if (!entry) continue;\n const refs = runtimeChangeRefsRef.current.get(entry.capturedAt);\n const rollback = applyInverseChangeToDom(entry.change, refs);\n rollback?.disconnect();\n }\n }\n pendingRef.current = null;\n runtimeChangeRefsRef.current.clear();\n setMoveSession(null);\n setRedoChanges([]);\n setPanel(null);\n }, [applyInverseChangeToDom, disposePending, moveSession]);\n\n const undoLastMove = useCallback(() => {\n setMoveSession((prev) => {\n if (!prev?.changes.length) return null;\n const undone = prev.changes[prev.changes.length - 1];\n const refs = runtimeChangeRefsRef.current.get(undone.capturedAt);\n disposePending(false);\n pendingRef.current = applyInverseChangeToDom(undone.change, refs);\n setRedoChanges((redo) => [...redo, undone]);\n const rest = prev.changes.slice(0, -1).map((c, i) => ({ ...c, ordinal: i + 1 }));\n if (!rest.length) {\n setPanel(null);\n return null;\n }\n return { ...prev, changes: rest };\n });\n dismissAllTrays();\n }, [applyInverseChangeToDom, dismissAllTrays, disposePending]);\n\n const redoLastMove = useCallback(() => {\n setRedoChanges((prevRedo) => {\n if (!prevRedo.length) return prevRedo;\n const restored = prevRedo[prevRedo.length - 1];\n const refs = runtimeChangeRefsRef.current.get(restored.capturedAt);\n disposePending(false);\n pendingRef.current = applyChangeToDom(restored.change, refs);\n setMoveSession((prevSession) => {\n const base: MoveSession = prevSession ?? { changes: [], startedAt: Date.now() };\n const changes = [...base.changes, restored].map((c, i) => ({ ...c, ordinal: i + 1 }));\n return { ...base, changes };\n });\n return prevRedo.slice(0, -1);\n });\n dismissAllTrays();\n }, [applyChangeToDom, dismissAllTrays, disposePending]);\n\n const generateFromBatch = useCallback(\n (tool: TargetTool, len: PromptLength) => {\n setTraysDismissed(false);\n setPromptOpen(true);\n const s = moveSession;\n if (!s?.changes.length) {\n setPanel(null);\n return;\n }\n const effectiveSession = compressSessionForPrompt(s);\n const prompt = generateBatchedPrompt(effectiveSession, { targetTool: tool });\n if (!prompt) {\n setPanel(null);\n return;\n }\n const last = effectiveSession.changes[effectiveSession.changes.length - 1];\n setPanel({\n change: last.change,\n prompt,\n len,\n tool,\n copyFlash: false,\n mode: \"batched\",\n });\n },\n [moveSession],\n );\n\n useEffect(() => {\n if (!sessionOn) {\n setTraysDismissed(false);\n setRedoChanges([]);\n }\n }, [sessionOn]);\n\n const commitDrag = useCallback(() => {\n const s = dragSessionRef.current;\n if (!s) return;\n const {\n dragged,\n sourceParent,\n dropParent,\n fromIndex,\n dropIndex,\n preview,\n resumeAnimations,\n prevOpacity,\n pointerId,\n ghostEl,\n } = s;\n dragSessionRef.current = null;\n preview.clear();\n (dragged as HTMLElement).style.opacity = prevOpacity;\n ghostEl?.remove();\n resumeAnimations();\n try {\n dragHandleRef.current?.releasePointerCapture(pointerId);\n } catch {\n /* noop */\n }\n setIsDragging(false);\n dragOverlayEmitRef.current = null;\n setDragUi(null);\n setDropZoneRect(null);\n if (dragMoveRaf.current != null) {\n cancelAnimationFrame(dragMoveRaf.current);\n dragMoveRaf.current = null;\n }\n pendingDragEv.current = null;\n\n if (dropParent === sourceParent && dropIndex === fromIndex) {\n bump();\n return;\n }\n\n // Prevent observer accumulation across multiple drops.\n disposePending(false);\n\n let change: LayoutChange;\n if (dropParent === sourceParent) {\n const ordered = orderAfterMove(sourceParent, dragged, dropIndex);\n pendingRef.current = createPendingReorder(sourceParent, ordered);\n change = buildReorderLayoutChange(\n sourceParent,\n dragged,\n fromIndex,\n dropIndex,\n ordered,\n );\n } else {\n const ordered = orderAfterInsert(dropParent, dragged, dropIndex);\n pendingRef.current = createPendingCrossMove(dragged, sourceParent, dropParent, ordered);\n change = buildMoveLayoutChange(\n dragged,\n sourceParent,\n dropParent,\n fromIndex,\n dropIndex,\n ordered,\n );\n }\n appendBatchedChange(change, {\n target: dragged,\n fromParent: sourceParent,\n toParent: dropParent,\n });\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n bump();\n }, [appendBatchedChange, bump, disposePending]);\n\n useEffect(() => {\n if (!sessionOn) {\n hoverRef.current = null;\n cancelDrag();\n setToast(null);\n }\n }, [sessionOn, cancelDrag]);\n\n useEffect(() => {\n if (!sessionOn || disabled || activeTool !== \"pointer\" || promptOpen || isDragging) return;\n const id = window.setInterval(() => {\n const el = selectedRef.current;\n const ident = selectedIdentityRef.current;\n if (!el || !ident) return;\n if (document.contains(el)) return;\n const next = resolveElementIdentity(ident);\n if (next) {\n selectedRef.current = next;\n bump();\n } else {\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n setToast(\"Selection lost after re-render\");\n bump();\n }\n }, 400);\n return () => window.clearInterval(id);\n }, [sessionOn, disabled, activeTool, promptOpen, isDragging, bump]);\n\n useEffect(() => {\n if (!toast) return;\n const t = window.setTimeout(() => setToast(null), 2200);\n return () => window.clearTimeout(t);\n }, [toast]);\n\n useEffect(() => {\n if (!sessionOn) return;\n const key = \"__weevarHistoryPatched__\";\n const win = window as Window & { [key: string]: boolean };\n const onNav = () => {\n setMoveSession((prev) => {\n if (!prev?.changes.length) return prev;\n setPanel(null);\n setToast(\"Session cleared on navigation.\");\n return null;\n });\n };\n window.addEventListener(\"popstate\", onNav);\n window.addEventListener(\"hashchange\", onNav);\n if (!win[key]) {\n win[key] = true;\n const origPush = history.pushState.bind(history);\n const origReplace = history.replaceState.bind(history);\n history.pushState = function (...args) {\n origPush(...args);\n window.dispatchEvent(new Event(\"popstate\"));\n };\n history.replaceState = function (...args) {\n origReplace(...args);\n window.dispatchEvent(new Event(\"popstate\"));\n };\n }\n return () => {\n window.removeEventListener(\"popstate\", onNav);\n window.removeEventListener(\"hashchange\", onNav);\n };\n }, [sessionOn]);\n\n useEffect(() => {\n if (!sessionOn || disabled || activeTool !== \"pointer\") return;\n const clearForcedCursorTarget = () => {\n const prev = forcedCursorTargetRef.current;\n if (!prev) return;\n if (forcedCursorPrevValueRef.current) {\n prev.style.setProperty(\n \"cursor\",\n forcedCursorPrevValueRef.current,\n forcedCursorPrevPriorityRef.current || \"\",\n );\n } else {\n prev.style.removeProperty(\"cursor\");\n }\n forcedCursorTargetRef.current = null;\n forcedCursorPrevValueRef.current = \"\";\n forcedCursorPrevPriorityRef.current = \"\";\n };\n\n const forceCursorOnTarget = (target: Element | null) => {\n const el =\n target instanceof HTMLElement || target instanceof SVGElement ? target : null;\n if (el === forcedCursorTargetRef.current) return;\n clearForcedCursorTarget();\n if (!el) return;\n forcedCursorTargetRef.current = el;\n forcedCursorPrevValueRef.current = el.style.getPropertyValue(\"cursor\");\n forcedCursorPrevPriorityRef.current = el.style.getPropertyPriority(\"cursor\");\n el.style.setProperty(\"cursor\", POINTER_CURSOR_DATA_URI, \"important\");\n };\n\n const onPointerMove = (e: PointerEvent) => {\n const overChrome = pointerOverWeevarChrome(e);\n if (!overChrome) {\n forceCursorOnTarget(document.elementFromPoint(e.clientX, e.clientY));\n } else {\n clearForcedCursorTarget();\n }\n setPointerInPage(true);\n setPointerPos({ x: e.clientX, y: e.clientY });\n if (dragSessionRef.current) return;\n if (promptOpen) return;\n if (overChrome) {\n if (hoverRef.current !== null) {\n hoverRef.current = null;\n bump();\n }\n return;\n }\n const el = hitTestHostPage(e.clientX, e.clientY);\n if (el !== hoverRef.current) {\n hoverRef.current = el;\n bump();\n }\n };\n\n const onPointerDownCapture = (e: PointerEvent) => {\n if (dragSessionRef.current) return;\n if (promptOpen) return;\n if (pointerOverWeevarChrome(e)) return;\n const el = hitTestHostPage(e.clientX, e.clientY);\n if (!el) {\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n e.preventDefault();\n e.stopPropagation();\n bump();\n return;\n }\n selectedRef.current = el;\n selectedIdentityRef.current = buildElementIdentity(el);\n setTraysDismissed(false);\n e.preventDefault();\n e.stopPropagation();\n bump();\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n const t = e.target;\n if (t instanceof HTMLElement) {\n if (t.tagName === \"INPUT\" || t.tagName === \"TEXTAREA\" || t.isContentEditable)\n return;\n }\n if (promptOpen) {\n e.preventDefault();\n e.stopPropagation();\n dismissAllTrays();\n setPanel(null);\n bump();\n return;\n }\n if (dragSessionRef.current) {\n e.preventDefault();\n e.stopPropagation();\n cancelDrag();\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n if (selectedRef.current) {\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n bump();\n return;\n }\n setSessionOn(false);\n };\n\n document.addEventListener(\"pointermove\", onPointerMove, {\n capture: true,\n passive: true,\n });\n document.addEventListener(\"pointerdown\", onPointerDownCapture, {\n capture: true,\n passive: false,\n });\n document.addEventListener(\"keydown\", onKeyDown, { capture: true });\n const onWindowMouseLeave = () => {\n setPointerInPage(false);\n setPointerPos(null);\n };\n const onWindowBlur = () => {\n setPointerInPage(false);\n setPointerPos(null);\n };\n const onWindowMouseEnter = () => {\n setPointerInPage(true);\n };\n window.addEventListener(\"mouseleave\", onWindowMouseLeave, true);\n window.addEventListener(\"blur\", onWindowBlur, true);\n window.addEventListener(\"mouseenter\", onWindowMouseEnter, true);\n\n return () => {\n clearForcedCursorTarget();\n setPointerInPage(false);\n setPointerPos(null);\n document.removeEventListener(\"pointermove\", onPointerMove, {\n capture: true,\n });\n document.removeEventListener(\"pointerdown\", onPointerDownCapture, {\n capture: true,\n });\n document.removeEventListener(\"keydown\", onKeyDown, { capture: true });\n window.removeEventListener(\"mouseleave\", onWindowMouseLeave, true);\n window.removeEventListener(\"blur\", onWindowBlur, true);\n window.removeEventListener(\"mouseenter\", onWindowMouseEnter, true);\n };\n }, [\n sessionOn,\n disabled,\n activeTool,\n setSessionOn,\n bump,\n promptOpen,\n cancelDrag,\n setTraysDismissed,\n dismissAllTrays,\n ]);\n\n useEffect(() => {\n if (!(sessionOn && activeTool === \"pointer\")) {\n document.body.style.removeProperty(\"cursor\");\n document.documentElement.style.removeProperty(\"cursor\");\n const lock = document.getElementById(\"__weevar_pointer_cursor_lock__\");\n lock?.remove();\n return;\n }\n const prevBody = document.body.style.cursor;\n const prevRoot = document.documentElement.style.cursor;\n document.body.style.cursor = POINTER_CURSOR_DATA_URI;\n document.documentElement.style.cursor = POINTER_CURSOR_DATA_URI;\n const style = document.createElement(\"style\");\n style.id = \"__weevar_pointer_cursor_lock__\";\n style.textContent = `html,\nbody,\nbody *,\nbody *::before,\nbody *::after,\nbody *:hover,\nbody *:active,\nbody *:focus {\n cursor: ${POINTER_CURSOR_DATA_URI} !important;\n}`;\n const ensureLast = () => {\n if (document.head.lastElementChild !== style) document.head.appendChild(style);\n };\n ensureLast();\n const observer = new MutationObserver(ensureLast);\n observer.observe(document.head, { childList: true });\n return () => {\n document.body.style.cursor = prevBody;\n document.documentElement.style.cursor = prevRoot;\n observer.disconnect();\n style.remove();\n };\n }, [sessionOn, activeTool]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const flushDrag = () => {\n dragMoveRaf.current = null;\n const ev = pendingDragEv.current;\n pendingDragEv.current = null;\n if (!ev) return;\n const s = dragSessionRef.current;\n if (!s) return;\n ev.preventDefault();\n ev.stopPropagation();\n const { dragged, sourceParent, preview } = s;\n if (s.ghostEl) {\n s.ghostEl.style.left = `${ev.clientX - s.grabOffsetX}px`;\n s.ghostEl.style.top = `${ev.clientY - s.grabOffsetY}px`;\n }\n autoScrollForPoint(ev.clientX, ev.clientY);\n // Host already uses pointer-events:none — visibility toggle every frame was forcing layouts.\n const hit = hitTestHostPage(ev.clientX, ev.clientY);\n const dropParent = findDropParent(hit, dragged) ?? sourceParent;\n const dropIndex = computeDropIndex(dropParent, dragged, ev.clientX, ev.clientY);\n s.dropParent = dropParent;\n s.dropIndex = dropIndex;\n\n const ordered =\n dropParent === sourceParent\n ? orderAfterMove(sourceParent, dragged, dropIndex)\n : orderAfterInsert(dropParent, dragged, dropIndex);\n\n if (dropParent === sourceParent && parentSupportsFlexOrderPreview(sourceParent)) {\n preview.apply(ordered);\n } else {\n preview.clear();\n }\n\n const cs = getComputedStyle(dropParent);\n const row =\n cs.display.includes(\"flex\") &&\n [\"row\", \"row-reverse\"].includes(cs.flexDirection || \"\");\n const insertIdx = ordered.indexOf(dragged);\n const bar = insertionBarBetween(ordered, insertIdx, row);\n\n const nextZone =\n dropParent === sourceParent ? null : dropParent.getBoundingClientRect();\n const prevEmit = dragOverlayEmitRef.current;\n if (\n prevEmit === null ||\n !sameDragBar(prevEmit.bar, bar) ||\n !sameDropZoneRect(prevEmit.zone, nextZone)\n ) {\n dragOverlayEmitRef.current = { bar, zone: nextZone };\n setDragUi({ bar });\n setDropZoneRect(nextZone);\n }\n };\n\n const onMove = (e: PointerEvent) => {\n const s = dragSessionRef.current;\n if (!s) return;\n e.preventDefault();\n e.stopPropagation();\n pendingDragEv.current = e;\n if (dragMoveRaf.current != null) return;\n dragMoveRaf.current = requestAnimationFrame(flushDrag);\n };\n\n const onUp = (e: PointerEvent) => {\n const s = dragSessionRef.current;\n if (!s) return;\n e.preventDefault();\n e.stopPropagation();\n pendingDragEv.current = e;\n if (dragMoveRaf.current != null) {\n cancelAnimationFrame(dragMoveRaf.current);\n dragMoveRaf.current = null;\n }\n flushDrag();\n commitDrag();\n };\n\n document.addEventListener(\"pointermove\", onMove, { capture: true, passive: false });\n document.addEventListener(\"pointerup\", onUp, { capture: true, passive: false });\n document.addEventListener(\"pointercancel\", onUp, { capture: true, passive: false });\n\n return () => {\n document.removeEventListener(\"pointermove\", onMove, { capture: true });\n document.removeEventListener(\"pointerup\", onUp, { capture: true });\n document.removeEventListener(\"pointercancel\", onUp, { capture: true });\n if (dragMoveRaf.current != null) cancelAnimationFrame(dragMoveRaf.current);\n dragMoveRaf.current = null;\n pendingDragEv.current = null;\n };\n }, [isDragging, commitDrag]);\n\n const startDrag = useCallback(\n (e: React.PointerEvent) => {\n if (activeTool !== \"pointer\") return;\n if (panel) return;\n const dragged = selectedRef.current;\n const parent = dragged?.parentElement;\n if (!dragged || !parent) return;\n e.preventDefault();\n e.stopPropagation();\n\n const hel = dragged as HTMLElement;\n const dragRect = hel.getBoundingClientRect();\n const prevOpacity = hel.style.opacity;\n hel.style.opacity = \"0.3\";\n const ghostEl = hel.cloneNode(true) as HTMLElement;\n ghostEl.style.position = \"fixed\";\n ghostEl.style.left = `${dragRect.left}px`;\n ghostEl.style.top = `${dragRect.top}px`;\n ghostEl.style.width = `${dragRect.width}px`;\n ghostEl.style.height = `${dragRect.height}px`;\n ghostEl.style.margin = \"0\";\n ghostEl.style.pointerEvents = \"none\";\n ghostEl.style.opacity = \"0.55\";\n ghostEl.style.zIndex = \"2147483646\";\n ghostEl.style.transform = \"none\";\n ghostEl.style.transition = \"none\";\n ghostEl.style.boxSizing = \"border-box\";\n ghostEl.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(ghostEl);\n\n const preview = new FlexOrderPreview();\n const resume = pushPauseHostAnimations();\n const fromIndex = elementChildren(parent).indexOf(dragged);\n\n dragSessionRef.current = {\n dragged,\n sourceParent: parent,\n dropParent: parent,\n dropIndex: fromIndex,\n fromIndex,\n preview,\n resumeAnimations: resume,\n prevOpacity,\n pointerId: e.pointerId,\n ghostEl,\n grabOffsetX: e.clientX - dragRect.left,\n grabOffsetY: e.clientY - dragRect.top,\n };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n dragOverlayEmitRef.current = null;\n setIsDragging(true);\n setDragUi({ bar: null });\n setDropZoneRect(null);\n bump();\n },\n [activeTool, bump, panel],\n );\n\n const selectedEl = selectedRef.current;\n const hoverEl = hoverRef.current;\n\n const pointerSelectionInfo = useMemo<PointerSelectionInfo | null>(() => {\n if (!selectedEl || promptOpen || activeTool !== \"pointer\") return null;\n const p = selectedEl.parentElement;\n if (!p) return null;\n return {\n path: buildAncestorPath(selectedEl),\n };\n }, [selectedEl, promptOpen, rev, activeTool]);\n\n const pointerPathDisplay = useMemo(() => {\n if (!pointerSelectionInfo) return \"\";\n return pointerSelectionInfo.path.replaceAll(\">\", \"›\");\n }, [pointerSelectionInfo]);\n\n const pointerCssProps = useMemo(() => {\n if (!selectedEl || activeTool !== \"pointer\") return [] as Array<{ key: string; value: string }>;\n const cs = window.getComputedStyle(selectedEl);\n const tag = selectedEl.tagName.toLowerCase();\n const hasDirectReadableText = Array.from(selectedEl.childNodes).some(\n (node) => node.nodeType === Node.TEXT_NODE && (node.textContent ?? \"\").trim().length > 0,\n );\n const isTextLikeTag = [\n \"p\",\n \"span\",\n \"a\",\n \"label\",\n \"small\",\n \"strong\",\n \"em\",\n \"b\",\n \"i\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"li\",\n \"blockquote\",\n \"code\",\n \"pre\",\n \"button\",\n \"input\",\n \"textarea\",\n ].includes(tag);\n const isTextSelection = isTextLikeTag || hasDirectReadableText;\n\n const textKeys = [\n \"color\",\n \"font-size\",\n \"font-weight\",\n \"font-family\",\n \"line-height\",\n \"letter-spacing\",\n \"text-align\",\n \"text-transform\",\n \"text-decoration-line\",\n \"text-decoration-color\",\n \"white-space\",\n ];\n const visualKeys = [\n \"background-color\",\n \"color\",\n \"border-color\",\n \"border-width\",\n \"border-radius\",\n \"box-shadow\",\n \"opacity\",\n \"display\",\n \"position\",\n \"width\",\n \"height\",\n \"padding\",\n \"margin\",\n ];\n const keys = isTextSelection ? textKeys : visualKeys;\n return keys\n .map((key) => ({ key, value: cs.getPropertyValue(key).trim() }))\n .filter((entry) => entry.value.length > 0 && entry.value !== \"normal\");\n }, [selectedEl, activeTool, rev]);\n\n\n const visibleBadges = useMemo((): BadgeRender[] => {\n void badgeTick;\n const changes = moveSession?.changes ?? [];\n if (!changes.length) return [];\n const latest = new Map<string, BatchedChange>();\n for (const c of changes) latest.set(identityBadgeKey(c.change.target), c);\n const out: BadgeRender[] = [];\n for (const c of latest.values()) {\n const el = resolveElementIdentity(c.badgeAnchor);\n if (!el) continue;\n out.push({ ordinal: c.ordinal, displayOrdinal: 0, rect: el.getBoundingClientRect() });\n }\n out.sort((a, b) => a.ordinal - b.ordinal);\n return out.map((b, i) => ({ ...b, displayOrdinal: i + 1 }));\n }, [moveSession, badgeTick]);\n\n const movedElementCount = useMemo(() => {\n const changes = moveSession?.changes ?? [];\n if (!changes.length) return 0;\n const unique = new Set<string>();\n for (const c of changes) unique.add(identityBadgeKey(c.change.target));\n return unique.size;\n }, [moveSession]);\n const selectedToolLabel = useMemo(() => {\n if (settingsTool === \"claude-code\") return \"Claude Code\";\n if (settingsTool === \"codex\") return \"Codex\";\n return \"Generic\";\n }, [settingsTool]);\n const pendingMoveCount = movedElementCount;\n const isSettingsActive = settingsOpen;\n const isPromptActive = promptOpen && !settingsOpen;\n const isSummaryActive = activeTool === \"summary\" && !isSettingsActive && !isPromptActive;\n const isPointerActive = activeTool === \"pointer\" && !isSettingsActive && !isPromptActive;\n const showSettingsTray = settingsOpen;\n const showPromptTray = promptOpen && !showSettingsTray;\n const showSummaryTray =\n !traysDismissed &&\n !showPromptTray &&\n !showSettingsTray &&\n (activeTool === \"summary\" || (activeTool === \"pointer\" && pointerSelectionInfo));\n const trayAnyOpen = showSummaryTray || showSettingsTray || showPromptTray;\n const trayStyle = useMemo((): CSSProperties => {\n const trayWidth = 250;\n const gap = 8;\n const minLeft = 8;\n const maxLeft = Math.max(minLeft, window.innerWidth - trayWidth - 8);\n const leftCandidate = dockPos.left - trayWidth - gap;\n const left =\n leftCandidate >= minLeft\n ? Math.min(leftCandidate, maxLeft)\n : Math.min(Math.max(dockPos.left + DOCK_WIDTH + gap, minLeft), maxLeft);\n return {\n left,\n top: dockPos.top,\n right: \"auto\",\n bottom: \"auto\",\n };\n }, [dockPos, DOCK_WIDTH]);\n\n const placeToolbarTooltip = useCallback((text: string, clientX: number, clientY: number) => {\n const estimatedWidth = Math.max(56, text.length * 6 + 16);\n // Keep tooltip away from tray direction:\n // on left half of viewport, render tooltip to the left of cursor; otherwise to the right.\n const placeLeft = clientX < window.innerWidth / 2;\n const rawX = placeLeft ? clientX - estimatedWidth + 2 : clientX + 6;\n const x = Math.min(Math.max(4, rawX), window.innerWidth - estimatedWidth - 4);\n const y = Math.min(Math.max(4, clientY + 16), window.innerHeight - 28);\n return { text, x, y };\n }, []);\n\n const scheduleToolbarTooltip = useCallback((text: string, clientX: number, clientY: number, delayMs = 1600) => {\n const pending = placeToolbarTooltip(text, clientX, clientY);\n toolbarTooltipPendingRef.current = pending;\n if (toolbarTooltipDelayRef.current != null) window.clearTimeout(toolbarTooltipDelayRef.current);\n toolbarTooltipDelayRef.current = window.setTimeout(() => {\n if (toolbarTooltipPendingRef.current) {\n setToolbarTooltip(toolbarTooltipPendingRef.current);\n }\n toolbarTooltipDelayRef.current = null;\n }, delayMs);\n }, [placeToolbarTooltip]);\n\n const showToolbarTooltip = useCallback((text: string, e: React.MouseEvent<HTMLElement>, delayMs = 1600) => {\n scheduleToolbarTooltip(text, e.clientX, e.clientY, delayMs);\n }, [scheduleToolbarTooltip]);\n\n const moveToolbarTooltip = useCallback((text: string, e: React.MouseEvent<HTMLElement>) => {\n const next = placeToolbarTooltip(text, e.clientX, e.clientY);\n toolbarTooltipPendingRef.current = next;\n setToolbarTooltip((prev) => {\n if (!prev || prev.text !== text) {\n return prev;\n }\n return { ...prev, x: next.x, y: next.y };\n });\n }, [placeToolbarTooltip]);\n\n const showToolbarTooltipFromPointer = useCallback((\n text: string,\n e: React.PointerEvent<HTMLElement>,\n delayMs = 1600,\n ) => {\n scheduleToolbarTooltip(text, e.clientX, e.clientY, delayMs);\n }, [scheduleToolbarTooltip]);\n\n const moveToolbarTooltipFromPointer = useCallback((text: string, e: React.PointerEvent<HTMLElement>) => {\n const next = placeToolbarTooltip(text, e.clientX, e.clientY);\n toolbarTooltipPendingRef.current = next;\n setToolbarTooltip((prev) => {\n if (!prev || prev.text !== text) return prev;\n return { ...prev, x: next.x, y: next.y };\n });\n }, [placeToolbarTooltip]);\n\n const hideToolbarTooltip = useCallback(() => {\n if (toolbarTooltipDelayRef.current != null) {\n window.clearTimeout(toolbarTooltipDelayRef.current);\n toolbarTooltipDelayRef.current = null;\n }\n toolbarTooltipPendingRef.current = null;\n setToolbarTooltip(null);\n }, []);\n\n useEffect(() => {\n // Prevent stale delayed tooltip state when toggling trigger <-> toolbar UI.\n hideToolbarTooltip();\n }, [sessionOn, hideToolbarTooltip]);\n\n const showHelperTooltip = useCallback((text: string, el: HTMLElement) => {\n const r = el.getBoundingClientRect();\n setHelperTooltip({\n text,\n x: r.right + 8,\n y: r.top + r.height / 2,\n });\n }, []);\n\n const hideHelperTooltip = useCallback(() => {\n setHelperTooltip(null);\n }, []);\n\n useEffect(() => {\n if (!sessionOn) return;\n const onShortcut = (e: KeyboardEvent) => {\n if (e.defaultPrevented) return;\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n const t = e.target;\n if (t instanceof HTMLElement) {\n if (t.tagName === \"INPUT\" || t.tagName === \"TEXTAREA\" || t.isContentEditable) return;\n }\n\n const k = e.key.toLowerCase();\n if (k === \"escape\") {\n e.preventDefault();\n e.stopPropagation();\n cancelDrag();\n setSessionOn(false);\n return;\n }\n if (k === \"p\") {\n e.preventDefault();\n e.stopPropagation();\n setTraysDismissed(false);\n setSettingsOpen(false);\n generateFromBatch(settingsTool, settingsLen);\n return;\n }\n if (k === \"w\") {\n e.preventDefault();\n e.stopPropagation();\n setTraysDismissed(false);\n setActiveTool(\"pointer\");\n setPanel(null);\n setSettingsOpen(false);\n setPromptOpen(false);\n return;\n }\n if (k === \"o\") {\n e.preventDefault();\n e.stopPropagation();\n setTraysDismissed(false);\n setActiveTool(\"summary\");\n setPanel(null);\n setSettingsOpen(false);\n setPromptOpen(false);\n return;\n }\n if (k === \"d\") {\n e.preventDefault();\n e.stopPropagation();\n clearMoveSession();\n clearSelection();\n dismissAllTrays();\n return;\n }\n if (k === \"u\") {\n e.preventDefault();\n e.stopPropagation();\n undoLastMove();\n return;\n }\n if (k === \"r\") {\n e.preventDefault();\n e.stopPropagation();\n redoLastMove();\n }\n };\n\n document.addEventListener(\"keydown\", onShortcut, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", onShortcut, { capture: true });\n };\n }, [\n sessionOn,\n cancelDrag,\n setSessionOn,\n generateFromBatch,\n settingsTool,\n settingsLen,\n clearMoveSession,\n clearSelection,\n dismissAllTrays,\n undoLastMove,\n redoLastMove,\n ]);\n\n return (\n <>\n <style>{OVERLAY_CSS}</style>\n <div className=\"wv-root\" aria-hidden={!sessionOn}>\n {!sessionOn ? (\n <>\n <button\n type=\"button\"\n className=\"wv-tool-button wv-pe\"\n data-tooltip=\"Activate Weevar (⌘⇧E)\"\n data-tooltip-align={triggerTooltipAlign}\n data-tooltip-suppress={isTriggerDragging ? \"true\" : \"false\"}\n aria-label=\"Activate Weevar overlay\"\n disabled={disabled}\n ref={triggerBtnRef}\n onClick={() => {\n if (disabled) return;\n if (triggerDragMovedRef.current) {\n triggerDragMovedRef.current = false;\n return;\n }\n setSessionOn(true);\n }}\n onPointerDown={startTriggerDockDrag}\n onPointerMove={onTriggerDockDragMove}\n onPointerUp={stopTriggerDockDrag}\n onPointerCancel={stopTriggerDockDrag}\n style={{\n left: dockPos.left,\n top: triggerTop,\n right: \"auto\",\n bottom: \"auto\",\n }}\n >\n <LogomarkIcon className=\"wv-tool-button-logo\" />\n {pendingMoveCount > 0 ? (\n <span className=\"wv-tool-button-badge\" aria-label={`${pendingMoveCount} pending moves`}>\n {pendingMoveCount}\n </span>\n ) : null}\n </button>\n </>\n ) : (\n <>\n <div\n className=\"wv-dock\"\n ref={dockRef}\n style={{\n left: dockPos.left,\n top: dockPos.top,\n right: \"auto\",\n bottom: \"auto\",\n }}\n >\n {triggerAtTop ? (\n <button\n type=\"button\"\n className=\"wv-toolbar-close\"\n aria-label=\"Close overlay\"\n onMouseEnter={(e) => showToolbarTooltip(\"Close (Esc)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Close (Esc)\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n cancelDrag();\n setSessionOn(false);\n }}\n >\n <CloseIcon />\n </button>\n ) : null}\n <div\n className=\"wv-toolbar\"\n onPointerDown={startDockDrag}\n onPointerMove={onDockDragMove}\n onPointerUp={stopDockDrag}\n onPointerCancel={stopDockDrag}\n >\n <button\n type=\"button\"\n className={`wv-tool-icon ${isSummaryActive ? \"wv-tool-icon-on\" : \"\"}`}\n onMouseEnter={(e) => showToolbarTooltip(\"Overview (O)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Overview (O)\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n setTraysDismissed(false);\n setActiveTool(\"summary\");\n setPanel(null);\n setSettingsOpen(false);\n setPromptOpen(false);\n }}\n >\n <LogomarkIcon />\n </button>\n <button\n type=\"button\"\n className={`wv-tool-icon ${isPointerActive ? \"wv-tool-icon-on\" : \"\"}`}\n onMouseEnter={(e) => showToolbarTooltip(\"Pointer (W)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Pointer (W)\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n setTraysDismissed(false);\n setActiveTool(\"pointer\");\n setPanel(null);\n setSettingsOpen(false);\n setPromptOpen(false);\n }}\n >\n <PointerIcon />\n </button>\n <button\n type=\"button\"\n className={`wv-tool-icon ${isPromptActive ? \"wv-tool-icon-on\" : \"\"}`}\n onMouseEnter={(e) => showToolbarTooltip(\"Prompt (P)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Prompt (P)\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n setTraysDismissed(false);\n setSettingsOpen(false);\n generateFromBatch(settingsTool, settingsLen);\n }}\n >\n <PromptIcon />\n </button>\n <button\n type=\"button\"\n className=\"wv-tool-icon\"\n onMouseEnter={(e) => showToolbarTooltip(\"Undo (U)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Undo (U)\", e)}\n onMouseLeave={hideToolbarTooltip}\n disabled={!((moveSession?.changes.length ?? 0) > 0)}\n onClick={undoLastMove}\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n className=\"wv-tool-icon\"\n onMouseEnter={(e) => showToolbarTooltip(\"Redo (R)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Redo (R)\", e)}\n onMouseLeave={hideToolbarTooltip}\n disabled={redoChanges.length === 0}\n onClick={redoLastMove}\n >\n <RedoIcon />\n </button>\n <button\n type=\"button\"\n className=\"wv-tool-icon\"\n onMouseEnter={(e) => showToolbarTooltip(\"Delete (D)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Delete (D)\", e)}\n onMouseLeave={hideToolbarTooltip}\n disabled={!((moveSession?.changes.length ?? 0) > 0 || !!selectedEl)}\n onClick={() => {\n clearMoveSession();\n clearSelection();\n dismissAllTrays();\n }}\n >\n <TrashIcon />\n </button>\n <button\n type=\"button\"\n className={`wv-tool-icon ${isSettingsActive ? \"wv-tool-icon-on\" : \"\"}`}\n onMouseEnter={(e) => showToolbarTooltip(\"Settings\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Settings\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n setTraysDismissed(false);\n setActiveTool(\"summary\");\n setPanel(null);\n setSettingsOpen(true);\n setPromptOpen(false);\n }}\n >\n <SettingsIcon />\n </button>\n </div>\n {!triggerAtTop ? (\n <button\n type=\"button\"\n className=\"wv-toolbar-close\"\n aria-label=\"Close overlay\"\n onMouseEnter={(e) => showToolbarTooltip(\"Close (Esc)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Close (Esc)\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n cancelDrag();\n setSessionOn(false);\n }}\n >\n <CloseIcon />\n </button>\n ) : null}\n </div>\n\n {trayAnyOpen ? (\n <div className=\"wv-tray-stack\" style={trayStyle}>\n <div\n className={`wv-tray-stack-layer${showSummaryTray ? \" wv-tray-stack-layer--visible\" : \"\"}`}\n aria-hidden={!showSummaryTray}\n >\n <aside className=\"wv-summary-tray wv-pe\" aria-hidden={!showSummaryTray}>\n <div className=\"wv-tray-head\">\n <WeevarWordmarkIcon />\n <button\n type=\"button\"\n className=\"wv-tray-hide-btn\"\n aria-label=\"Hide tray\"\n onClick={dismissAllTrays}\n >\n <HideTrayIcon />\n </button>\n </div>\n <div\n className={`wv-tray-content ${\n activeTool === \"pointer\" && pointerSelectionInfo\n ? \"wv-tray-content-selection\"\n : activeTool === \"summary\"\n ? \"wv-tray-content-summary\"\n : \"\"\n }`}\n style={\n activeTool === \"summary\"\n ? { paddingLeft: 16, paddingRight: 16 }\n : undefined\n }\n >\n {activeTool === \"summary\" ? (\n <>\n <div className=\"wv-summary-content\">\n <div className=\"wv-summary-heading\">\n <div className=\"wv-summary-kicker\" style={{ textAlign: \"left\", width: \"100%\" }}>\n Hey builder!\n </div>\n <div className=\"wv-summary-title\" style={{ textAlign: \"left\", width: \"100%\" }}>\n Overview\n </div>\n </div>\n <div className=\"wv-summary-main\">\n <div className=\"wv-tray-card wv-overview-card\">\n <div className=\"wv-overview-stat\">\n <span className=\"wv-overview-orb wv-overview-orb--moved\">\n <span className=\"wv-overview-orb-value\">{movedElementCount}</span>\n </span>\n <span className=\"wv-overview-label\">Total moved</span>\n </div>\n <span className=\"wv-overview-divider\" aria-hidden />\n <div className=\"wv-overview-stat\">\n <span className=\"wv-overview-orb wv-overview-orb--tool\">\n <AIToolIcon />\n </span>\n <span className=\"wv-overview-label\">{selectedToolLabel}</span>\n </div>\n </div>\n <div className=\"wv-tray-card wv-doc-card\">\n <span className=\"wv-doc-icon\"><DocumentationIcon /></span>\n <span className=\"wv-doc-copy\">\n <span className=\"wv-doc-title\">Documentation</span>\n <span className=\"wv-doc-site\">weevar.com</span>\n </span>\n <button\n type=\"button\"\n className=\"wv-doc-go\"\n onClick={() => {\n window.open(\"https://weevar.com\", \"_blank\", \"noopener,noreferrer\");\n }}\n >\n <ArrowRightIcon />\n </button>\n </div>\n </div>\n </div>\n </>\n ) : pointerSelectionInfo ? (\n <>\n <div className=\"wv-tray-card wv-selection-path-card\">\n <span className=\"wv-selection-path-text\">{pointerPathDisplay}</span>\n </div>\n <div className=\"wv-tray-card wv-selection-css-card\">\n <div className=\"wv-selection-css-scroll-wrap\">\n <div className=\"wv-selection-css-scroll\">\n {pointerCssProps.map((entry) => (\n <div key={entry.key} className=\"wv-selection-css-line\">\n <span className=\"wv-selection-css-key\">{entry.key}</span>\n <span className=\"wv-selection-css-sep\">: </span>\n <span className=\"wv-selection-css-value\">{entry.value}</span>\n <span className=\"wv-selection-css-sep\">;</span>\n </div>\n ))}\n </div>\n </div>\n </div>\n </>\n ) : null}\n </div>\n <div className=\"wv-tray-foot\">\n <span>{weevarVersionLabel()}</span>\n <GlobeIcon />\n </div>\n </aside>\n </div>\n\n <div\n className={`wv-tray-stack-layer${showSettingsTray ? \" wv-tray-stack-layer--visible\" : \"\"}`}\n aria-hidden={!showSettingsTray}\n >\n <SettingsTray\n tool={settingsTool}\n len={settingsLen}\n onTool={setSettingsTool}\n onLen={setSettingsLen}\n onClose={dismissAllTrays}\n onShowHelperTooltip={showHelperTooltip}\n onHideHelperTooltip={hideHelperTooltip}\n hidden={!showSettingsTray}\n />\n </div>\n\n <div\n className={`wv-tray-stack-layer${showPromptTray ? \" wv-tray-stack-layer--visible\" : \"\"}`}\n aria-hidden={!showPromptTray}\n >\n <PromptPanel\n hidden={!showPromptTray}\n promptText={panel ? promptBody(panel.prompt, panel.len) : \"No element moved yet\"}\n canCopy={!!panel}\n runtimeConfig={config}\n onClose={dismissAllTrays}\n copyFlash={panel?.copyFlash ?? false}\n onCopy={async () => {\n const p = panelRef.current;\n if (!p) return;\n const text = promptBody(p.prompt, p.len);\n await navigator.clipboard.writeText(text);\n setPanel((cur) => (cur ? { ...cur, copyFlash: true } : cur));\n window.setTimeout(() => {\n setPanel((cur) => (cur ? { ...cur, copyFlash: false } : cur));\n bump();\n }, 1200);\n }}\n />\n </div>\n </div>\n ) : null}\n\n {dropZoneRect && (\n <div\n className=\"wv-drop-zone\"\n style={{\n left: dropZoneRect.left,\n top: dropZoneRect.top,\n width: dropZoneRect.width,\n height: dropZoneRect.height,\n }}\n />\n )}\n {dragUi?.bar && (\n <div\n className=\"wv-insertion-bar\"\n style={{\n left: dragUi.bar.left,\n top: dragUi.bar.top,\n width: dragUi.bar.width,\n height: dragUi.bar.height,\n }}\n />\n )}\n {toast && (\n <div className=\"wv-toast wv-pe\" role=\"status\">\n {toast}\n </div>\n )}\n {toolbarTooltip ? (\n <div\n className=\"wv-toolbar-tooltip\"\n role=\"tooltip\"\n style={{ left: toolbarTooltip.x, top: toolbarTooltip.y }}\n >\n {toolbarTooltip.text}\n </div>\n ) : null}\n {helperTooltip ? (\n <div\n className=\"wv-settings-helper-tooltip\"\n role=\"tooltip\"\n style={{ left: helperTooltip.x, top: helperTooltip.y }}\n >\n {helperTooltip.text}\n </div>\n ) : null}\n {visibleBadges.map((b) => (\n <div\n key={`badge-${b.ordinal}`}\n className=\"wv-badge\"\n style={{ left: b.rect.left - 8, top: b.rect.top - 8 }}\n aria-label={`Move ${b.displayOrdinal}`}\n >\n {b.displayOrdinal}\n </div>\n ))}\n\n {activeTool === \"pointer\" &&\n frames.hover &&\n hoverEl &&\n (!selectedEl || hoverEl !== selectedEl) &&\n !isDragging &&\n !promptOpen && <Outline rect={frames.hover} variant=\"hover\" />}\n\n {activeTool === \"pointer\" && frames.selected && selectedEl && !promptOpen && (\n <>\n <Outline rect={frames.selected} variant=\"selected\" />\n <CornerMarkers rect={frames.selected} />\n <SelectedTopBar\n rect={frames.selected}\n text={buildSpecificElementLabel(selectedEl)}\n onDragStart={startDrag}\n dragRef={dragHandleRef}\n />\n </>\n )}\n\n {activeTool === \"pointer\" &&\n frames.hover &&\n hoverEl &&\n hoverEl !== selectedEl &&\n !isDragging &&\n !promptOpen &&\n pointerInPage &&\n pointerPos && (\n <CursorHoverLabel\n x={pointerPos.x}\n y={pointerPos.y}\n text={buildSpecificElementLabel(hoverEl)}\n />\n )}\n </>\n )}\n </div>\n </>\n );\n}\n\nfunction SettingsTray({\n tool,\n len,\n onTool,\n onLen,\n onClose,\n onShowHelperTooltip,\n onHideHelperTooltip,\n hidden = false,\n}: {\n tool: TargetTool;\n len: PromptLength;\n onTool: (t: TargetTool) => void;\n onLen: (l: PromptLength) => void;\n onClose: () => void;\n onShowHelperTooltip: (text: string, el: HTMLElement) => void;\n onHideHelperTooltip: () => void;\n hidden?: boolean;\n}) {\n return (\n <aside\n className=\"wv-summary-tray wv-settings-tray wv-pe\"\n role=\"dialog\"\n aria-label=\"Weevar settings\"\n aria-hidden={hidden}\n >\n <div className=\"wv-tray-head wv-settings-head\">\n <WeevarWordmarkIcon />\n <button type=\"button\" className=\"wv-tray-hide-btn\" aria-label=\"Hide tray\" onClick={onClose}>\n <HideTrayIcon />\n </button>\n </div>\n\n <div className=\"wv-tray-content wv-settings-content\">\n <div className=\"wv-settings-section\">\n <div className=\"wv-settings-label-row\">\n <span className=\"wv-settings-label-inline\">\n <span>Target Tool</span>\n <span\n className=\"wv-settings-help-wrap\"\n tabIndex={0}\n aria-label=\"Target tool help\"\n onMouseEnter={(e) =>\n onShowHelperTooltip(\"Tailor your prompt to fit the AI tool you use\", e.currentTarget)\n }\n onMouseLeave={onHideHelperTooltip}\n onFocus={(e) =>\n onShowHelperTooltip(\"Tailor your prompt to fit the AI tool you use\", e.currentTarget)\n }\n onBlur={onHideHelperTooltip}\n >\n <InfoIcon />\n </span>\n </span>\n </div>\n <div className=\"wv-settings-tool-list\">\n <button\n type=\"button\"\n className=\"wv-settings-row\"\n onClick={() => onTool(\"claude-code\")}\n >\n <span>Claude Code</span>\n <TargetToolToggle selected={tool === \"claude-code\"} />\n </button>\n <button\n type=\"button\"\n className=\"wv-settings-row\"\n onClick={() => onTool(\"codex\")}\n >\n <span>Codex</span>\n <TargetToolToggle selected={tool === \"codex\"} />\n </button>\n <button\n type=\"button\"\n className=\"wv-settings-row\"\n onClick={() => onTool(\"generic\")}\n >\n <span>Generic</span>\n <TargetToolToggle selected={tool === \"generic\"} />\n </button>\n </div>\n </div>\n\n <div className=\"wv-settings-section\">\n <div className=\"wv-settings-label-row\">\n <span className=\"wv-settings-label-inline\">\n <span>Prompt Style</span>\n <span\n className=\"wv-settings-help-wrap\"\n tabIndex={0}\n aria-label=\"Prompt style help\"\n onMouseEnter={(e) =>\n onShowHelperTooltip(\"Choose the level of detail included in your prompt\", e.currentTarget)\n }\n onMouseLeave={onHideHelperTooltip}\n onFocus={(e) =>\n onShowHelperTooltip(\"Choose the level of detail included in your prompt\", e.currentTarget)\n }\n onBlur={onHideHelperTooltip}\n >\n <InfoIcon />\n </span>\n </span>\n </div>\n <div className=\"wv-settings-seg\">\n <button\n type=\"button\"\n className={len === \"short\" ? \"wv-settings-seg-on\" : \"wv-settings-seg-off\"}\n onClick={() => onLen(\"short\")}\n >\n Short\n </button>\n <button\n type=\"button\"\n className={len === \"detailed\" ? \"wv-settings-seg-on\" : \"wv-settings-seg-off\"}\n onClick={() => onLen(\"detailed\")}\n >\n Detailed\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"wv-tray-foot wv-settings-foot\">\n <span>{weevarVersionLabel()}</span>\n <GlobeIcon />\n </div>\n </aside>\n );\n}\n\nfunction eventFromWeevarChrome(e: PointerEvent | KeyboardEvent): boolean {\n return e.composedPath().some((n) => {\n if (!(n instanceof Element)) return false;\n return isInsideWeevarOverlay(n);\n });\n}\n\n/** True when coordinates hit Weevar UI (dock, trays, etc.), not the host page. */\nfunction pointerOverWeevarChrome(e: PointerEvent): boolean {\n if (eventFromWeevarChrome(e)) return true;\n const top = document.elementFromPoint(e.clientX, e.clientY);\n if (!top) return false;\n if (isInsideWeevarOverlay(top)) return true;\n return (\n top instanceof HTMLElement && top.classList.contains(WEEVAR_BOOT_DOT_CLASS)\n );\n}\n\nfunction Outline({\n rect,\n variant,\n}: {\n rect: DOMRect;\n variant: \"hover\" | \"selected\";\n}) {\n return (\n <div\n className={\n variant === \"selected\" ? \"wv-outline wv-outline-selected\" : \"wv-outline\"\n }\n style={{\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }}\n />\n );\n}\n\nfunction SelectedTopBar({\n rect,\n text,\n onDragStart,\n dragRef,\n}: {\n rect: DOMRect;\n text: string;\n onDragStart: (e: React.PointerEvent) => void;\n dragRef: React.MutableRefObject<HTMLDivElement | null>;\n}) {\n const pad = 4;\n let top = rect.top - 30;\n if (top < 4) top = rect.bottom + pad;\n const left = Math.min(Math.max(4, rect.left), window.innerWidth - 260);\n return (\n <div className=\"wv-selected-top\" style={{ left, top }}>\n <div\n ref={dragRef}\n className=\"wv-drag-handle\"\n title=\"Drag to reorder or move to another container\"\n role=\"presentation\"\n onPointerDown={onDragStart}\n >\n <SelectedDragIcon />\n </div>\n <div className=\"wv-selected-label\">{text}</div>\n </div>\n );\n}\n\nfunction CursorHoverLabel({ x, y, text }: { x: number; y: number; text: string }) {\n const left = Math.min(Math.max(6, x + 12), window.innerWidth - 220);\n const top = Math.min(Math.max(6, y - 26), window.innerHeight - 28);\n return (\n <div className=\"wv-cursor-label\" style={{ left, top }}>\n {text}\n </div>\n );\n}\n\nfunction SelectedDragIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M9.75 4.75H9.755V4.755H9.75V4.75Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 4.75C10 4.8163 9.97366 4.87989 9.92678 4.92678C9.87989 4.97366 9.8163 5 9.75 5C9.6837 5 9.62011 4.97366 9.57322 4.92678C9.52634 4.87989 9.5 4.8163 9.5 4.75C9.5 4.6837 9.52634 4.62011 9.57322 4.57322C9.62011 4.52634 9.6837 4.5 9.75 4.5C9.8163 4.5 9.87989 4.52634 9.92678 4.57322C9.97366 4.62011 10 4.6837 10 4.75ZM9.75 7.995H9.755V8H9.75V7.995Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 7.995C10 8.0613 9.97366 8.12489 9.92678 8.17177C9.87989 8.21866 9.8163 8.245 9.75 8.245C9.6837 8.245 9.62011 8.21866 9.57322 8.17177C9.52634 8.12489 9.5 8.0613 9.5 7.995C9.5 7.92869 9.52634 7.8651 9.57322 7.81822C9.62011 7.77133 9.6837 7.745 9.75 7.745C9.8163 7.745 9.87989 7.77133 9.92678 7.81822C9.97366 7.8651 10 7.92869 10 7.995ZM9.75 11.25H9.755V11.255H9.75V11.25Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 11.25C10 11.3163 9.97366 11.3799 9.92678 11.4268C9.87989 11.4737 9.8163 11.5 9.75 11.5C9.6837 11.5 9.62011 11.4737 9.57322 11.4268C9.52634 11.3799 9.5 11.3163 9.5 11.25C9.5 11.1837 9.52634 11.1201 9.57322 11.0732C9.62011 11.0263 9.6837 11 9.75 11C9.8163 11 9.87989 11.0263 9.92678 11.0732C9.97366 11.1201 10 11.1837 10 11.25ZM6.25 4.75H6.255V4.755H6.25V4.75Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.5 4.75C6.5 4.8163 6.47366 4.87989 6.42678 4.92678C6.37989 4.97366 6.3163 5 6.25 5C6.1837 5 6.12011 4.97366 6.07322 4.92678C6.02634 4.87989 6 4.8163 6 4.75C6 4.6837 6.02634 4.62011 6.07322 4.57322C6.12011 4.52634 6.1837 4.5 6.25 4.5C6.3163 4.5 6.37989 4.52634 6.42678 4.57322C6.47366 4.62011 6.5 4.6837 6.5 4.75ZM6.25 7.995H6.255V8H6.25V7.995Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.5 7.995C6.5 8.0613 6.47366 8.12489 6.42678 8.17177C6.37989 8.21866 6.3163 8.245 6.25 8.245C6.1837 8.245 6.12011 8.21866 6.07322 8.17177C6.02634 8.12489 6 8.0613 6 7.995C6 7.92869 6.02634 7.8651 6.07322 7.81822C6.12011 7.77133 6.1837 7.745 6.25 7.745C6.3163 7.745 6.37989 7.77133 6.42678 7.81822C6.47366 7.8651 6.5 7.92869 6.5 7.995ZM6.25 11.25H6.255V11.255H6.25V11.25Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.5 11.25C6.5 11.3163 6.47366 11.3799 6.42678 11.4268C6.37989 11.4737 6.3163 11.5 6.25 11.5C6.1837 11.5 6.12011 11.4737 6.07322 11.4268C6.02634 11.3799 6 11.3163 6 11.25C6 11.1837 6.02634 11.1201 6.07322 11.0732C6.12011 11.0263 6.1837 11 6.25 11C6.3163 11 6.37989 11.0263 6.42678 11.0732C6.47366 11.1201 6.5 11.1837 6.5 11.25Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction CornerMarkers({ rect }: { rect: DOMRect }) {\n const o = 2;\n const s = 4;\n const box: CSSProperties = {\n position: \"fixed\",\n left: rect.left - o,\n top: rect.top - o,\n width: rect.width + o * 2,\n height: rect.height + o * 2,\n pointerEvents: \"none\",\n zIndex: 4,\n };\n const corner: CSSProperties = {\n position: \"absolute\",\n width: s,\n height: s,\n background: \"var(--wv-accent)\",\n };\n return (\n <div style={box}>\n <span style={{ ...corner, left: 0, top: 0 }} />\n <span style={{ ...corner, right: 0, top: 0 }} />\n <span style={{ ...corner, left: 0, bottom: 0 }} />\n <span style={{ ...corner, right: 0, bottom: 0 }} />\n </div>\n );\n}\n\nfunction IconBase({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\n\nfunction LogomarkIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path\n d=\"M4.67677 16C4.05948 16 3.54321 15.7266 3.12795 15.1797C2.71268 14.6328 2.50505 13.8839 2.50505 12.9328C2.50505 12.4454 2.55556 11.8985 2.65657 11.2922C2.75758 10.674 2.87542 10.0498 3.0101 9.41975C3.14478 8.78967 3.26263 8.20119 3.36364 7.65432C3.46465 7.09556 3.51515 6.63192 3.51515 6.26338C3.51515 6.00183 3.48148 5.79973 3.41414 5.65706C3.3468 5.50252 3.22334 5.42524 3.04377 5.42524C2.90909 5.42524 2.75196 5.49063 2.57239 5.6214C2.39282 5.75217 2.25814 6.00777 2.16835 6.3882L2 6.31687C2 5.29447 2.21886 4.48605 2.65657 3.89163C3.1055 3.29721 3.70595 3 4.45791 3C5.16498 3 5.6532 3.24371 5.92256 3.73114C6.20314 4.21856 6.34343 4.83082 6.34343 5.5679C6.34343 6.11477 6.28732 6.6973 6.17508 7.3155C6.07407 7.9337 5.95623 8.5519 5.82155 9.1701C5.68687 9.77641 5.56341 10.3411 5.45118 10.8642C5.35017 11.3873 5.29966 11.8212 5.29966 12.166C5.29966 12.6772 5.42312 12.9328 5.67003 12.9328C5.81594 12.9328 6.01235 12.8258 6.25926 12.6118C6.50617 12.3859 6.76431 12.0828 7.03367 11.7023C7.31425 11.31 7.58361 10.8701 7.84175 10.3827C8.09989 9.8834 8.31874 9.36031 8.49832 8.81344C8.47587 8.5519 8.45903 8.30224 8.44781 8.06447C8.43659 7.81481 8.43098 7.59488 8.43098 7.40466C8.43098 6.45359 8.51515 5.68679 8.6835 5.10425C8.86308 4.52172 9.08754 4.09374 9.3569 3.8203C9.62626 3.54687 9.90123 3.41015 10.1818 3.41015C10.5746 3.41015 10.9282 3.64198 11.2424 4.10562C11.5567 4.55738 11.7138 5.17558 11.7138 5.96022C11.7138 6.44765 11.6296 6.99451 11.4613 7.60082C11.2929 8.19524 11.0123 8.83128 10.6195 9.50892C10.5859 10.5313 10.6925 11.3576 10.9394 11.9877C11.1863 12.6177 11.4949 12.9328 11.8653 12.9328C12.101 12.9328 12.3535 12.808 12.6229 12.5583C12.9035 12.2968 13.1616 11.9401 13.3973 11.4883C13.633 11.0247 13.8238 10.4897 13.9697 9.8834C14.1268 9.27709 14.2054 8.62917 14.2054 7.93964C14.2054 7.53544 14.1773 7.1134 14.1212 6.67353C14.0763 6.23365 14.0146 5.81161 13.936 5.40741C13.8687 5.0032 13.7957 4.67032 13.7172 4.40878C13.7172 4.20668 13.7957 4.00457 13.9529 3.80247C14.1212 3.58848 14.3345 3.41015 14.5926 3.26749C14.8507 3.11294 15.1145 3.03566 15.3838 3.03566C15.6532 3.03566 15.9113 3.13672 16.1582 3.33882C16.4052 3.54092 16.6072 3.89758 16.7643 4.40878C16.9214 4.90809 17 5.6214 17 6.5487C17 7.84454 16.8429 9.0631 16.5286 10.2044C16.2144 11.3338 15.7879 12.3324 15.2492 13.2003C14.7217 14.0681 14.138 14.7517 13.4983 15.251C12.8586 15.7385 12.2076 15.9822 11.5455 15.9822C10.9618 15.9822 10.4792 15.792 10.0976 15.4115C9.71605 15.0311 9.41863 14.5199 9.20539 13.8779C8.99214 13.2359 8.84063 12.5226 8.75084 11.738C8.3468 12.7604 7.90909 13.5866 7.43771 14.2167C6.96633 14.8349 6.49495 15.2867 6.02357 15.572C5.55219 15.8573 5.10325 16 4.67677 16Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\nfunction AIToolIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path\n d=\"M5.36207 2.61103C5.50334 2.04084 6.31408 2.04084 6.45536 2.61103C6.75047 3.80492 7.36605 4.89554 8.23567 5.76515C9.10528 6.63476 10.1959 7.25035 11.3898 7.54546C11.96 7.68674 11.96 8.49747 11.3898 8.63875L11.1626 8.69793C10.018 9.02356 8.9798 9.64591 8.15316 10.5019C7.32652 11.358 6.74081 12.4173 6.45536 13.5725L6.42099 13.6731C6.22881 14.1096 5.58798 14.1096 5.39643 13.6731L5.36207 13.5732C5.07656 12.4178 4.49075 11.3585 3.66399 10.5024C2.83724 9.6464 1.7989 9.02409 0.65419 8.69857L0.427642 8.63875C-0.142547 8.49747 -0.142547 7.68674 0.427642 7.54546C1.62153 7.25035 2.71214 6.63476 3.58176 5.76515C4.45137 4.89554 5.06696 3.80492 5.36207 2.61103ZM10.882 0.206184C10.9424 -0.0687282 11.3344 -0.0687282 11.3949 0.206184C11.5249 0.793001 11.8197 1.33051 12.2447 1.75551C12.6697 2.18051 13.2072 2.47533 13.794 2.60531C14.0695 2.6664 14.0695 3.05777 13.794 3.11886L13.6737 3.15004C13.1131 3.29756 12.6039 3.59663 12.202 4.01444C11.8002 4.43225 11.5211 4.95267 11.3955 5.51862L11.3796 5.56698C11.2924 5.77698 10.9838 5.77698 10.8966 5.56698L10.882 5.51862C10.7604 4.96963 10.4943 4.46308 10.1114 4.05137C9.72842 3.63965 9.24243 3.33771 8.70366 3.17677L8.48156 3.11886C8.20665 3.05777 8.20665 2.6664 8.48156 2.60531C9.06862 2.47554 9.60639 2.18082 10.0316 1.7558C10.4569 1.33079 10.7519 0.793166 10.882 0.206184Z\"\n fill=\"#111113\"\n />\n </svg>\n );\n}\n\nfunction DocumentationIcon() {\n return (\n <svg\n width=\"24\"\n height=\"30\"\n viewBox=\"0 0 24 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path d=\"M12 0L12.1755 0.0105C12.5103 0.0499858 12.8221 0.201119 13.0605 0.439517C13.2989 0.677915 13.45 0.989675 13.4895 1.3245L13.5 1.5V7.5L13.5075 7.725C13.5612 8.43926 13.8686 9.11074 14.3743 9.61805C14.8799 10.1253 15.5504 10.435 16.2645 10.491L16.5 10.5H22.5L22.6755 10.5105C23.0103 10.55 23.3221 10.7011 23.5605 10.9395C23.7989 11.1779 23.95 11.4897 23.9895 11.8245L24 12V25.5C24.0001 26.6478 23.5615 27.7523 22.7741 28.5874C21.9866 29.4225 20.9098 29.9252 19.764 29.9925L19.5 30H4.5C3.35218 30.0001 2.24773 29.5615 1.41261 28.7741C0.57749 27.9866 0.0748387 26.9098 0.00750018 25.764L6.99067e-09 25.5V4.5C-6.39326e-05 3.35218 0.438488 2.24773 1.22593 1.41261C2.01336 0.57749 3.09016 0.0748387 4.236 0.00750017L4.5 0H12Z\" fill=\"#F8563F\"/>\n <path d=\"M22.5 7.49979H16.5L16.4985 1.49829L22.5 7.49979Z\" fill=\"#D1402A\"/>\n <path d=\"M12 24C14.7614 24 17 21.7614 17 19C17 16.2386 14.7614 14 12 14C9.23858 14 7 16.2386 7 19C7 21.7614 9.23858 24 12 24Z\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M9.9998 14.5H10.4998C9.5248 17.42 9.5248 20.58 10.4998 23.5H9.9998\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M13.5 14.5C14.475 17.42 14.475 20.58 13.5 23.5\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7.5 21V20.5C10.42 21.475 13.58 21.475 16.5 20.5V21\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7.5 17.5C10.42 16.525 13.58 16.525 16.5 17.5\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nfunction PointerIcon() {\n return (\n <Icon18Base className=\"wv-icon-pointer\">\n <path d=\"M3.10071 5.81125L5.72984 14.2829C6.3524 16.2942 9.18745 16.323 9.85312 14.326L10.6289 11.9986C10.8444 11.3521 11.3521 10.8444 11.9986 10.6289L14.326 9.85312C16.323 9.18745 16.2894 6.35719 14.2829 5.72984L5.81125 3.10071C4.1447 2.58351 2.58351 4.1447 3.10071 5.81125Z\" />\n </Icon18Base>\n );\n}\nfunction PromptIcon() {\n return (\n <Icon18Base className=\"wv-icon-prompt\">\n <path d=\"M11.4 3H6.6C4.2 3 3 4.2 3 6.6V14.4C3 14.73 3.27 15 3.6 15H11.4C13.8 15 15 13.8 15 11.4V6.6C15 4.2 13.8 3 11.4 3Z\" />\n <path d=\"M6 8H12\" />\n <path d=\"M6 11H10\" />\n </Icon18Base>\n );\n}\nfunction TrashIcon() {\n return (\n <Icon18Base>\n <path d=\"M14.625 4.125L14.16 11.6437C14.0415 13.5645 13.9823 14.5253 13.5 15.216C13.2619 15.5574 12.9554 15.8455 12.6 16.062C11.8822 16.5 10.92 16.5 8.9955 16.5C7.068 16.5 6.10425 16.5 5.385 16.0613C5.02942 15.8443 4.72291 15.5557 4.485 15.2137C4.0035 14.5222 3.945 13.56 3.8295 11.6363L3.375 4.125M2.25 4.125H15.75M12.042 4.125L11.5298 3.069C11.19 2.367 11.0198 2.01675 10.7265 1.79775C10.6614 1.74924 10.5924 1.70609 10.5203 1.66875C10.1955 1.5 9.8055 1.5 9.02625 1.5C8.22675 1.5 7.827 1.5 7.49625 1.6755C7.42314 1.71466 7.3534 1.75981 7.28775 1.8105C6.9915 2.03775 6.82575 2.4015 6.49425 3.12825L6.03975 4.125M7.125 12.375V7.875M10.875 12.375V7.875\" />\n </Icon18Base>\n );\n}\nfunction SettingsIcon() {\n return (\n <Icon18Base>\n <path d=\"M9 11.25C10.2426 11.25 11.25 10.2426 11.25 9C11.25 7.75736 10.2426 6.75 9 6.75C7.75736 6.75 6.75 7.75736 6.75 9C6.75 10.2426 7.75736 11.25 9 11.25Z\" />\n <path d=\"M1.5 9.66007V8.34007C1.5 7.56007 2.1375 6.91507 2.925 6.91507C4.2825 6.91507 4.8375 5.95507 4.155 4.77757C3.765 4.10257 3.9975 3.22507 4.68 2.83507L5.9775 2.09257C6.57 1.74007 7.335 1.95007 7.6875 2.54257L7.77 2.68507C8.445 3.86257 9.555 3.86257 10.2375 2.68507L10.32 2.54257C10.6725 1.95007 11.4375 1.74007 12.03 2.09257L13.3275 2.83507C14.01 3.22507 14.2425 4.10257 13.8525 4.77757C13.17 5.95507 13.725 6.91507 15.0825 6.91507C15.8625 6.91507 16.5075 7.55257 16.5075 8.34007V9.66007C16.5075 10.4401 15.87 11.0851 15.0825 11.0851C13.725 11.0851 13.17 12.0451 13.8525 13.2226C14.2425 13.9051 14.01 14.7751 13.3275 15.1651L12.03 15.9076C11.4375 16.2601 10.6725 16.0501 10.32 15.4576L10.2375 15.3151C9.5625 14.1376 8.4525 14.1376 7.77 15.3151L7.6875 15.4576C7.335 16.0501 6.57 16.2601 5.9775 15.9076L4.68 15.1651C3.9975 14.7751 3.765 13.8976 4.155 13.2226C4.8375 12.0451 4.2825 11.0851 2.925 11.0851C2.1375 11.0851 1.5 10.4401 1.5 9.66007Z\" />\n </Icon18Base>\n );\n}\nfunction UndoIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M4.22704 13.773C5.44853 14.9945 7.13602 15.75 9 15.75C12.7279 15.75 15.75 12.7279 15.75 9C15.75 5.27209 12.7279 2.25 9 2.25C7.13602 2.25 5.44853 3.00552 4.22704 4.22704C3.60528 4.84879 2.25 6.375 2.25 6.375\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.25 3.375V6.375H5.25\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\nfunction RedoIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M13.773 13.773C12.5515 14.9945 10.864 15.75 9 15.75C5.27209 15.75 2.25 12.7279 2.25 9C2.25 5.27209 5.27209 2.25 9 2.25C10.864 2.25 12.5515 3.00552 13.773 4.22704C14.3947 4.84879 15.75 6.375 15.75 6.375\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M15.75 3.375V6.375H12.75\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\nfunction DragDotsIcon() {\n return (\n <Icon18Base>\n <path d=\"M13.875 11.625L13.875 11.6317L13.8683 11.6317L13.8683 11.625L13.875 11.625Z\" />\n <path d=\"M13.875 12C13.7755 12 13.6802 11.9605 13.6098 11.8902C13.5395 11.8198 13.5 11.7245 13.5 11.625C13.5 11.5255 13.5395 11.4302 13.6098 11.3598C13.6802 11.2895 13.7755 11.25 13.875 11.25C13.9745 11.25 14.0698 11.2895 14.1402 11.3598C14.2105 11.4302 14.25 11.5255 14.25 11.625C14.25 11.7245 14.2105 11.8198 14.1402 11.8902C14.0698 11.9605 13.9745 12 13.875 12ZM9.0075 11.625L9.0075 11.6325L9 11.6325L9 11.625L9.0075 11.625Z\" />\n <path d=\"M9.00732 12C8.90787 12 8.81249 11.9605 8.74216 11.8902C8.67183 11.8198 8.63232 11.7245 8.63232 11.625C8.63232 11.5255 8.67183 11.4302 8.74216 11.3598C8.81249 11.2895 8.90787 11.25 9.00732 11.25C9.10678 11.25 9.20216 11.2895 9.27249 11.3598C9.34282 11.4302 9.38232 11.5255 9.38232 11.625C9.38232 11.7245 9.34282 11.8198 9.27249 11.8902C9.20216 11.9605 9.10678 12 9.00732 12ZM4.12482 11.625L4.12482 11.6325L4.11732 11.6325L4.11732 11.625L4.12482 11.625Z\" />\n <path d=\"M4.125 12C4.02554 12 3.93016 11.9605 3.85984 11.8902C3.78951 11.8198 3.75 11.7245 3.75 11.625C3.75 11.5255 3.78951 11.4302 3.85984 11.3598C3.93016 11.2895 4.02554 11.25 4.125 11.25C4.22446 11.25 4.31984 11.2895 4.39017 11.3598C4.46049 11.4302 4.5 11.5255 4.5 11.625C4.5 11.7245 4.46049 11.8198 4.39017 11.8902C4.31984 11.9605 4.22446 12 4.125 12ZM13.875 6.375L13.875 6.3825L13.8675 6.3825L13.8675 6.375L13.875 6.375Z\" />\n <path d=\"M13.875 6.75C13.7755 6.75 13.6802 6.71049 13.6098 6.64017C13.5395 6.56984 13.5 6.47446 13.5 6.375C13.5 6.27554 13.5395 6.18016 13.6098 6.10984C13.6802 6.03951 13.7755 6 13.875 6C13.9745 6 14.0698 6.03951 14.1402 6.10984C14.2105 6.18016 14.25 6.27554 14.25 6.375C14.25 6.47446 14.2105 6.56984 14.1402 6.64017C14.0698 6.71049 13.9745 6.75 13.875 6.75ZM9.0075 6.375L9.0075 6.3825L9 6.3825L9 6.375L9.0075 6.375Z\" />\n <path d=\"M9.00732 6.75C8.90787 6.75 8.81249 6.71049 8.74216 6.64017C8.67183 6.56984 8.63232 6.47446 8.63232 6.375C8.63232 6.27554 8.67183 6.18016 8.74216 6.10984C8.81249 6.03951 8.90787 6 9.00732 6C9.10678 6 9.20216 6.03951 9.27249 6.10984C9.34282 6.18016 9.38232 6.27554 9.38232 6.375C9.38232 6.47446 9.34282 6.56984 9.27249 6.64017C9.20216 6.71049 9.10678 6.75 9.00732 6.75ZM4.12482 6.375L4.12482 6.3825L4.11732 6.3825L4.11732 6.375L4.12482 6.375Z\" />\n <path d=\"M4.125 6.75C4.02554 6.75 3.93016 6.71049 3.85984 6.64017C3.78951 6.56984 3.75 6.47446 3.75 6.375C3.75 6.27554 3.78951 6.18016 3.85984 6.10984C3.93016 6.03951 4.02554 6 4.125 6C4.22446 6 4.31984 6.03951 4.39017 6.10984C4.46049 6.18016 4.5 6.27554 4.5 6.375C4.5 6.47446 4.46049 6.56984 4.39017 6.64017C4.31984 6.71049 4.22446 6.75 4.125 6.75Z\" />\n </Icon18Base>\n );\n}\nfunction CloseIcon() {\n return (\n <Icon18Base>\n <path d=\"M4 14.0002L14.0002 4.00005\" />\n <path d=\"M14.0002 13.9999L4 3.99976\" />\n </Icon18Base>\n );\n}\n\nfunction InfoIcon() {\n return (\n <svg\n className=\"wv-settings-info-icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path\n d=\"M7.00008 12.8334C10.2084 12.8334 12.8334 10.2084 12.8334 7.00008C12.8334 3.79175 10.2084 1.16675 7.00008 1.16675C3.79175 1.16675 1.16675 3.79175 1.16675 7.00008C1.16675 10.2084 3.79175 12.8334 7.00008 12.8334Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 4.66675V7.58341\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6.99683 9.33325H7.00207\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction TargetToolToggle({ selected }: { selected: boolean }) {\n return selected ? (\n <svg\n className=\"wv-settings-toggle-svg wv-settings-toggle-svg-on\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden\n >\n <g clipPath=\"url(#wv-toggle-selected-clip)\">\n <path\n d=\"M18.125 14.375L18.2322 14.2678C19.3641 13.1359 20 11.6007 20 9.99996C20 8.39921 19.3641 6.86402 18.2322 5.73212L18.125 5.62493C16.9244 4.4243 15.2963 3.74992 13.5984 3.74992L6.40151 3.74992C4.7038 3.75044 3.07573 4.42483 1.87491 5.62493L1.76773 5.73212C0.63583 6.86402 -5.98136e-05 8.39921 -5.96737e-05 9.99996C-5.95337e-05 11.6007 0.635831 13.1359 1.76773 14.2678L1.87492 14.375C3.07573 15.5751 4.7038 16.2495 6.40151 16.25L13.5984 16.25C15.2961 16.2495 16.9242 15.5751 18.125 14.375Z\"\n fill=\"#EBEBEB\"\n fillOpacity=\"0.05\"\n />\n <path\n d=\"M15.9154 13.75C14.9209 14.3242 13.7389 14.4798 12.6297 14.1825C11.5204 13.8853 10.5746 13.1595 10.0004 12.165C9.42621 11.1704 9.27062 9.98846 9.56786 8.87917C9.86511 7.76989 10.5908 6.82412 11.5854 6.24992C12.0779 5.9656 12.6215 5.78107 13.1853 5.70686C13.7491 5.63264 14.3219 5.6702 14.8712 5.81738C15.9805 6.11463 16.9263 6.84036 17.5005 7.83493C18.0747 8.8295 18.2302 10.0114 17.933 11.1207C17.6357 12.23 16.91 13.1758 15.9154 13.75Z\"\n fill=\"#35C759\"\n />\n <path\n d=\"M15.9154 13.75C14.9209 14.3242 13.7389 14.4798 12.6297 14.1825C11.5204 13.8853 10.5746 13.1595 10.0004 12.165C9.42621 11.1704 9.27062 9.98846 9.56786 8.87917C9.86511 7.76989 10.5908 6.82412 11.5854 6.24992C12.0779 5.9656 12.6215 5.78107 13.1853 5.70686C13.7491 5.63264 14.3219 5.6702 14.8712 5.81738C15.9805 6.11463 16.9263 6.84036 17.5005 7.83493C18.0747 8.8295 18.2302 10.0114 17.933 11.1207C17.6357 12.23 16.91 13.1758 15.9154 13.75Z\"\n fill=\"none\"\n stroke=\"rgba(255,255,255,0.55)\"\n strokeWidth=\"1.25\"\n />\n </g>\n <defs>\n <clipPath id=\"wv-toggle-selected-clip\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n ) : (\n <svg\n className=\"wv-settings-toggle-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden\n >\n <g clipPath=\"url(#wv-toggle-unselected-clip)\">\n <path\n d=\"M1.87498 5.62501L1.76779 5.7322C0.635893 6.86411 2.56136e-06 8.39929 2.84125e-06 10C3.12113e-06 11.6008 0.635894 13.136 1.76779 14.2679L1.87498 14.3751C3.07561 15.5757 4.70375 16.2501 6.40157 16.2501L13.5985 16.2501C15.2962 16.2496 16.9243 15.5752 18.1251 14.3751L18.2323 14.2679C19.3642 13.136 20.0001 11.6008 20.0001 10C20.0001 8.39929 19.3642 6.8641 18.2323 5.7322L18.1251 5.62501C16.9243 4.42491 15.2962 3.75053 13.5985 3.75L6.40157 3.75C4.70387 3.75053 3.07579 4.42491 1.87498 5.62501Z\"\n fill=\"#EBEBEB\"\n fillOpacity=\"0.05\"\n />\n <path\n d=\"M4.08456 6.25003C5.07913 5.67583 6.26106 5.52024 7.37034 5.81749C8.47963 6.11474 9.4254 6.84047 9.9996 7.83504C10.5738 8.82961 10.7294 10.0115 10.4321 11.1208C10.1349 12.2301 9.40916 13.1759 8.41459 13.7501C7.92213 14.0344 7.37849 14.2189 6.81471 14.2931C6.25094 14.3674 5.67806 14.3298 5.1288 14.1826C4.01952 13.8854 3.07374 13.1596 2.49955 12.1651C1.92535 11.1705 1.76976 9.98857 2.06701 8.87929C2.36425 7.77 3.08999 6.82423 4.08456 6.25003Z\"\n fill=\"#58585D\"\n />\n </g>\n <defs>\n <clipPath id=\"wv-toggle-unselected-clip\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(20 20) rotate(180)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nfunction Icon18Base({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 18 18\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\nfunction CollapseIcon() {\n return (\n <IconBase>\n <path d=\"M8 6v12M16 8v8\" />\n </IconBase>\n );\n}\nfunction WeevarWordmarkIcon() {\n return (\n <svg\n className=\"wv-tray-logo\"\n width=\"48\"\n height=\"10\"\n viewBox=\"0 0 48 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Weevar\"\n >\n <path d=\"M2.16888 9.97264C1.66872 9.97264 1.2504 9.76288 0.913931 9.34336C0.577459 8.92385 0.409223 8.34929 0.409223 7.6197C0.409223 7.24578 0.450145 6.82627 0.531989 6.36115C0.613834 5.88691 0.709319 5.40812 0.818445 4.92476C0.927571 4.4414 1.02306 3.98997 1.1049 3.57045C1.18675 3.14181 1.22767 2.78614 1.22767 2.50342C1.22767 2.30278 1.20039 2.14774 1.14582 2.0383C1.09126 1.91974 0.991228 1.86047 0.845727 1.86047C0.736601 1.86047 0.609287 1.91062 0.463786 2.01094C0.318284 2.11126 0.209158 2.30734 0.136408 2.59918L0 2.54446C0 1.76015 0.17733 1.13999 0.531989 0.683995C0.895743 0.227998 1.38226 0 1.99155 0C2.56446 0 2.96004 0.186959 3.1783 0.560876C3.40564 0.934793 3.51931 1.40447 3.51931 1.9699C3.51931 2.38942 3.47385 2.8363 3.38291 3.31053C3.30106 3.78477 3.20558 4.25901 3.09645 4.73324C2.98733 5.19836 2.88729 5.63155 2.79635 6.03283C2.71451 6.43411 2.67359 6.76699 2.67359 7.03146C2.67359 7.42362 2.77362 7.6197 2.97368 7.6197C3.0919 7.6197 3.25105 7.53762 3.45111 7.37346C3.65118 7.20018 3.86033 6.96762 4.07859 6.67579C4.30593 6.37483 4.52418 6.03739 4.73334 5.66347C4.9425 5.28044 5.11983 4.87916 5.26533 4.45964C5.24714 4.25901 5.2335 4.06749 5.22441 3.88509C5.21531 3.69357 5.21077 3.52485 5.21077 3.37893C5.21077 2.64934 5.27897 2.0611 5.41538 1.61423C5.56088 1.16735 5.74276 0.839033 5.96101 0.629275C6.17926 0.419517 6.40206 0.314637 6.62941 0.314637C6.94769 0.314637 7.23415 0.492476 7.48877 0.848153C7.7434 1.19471 7.87072 1.66895 7.87072 2.27086C7.87072 2.64478 7.80251 3.0643 7.6661 3.52941C7.5297 3.98541 7.30235 4.47332 6.98407 4.99316C6.95678 5.77747 7.04318 6.41131 7.24324 6.89466C7.44331 7.37802 7.69339 7.6197 7.99348 7.6197C8.18445 7.6197 8.38906 7.52394 8.60732 7.33242C8.83466 7.13178 9.04382 6.85819 9.23479 6.51163C9.42576 6.15595 9.58036 5.74555 9.69858 5.28044C9.82589 4.81532 9.88955 4.31829 9.88955 3.78933C9.88955 3.47925 9.86681 3.15549 9.82134 2.81806C9.78497 2.48062 9.73495 2.15686 9.67129 1.84678C9.61673 1.53671 9.55762 1.28135 9.49396 1.08071C9.49396 0.925672 9.55762 0.770634 9.68494 0.615595C9.82134 0.451437 9.99413 0.314637 10.2033 0.205198C10.4124 0.086639 10.6261 0.0273594 10.8444 0.0273594C11.0627 0.0273594 11.2718 0.104879 11.4719 0.259918C11.6719 0.414957 11.8356 0.688555 11.9629 1.08071C12.0903 1.46375 12.1539 2.01094 12.1539 2.7223C12.1539 3.71637 12.0266 4.65116 11.772 5.52668C11.5173 6.39307 11.1718 7.15914 10.7353 7.8249C10.3079 8.49065 9.83498 9.01505 9.31663 9.39808C8.79829 9.772 8.27084 9.95896 7.73431 9.95896C7.26143 9.95896 6.87039 9.81304 6.5612 9.5212C6.25201 9.22937 6.01103 8.83721 5.83824 8.34473C5.66546 7.85226 5.54269 7.30506 5.46994 6.70315C5.14256 7.48746 4.7879 8.12129 4.40596 8.60465C4.02402 9.07889 3.64208 9.42544 3.26014 9.64432C2.8782 9.8632 2.51445 9.97264 2.16888 9.97264Z\" fill=\"currentColor\" />\n <path d=\"M15.4244 10C14.7605 10 14.2104 9.86776 13.7739 9.60328C13.3374 9.32969 13.01 8.97401 12.7917 8.53625C12.5735 8.08938 12.4643 7.61058 12.4643 7.09986C12.4643 6.61651 12.5553 6.13315 12.7372 5.64979C12.9281 5.15732 13.2009 4.71044 13.5556 4.30917C13.9194 3.90789 14.3559 3.58413 14.8651 3.33789C15.3835 3.09166 15.9655 2.96854 16.6111 2.96854C17.4114 2.96854 17.9934 3.15093 18.3572 3.51573C18.73 3.87141 18.9164 4.30461 18.9164 4.81532C18.9164 5.25308 18.7982 5.65891 18.5618 6.03283C18.3344 6.39763 18.0298 6.69403 17.6478 6.92202C17.2659 7.1409 16.8476 7.25034 16.3929 7.25034C16.1564 7.25034 15.9155 7.21386 15.6699 7.1409C15.4244 7.06794 15.1834 6.95394 14.947 6.79891C14.9924 7.36434 15.1561 7.77474 15.438 8.0301C15.7199 8.28545 16.0564 8.41313 16.4474 8.41313C16.7203 8.41313 16.9931 8.36297 17.2659 8.26265C17.5387 8.15321 17.7888 8.01642 18.0161 7.85226C18.2526 7.67898 18.4344 7.49658 18.5618 7.30506L18.6572 7.37346C18.6572 7.8477 18.5572 8.25353 18.3572 8.59097C18.1662 8.91929 17.9116 9.18833 17.5933 9.39808C17.275 9.60784 16.9249 9.76288 16.5429 9.8632C16.1701 9.9544 15.7972 10 15.4244 10ZM15.7381 6.30643C16.0291 6.30643 16.2656 6.22435 16.4474 6.06019C16.6293 5.88691 16.7657 5.68627 16.8567 5.45828C16.9476 5.23028 16.9931 5.02964 16.9931 4.85636C16.9931 4.6466 16.934 4.47332 16.8157 4.33653C16.6975 4.19061 16.5338 4.11765 16.3247 4.11765C16.161 4.11765 15.9791 4.17693 15.779 4.29549C15.5881 4.41404 15.4153 4.61924 15.2607 4.91108C15.1061 5.1938 15.0061 5.59052 14.9606 6.10123C15.2516 6.23803 15.5108 6.30643 15.7381 6.30643Z\" fill=\"currentColor\" />\n <path d=\"M22.5378 10C21.874 10 21.3238 9.86776 20.8873 9.60328C20.4508 9.32969 20.1234 8.97401 19.9052 8.53625C19.6869 8.08938 19.5778 7.61058 19.5778 7.09986C19.5778 6.61651 19.6687 6.13315 19.8506 5.64979C20.0416 5.15732 20.3144 4.71044 20.669 4.30917C21.0328 3.90789 21.4693 3.58413 21.9786 3.33789C22.4969 3.09166 23.0789 2.96854 23.7246 2.96854C24.5248 2.96854 25.1068 3.15093 25.4706 3.51573C25.8434 3.87141 26.0299 4.30461 26.0299 4.81532C26.0299 5.25308 25.9116 5.65891 25.6752 6.03283C25.4479 6.39763 25.1432 6.69403 24.7613 6.92202C24.3793 7.1409 23.961 7.25034 23.5063 7.25034C23.2699 7.25034 23.0289 7.21386 22.7834 7.1409C22.5378 7.06794 22.2968 6.95394 22.0604 6.79891C22.1059 7.36434 22.2696 7.77474 22.5515 8.0301C22.8334 8.28545 23.1698 8.41313 23.5609 8.41313C23.8337 8.41313 24.1065 8.36297 24.3793 8.26265C24.6521 8.15321 24.9022 8.01642 25.1296 7.85226C25.366 7.67898 25.5479 7.49658 25.6752 7.30506L25.7707 7.37346C25.7707 7.8477 25.6707 8.25353 25.4706 8.59097C25.2796 8.91929 25.025 9.18833 24.7067 9.39808C24.3884 9.60784 24.0383 9.76288 23.6564 9.8632C23.2835 9.9544 22.9107 10 22.5378 10ZM22.8516 6.30643C23.1426 6.30643 23.379 6.22435 23.5609 6.06019C23.7428 5.88691 23.8792 5.68627 23.9701 5.45828C24.061 5.23028 24.1065 5.02964 24.1065 4.85636C24.1065 4.6466 24.0474 4.47332 23.9292 4.33653C23.811 4.19061 23.6473 4.11765 23.4381 4.11765C23.2744 4.11765 23.0926 4.17693 22.8925 4.29549C22.7015 4.41404 22.5287 4.61924 22.3741 4.91108C22.2195 5.1938 22.1195 5.59052 22.074 6.10123C22.365 6.23803 22.6242 6.30643 22.8516 6.30643Z\" fill=\"currentColor\" />\n <path d=\"M28.751 9.95896C28.2235 9.95896 27.8052 9.82216 27.496 9.54856C27.1868 9.26585 27.0322 8.83265 27.0322 8.24897C27.0322 7.91154 27.0732 7.5513 27.155 7.16826C27.246 6.78523 27.3323 6.44323 27.4142 6.14227C27.496 5.85043 27.5597 5.59508 27.6052 5.3762C27.6597 5.15732 27.687 4.9886 27.687 4.87004C27.687 4.72412 27.6552 4.61924 27.5915 4.5554C27.5279 4.49156 27.4506 4.45964 27.3596 4.45964C27.1414 4.45964 26.9595 4.56452 26.814 4.77428L26.7594 4.71956C26.7685 4.40948 26.8686 4.12677 27.0595 3.87141C27.2505 3.60693 27.496 3.39717 27.7961 3.24213C28.0962 3.0871 28.4009 3.00958 28.7101 3.00958C29.0556 3.00958 29.3512 3.11446 29.5967 3.32421C29.8422 3.52485 29.9559 3.84405 29.9377 4.28181C29.9286 4.47332 29.8923 4.715 29.8286 5.00684C29.774 5.29868 29.6967 5.64523 29.5967 6.04651C29.533 6.30187 29.4648 6.59371 29.3921 6.92202C29.3284 7.24122 29.2966 7.53306 29.2966 7.79754C29.2966 7.99818 29.3284 8.15777 29.3921 8.27633C29.4558 8.39489 29.5603 8.45417 29.7058 8.45417C29.8968 8.45417 30.106 8.34929 30.3333 8.13953C30.5697 7.92066 30.7744 7.56954 30.9471 7.08618C31.1199 6.59371 31.22 5.94163 31.2472 5.12996C31.2745 4.5098 31.2336 4.05837 31.1245 3.77565V3.70725C31.2063 3.57957 31.3291 3.45645 31.4928 3.33789C31.6656 3.21933 31.8565 3.12357 32.0657 3.05062C32.2748 2.96854 32.4704 2.9275 32.6522 2.9275C32.9432 2.9275 33.1888 3.06886 33.3888 3.35157C33.598 3.63429 33.6889 4.12677 33.6617 4.829C33.6435 5.50388 33.5207 6.11491 33.2934 6.66211C33.0751 7.2093 32.7886 7.6881 32.434 8.0985C32.0793 8.50889 31.6883 8.85089 31.2609 9.12449C30.8426 9.39808 30.4152 9.60784 29.9786 9.75376C29.5421 9.89056 29.1329 9.95896 28.751 9.95896Z\" fill=\"currentColor\" />\n <path d=\"M39.2501 9.97264C38.9318 9.97264 38.6545 9.86776 38.418 9.658C38.1816 9.44824 38.0634 9.10625 38.0634 8.63201C38.0634 8.58641 38.0634 8.54081 38.0634 8.49521C38.0634 8.44961 38.0679 8.40401 38.077 8.35841C37.8042 8.90561 37.495 9.31145 37.1494 9.57592C36.8129 9.83128 36.4719 9.95896 36.1264 9.95896C35.8081 9.95896 35.508 9.84952 35.2261 9.63064C34.9442 9.40264 34.7168 9.06977 34.544 8.63201C34.3713 8.19425 34.2849 7.6653 34.2849 7.04514C34.2849 6.40675 34.3713 5.83675 34.544 5.33516C34.7259 4.83356 34.9624 4.40948 35.2534 4.06293C35.5444 3.71637 35.8626 3.45645 36.2082 3.28317C36.5538 3.10078 36.8902 3.00958 37.2176 3.00958C37.5814 3.00958 37.9088 3.12358 38.1998 3.35157C38.4908 3.57045 38.6908 3.92157 38.8 4.40492C38.8272 4.24989 38.8454 4.10853 38.8545 3.98085C38.8727 3.85317 38.8818 3.76653 38.8818 3.72093C38.8909 3.47469 39.0137 3.29229 39.2501 3.17373C39.4956 3.05518 39.7639 2.9959 40.0549 2.9959C40.3095 2.9959 40.5505 3.04606 40.7779 3.14637C41.0052 3.24669 41.1598 3.41541 41.2416 3.65253L41.2689 3.73461C41.1598 3.98085 41.0507 4.27725 40.9415 4.6238C40.8324 4.97036 40.7324 5.33516 40.6415 5.71819C40.5505 6.09211 40.4778 6.46147 40.4232 6.82627C40.3686 7.18194 40.3414 7.49658 40.3414 7.77018C40.3414 8.07114 40.3732 8.28089 40.4368 8.39945C40.5005 8.50889 40.5778 8.56361 40.6687 8.56361C40.8233 8.56361 40.9643 8.45417 41.0916 8.23529L41.2007 8.29001C41.2007 8.60009 41.1007 8.88281 40.9006 9.13817C40.7006 9.39353 40.4505 9.59872 40.1504 9.75376C39.8503 9.89968 39.5502 9.97264 39.2501 9.97264ZM37.0267 8.23529C37.2631 8.23529 37.5223 8.02554 37.8042 7.60602C38.0952 7.17738 38.3453 6.56635 38.5544 5.77291C38.5726 5.69083 38.5908 5.61332 38.609 5.54036C38.6272 5.45828 38.6408 5.38076 38.6499 5.3078C38.5044 4.97036 38.3498 4.73324 38.1861 4.59644C38.0315 4.45052 37.8769 4.37756 37.7223 4.37756C37.495 4.37756 37.2813 4.50068 37.0812 4.74692C36.8902 4.98404 36.7311 5.285 36.6038 5.64979C36.4856 6.01459 36.4265 6.37939 36.4265 6.74419C36.4265 7.24578 36.481 7.6197 36.5901 7.86594C36.7084 8.11218 36.8539 8.23529 37.0267 8.23529Z\" fill=\"currentColor\" />\n <path d=\"M43.5804 9.95896C43.253 9.95896 42.962 9.82672 42.7074 9.56224C42.4528 9.28865 42.3254 8.90561 42.3254 8.41313C42.3254 8.17601 42.3527 7.90698 42.4073 7.60602C42.4619 7.30506 42.5255 6.99954 42.5983 6.68947C42.671 6.37027 42.7347 6.07387 42.7892 5.80027C42.8438 5.51756 42.8711 5.285 42.8711 5.1026C42.8711 4.91108 42.8347 4.7606 42.762 4.65116C42.6983 4.5326 42.6119 4.47332 42.5028 4.47332C42.33 4.47332 42.1527 4.59188 41.9708 4.829L41.8889 4.77428C41.8798 4.62836 41.9117 4.45508 41.9844 4.25445C42.0572 4.05381 42.1709 3.86229 42.3254 3.67989C42.48 3.48837 42.6756 3.32877 42.912 3.20109C43.1575 3.07342 43.444 3.00958 43.7714 3.00958C44.2533 3.00958 44.6035 3.15093 44.8217 3.43365C45.04 3.70725 45.1491 4.04013 45.1491 4.43228C45.1491 4.49612 45.1445 4.56452 45.1354 4.63748C45.1354 4.70132 45.1309 4.76516 45.1218 4.829C45.4492 4.23621 45.7902 3.78477 46.1449 3.47469C46.5086 3.15549 46.8451 2.9959 47.1543 2.9959C47.4453 2.9959 47.659 3.1099 47.7954 3.33789C47.9318 3.56589 48 3.83949 48 4.15869C48 4.45052 47.9409 4.74692 47.8227 5.04788C47.7135 5.34884 47.5453 5.59964 47.318 5.80027C47.0997 5.99179 46.8314 6.08299 46.5132 6.07387L46.4586 6.04651C46.4495 5.80939 46.3722 5.62243 46.2267 5.48564C46.0812 5.34884 45.9175 5.28044 45.7356 5.28044C45.4901 5.28044 45.2582 5.40356 45.04 5.64979C44.8308 5.89603 44.7262 6.25171 44.7262 6.71683C44.7262 6.99954 44.758 7.30506 44.8217 7.63338C44.8854 7.9617 44.9172 8.23985 44.9172 8.46785C44.9172 8.74145 44.8535 8.99225 44.7262 9.22025C44.5989 9.44824 44.4352 9.63064 44.2352 9.76744C44.0351 9.89512 43.8168 9.95896 43.5804 9.95896Z\" fill=\"currentColor\" />\n </svg>\n );\n}\nfunction HideTrayIcon() {\n return (\n <svg\n className=\"wv-tray-hide-icon\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <g clipPath=\"url(#wv-hide-tray-clip)\">\n <path d=\"M4 11L4 1M3 11L9 11C10.1046 11 11 10.1046 11 9L11 3C11 1.89543 10.1046 1 9 1L3 1C1.89543 1 1 1.89543 1 3L1 9C1 10.1046 1.89543 11 3 11Z\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n </g>\n <defs>\n <clipPath id=\"wv-hide-tray-clip\">\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0 12) rotate(-90)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\nfunction ArrowUpRightIcon() {\n return (\n <IconBase>\n <path d=\"M7 17L17 7M10 7h7v7\" />\n </IconBase>\n );\n}\nfunction ArrowRightIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path\n d=\"M5.49854 3.4939L10.506 3.4939L10.506 8.50139\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.49414 10.5061L10.4362 3.56408\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\nfunction GlobeIcon() {\n return (\n <IconBase>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <path d=\"M4 12h16M12 4c2.5 2.2 2.5 13.8 0 16M12 4c-2.5 2.2-2.5 13.8 0 16\" />\n </IconBase>\n );\n}\n","import { createRoot, type Root } from \"react-dom/client\";\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { waitForReactHydration } from \"../engine/hydration\";\nimport { WEEVAR_BOOT_DOT_CLASS, WEEVAR_HOST_ID } from \"../engine/hitTest\";\nimport { WeevarShadowApp } from \"../overlay/WeevarShadowApp\";\nimport type { WeevarKeybind, WeevarProps } from \"../types\";\n\nlet warnedAboutLegacyBootDot = false;\nlet warnedAboutForeignHostOwner = false;\nconst WEEVAR_HOST_OWNER_ATTR = \"data-wv-owner\";\nconst WEEVAR_OWNER_TOKEN_GLOBAL_KEY = \"__weevar_host_owner_token__\";\nconst WEEVAR_HOST_OWNER_TOKEN = (() => {\n const g = globalThis as typeof globalThis & {\n [WEEVAR_OWNER_TOKEN_GLOBAL_KEY]?: string;\n };\n if (!g[WEEVAR_OWNER_TOKEN_GLOBAL_KEY]) {\n g[WEEVAR_OWNER_TOKEN_GLOBAL_KEY] = `weevar-${Math.random().toString(36).slice(2)}`;\n }\n return g[WEEVAR_OWNER_TOKEN_GLOBAL_KEY];\n})();\n\nconst defaultMatchKeybind = (e: KeyboardEvent): boolean => {\n if (e.repeat) return false;\n if (e.key.toLowerCase() !== \"e\" || !e.shiftKey) return false;\n return e.metaKey || e.ctrlKey;\n};\n\nfunction matchCustomKeybind(e: KeyboardEvent, k: WeevarKeybind): boolean {\n if (e.repeat) return false;\n if (e.key.toLowerCase() !== k.key.toLowerCase()) return false;\n if (k.meta && !e.metaKey) return false;\n if (k.ctrl && !e.ctrlKey) return false;\n if (k.shift && !e.shiftKey) return false;\n if (k.alt && !e.altKey) return false;\n return true;\n}\n\nexport function Weevar(props: WeevarProps) {\n const { disabled, keybind, config } = props;\n const [sessionOn, setSessionOn] = useState(false);\n\n useEffect(() => {\n if (disabled) setSessionOn(false);\n }, [disabled]);\n const reactRootRef = useRef<Root | null>(null);\n const hostRef = useRef<HTMLElement | null>(null);\n\n const cleanupLegacyBootDots = useCallback(() => {\n const staleDots = document.querySelectorAll(`.${WEEVAR_BOOT_DOT_CLASS}`);\n if (!staleDots.length) return;\n staleDots.forEach((dot) => dot.remove());\n if (import.meta.env.DEV && !warnedAboutLegacyBootDot) {\n warnedAboutLegacyBootDot = true;\n console.warn(\n `[weevar] Removed ${staleDots.length} stale legacy boot dot node(s).`,\n );\n }\n }, []);\n\n const ensureShadowHost = useCallback((): boolean => {\n if (reactRootRef.current) return true;\n cleanupLegacyBootDots();\n\n const existingHost = document.getElementById(WEEVAR_HOST_ID) as HTMLElement | null;\n if (existingHost) {\n const owner = existingHost.getAttribute(WEEVAR_HOST_OWNER_ATTR);\n if (owner && owner !== WEEVAR_HOST_OWNER_TOKEN) {\n // During dev HMR/replay flows, an older Weevar instance can leave a host behind.\n // Reclaim only Weevar-owned hosts to avoid removing foreign DOM accidentally.\n if (owner.startsWith(\"weevar-\")) {\n existingHost.remove();\n } else {\n if (import.meta.env.DEV && !warnedAboutForeignHostOwner) {\n warnedAboutForeignHostOwner = true;\n console.warn(\n \"[weevar] Existing overlay host is owned by another instance; skipping host takeover.\",\n );\n }\n return false;\n }\n } else {\n existingHost.remove();\n }\n }\n\n const host = document.createElement(\"div\");\n host.id = WEEVAR_HOST_ID;\n host.setAttribute(WEEVAR_HOST_OWNER_ATTR, WEEVAR_HOST_OWNER_TOKEN);\n host.style.cssText =\n \"position:fixed;inset:0;pointer-events:none;z-index:2147483646;\";\n document.body.appendChild(host);\n\n const shadow = host.attachShadow({ mode: \"closed\" });\n const mount = document.createElement(\"div\");\n shadow.appendChild(mount);\n const root = createRoot(mount);\n hostRef.current = host;\n reactRootRef.current = root;\n return true;\n }, [cleanupLegacyBootDots]);\n\n const activate = useCallback(async () => {\n if (disabled) return;\n await waitForReactHydration();\n if (!ensureShadowHost()) return;\n setSessionOn(true);\n }, [disabled, ensureShadowHost]);\n\n const toggleSession = useCallback(async () => {\n if (disabled) return;\n await waitForReactHydration();\n if (!ensureShadowHost()) return;\n setSessionOn((s) => !s);\n }, [disabled, ensureShadowHost]);\n\n useEffect(() => {\n if (disabled) return;\n cleanupLegacyBootDots();\n void ensureShadowHost();\n }, [disabled, cleanupLegacyBootDots, ensureShadowHost]);\n\n useEffect(() => {\n if (disabled) return;\n if (!reactRootRef.current && !ensureShadowHost()) return;\n reactRootRef.current?.render(\n <WeevarShadowApp\n sessionOn={sessionOn}\n setSessionOn={setSessionOn}\n disabled={disabled}\n config={config}\n />,\n );\n }, [disabled, ensureShadowHost, sessionOn, config]);\n\n useEffect(() => {\n if (disabled) return;\n const onKey = (e: KeyboardEvent) => {\n const target = e.target as Node | null;\n if (target instanceof HTMLElement) {\n const tag = target.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || target.isContentEditable)\n return;\n }\n const match = keybind\n ? matchCustomKeybind(e, keybind)\n : defaultMatchKeybind(e);\n if (!match) return;\n e.preventDefault();\n void toggleSession();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [disabled, keybind, toggleSession]);\n\n useEffect(() => {\n return () => {\n const ownedHost = hostRef.current;\n const root = reactRootRef.current;\n hostRef.current = null;\n reactRootRef.current = null;\n window.setTimeout(() => {\n root?.unmount();\n if (\n ownedHost &&\n ownedHost.getAttribute(WEEVAR_HOST_OWNER_ATTR) === WEEVAR_HOST_OWNER_TOKEN\n ) {\n ownedHost.remove();\n }\n }, 0);\n };\n }, []);\n\n return null;\n}\n"]}
1
+ {"version":3,"sources":["../src/engine/fiber.ts","../src/engine/hydration.ts","../src/engine/hitTest.ts","../src/engine/animationPause.ts","../src/engine/autoScroll.ts","../src/engine/layoutContext.ts","../src/engine/elementText.ts","../src/engine/domLabel.ts","../src/engine/elementChildren.ts","../src/engine/identity.ts","../src/engine/layoutTypeFromParent.ts","../src/engine/layoutChangeFromReorder.ts","../src/engine/layoutChangeMove.ts","../src/engine/dropTargets.ts","../src/engine/flexOrderPreview.ts","../src/engine/insertionBar.ts","../src/engine/pendingMove.ts","../src/engine/pendingReorder.ts","../src/prompts/generate.ts","../src/prompts/generateBatched.ts","../src/engine/reorderTarget.ts","../src/engine/resolveIdentity.ts","../src/engine/roundNumber.ts","../src/engine/styleEngine.ts","../src/version.ts","../src/engine/dimensionSizing.ts","../src/overlay/controls/alignmentIcons.tsx","../src/overlay/controls/arrangementMapping.ts","../src/overlay/controls/AlignmentControl.tsx","../src/overlay/controls/ColorPicker.tsx","../src/overlay/controls/NumberInput.tsx","../src/overlay/controls/boxSpacingIcons.tsx","../src/overlay/controls/typographyIcons.tsx","../src/overlay/controls/TrayDropdown.tsx","../src/overlay/controls/BorderControl.tsx","../src/overlay/controls/BoxControl.tsx","../src/overlay/controls/CardSelectControl.tsx","../src/overlay/controls/DimensionControl.tsx","../src/overlay/controls/OpacityControl.tsx","../src/overlay/controls/RadiusControl.tsx","../src/overlay/controls/layoutTypeIcons.tsx","../src/overlay/controls/LayoutTypeControl.tsx","../src/overlay/controls/layoutGapIcons.tsx","../src/overlay/controls/LayoutGapControl.tsx","../src/overlay/controls/LayoutColumnsControl.tsx","../src/overlay/controls/SegmentedControl.tsx","../src/overlay/controls/WeightSelect.tsx","../src/overlay/EditTray.tsx","../src/overlay/overlayStyles.ts","../src/overlay/PromptPanel.tsx","../src/engine/elementSpacing.ts","../src/overlay/SpacingMeasureOverlay.tsx","../src/overlay/WeevarShadowApp.tsx","../src/react/WeevarDev.tsx"],"names":["mid","prev","targetTool","simpleHash","n","vx","vy","j","a","jsx","jsxs","useState","useRef","useEffect","SIDE_ROWS","icons","useCallback","Fragment","useLayoutEffect","OPTIONS","cs","triggerTop","useMemo","target","ordered","HideTrayIcon","GlobeIcon"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA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","file":"react.dev.mjs","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * React Fiber access is internal and may break across React versions (TRD §5).\n * Supports React 17–19 style keys on DOM nodes.\n */\n\nexport type FiberNode = any;\n\nexport function getFiberFromDOM(node: Element): FiberNode | null {\n const key = Object.keys(node).find(\n (k) => k.startsWith(\"__reactFiber$\") || k.startsWith(\"__reactInternalInstance$\"),\n );\n return key ? (node as any)[key] ?? null : null;\n}\n\nfunction getTypeName(type: unknown): string | undefined {\n if (typeof type === \"string\") return type;\n if (typeof type === \"function\") return type.name || \"Anonymous\";\n if (typeof type === \"object\" && type && \"displayName\" in type) {\n return String((type as { displayName?: string }).displayName || \"\");\n }\n if (typeof type === \"symbol\") return type.toString();\n return undefined;\n}\n\nfunction readDebugSource(fiber: FiberNode): { file: string; line: number; col: number } | undefined {\n const s = fiber?._debugSource;\n if (!s) return undefined;\n return {\n file: String(s.fileName ?? s.file ?? \"\"),\n line: Number(s.lineNumber ?? s.line ?? 0),\n col: Number(s.columnNumber ?? s.column ?? 0),\n };\n}\n\n/** Meaningful component/host tags along the return chain (best-effort). */\nconst TAG_HOST_PORTAL = 4;\nconst TAG_HOST_COMPONENT = 5;\nconst TAG_FUNCTION_COMPONENT = 0;\nconst TAG_CLASS_COMPONENT = 1;\nconst TAG_MEMO = 14;\nconst TAG_FORWARD_REF = 11;\nconst TAG_SIMPLE_MEMO = 15;\n\nfunction isSegmentFiber(fiber: FiberNode): boolean {\n const t = fiber?.tag;\n return (\n t === TAG_HOST_COMPONENT ||\n t === TAG_FUNCTION_COMPONENT ||\n t === TAG_CLASS_COMPONENT ||\n t === TAG_MEMO ||\n t === TAG_FORWARD_REF ||\n t === TAG_SIMPLE_MEMO\n );\n}\n\nexport function buildFiberPath(el: Element): import(\"./layoutTypes\").FiberPathSegment[] {\n const out: import(\"./layoutTypes\").FiberPathSegment[] = [];\n let fiber = getFiberFromDOM(el);\n if (!fiber) return out;\n\n const stack: import(\"./layoutTypes\").FiberPathSegment[] = [];\n let cur: FiberNode | null = fiber;\n while (cur) {\n if (isSegmentFiber(cur)) {\n const name = getTypeName(cur.type);\n const source = readDebugSource(cur);\n stack.push({\n componentName: name,\n key: cur.key ?? null,\n index: typeof cur.index === \"number\" ? cur.index : 0,\n source,\n });\n }\n cur = cur.return;\n }\n stack.reverse();\n return stack;\n}\n\n/** True if this DOM node’s fiber chain includes a React host portal (TRD portal hint). */\nexport function elementRendersViaPortalHost(el: Element): boolean {\n let fiber = getFiberFromDOM(el);\n if (!fiber) return false;\n let cur: FiberNode | null = fiber;\n while (cur) {\n if (cur.tag === TAG_HOST_PORTAL) return true;\n cur = cur.return;\n }\n return false;\n}\n\nexport function getNearestHostComponentName(el: Element): string | undefined {\n const path = buildFiberPath(el);\n for (let i = path.length - 1; i >= 0; i--) {\n const n = path[i]?.componentName;\n if (n && n !== \"Fragment\" && /^[A-Z]/.test(n)) return n;\n }\n return path[path.length - 1]?.componentName;\n}\n","import { getFiberFromDOM } from \"./fiber\";\n\n/** Heuristic: React has mounted (fiber on #root or its first child — dev builds). */\nexport function isLikelyReactHydrated(): boolean {\n const root = document.getElementById(\"root\");\n if (!root) return true;\n if (getFiberFromDOM(root)) return true;\n const first = root.firstElementChild;\n return first ? Boolean(getFiberFromDOM(first)) : false;\n}\n\nexport async function waitForReactHydration(timeoutMs = 5000): Promise<void> {\n const t0 = performance.now();\n while (performance.now() - t0 < timeoutMs) {\n if (isLikelyReactHydrated()) return;\n await new Promise<void>((r) => requestAnimationFrame(() => r()));\n }\n}\n","export const WEEVAR_HOST_ID = \"__weevar_host__\";\nexport const WEEVAR_BOOT_DOT_CLASS = \"__weevar_boot_dot__\";\n\nexport function pointInDOMRect(x: number, y: number, rect: DOMRect): boolean {\n return x >= rect.left && x < rect.right && y >= rect.top && y < rect.bottom;\n}\n\nexport function domRectsOverlap(a: DOMRect, b: DOMRect): boolean {\n return a.left < b.right && a.right > b.left && a.top < b.bottom && a.bottom > b.top;\n}\n\nexport function estimateCursorLabelWidth(text: string): number {\n return Math.min(210, Math.max(56, text.length * 7 + 20));\n}\n\nexport type ViewportSize = { width: number; height: number };\n\n/** Place a cursor-following hover label without overlapping blocked regions (e.g. open tray). */\nexport function placeCursorHoverLabel(\n x: number,\n y: number,\n text: string,\n avoid: DOMRect[],\n viewport: ViewportSize = { width: window.innerWidth, height: window.innerHeight },\n): { left: number; top: number } | null {\n const height = 24;\n const width = estimateCursorLabelWidth(text);\n const margin = 6;\n const pad = 12;\n\n const candidates = [\n { left: x + pad, top: y - height - 2 },\n { left: x + pad, top: y + 16 },\n { left: x - width - pad, top: y - height - 2 },\n { left: x - width - pad, top: y + 16 },\n { left: x - width / 2, top: y - height - pad - 8 },\n { left: x - width / 2, top: y + pad + 8 },\n ];\n\n for (const c of candidates) {\n const left = Math.min(Math.max(margin, c.left), viewport.width - width - margin);\n const top = Math.min(Math.max(margin, c.top), viewport.height - height - margin);\n const rect = new DOMRect(left, top, width, height);\n if (!avoid.some((zone) => domRectsOverlap(rect, zone))) {\n return { left, top };\n }\n }\n return null;\n}\n\nexport function isInsideWeevarOverlay(el: Node | null): boolean {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;\n const element = el as Element;\n const root = element.getRootNode();\n if (root instanceof ShadowRoot && root.host?.id === WEEVAR_HOST_ID) return true;\n if ((element as HTMLElement).id === WEEVAR_HOST_ID) return true;\n return false;\n}\n\n/** Deepest focused element (walks open shadow roots). */\nexport function getDeepActiveElement(): Element | null {\n let active: Element | null = document.activeElement;\n while (active?.shadowRoot?.activeElement) {\n active = active.shadowRoot.activeElement as Element;\n }\n return active;\n}\n\n/**\n * If focus is inside Weevar chrome and the pointer is outside that node, blur so\n * e.g. EditTray inputs commit before pointerdown handlers call preventDefault.\n */\nexport function blurWeevarOverlayFocusIfPointerOutside(e: Pick<PointerEvent, \"target\">): void {\n const ae = getDeepActiveElement();\n if (!(ae instanceof HTMLElement)) return;\n if (!isInsideWeevarOverlay(ae)) return;\n const t = e.target;\n if (t instanceof Node && ae.contains(t)) return;\n ae.blur();\n}\n\n/** Topmost element under point that belongs to the host app (not Weevar chrome). */\nexport function hitTestHostPage(x: number, y: number): Element | null {\n const raw = document.elementFromPoint(x, y);\n if (!raw || isInsideWeevarOverlay(raw)) return null;\n if ((raw as HTMLElement).classList?.contains(WEEVAR_BOOT_DOT_CLASS)) return null;\n\n let cur: Element | null = raw;\n while (cur) {\n if (cur.id === WEEVAR_HOST_ID) return null;\n const parent = cur.parentElement;\n if (!parent && cur.parentNode instanceof ShadowRoot) {\n cur = (cur.parentNode as ShadowRoot).host;\n continue;\n }\n cur = parent;\n }\n return raw;\n}\n\n/**\n * Same as {@link hitTestHostPage}, but temporarily hides the Weevar host so\n * `elementFromPoint` can see nodes underneath the overlay during drag.\n */\nexport function hitTestHostPageUnderOverlay(x: number, y: number): Element | null {\n const host = document.getElementById(WEEVAR_HOST_ID) as HTMLElement | null;\n const prev = host?.style.visibility;\n if (host) host.style.visibility = \"hidden\";\n try {\n const raw = document.elementFromPoint(x, y);\n if (!raw || (raw as HTMLElement).classList?.contains(WEEVAR_BOOT_DOT_CLASS)) return null;\n if (isInsideWeevarOverlay(raw)) return null;\n\n let cur: Element | null = raw;\n while (cur) {\n if (cur.id === WEEVAR_HOST_ID) return null;\n const parent = cur.parentElement;\n if (!parent && cur.parentNode instanceof ShadowRoot) {\n cur = (cur.parentNode as ShadowRoot).host;\n continue;\n }\n cur = parent;\n }\n return raw;\n } finally {\n if (host) host.style.visibility = prev ?? \"\";\n }\n}\n","const CLASS = \"__weevar_pause_anim__\";\nlet refCount = 0;\nlet styleEl: HTMLStyleElement | null = null;\n\n/** Pauses CSS transitions/animations on the host page during drag (TRD §8). */\nexport function pushPauseHostAnimations(): () => void {\n if (!styleEl) {\n styleEl = document.createElement(\"style\");\n styleEl.textContent = `.${CLASS} * { transition: none !important; animation-play-state: paused !important; }`;\n document.head.appendChild(styleEl);\n }\n document.documentElement.classList.add(CLASS);\n refCount++;\n return () => {\n refCount = Math.max(0, refCount - 1);\n if (refCount === 0) document.documentElement.classList.remove(CLASS);\n };\n}\n","/** TRD §6: gentle viewport-edge autoscroll during drag. */\nexport function autoScrollForPoint(clientX: number, clientY: number): void {\n // Scroll only when the cursor is very close to the viewport edge.\n const edgeZone = 20;\n // Keep speed intentionally low for controllable drop targeting.\n const maxSpeed = 6;\n const viewportW = window.innerWidth;\n const viewportH = window.innerHeight;\n let viewportDx = 0;\n let viewportDy = 0;\n\n const leftViewport = clientX;\n const rightViewport = viewportW - clientX;\n const topViewport = clientY;\n const bottomViewport = viewportH - clientY;\n\n if (leftViewport < edgeZone) {\n viewportDx = -edgeSpeed(edgeZone - leftViewport, edgeZone, maxSpeed);\n } else if (rightViewport < edgeZone) {\n viewportDx = edgeSpeed(edgeZone - rightViewport, edgeZone, maxSpeed);\n }\n\n if (topViewport < edgeZone) {\n viewportDy = -edgeSpeed(edgeZone - topViewport, edgeZone, maxSpeed);\n } else if (bottomViewport < edgeZone) {\n viewportDy = edgeSpeed(edgeZone - bottomViewport, edgeZone, maxSpeed);\n }\n\n if (viewportDx === 0 && viewportDy === 0) return;\n window.scrollBy(viewportDx, viewportDy);\n}\n\nfunction edgeSpeed(depth: number, margin: number, maxSpeed: number): number {\n const t = Math.max(0, Math.min(1, depth / margin));\n // Gentle cubic ramp keeps movement smooth and easy to stop.\n return maxSpeed * t * t * t;\n}\n","export function layoutTypeLabel(parent: Element): string {\n const cs = getComputedStyle(parent);\n const d = cs.display;\n if (d === \"flex\" || d === \"inline-flex\")\n return `flex-${cs.flexDirection || \"row\"}`;\n if (d === \"grid\" || d === \"inline-grid\") return \"grid\";\n if (d === \"block\") return \"block\";\n return d || \"flow\";\n}\n\nexport function buildAncestorPath(el: Element, maxDepth = 8): string {\n const segments: string[] = [];\n let cur: Element | null = el;\n let depth = 0;\n while (cur && cur !== document.documentElement && depth < maxDepth) {\n segments.unshift(shortElementLabel(cur));\n cur = cur.parentElement;\n depth++;\n }\n return segments.join(\" › \");\n}\n\nfunction shortElementLabel(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const cl = (el as HTMLElement).classList;\n if (!cl?.length) return tag;\n const first = cl[0];\n if (!first) return tag;\n if (first.length > 20) return `${tag}.${first.slice(0, 17)}…`;\n return `${tag}.${first}`;\n}\n","/** Tags whose visible label should come from direct text, not descendant content. */\nexport const TEXT_LIKE_TAGS = new Set([\n \"p\",\n \"span\",\n \"a\",\n \"label\",\n \"small\",\n \"strong\",\n \"em\",\n \"b\",\n \"i\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"li\",\n \"blockquote\",\n \"code\",\n \"pre\",\n \"button\",\n \"figcaption\",\n]);\n\nexport function isTextLikeTag(tag: string): boolean {\n return TEXT_LIKE_TAGS.has(tag.toLowerCase());\n}\n\n/** Text from direct child text nodes only (excludes nested element text). */\nexport function directTextContent(el: Element): string {\n return Array.from(el.childNodes)\n .filter((n) => n.nodeType === Node.TEXT_NODE)\n .map((n) => n.textContent ?? \"\")\n .join(\"\")\n .trim();\n}\n","/** Label for hover: `div.flex.gap-4` style (PRD A.3) */\nexport function getDomLabel(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const classes = (el as HTMLElement).classList;\n if (!classes || classes.length === 0) return tag;\n const parts = [tag];\n for (let i = 0; i < classes.length; i++) {\n parts.push(classes[i]!);\n if (parts.join(\".\").length > 48) break;\n }\n return parts.join(\".\");\n}\n","export function elementChildren(parent: Element): Element[] {\n return Array.from(parent.children).filter(\n (n): n is Element => n.nodeType === Node.ELEMENT_NODE,\n );\n}\n","import { directTextContent, isTextLikeTag } from \"./elementText\";\nimport { getDomLabel } from \"./domLabel\";\nimport { elementChildren } from \"./elementChildren\";\nimport {\n buildFiberPath,\n elementRendersViaPortalHost,\n getNearestHostComponentName,\n} from \"./fiber\";\nimport type { DomPathSegment, ElementIdentity } from \"./layoutTypes\";\nimport { parseDataWvSource } from \"./parseDataWvSource\";\n\nfunction simpleHash(s: string): string {\n let h = 0;\n for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) | 0;\n return String(h);\n}\n\nfunction domPathFromBody(el: Element): DomPathSegment[] {\n const chain: Element[] = [];\n let cur: Element | null = el;\n while (cur && cur !== document.body) {\n chain.push(cur);\n cur = cur.parentElement;\n }\n chain.reverse();\n return chain.map((node) => {\n const parent = node.parentElement;\n const idx =\n parent && node !== document.body ? elementChildren(parent).indexOf(node) : 0;\n const classes = (node as HTMLElement).classList\n ? Array.from((node as HTMLElement).classList)\n : [];\n return {\n tag: node.tagName.toLowerCase(),\n index: Math.max(0, idx),\n classes: classes.slice(0, 4),\n };\n });\n}\n\nexport function buildElementIdentity(el: Element): ElementIdentity {\n const classes = (el as HTMLElement).classList\n ? Array.from((el as HTMLElement).classList)\n : [];\n const tag = el.tagName.toLowerCase();\n const text = (el.textContent ?? \"\").trim().slice(0, 120);\n const directText = directTextContent(el);\n const childElementCount = elementChildren(el).length;\n const textLike = isTextLikeTag(tag);\n const labelText = textLike ? directText || (childElementCount === 0 ? text : \"\") : \"\";\n const textSnippet = labelText ? labelText.slice(0, 30) : undefined;\n const fiberPath = buildFiberPath(el);\n const debugFromFiber = [...fiberPath].reverse().find((s) => s.source)?.source;\n const fromAttr = parseDataWvSource(el);\n const source = fromAttr ?? debugFromFiber;\n const testId = el.getAttribute(\"data-testid\") ?? undefined;\n const componentName = getNearestHostComponentName(el);\n const inPortal = elementRendersViaPortalHost(el);\n\n return {\n fiberPath: fiberPath.length ? fiberPath : undefined,\n source,\n domPath: domPathFromBody(el),\n tag,\n classList: classes,\n contentHash: simpleHash(text),\n textSnippet,\n childElementCount: childElementCount > 0 ? childElementCount : undefined,\n label: componentName ? `<${componentName}>` : getDomLabel(el),\n componentName,\n testId,\n inPortal,\n };\n}\n","import type { LayoutType } from \"./layoutTypes\";\n\nexport function readLayoutType(parent: Element): LayoutType {\n const cs = getComputedStyle(parent);\n return {\n display: cs.display,\n flexDirection: cs.flexDirection || undefined,\n };\n}\n","import { buildElementIdentity } from \"./identity\";\nimport { readLayoutType } from \"./layoutTypeFromParent\";\nimport type { LayoutChange } from \"./layoutTypes\";\n\nexport function buildReorderLayoutChange(\n parent: Element,\n dragged: Element,\n fromIndex: number,\n toIndex: number,\n orderedElements: Element[],\n): LayoutChange {\n const siblings = orderedElements.map((el) => buildElementIdentity(el));\n return {\n kind: \"reorder\",\n target: buildElementIdentity(dragged),\n parent: buildElementIdentity(parent),\n fromIndex,\n toIndex,\n siblings,\n layoutType: readLayoutType(parent),\n };\n}\n","import { buildElementIdentity } from \"./identity\";\nimport { readLayoutType } from \"./layoutTypeFromParent\";\nimport type { LayoutChangeMove } from \"./layoutTypes\";\n\nexport function buildMoveLayoutChange(\n dragged: Element,\n fromParent: Element,\n toParent: Element,\n fromIndex: number,\n toIndex: number,\n orderedInTarget: Element[],\n): LayoutChangeMove {\n return {\n kind: \"move\",\n target: buildElementIdentity(dragged),\n fromParent: buildElementIdentity(fromParent),\n toParent: buildElementIdentity(toParent),\n fromIndex,\n toIndex,\n siblings: orderedInTarget.map((el) => buildElementIdentity(el)),\n destinationSiblings: orderedInTarget.map((el) => buildElementIdentity(el)),\n fromLayoutType: readLayoutType(fromParent),\n toLayoutType: readLayoutType(toParent),\n };\n}\n","import { elementChildren } from \"./elementChildren\";\n\nfunction isVisible(el: Element): boolean {\n const r = el.getClientRects();\n if (!r || r.length === 0) return false;\n const cs = getComputedStyle(el);\n if (cs.display === \"none\" || cs.visibility === \"hidden\" || Number(cs.opacity) === 0)\n return false;\n return true;\n}\n\nexport function isValidDropContainer(candidate: Element, dragged: Element): boolean {\n if (!(candidate instanceof Element)) return false;\n if (candidate === dragged) return false;\n if (dragged.contains(candidate)) return false;\n if (!isVisible(candidate)) return false;\n\n const cs = getComputedStyle(candidate);\n if (cs.display === \"contents\") return false;\n\n const d = cs.display;\n const isLayout =\n d === \"flex\" ||\n d === \"inline-flex\" ||\n d === \"grid\" ||\n d === \"inline-grid\" ||\n d === \"block\" ||\n d === \"inline-block\";\n\n if (!isLayout) return false;\n\n return true;\n}\n\n/** Walk from hit target upward to find a valid drop parent for `dragged`. */\nexport function findDropParent(hit: Element | null, dragged: Element): Element | null {\n let cur: Element | null = hit;\n while (cur && cur !== document.body) {\n if (isValidDropContainer(cur, dragged)) return cur;\n cur = cur.parentElement;\n }\n return null;\n}\n","const ORDER_PROP = \"order\";\n\nexport class FlexOrderPreview {\n private readonly previous = new Map<Element, string | null>();\n\n /**\n * @param outOfFlow Element pulled out of the flex layout (e.g. during drag) — skipped for `order` so siblings reflow immediately.\n */\n apply(ordered: Element[], outOfFlow?: Element): void {\n let index = 0;\n for (const el of ordered) {\n if (el === outOfFlow) continue;\n const hel = el as HTMLElement;\n const desired = String(index++);\n const current = hel.style.getPropertyValue(ORDER_PROP);\n if (current === desired) continue;\n if (!this.previous.has(el)) {\n this.previous.set(el, hel.style.getPropertyValue(ORDER_PROP));\n }\n hel.style.setProperty(ORDER_PROP, desired);\n }\n if (outOfFlow instanceof HTMLElement) {\n if (!this.previous.has(outOfFlow)) {\n this.previous.set(outOfFlow, outOfFlow.style.getPropertyValue(ORDER_PROP));\n }\n outOfFlow.style.removeProperty(ORDER_PROP);\n }\n }\n\n clear(): void {\n for (const [el, prev] of this.previous) {\n const hel = el as HTMLElement;\n if (prev === null || prev === \"\") hel.style.removeProperty(ORDER_PROP);\n else hel.style.setProperty(ORDER_PROP, prev);\n }\n this.previous.clear();\n }\n}\n","type Bar = { left: number; top: number; width: number; height: number };\n\nexport function insertionBarBetween(\n ordered: globalThis.Element[],\n insertBeforeIndex: number,\n row: boolean,\n): Bar | null {\n if (ordered.length === 0) return null;\n const thick = 3;\n const pad = 2;\n\n if (insertBeforeIndex <= 0) {\n const r = ordered[0]!.getBoundingClientRect();\n if (row) {\n return {\n left: r.left - thick - 2,\n top: r.top - pad,\n width: thick,\n height: r.height + pad * 2,\n };\n }\n return {\n left: r.left - pad,\n top: r.top - thick - 2,\n width: r.width + pad * 2,\n height: thick,\n };\n }\n\n if (insertBeforeIndex >= ordered.length) {\n const r = ordered[ordered.length - 1]!.getBoundingClientRect();\n if (row) {\n return {\n left: r.right + 2,\n top: r.top - pad,\n width: thick,\n height: r.height + pad * 2,\n };\n }\n return {\n left: r.left - pad,\n top: r.bottom + 2,\n width: r.width + pad * 2,\n height: thick,\n };\n }\n\n const r0 = ordered[insertBeforeIndex - 1]!.getBoundingClientRect();\n const r1 = ordered[insertBeforeIndex]!.getBoundingClientRect();\n if (row) {\n const mid = (r0.right + r1.left) / 2;\n const top = Math.min(r0.top, r1.top) - pad;\n const bottom = Math.max(r0.bottom, r1.bottom) + pad;\n return { left: mid - thick / 2, top, width: thick, height: bottom - top };\n }\n const mid = (r0.bottom + r1.top) / 2;\n const left = Math.min(r0.left, r1.left) - pad;\n const right = Math.max(r0.right, r1.right) + pad;\n return { left, top: mid - thick / 2, width: right - left, height: thick };\n}\n","import { elementChildren } from \"./elementChildren\";\nimport type { PendingReorder } from \"./pendingReorder\";\n\nexport function createPendingCrossMove(\n dragged: Element,\n fromParent: Element,\n toParent: Element,\n desiredToOrder: Element[],\n): PendingReorder {\n const snapFrom = Array.from(fromParent.childNodes);\n const snapTo = Array.from(toParent.childNodes);\n\n function matchesTo(): boolean {\n const cur = elementChildren(toParent);\n if (cur.length !== desiredToOrder.length) return false;\n return cur.every((el, i) => el === desiredToOrder[i]);\n }\n\n function applyTo(): void {\n for (const el of desiredToOrder) toParent.appendChild(el);\n }\n\n applyTo();\n\n const obs = new MutationObserver(() => {\n if (!matchesTo()) applyTo();\n });\n obs.observe(toParent, { childList: true });\n if (fromParent !== toParent) obs.observe(fromParent, { childList: true });\n\n function revert(): void {\n obs.disconnect();\n while (fromParent.firstChild) fromParent.removeChild(fromParent.firstChild);\n for (const n of snapFrom) fromParent.appendChild(n);\n if (toParent !== fromParent) {\n while (toParent.firstChild) toParent.removeChild(toParent.firstChild);\n for (const n of snapTo) toParent.appendChild(n);\n }\n }\n\n return {\n disconnect: () => obs.disconnect(),\n revert,\n };\n}\n","import { elementChildren } from \"./elementChildren\";\n\nexport type PendingReorder = {\n revert: () => void;\n disconnect: () => void;\n};\n\n/**\n * Applies DOM order for `desired` element children and re-applies if React mutates `parent`'s childList.\n */\nexport function createPendingReorder(\n parent: Element,\n desired: Element[],\n): PendingReorder {\n const snapshot = Array.from(parent.childNodes);\n\n function currentElements(): Element[] {\n return elementChildren(parent);\n }\n\n function matches(): boolean {\n const cur = currentElements();\n if (cur.length !== desired.length) return false;\n return cur.every((el, i) => el === desired[i]);\n }\n\n function applyDesired(): void {\n for (const el of desired) parent.appendChild(el);\n }\n\n applyDesired();\n\n const observer = new MutationObserver(() => {\n if (!matches()) applyDesired();\n });\n observer.observe(parent, { childList: true });\n\n function revert(): void {\n observer.disconnect();\n while (parent.firstChild) parent.removeChild(parent.firstChild);\n for (const n of snapshot) parent.appendChild(n);\n }\n\n return {\n disconnect: () => observer.disconnect(),\n revert,\n };\n}\n","import type {\n ElementIdentity,\n GeneratedPrompt,\n LayoutChange,\n LayoutType,\n StyleTweak,\n TargetTool,\n WeevarChange,\n WeevarRuntimeConfig,\n} from \"../engine/layoutTypes\";\nimport { isTextLikeTag } from \"../engine/elementText\";\n\ntype PromptOptions = {\n targetTool: TargetTool | \"cursor\";\n config?: WeevarRuntimeConfig;\n};\n\n// ─── Tailwind lookup tables (prompt suggestions only — no DOM logic) ──\n\nconst TAILWIND_FONT_SIZE: Record<string, string> = {\n \"12px\": \"text-xs\",\n \"14px\": \"text-sm\",\n \"16px\": \"text-base\",\n \"18px\": \"text-lg\",\n \"20px\": \"text-xl\",\n \"24px\": \"text-2xl\",\n \"30px\": \"text-3xl\",\n \"36px\": \"text-4xl\",\n \"48px\": \"text-5xl\",\n \"60px\": \"text-6xl\",\n \"72px\": \"text-7xl\",\n};\n\nconst TAILWIND_FONT_WEIGHT: Record<string, string> = {\n \"100\": \"font-thin\",\n \"200\": \"font-extralight\",\n \"300\": \"font-light\",\n \"400\": \"font-normal\",\n \"500\": \"font-medium\",\n \"600\": \"font-semibold\",\n \"700\": \"font-bold\",\n \"800\": \"font-extrabold\",\n \"900\": \"font-black\",\n};\n\nconst TAILWIND_BORDER_RADIUS: Record<string, string> = {\n \"0px\": \"rounded-none\",\n \"2px\": \"rounded-sm\",\n \"4px\": \"rounded\",\n \"6px\": \"rounded-md\",\n \"8px\": \"rounded-lg\",\n \"12px\": \"rounded-xl\",\n \"16px\": \"rounded-2xl\",\n \"24px\": \"rounded-3xl\",\n};\n\nconst TAILWIND_OPACITY: Record<string, string> = {\n \"0\": \"opacity-0\",\n \"0.05\": \"opacity-5\",\n \"0.1\": \"opacity-10\",\n \"0.2\": \"opacity-20\",\n \"0.25\": \"opacity-25\",\n \"0.3\": \"opacity-30\",\n \"0.4\": \"opacity-40\",\n \"0.5\": \"opacity-50\",\n \"0.6\": \"opacity-60\",\n \"0.7\": \"opacity-70\",\n \"0.75\": \"opacity-75\",\n \"0.8\": \"opacity-80\",\n \"0.9\": \"opacity-90\",\n \"0.95\": \"opacity-95\",\n \"1\": \"opacity-100\",\n};\n\nconst TAILWIND_TEXT_ALIGN: Record<string, string> = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n justify: \"text-justify\",\n};\n\nfunction tailwindSuggestion(cssProperty: string, value: string): string | null {\n switch (cssProperty) {\n case \"font-size\":\n return TAILWIND_FONT_SIZE[value] ?? null;\n case \"font-weight\":\n return TAILWIND_FONT_WEIGHT[value] ?? null;\n case \"border-radius\":\n return TAILWIND_BORDER_RADIUS[value] ?? null;\n case \"opacity\":\n return TAILWIND_OPACITY[value] ?? null;\n case \"text-align\":\n return TAILWIND_TEXT_ALIGN[value] ?? null;\n default:\n return null;\n }\n}\n\nfunction lineText(line: number): string {\n return `line ${line}`;\n}\n\nfunction formatLocation(source?: { file: string; line: number; col: number }): string {\n if (!source) return \"\";\n return `${source.file}:${source.line}`;\n}\n\nfunction ordinal(n: number): string {\n const mod10 = n % 10;\n const mod100 = n % 100;\n if (mod10 === 1 && mod100 !== 11) return `${n}st`;\n if (mod10 === 2 && mod100 !== 12) return `${n}nd`;\n if (mod10 === 3 && mod100 !== 13) return `${n}rd`;\n return `${n}th`;\n}\n\nfunction cssTagRef(id: ElementIdentity): string {\n if (!id.classList.length) return `<${id.tag}>`;\n return `<${id.tag}.${id.classList.join(\".\")}>`;\n}\n\n/** Prefer DOM tag+class when classes exist; fall back to component name. */\nfunction domFirstRef(id: ElementIdentity): string {\n if (id.classList.length) return cssTagRef(id);\n if (id.componentName) return `<${id.componentName}>`;\n return cssTagRef(id);\n}\n\nfunction baseRef(id: ElementIdentity): string {\n if (id.componentName) return `<${id.componentName}>`;\n return cssTagRef(id);\n}\n\nfunction childCountLabel(count: number): string {\n return count === 1 ? \"1 element child\" : `${count} element children`;\n}\n\n/**\n * Human-readable ref for layout moves/reorders.\n * Uses tag+class for styled elements, text only on text-like tags, child count for containers.\n */\nfunction layoutElementRef(id: ElementIdentity, force = false): string {\n const root = domFirstRef(id);\n const open = root.replace(/>$/, \"\");\n\n if (isTextLikeTag(id.tag) && id.textSnippet) {\n return `${open} \"${id.textSnippet}\">`;\n }\n\n if (id.childElementCount && id.childElementCount > 0) {\n return `${root} (${childCountLabel(id.childElementCount)})`;\n }\n\n if (force && id.textSnippet) {\n return `${open} \"${id.textSnippet}\">`;\n }\n\n if (force && id.source?.line) {\n return `${open} @line ${id.source.line}>`;\n }\n\n return root;\n}\n\nfunction withDisambiguation(id: ElementIdentity, force = false): string {\n return layoutElementRef(id, force);\n}\n\nfunction jsxRef(id: ElementIdentity): string {\n return `${layoutElementRef(id).replace(/>$/, \"\")} />`;\n}\n\nfunction styleTargetRef(id: ElementIdentity): string {\n return domFirstRef(id);\n}\n\nfunction domPathTail(id: ElementIdentity, segments = 3): string {\n const tail = id.domPath?.slice(-segments) ?? [];\n if (!tail.length) return \"\";\n return tail.map((s) => `${s.tag}[${s.index}]`).join(\">\");\n}\n\n/** Braced `{src:…; dom:…; h:…}` anchor block used by `strictRef` and style prompts. */\nfunction identityBlock(id: ElementIdentity): string {\n const srcPart = id.source ? `${id.source.file}:${id.source.line}` : \"source:unknown\";\n const path = domPathTail(id);\n const hash = `h:${id.contentHash}`;\n const inner = path\n ? [`src:${srcPart}`, `dom:${path}`, hash].join(\"; \")\n : [`src:${srcPart}`, hash].join(\"; \");\n return `{${inner}}`;\n}\n\n/**\n * Non-lossy identifier for short prompts:\n * keeps human-readable symbol + concrete source/path anchors for deterministic edits.\n */\nfunction strictRef(id: ElementIdentity): string {\n const core = layoutElementRef(id);\n return `${core} ${identityBlock(id)}`;\n}\n\nfunction moveSubtreeNote(id: ElementIdentity): string {\n if (!id.childElementCount || id.childElementCount <= 0) return \"\";\n return ` Move the entire element subtree (${childCountLabel(id.childElementCount)}); do not split or recreate nested nodes.`;\n}\n\nfunction displacementAnchor(siblings: ElementIdentity[], toIndex: number): string {\n if (!siblings.length || siblings.length === 1) return \"as the only child\";\n if (toIndex <= 0) return \"first\";\n if (toIndex >= siblings.length - 1) return \"last\";\n const prev = siblings[toIndex - 1];\n return `after ${layoutElementRef(prev)}`;\n}\n\nfunction detailedAnchor(siblings: ElementIdentity[], toIndex: number): string {\n if (!siblings.length || siblings.length === 1) return \"only child\";\n if (toIndex <= 0) return \"first child\";\n if (toIndex >= siblings.length - 1) {\n const prev = siblings[siblings.length - 2];\n return `last child, after ${jsxRef(prev)}`;\n }\n const prev = siblings[toIndex - 1];\n return `after ${jsxRef(prev)}`;\n}\n\nfunction formatLayoutType(layout: LayoutType): string {\n if (layout.display.includes(\"flex\")) {\n return layout.flexDirection ? `flex-${layout.flexDirection}` : \"flex\";\n }\n return layout.display;\n}\n\nfunction moveSiblings(change: Extract<LayoutChange, { kind: \"move\" }>): ElementIdentity[] {\n return change.destinationSiblings ?? change.siblings ?? [];\n}\n\nfunction buildSiblingRenderData(siblings: ElementIdentity[]) {\n const counts = new Map<string, number>();\n for (const s of siblings) {\n const k = layoutElementRef(s);\n counts.set(k, (counts.get(k) ?? 0) + 1);\n }\n return siblings.map((s) => {\n const k = layoutElementRef(s);\n const repeated = (counts.get(k) ?? 0) > 1;\n return layoutElementRef(s, repeated);\n });\n}\n\nfunction hasMissingSource(change: LayoutChange): boolean {\n if (change.kind === \"reorder\") return !change.target.source || !change.parent.source;\n return !change.target.source || !change.fromParent.source || !change.toParent.source;\n}\n\nfunction shortReorder(change: Extract<LayoutChange, { kind: \"reorder\" }>): string {\n const parentRef = strictRef(change.parent);\n const targetRef = strictRef(change.target);\n const file = change.parent.source?.file;\n const targetLine = change.target.source?.line;\n const anchor = displacementAnchor(change.siblings, change.toIndex);\n const pos = `child index ${change.toIndex} (position ${change.toIndex + 1}; ${anchor})`;\n const where = file ? ` in ${file}` : \"\";\n const line = targetLine ? ` (${lineText(targetLine)})` : \"\";\n const order = buildSiblingRenderData(change.siblings)\n .map((s, i) => `${i}: ${s}`)\n .join(\" | \");\n return `Reorder children of ${parentRef}${where}: move ${targetRef}${line} from child index ${change.fromIndex} (position ${change.fromIndex + 1}) to ${pos}. Resulting order: ${order}. Preserve all props and styles.`;\n}\n\nfunction shortMove(change: Extract<LayoutChange, { kind: \"move\" }>): string {\n const targetRef = strictRef(change.target);\n const fromRef = strictRef(change.fromParent);\n const toRef = strictRef(change.toParent);\n const fromLoc = formatLocation(change.fromParent.source);\n const toLoc = formatLocation(change.toParent.source);\n const siblings = moveSiblings(change);\n const anchor = displacementAnchor(siblings, change.toIndex);\n const shortAnchor =\n anchor === \"as the only child\"\n ? \"as the only child\"\n : anchor === \"first\"\n ? \"as the first child\"\n : anchor === \"last\"\n ? \"as the last child\"\n : `as ${anchor}`;\n const targetLine = change.target.source?.line;\n const line = targetLine ? ` (${lineText(targetLine)})` : \"\";\n const order = buildSiblingRenderData(siblings)\n .map((s, i) => `${i}: ${s}`)\n .join(\" | \");\n return `Move ${targetRef}${line} from ${fromRef}${fromLoc ? ` (${fromLoc})` : \"\"} (child index ${change.fromIndex}) into ${toRef}${toLoc ? ` (${toLoc})` : \"\"} at child index ${change.toIndex} (${shortAnchor}). Destination order after move: ${order}.${moveSubtreeNote(change.target)} Preserve all props and nested structure unchanged.`;\n}\n\nfunction detailedReorder(change: Extract<LayoutChange, { kind: \"reorder\" }>, tool: PromptOptions[\"targetTool\"]): string {\n const file = change.parent.source?.file ?? \"unknown file\";\n const containerLine = change.parent.source?.line;\n const targetLine = change.target.source?.line;\n const refs = buildSiblingRenderData(change.siblings);\n const showPath = tool !== \"codex\";\n const lines = change.siblings\n .map((s, i) => {\n const moved = s === change.target ? \" ← moved\" : \"\";\n const loc = s.source\n ? showPath\n ? ` ${formatLocation(s.source)}`\n : ` line ${s.source.line}`\n : \"\";\n return `${i + 1}. ${refs[i]}${loc}${moved}`;\n })\n .join(\"\\n\");\n const heading = `# Reorder within ${layoutElementRef(change.parent)}`;\n const fileLine = `**File:** ${file}`;\n const classSnippet = change.parent.classList.length\n ? ` — \\`<${change.parent.tag} className=\"${change.parent.classList.join(\" \")}\">\\``\n : \"\";\n const container = `**Container:** ${layoutElementRef(change.parent)}${containerLine ? ` at line ${containerLine}` : \"\"}${classSnippet}`;\n const layout = `**Layout:** ${formatLayoutType(change.layoutType)}`;\n const move = [\n \"## Move\",\n `${jsxRef(change.target)}${targetLine ? ` (${lineText(targetLine)})` : \"\"}`,\n `From: index ${change.fromIndex} (${ordinal(change.fromIndex + 1)} child)`,\n `To: index ${change.toIndex} (${detailedAnchor(change.siblings, change.toIndex)})`,\n ].join(\"\\n\");\n const constraints = [\n \"## Constraints\",\n `- Preserve all props on ${layoutElementRef(change.target)}`,\n `- Don't modify the ${formatLayoutType(change.layoutType)} layout`,\n \"- Don't introduce wrapper elements\",\n \"- Don't touch other components in this file\",\n ].join(\"\\n\");\n\n const parts = [heading, \"\", fileLine, container, layout, \"\", move, \"\", \"## New child order\", lines, \"\", constraints];\n if (tool === \"generic\") {\n parts.push(\"\", \"## Current code\", \"<!-- TODO: include source snippet -->\");\n }\n if (hasMissingSource(change)) {\n parts.push(\"\", \"_Tip: install `@weevar/vite-plugin` for source-accurate prompts._\");\n }\n return parts.join(\"\\n\");\n}\n\nfunction detailedMove(change: Extract<LayoutChange, { kind: \"move\" }>, tool: PromptOptions[\"targetTool\"]): string {\n const siblings = moveSiblings(change);\n const refs = buildSiblingRenderData(siblings);\n const showPath = tool !== \"codex\";\n const lines = siblings\n .map((s, i) => {\n const moved = s === change.target ? \" (moved)\" : \"\";\n const loc = s.source\n ? showPath\n ? ` ${formatLocation(s.source)}`\n : ` line ${s.source.line}`\n : \"\";\n return `${i + 1}. ${refs[i]}${loc}${moved}`;\n })\n .join(\"\\n\");\n const source = `**Source:** ${layoutElementRef(change.fromParent)}${change.fromParent.source ? ` in ${formatLocation(change.fromParent.source)}` : \"\"} (${formatLayoutType(change.fromLayoutType)} layout)`;\n const destination = `**Destination:** ${layoutElementRef(change.toParent)}${change.toParent.source ? ` in ${formatLocation(change.toParent.source)}` : \"\"} (${formatLayoutType(change.toLayoutType)} layout)`;\n const anchor = displacementAnchor(siblings, change.toIndex);\n const targetDom = layoutElementRef(change.target);\n const move = [\n \"## Move\",\n `${jsxRef(change.target)}${change.target.source ? ` at ${formatLocation(change.target.source)}` : \"\"}`,\n `Remove from: ${layoutElementRef(change.fromParent)}, child index ${change.fromIndex}`,\n `Insert into: ${layoutElementRef(change.toParent)}, child index ${change.toIndex} (${anchor})`,\n ...(change.target.childElementCount && change.target.childElementCount > 0\n ? [\n \"\",\n `**Subtree:** ${targetDom} includes ${childCountLabel(change.target.childElementCount)}. Cut and paste the element with all nested JSX unchanged — do not extract, split, or recreate children.`,\n ]\n : []),\n ].join(\"\\n\");\n const constraints = [\n \"## Constraints\",\n `- Preserve all props on ${targetDom}`,\n `- Don't modify ${layoutElementRef(change.fromParent)} beyond removing the element`,\n `- Don't modify ${layoutElementRef(change.toParent)}'s layout or styling`,\n \"- Don't introduce wrapper elements\",\n ...(change.target.childElementCount && change.target.childElementCount > 0\n ? [\"- Move the full subtree; child index refers to the container element, not its text content\"]\n : []),\n ].join(\"\\n\");\n\n const parts = [\n `# Move ${targetDom} across containers`,\n \"\",\n source,\n destination,\n \"\",\n move,\n \"\",\n \"## Destination order after move\",\n lines || \"1. (destination children unavailable)\",\n \"\",\n constraints,\n ];\n if (tool === \"generic\") {\n parts.push(\"\", \"## Current code\", \"<!-- TODO: include source snippet -->\");\n }\n if (hasMissingSource(change)) {\n parts.push(\"\", \"_Tip: install `@weevar/vite-plugin` for source-accurate prompts._\");\n }\n return parts.join(\"\\n\");\n}\n\nfunction shortStyleTweak(change: StyleTweak): string {\n const ref = styleTargetRef(change.target);\n const block = identityBlock(change.target);\n\n const displayChange = change.changes.find((c) => c.cssProperty === \"display\");\n const toDisplay = displayChange?.toValue ?? \"\";\n const relevantChanges = change.changes.filter((c) => {\n if (toDisplay === \"grid\" && c.cssProperty === \"flex-direction\") return false;\n return true;\n });\n\n const props = relevantChanges\n .map((c) => `\\`${c.cssProperty}\\` ${c.fromValue} → ${c.toValue}`)\n .join(\"; \");\n\n const borderNote = change.borderSummary\n ? ` Effective border: ${change.borderSummary}.`\n : \"\";\n\n return `Update styles on ${ref} ${block}: ${props}.${borderNote} Preserve all props and event handlers.`;\n}\n\nfunction detailedStyleTweak(change: StyleTweak, options: PromptOptions): string {\n const showTailwind = options.config?.prompts?.tailwindVerbatimClasses === true;\n const ref = styleTargetRef(change.target);\n const src = change.target.source;\n const classes = change.target.classList;\n\n const fileLine = src ? `**File:** ${src.file}:${src.line}` : null;\n const block = identityBlock(change.target);\n const elementLine = classes.length\n ? `**Element:** <${change.target.tag} className=\"${classes.join(\" \")}\"> ${block}`\n : `**Element:** <${change.target.tag}> ${block}`;\n const categoryLine = `**Category:** ${change.elementCategory}`;\n\n const tableHeader = showTailwind\n ? \"| Property | CSS property | Before | After | Tailwind suggestion |\"\n : \"| Property | CSS property | Before | After |\";\n const tableSep = showTailwind\n ? \"|---|---|---|---|---|\"\n : \"|---|---|---|---|\";\n\n const rows = change.changes.map((c) => {\n const fromSug = showTailwind ? tailwindSuggestion(c.cssProperty, c.fromValue) : null;\n const toSug = showTailwind ? tailwindSuggestion(c.cssProperty, c.toValue) : null;\n const twCell = showTailwind\n ? ` | ${fromSug && toSug ? `\\`${fromSug}\\` → \\`${toSug}\\`` : \"—\"} |`\n : \"\";\n return `| ${c.displayLabel} | \\`${c.cssProperty}\\` | \\`${c.fromValue}\\` | \\`${c.toValue}\\` |${twCell}`;\n });\n\n const howToApply = showTailwind\n ? [\n \"## How to apply\",\n \"\",\n \"**If using Tailwind CSS:** Replace class values using the Tailwind suggestion column.\",\n \"If the exact value doesn't exist in your config, use the nearest matching Tailwind utility.\",\n \"\",\n \"**If using plain CSS, CSS Modules, or inline styles:** Apply the \\\"After\\\" values directly.\",\n ].join(\"\\n\")\n : 'Apply the \"After\" values for each CSS property listed to the target element.';\n\n const constraints = [\n \"## Constraints\",\n `- Only modify the specified properties on ${ref}`,\n \"- Preserve all existing props, event handlers, and other styles\",\n \"- Do not introduce wrapper elements\",\n \"- Do not change the component's structure or other components in the file\",\n ].join(\"\\n\");\n\n const parts: string[] = [\n `# Update styles on ${ref}`,\n \"\",\n ...(fileLine ? [fileLine] : []),\n elementLine,\n categoryLine,\n \"\",\n \"## Style changes\",\n tableHeader,\n tableSep,\n ...rows,\n ...(change.borderSummary\n ? [\"\", `**Effective border:** ${change.borderSummary}`]\n : []),\n \"\",\n howToApply,\n \"\",\n constraints,\n ];\n\n if (!src) {\n parts.push(\n \"\",\n \"_Tip: install the weevar Vite plugin for source-accurate file and line references in prompts._\",\n );\n }\n\n return parts.join(\"\\n\");\n}\n\nexport function generatePrompt(\n change: WeevarChange,\n options: PromptOptions,\n): GeneratedPrompt | null {\n if (change.kind === \"style-tweak\") {\n if (!change.changes.length) return null;\n const targetTool = options.targetTool === \"cursor\" ? \"codex\" : options.targetTool;\n return {\n short: shortStyleTweak(change),\n detailed: detailedStyleTweak(change, { ...options, targetTool }),\n meta: {\n targetTool,\n timestamp: Date.now(),\n change,\n },\n };\n }\n if (change.kind === \"reorder\" && change.fromIndex === change.toIndex) return null;\n if (\n change.kind === \"move\" &&\n change.fromParent === change.toParent &&\n change.fromIndex === change.toIndex\n )\n return null;\n\n const targetTool = options.targetTool === \"cursor\" ? \"codex\" : options.targetTool;\n const short = change.kind === \"reorder\" ? shortReorder(change) : shortMove(change);\n const detailed =\n change.kind === \"reorder\"\n ? detailedReorder(change, targetTool)\n : detailedMove(change, targetTool);\n\n return {\n short,\n detailed,\n meta: {\n targetTool,\n timestamp: Date.now(),\n change,\n },\n };\n}\n\nexport function promptBody(p: GeneratedPrompt, len: \"short\" | \"detailed\"): string {\n return len === \"short\" ? p.short : p.detailed;\n}\n","import type { GeneratedPrompt, MoveSession, TargetTool } from \"../engine/layoutTypes\";\nimport { generatePrompt } from \"./generate\";\n\nfunction stripShortConstraint(short: string): string {\n return short.replace(/\\s+Preserve[^.]*\\.\\s*$/i, \"\").trim();\n}\n\nfunction stripDetailedHeadingAndConstraints(detailed: string): string {\n const noHeading = detailed.replace(/^#\\s+[^\\n]+\\n+/, \"\");\n return noHeading.replace(/\\n## Constraints[\\s\\S]*$/m, \"\").trim();\n}\n\nfunction firstFilePath(changeText: string): string | undefined {\n const m = changeText.match(/\\*\\*File:\\*\\*\\s+([^\\n]+)/);\n return m?.[1]?.trim();\n}\n\nfunction maybeOmitRepeatedFileForCodex(\n sectionBody: string,\n tool: TargetTool,\n prevFile?: string,\n): { body: string; file?: string } {\n const file = firstFilePath(sectionBody);\n if (tool !== \"codex\") return { body: sectionBody, file };\n if (!file || !prevFile || file !== prevFile) return { body: sectionBody, file };\n return {\n body: sectionBody.replace(/\\*\\*File:\\*\\*[^\\n]*\\n?/m, \"\").trim(),\n file,\n };\n}\n\nexport function generateBatchedPrompt(\n session: MoveSession,\n options: { targetTool: TargetTool },\n): GeneratedPrompt | null {\n if (!session.changes.length) return null;\n if (session.changes.length === 1) {\n return generatePrompt(session.changes[0].change, { targetTool: options.targetTool });\n }\n\n const sorted = [...session.changes].sort((a, b) => a.ordinal - b.ordinal);\n const perMove = sorted\n .map((c) => ({\n ordinal: c.ordinal,\n p: generatePrompt(c.change, { targetTool: options.targetTool }),\n }))\n .filter((x): x is { ordinal: number; p: GeneratedPrompt } => Boolean(x.p));\n\n if (!perMove.length) return null;\n\n // Count each kind so the header is accurate\n const layoutCount = sorted.filter((c) => c.change.kind !== \"style-tweak\").length;\n const styleCount = sorted.filter((c) => c.change.kind === \"style-tweak\").length;\n\n let headerLabel: string;\n if (layoutCount > 0 && styleCount > 0) {\n headerLabel = `${sorted.length} changes (${styleCount} style update${styleCount > 1 ? \"s\" : \"\"}, ${layoutCount} layout move${layoutCount > 1 ? \"s\" : \"\"})`;\n } else if (styleCount > 0) {\n headerLabel = `${sorted.length} style update${sorted.length > 1 ? \"s\" : \"\"}`;\n } else {\n headerLabel = `${sorted.length} layout change${sorted.length > 1 ? \"s\" : \"\"}`;\n }\n\n const orderNote =\n sorted.length > 1 && layoutCount > 0\n ? \" (apply in order; each step's positions are relative to the state after prior steps)\"\n : \"\";\n\n const shortItems = perMove\n .map((x) => {\n const shortText = stripShortConstraint(x.p.short).trimEnd();\n const entry = shortText.endsWith(\".\") ? shortText : `${shortText}.`;\n return `${x.ordinal}. ${entry}`;\n })\n .join(\"\\n\\n\");\n const short =\n `${headerLabel}${orderNote}:\\n\\n` +\n `${shortItems}\\n\\n` +\n `Preserve all props and styles. Don't introduce wrapper elements.`;\n\n let prevFile: string | undefined;\n const sections = perMove\n .map((x) => {\n const body = stripDetailedHeadingAndConstraints(x.p.detailed);\n const adjusted = maybeOmitRepeatedFileForCodex(body, options.targetTool, prevFile);\n prevFile = adjusted.file ?? prevFile;\n const withGeneric =\n options.targetTool === \"generic\"\n ? `${adjusted.body}\\n\\n<!-- TODO: include source snippets -->`\n : adjusted.body;\n return `## ${x.ordinal}. ${withGeneric}`;\n })\n .join(\"\\n\\n---\\n\\n\");\n\n const detailed =\n `# Multi-step layout change (${perMove.length} moves)\\n\\n` +\n `Apply these changes in the order listed below. Each section's positions and\\n` +\n `indices are relative to the state of the page **after the preceding sections\\n` +\n `have been applied**, not the original state.\\n\\n` +\n `---\\n\\n` +\n `${sections}\\n\\n` +\n `---\\n\\n` +\n `## Global constraints\\n\\n` +\n `- Preserve all props on every moved element\\n` +\n `- When a move lists element children on the target, cut and paste the full subtree unchanged\\n` +\n `- Don't introduce wrapper elements anywhere\\n` +\n `- Don't modify any layout, spacing, or styling on the containers\\n` +\n `- Apply changes strictly in the order listed. Each section's indices reflect\\n` +\n `the state *after* prior sections are applied\\n` +\n `- If a move references a position that doesn't exist in your current view of\\n` +\n `the file, the prior sections may not have been applied yet — apply them in\\n` +\n `order before continuing`;\n\n return {\n short,\n detailed,\n meta: {\n targetTool: options.targetTool,\n timestamp: Date.now(),\n change: perMove[perMove.length - 1].p.meta.change,\n },\n };\n}\n","import { elementChildren } from \"./elementChildren\";\n\nexport function reorderImmutable<T>(arr: readonly T[], from: number, to: number): T[] {\n const a = arr.slice() as T[];\n const [item] = a.splice(from, 1);\n a.splice(to, 0, item!);\n return a;\n}\n\n/**\n * Insertion index for `dragged` into `parent` (0..n). If `dragged` is not yet a child of `parent`,\n * append index is `elementChildren(parent).length`.\n */\nexport function computeDropIndex(\n parent: Element,\n dragged: Element,\n clientX: number,\n clientY: number,\n): number {\n const kids = elementChildren(parent);\n const inParent = kids.includes(dragged);\n const others = inParent ? kids.filter((k) => k !== dragged) : kids.slice();\n\n if (others.length === 0) return 0;\n\n const cs = getComputedStyle(parent);\n const flexDir = cs.flexDirection || \"row\";\n const isRowAxis =\n cs.display.includes(\"flex\") &&\n (flexDir === \"row\" || flexDir === \"row-reverse\");\n const pos = isRowAxis ? clientX : clientY;\n\n let insert = others.length;\n for (let i = 0; i < others.length; i++) {\n const r = others[i]!.getBoundingClientRect();\n const mid = isRowAxis ? r.left + r.width / 2 : r.top + r.height / 2;\n if (pos < mid) {\n insert = i;\n break;\n }\n }\n\n if (insert >= others.length) {\n return inParent ? kids.length - 1 : kids.length;\n }\n\n const anchor = others[insert]!;\n return kids.indexOf(anchor);\n}\n\n/** @deprecated use computeDropIndex */\nexport function computeReorderDomIndex(\n parent: Element,\n dragged: Element,\n clientX: number,\n clientY: number,\n): number {\n return computeDropIndex(parent, dragged, clientX, clientY);\n}\n\n/** Element order after moving `dragged` to `targetIndex` within the same parent. */\nexport function orderAfterMove(\n parent: Element,\n dragged: Element,\n targetIndex: number,\n): Element[] {\n const kids = elementChildren(parent);\n const from = kids.indexOf(dragged);\n if (from === -1) return kids;\n let to = targetIndex;\n if (to < 0) to = 0;\n if (to > kids.length - 1) to = kids.length - 1;\n return reorderImmutable(kids, from, to);\n}\n\n/** Order after inserting `dragged` into `parent` at `targetIndex` (possibly from another parent). */\nexport function orderAfterInsert(\n parent: Element,\n dragged: Element,\n targetIndex: number,\n): Element[] {\n const cur = elementChildren(parent).filter((k) => k !== dragged);\n const next = cur.slice();\n let i = Math.min(Math.max(0, targetIndex), next.length);\n next.splice(i, 0, dragged);\n return next;\n}\n\nexport function parentSupportsFlexOrderPreview(parent: Element): boolean {\n return getComputedStyle(parent).display.includes(\"flex\");\n}\n","import { elementChildren } from \"./elementChildren\";\nimport { buildFiberPath } from \"./fiber\";\nimport type { ElementIdentity } from \"./layoutTypes\";\nimport { parseDataWvSource } from \"./parseDataWvSource\";\n\nfunction simpleHash(s: string): string {\n let h = 0;\n for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) | 0;\n return String(h);\n}\n\nfunction resolveDomPath(identity: ElementIdentity): Element | null {\n let cur: Element | null = document.body;\n for (const seg of identity.domPath) {\n if (!cur) return null;\n const kids = elementChildren(cur);\n const next = kids[seg.index];\n if (!next || next.tagName.toLowerCase() !== seg.tag) return null;\n cur = next;\n }\n return cur;\n}\n\nfunction resolveBySource(identity: ElementIdentity): Element | null {\n if (!identity.source) return null;\n const nodes = document.querySelectorAll(\"[data-wv-source]\");\n for (let i = 0; i < nodes.length; i++) {\n const el = nodes[i] as Element;\n const loc = parseDataWvSource(el);\n if (\n loc &&\n loc.file === identity.source.file &&\n loc.line === identity.source.line &&\n loc.col === identity.source.col\n )\n return el;\n }\n return null;\n}\n\nfunction resolveByFiberPathFingerprint(identity: ElementIdentity): Element | null {\n if (!identity.fiberPath?.length) return null;\n const want = JSON.stringify(identity.fiberPath);\n const max = 6000;\n let seen = 0;\n const tree = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);\n let n = tree.nextNode() as Element | null;\n while (n && seen < max) {\n seen++;\n try {\n const p = buildFiberPath(n);\n if (!p.length) {\n n = tree.nextNode() as Element | null;\n continue;\n }\n if (JSON.stringify(p) !== want) {\n n = tree.nextNode() as Element | null;\n continue;\n }\n if (n.tagName.toLowerCase() === identity.tag && matchesIdentity(n, identity)) return n;\n } catch {\n /* ignore fiber read errors */\n }\n n = tree.nextNode() as Element | null;\n }\n return null;\n}\n\nfunction resolveByContentScan(identity: ElementIdentity): Element | null {\n const tag = identity.tag.toUpperCase();\n const want = identity.contentHash;\n const max = 4000;\n let seen = 0;\n const walk = (root: Element) => {\n const stack: Element[] = [root];\n while (stack.length && seen < max) {\n const el = stack.pop()!;\n seen++;\n if (el.tagName !== tag) {\n for (let i = el.children.length - 1; i >= 0; i--)\n stack.push(el.children[i] as Element);\n continue;\n }\n const text = (el.textContent ?? \"\").trim().slice(0, 120);\n if (simpleHash(text) !== want) {\n for (let i = el.children.length - 1; i >= 0; i--)\n stack.push(el.children[i] as Element);\n continue;\n }\n const cl = (el as HTMLElement).classList;\n const cls = cl ? Array.from(cl) : [];\n if (identity.classList.length && cls.join(\" \") !== identity.classList.join(\" \")) {\n for (let i = el.children.length - 1; i >= 0; i--)\n stack.push(el.children[i] as Element);\n continue;\n }\n return el;\n }\n return null;\n };\n return walk(document.body);\n}\n\n/**\n * TRD §5 resolution order: fiber path fingerprint → source attribute → DOM path → content scan.\n */\nexport function resolveElementIdentity(identity: ElementIdentity): Element | null {\n const byFiber = resolveByFiberPathFingerprint(identity);\n if (byFiber) return byFiber;\n\n const bySource = resolveBySource(identity);\n if (bySource && matchesIdentity(bySource, identity)) return bySource;\n\n const byDom = resolveDomPath(identity);\n if (byDom && matchesIdentity(byDom, identity)) return byDom;\n\n return resolveByContentScan(identity);\n}\n\nfunction matchesIdentity(el: Element, identity: ElementIdentity): boolean {\n if (el.tagName.toLowerCase() !== identity.tag) return false;\n const text = (el.textContent ?? \"\").trim().slice(0, 120);\n if (simpleHash(text) !== identity.contentHash) return false;\n return true;\n}\n","/** Round to at most 2 decimal places. */\nexport function roundTo2(n: number): number {\n return Math.round(n * 100) / 100;\n}\n\n/** Format a number for display — never more than 2 decimal places. */\nexport function formatNumberMax2(n: number): string {\n return String(parseFloat(roundTo2(n).toFixed(2)));\n}\n","import { elementChildren } from \"./elementChildren\";\nimport type { ElementCategory } from \"./layoutTypes\";\nimport { roundTo2 } from \"./roundNumber\";\n\n/**\n * Classify a DOM element into one of the V2 edit categories.\n *\n * Priority order:\n * 1. <svg> or element inside an SVG → \"svg\"\n * 2. <img> → \"image\"\n * 3. Known text tag, OR element with direct text content and no element children → \"text\"\n * 4. Element with multiple element children, OR flex/grid container → \"stack\"\n * 5. Everything else → \"generic\"\n */\nexport function classifyElement(el: Element): ElementCategory {\n const tag = el.tagName.toLowerCase();\n\n if (tag === \"svg\") return \"svg\";\n if (tag === \"img\") return \"image\";\n if (el.closest?.(\"svg\")) return \"svg\";\n\n const kids = elementChildren(el);\n\n const hasDirectText = Array.from(el.childNodes).some(\n (n) =>\n n.nodeType === Node.TEXT_NODE &&\n (n.textContent ?? \"\").trim().length > 0,\n );\n\n const TEXT_TAGS = new Set([\n \"p\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n \"span\", \"a\", \"label\", \"small\", \"strong\", \"em\", \"b\", \"i\",\n \"li\", \"blockquote\", \"code\", \"pre\", \"button\",\n \"input\", \"textarea\", \"td\", \"th\", \"caption\",\n \"figcaption\", \"dt\", \"dd\", \"legend\", \"summary\",\n ]);\n\n if (TEXT_TAGS.has(tag)) return \"text\";\n if (hasDirectText && kids.length === 0) return \"text\";\n\n if (kids.length > 1) return \"stack\";\n\n const cs = getComputedStyle(el);\n if (cs.display.includes(\"flex\") || cs.display.includes(\"grid\")) return \"stack\";\n\n return \"generic\";\n}\n\n/** Whether the edit tray should offer the CSS `color` property (Style → Font Colour). */\nexport function supportsCssTextColor(category: ElementCategory): boolean {\n return category === \"text\" || category === \"stack\" || category === \"generic\";\n}\n\n/** Whether the edit tray should offer `background-color` in the Box section. */\nexport function supportsCssBackgroundColor(category: ElementCategory): boolean {\n return category === \"text\" || category === \"stack\" || category === \"generic\";\n}\n\nconst TEXT_TYPE_LABELS: Record<string, string> = {\n p: \"Paragraph\",\n h1: \"Heading\",\n h2: \"Heading\",\n h3: \"Heading\",\n h4: \"Heading\",\n h5: \"Heading\",\n h6: \"Heading\",\n button: \"Button\",\n span: \"Text\",\n a: \"Link\",\n label: \"Label\",\n small: \"Text\",\n strong: \"Text\",\n em: \"Text\",\n b: \"Text\",\n i: \"Text\",\n li: \"List item\",\n blockquote: \"Quote\",\n code: \"Code\",\n pre: \"Preformatted\",\n input: \"Input\",\n textarea: \"Text area\",\n td: \"Table cell\",\n th: \"Table header\",\n caption: \"Caption\",\n figcaption: \"Caption\",\n dt: \"Definition term\",\n dd: \"Definition\",\n legend: \"Legend\",\n summary: \"Summary\",\n};\n\nconst GENERIC_TYPE_LABELS: Record<string, string> = {\n div: \"Div\",\n section: \"Section\",\n article: \"Article\",\n nav: \"Navigation\",\n header: \"Header\",\n footer: \"Footer\",\n main: \"Main\",\n aside: \"Aside\",\n ul: \"List\",\n ol: \"List\",\n form: \"Form\",\n video: \"Video\",\n audio: \"Audio\",\n canvas: \"Canvas\",\n};\n\n/** Human-readable element type for the edit tray header. */\nexport function elementTypeLabel(el: Element, category: ElementCategory): string {\n const tag = el.tagName.toLowerCase();\n\n if (category === \"svg\") return \"SVG\";\n if (category === \"image\") return \"Image\";\n if (category === \"stack\") return \"Stack\";\n\n if (TEXT_TYPE_LABELS[tag]) return TEXT_TYPE_LABELS[tag];\n if (category === \"text\") return \"Text\";\n\n if (GENERIC_TYPE_LABELS[tag]) return GENERIC_TYPE_LABELS[tag];\n return tag.charAt(0).toUpperCase() + tag.slice(1);\n}\n\n/** Root `<svg>` for SVG category edits (selected node or nearest SVG ancestor). */\nexport function resolveSvgRoot(el: Element): SVGSVGElement | null {\n if (el instanceof SVGSVGElement) return el;\n return el.closest(\"svg\");\n}\n\nfunction parseSvgLengthPx(raw: string): number | null {\n const trimmed = raw.trim();\n if (!trimmed) return null;\n const px = trimmed.match(/^([\\d.]+)\\s*px$/i);\n if (px) {\n const n = parseFloat(px[1]);\n return Number.isFinite(n) && n > 0 ? n : null;\n }\n const n = parseFloat(trimmed);\n return Number.isFinite(n) && n > 0 ? n : null;\n}\n\n/** Raw width/height on the SVG root (attribute, then inline/computed CSS). */\nexport function readSvgDimensionRaw(el: Element, prop: \"width\" | \"height\"): string {\n const svg = resolveSvgRoot(el);\n if (!svg) return \"\";\n const attr = svg.getAttribute(prop);\n if (attr && attr.trim() !== \"\") return attr.trim();\n return readPropertyValue(svg, prop);\n}\n\n/** Display size of the SVG root in pixels. */\nexport function readSvgDimension(el: Element, prop: \"width\" | \"height\"): number {\n const svg = resolveSvgRoot(el);\n if (!svg) return 0;\n\n const fromRaw = parseSvgLengthPx(readSvgDimensionRaw(el, prop));\n if (fromRaw != null) return roundTo2(fromRaw);\n\n const rect = svg.getBoundingClientRect();\n const px = prop === \"width\" ? rect.width : rect.height;\n return roundTo2(px);\n}\n\n/** Apply width/height to the SVG root (attribute + inline style). */\nexport function applySvgDimension(\n el: Element,\n prop: \"width\" | \"height\",\n value: string,\n): void {\n const svg = resolveSvgRoot(el);\n if (!svg) return;\n\n const trimmed = value.trim();\n if (trimmed === \"\") {\n svg.removeAttribute(prop);\n (svg as unknown as HTMLElement).style.removeProperty(prop);\n return;\n }\n\n const pxStr = /px$/i.test(trimmed) ? trimmed : `${trimmed}px`;\n svg.setAttribute(prop, pxStr);\n (svg as unknown as HTMLElement).style.setProperty(prop, pxStr);\n}\n\n/**\n * Read a CSS property value from an element.\n * Prefers the element's own inline style if set; falls back to computed style.\n */\nexport function readPropertyValue(el: Element, cssProperty: string): string {\n const hel = el as HTMLElement;\n const inline = hel.style?.getPropertyValue(cssProperty);\n if (inline && inline !== \"\") return inline;\n return getComputedStyle(el).getPropertyValue(cssProperty).trim();\n}\n\n/**\n * Used line height in pixels for numeric UI (commits as e.g. `24px`).\n * Handles `%`, `px`, unitless multipliers, and computed used heights.\n */\nexport function readLineHeightAsPixelNumber(el: Element): number {\n const hel = el as HTMLElement;\n const inline = hel.style?.getPropertyValue(\"line-height\")?.trim() ?? \"\";\n const cs = getComputedStyle(el);\n const fontSize = parseFloat(cs.fontSize) || 16;\n\n const roundPx = (px: number): number => roundTo2(px);\n\n const parsePxString = (s: string): number | null => {\n const m = s.trim().match(/^([\\d.]+)\\s*px$/i);\n if (!m) return null;\n const px = parseFloat(m[1]);\n return Number.isFinite(px) ? px : null;\n };\n\n const raw = inline !== \"\" ? inline : readPropertyValue(el, \"line-height\").trim();\n const low = raw.toLowerCase();\n\n if (!raw || low === \"normal\") {\n const fromPx = parsePxString(cs.lineHeight.trim());\n if (fromPx != null && fromPx > 0) return roundPx(fromPx);\n const n = parseFloat(cs.lineHeight);\n if (Number.isFinite(n) && n > 0) return roundPx(n);\n return roundPx(fontSize * 1.2);\n }\n\n if (/%\\s*$/.test(raw)) {\n const pct = parseFloat(raw);\n if (Number.isFinite(pct)) return roundPx((fontSize * pct) / 100);\n return roundPx(fontSize * 1.2);\n }\n\n if (/px\\s*$/i.test(raw)) {\n const px = parsePxString(raw);\n if (px != null) return roundPx(px);\n }\n\n const n = parseFloat(raw);\n if (Number.isFinite(n) && !/%\\s*$/.test(raw) && !/px\\s*$/i.test(raw)) {\n return roundPx(fontSize * n);\n }\n\n const fallback = parsePxString(cs.lineHeight.trim()) ?? parseFloat(cs.lineHeight);\n if (Number.isFinite(fallback) && fallback > 0) return roundPx(fallback);\n return roundPx(fontSize * 1.2);\n}\n\n/** Map font-weight to a comparable numeric string (e.g. bold → 700). */\nexport function normalizeFontWeightValue(raw: string): string {\n const t = raw.trim().toLowerCase();\n if (t === \"\" || t === \"normal\") return \"400\";\n if (t === \"bold\" || t === \"bolder\") return \"700\";\n const n = parseInt(t, 10);\n return Number.isFinite(n) ? String(n) : t;\n}\n\nexport type ParsedCssColor = { r: number; g: number; b: number; alpha: number };\n\nfunction clamp255(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\nfunction expandShortHex(hex: string): string {\n if (hex.length === 3 || hex.length === 4) {\n return hex\n .split(\"\")\n .map((c) => c + c)\n .join(\"\");\n }\n return hex;\n}\n\n/** Parse rgb()/rgba()/hex CSS colour strings (no named colours). */\nexport function parseCssColor(raw: string): ParsedCssColor | null {\n const t = raw.trim().toLowerCase();\n if (!t) return null;\n if (t === \"transparent\" || t === \"none\") return { r: 0, g: 0, b: 0, alpha: 0 };\n\n const rgba = t.match(\n /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/,\n );\n if (rgba) {\n const alphaRaw = rgba[4] != null ? parseFloat(rgba[4]) : 1;\n return {\n r: clamp255(parseFloat(rgba[1])),\n g: clamp255(parseFloat(rgba[2])),\n b: clamp255(parseFloat(rgba[3])),\n alpha: Number.isFinite(alphaRaw) ? Math.max(0, Math.min(1, alphaRaw)) : 1,\n };\n }\n\n const hex = t.match(/^#([0-9a-f]{3,8})$/i);\n if (hex) {\n const h = expandShortHex(hex[1].toLowerCase());\n if (h.length === 6) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n alpha: 1,\n };\n }\n if (h.length === 8) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n alpha: parseInt(h.slice(6, 8), 16) / 255,\n };\n }\n }\n return null;\n}\n\n/** Normalise any browser-supported CSS colour to sRGB + alpha (canvas fallback for hsl, etc.). */\nexport function normalizeCssColor(raw: string): ParsedCssColor | null {\n const direct = parseCssColor(raw);\n if (direct) return direct;\n if (typeof document === \"undefined\") return null;\n try {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return null;\n ctx.fillStyle = \"#000000\";\n ctx.fillStyle = raw.trim();\n return parseCssColor(ctx.fillStyle);\n } catch {\n return null;\n }\n}\n\n/** Hex for tray display: `#rrggbb` opaque, `#rrggbbaa` when alpha &lt; 1. */\nexport function formatCssColorHex(parsed: ParsedCssColor): string {\n const rr = parsed.r.toString(16).padStart(2, \"0\");\n const gg = parsed.g.toString(16).padStart(2, \"0\");\n const bb = parsed.b.toString(16).padStart(2, \"0\");\n if (parsed.alpha <= 0) return `#${rr}${gg}${bb}00`;\n if (parsed.alpha >= 1 - 1 / 255) return `#${rr}${gg}${bb}`;\n const aa = Math.round(parsed.alpha * 255)\n .toString(16)\n .padStart(2, \"0\");\n return `#${rr}${gg}${bb}${aa}`;\n}\n\nexport function opaqueCssColorHex(parsed: ParsedCssColor): string {\n const rr = parsed.r.toString(16).padStart(2, \"0\");\n const gg = parsed.g.toString(16).padStart(2, \"0\");\n const bb = parsed.b.toString(16).padStart(2, \"0\");\n return `#${rr}${gg}${bb}`;\n}\n\nexport function parsePickerColorValue(value: string): ParsedCssColor {\n return normalizeCssColor(value) ?? { r: 0, g: 0, b: 0, alpha: 1 };\n}\n\nexport function isTransparentPickerColor(value: string): boolean {\n return parsePickerColorValue(value).alpha <= 0;\n}\n\n/** Alpha as 0–100 for tray opacity field (2 decimal places). */\nexport function alphaPercentFromPickerColor(value: string): number {\n const { alpha } = parsePickerColorValue(value);\n return Math.round(alpha * 10000) / 100;\n}\n\nexport function opaqueHexFromPickerColor(value: string): string {\n return opaqueCssColorHex(parsePickerColorValue(value));\n}\n\n/** Merge 6-digit hex with an opacity percentage into `#rrggbb` or `#rrggbbaa`. */\nexport function combineOpaqueHexAndAlphaPercent(opaqueHex: string, alphaPercent: number): string {\n const rgb = parsePickerColorValue(opaqueHex);\n const pct = Math.max(0, Math.min(100, alphaPercent));\n return formatCssColorHex({ r: rgb.r, g: rgb.g, b: rgb.b, alpha: pct / 100 });\n}\n\n/** Read a colour property from an element for ColorPicker (`#rrggbb` or `#rrggbbaa`). */\nexport function readCssColorForPicker(el: Element, cssProperty: string): string {\n const parsed = normalizeCssColor(readPropertyValue(el, cssProperty));\n if (!parsed) return \"#000000\";\n return formatCssColorHex(parsed);\n}\n\n/**\n * Convert an RGB or RGBA string from getComputedStyle into a hex colour string.\n * Preserves alpha as `#rrggbbaa` when alpha &lt; 1; fully transparent → `#00000000`.\n */\nexport function rgbToHex(rgb: string): string {\n const parsed = normalizeCssColor(rgb);\n if (!parsed) {\n const t = rgb.trim();\n if (/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(t)) return t.toLowerCase();\n return \"#000000\";\n }\n return formatCssColorHex(parsed);\n}\n\nconst CSS_PAINT_PROPERTIES = new Set<string>([\n \"color\",\n \"background-color\",\n \"border-color\",\n \"border-top-color\",\n \"border-right-color\",\n \"border-bottom-color\",\n \"border-left-color\",\n \"fill\",\n \"stroke\",\n \"caret-color\",\n \"outline-color\",\n \"text-decoration-color\",\n \"column-rule-color\",\n]);\n\nexport function cssPaintProperty(cssProperty: string): boolean {\n return CSS_PAINT_PROPERTIES.has(cssProperty);\n}\n\n/** True when two colour strings denote the same sRGB colour (hex vs rgb(), etc.). */\nexport function cssPaintValuesEqual(a: string, b: string): boolean {\n const A = normalizeCssColor(a.trim());\n const B = normalizeCssColor(b.trim());\n if (A && B) {\n return (\n A.r === B.r &&\n A.g === B.g &&\n A.b === B.b &&\n Math.abs(A.alpha - B.alpha) < 1 / 255\n );\n }\n return rgbToHex(a.trim()).toLowerCase() === rgbToHex(b.trim()).toLowerCase();\n}\n\n/**\n * True when committed `toValue` is not a meaningful change from `fromValue` for history\n * (exact match after trim, same paint, same font-weight, same opacity, or same px/% length).\n */\nexport function areStyleCommitValuesEquivalent(\n cssProperty: string,\n fromValue: string,\n toValue: string,\n): boolean {\n const a = fromValue.trim();\n const b = toValue.trim();\n if (a === b) return true;\n if (cssProperty === \"font-weight\") {\n return normalizeFontWeightValue(a) === normalizeFontWeightValue(b);\n }\n if (cssPaintProperty(cssProperty)) {\n return cssPaintValuesEqual(a, b);\n }\n if (cssProperty === \"opacity\") {\n const fa = parseFloat(a);\n const fb = parseFloat(b);\n return Number.isFinite(fa) && Number.isFinite(fb) && Math.abs(fa - fb) < 1e-9;\n }\n const pxA = a.match(/^([\\d.]+)\\s*px$/i);\n const pxB = b.match(/^([\\d.]+)\\s*px$/i);\n if (pxA && pxB) {\n return Math.abs(parseFloat(pxA[1]) - parseFloat(pxB[1])) < 1e-4;\n }\n const pctA = a.match(/^([\\d.]+)\\s*%$/);\n const pctB = b.match(/^([\\d.]+)\\s*%$/);\n if (pctA && pctB) {\n return Math.abs(parseFloat(pctA[1]) - parseFloat(pctB[1])) < 1e-4;\n }\n return false;\n}\n\n/**\n * Read computed margin or padding values from an element.\n * Returns parsed pixel values as numbers (no unit string).\n */\nexport function readBoxValues(\n el: Element,\n property: \"margin\" | \"padding\",\n): { top: number; right: number; bottom: number; left: number } {\n const cs = getComputedStyle(el);\n return {\n top: parseFloat(cs.getPropertyValue(`${property}-top`)) || 0,\n right: parseFloat(cs.getPropertyValue(`${property}-right`)) || 0,\n bottom: parseFloat(cs.getPropertyValue(`${property}-bottom`)) || 0,\n left: parseFloat(cs.getPropertyValue(`${property}-left`)) || 0,\n };\n}\n\n/**\n * Read border shorthand values from computed style.\n * Returns width in px (number), style string, and colour as hex.\n */\nexport function readBorderValues(\n el: Element,\n): { width: number; style: string; color: string } {\n const cs = getComputedStyle(el);\n return {\n width: parseFloat(cs.borderWidth) || 0,\n style: cs.borderStyle || \"none\",\n color: readCssColorForPicker(el, \"border-color\"),\n };\n}\n\n/** Per-side border widths in pixels (from computed style). */\nexport function readBorderWidthValues(\n el: Element,\n): { top: number; right: number; bottom: number; left: number } {\n const cs = getComputedStyle(el);\n return {\n top: parseFloat(cs.borderTopWidth) || 0,\n right: parseFloat(cs.borderRightWidth) || 0,\n bottom: parseFloat(cs.borderBottomWidth) || 0,\n left: parseFloat(cs.borderLeftWidth) || 0,\n };\n}\n\n/**\n * Read individual border-radius corner values in pixels.\n */\nexport function readRadiusValues(\n el: Element,\n): { tl: number; tr: number; br: number; bl: number } {\n const cs = getComputedStyle(el);\n return {\n tl: parseFloat(cs.borderTopLeftRadius) || 0,\n tr: parseFloat(cs.borderTopRightRadius) || 0,\n br: parseFloat(cs.borderBottomRightRadius) || 0,\n bl: parseFloat(cs.borderBottomLeftRadius) || 0,\n };\n}\n","declare const __WEEVAR_VERSION__: string;\n\n/** Semver from `package.json`, injected at bundle time. */\nexport const WEEVAR_VERSION: string = __WEEVAR_VERSION__;\n\n/** Display label shown in tray footers (`v1.2.3`). */\nexport function weevarVersionLabel(): string {\n return `v${WEEVAR_VERSION}`;\n}\n","export type DimensionSizingMode = \"fixed\" | \"fill\" | \"hug\";\n\nconst HUG_VALUES = new Set([\"auto\", \"fit-content\", \"max-content\", \"min-content\"]);\n\nexport function readDimensionSizingMode(\n el: Element,\n prop: \"width\" | \"height\",\n): DimensionSizingMode {\n const hel = el as HTMLElement;\n const inline = hel.style.getPropertyValue(prop).trim().toLowerCase();\n if (inline === \"100%\") return \"fill\";\n if (HUG_VALUES.has(inline)) return \"hug\";\n if (inline !== \"\") return \"fixed\";\n return \"hug\";\n}\n\nexport function dimensionSizingCssValue(mode: \"fill\" | \"hug\"): string {\n return mode === \"fill\" ? \"100%\" : \"auto\";\n}\n\nexport function dimensionSizingLabel(mode: DimensionSizingMode): string {\n if (mode === \"fill\") return \"Fill\";\n if (mode === \"hug\") return \"Hug\";\n return \"\";\n}\n","import type { ReactNode } from \"react\";\n\ntype IconProps = { className?: string };\n\nfunction AlignmentIcon({\n className,\n children,\n}: IconProps & { children: ReactNode }) {\n return (\n <svg\n className={`wv-alignment-icon${className ? ` ${className}` : \"\"}`}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\n\nexport function AlignTopLeftIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <mask id=\"wv_align_tl_mask\" fill=\"white\">\n <path d=\"M1.66992 2H10.6699V11H1.66992V2Z\" />\n </mask>\n <path\n d=\"M1.66992 2V1H0.669922V2H1.66992ZM1.66992 2V3H10.6699V2V1H1.66992V2ZM1.66992 11H2.66992V2H1.66992H0.669922V11H1.66992Z\"\n fill=\"currentColor\"\n mask=\"url(#wv_align_tl_mask)\"\n />\n </AlignmentIcon>\n );\n}\n\nexport function AlignTopCenterIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <path d=\"M11 1.66992L1 1.66992\" stroke=\"currentColor\" />\n <path d=\"M6.00977 10L6.00977 2\" stroke=\"currentColor\" />\n </AlignmentIcon>\n );\n}\n\nexport function AlignTopRightIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <mask id=\"wv_align_tr_mask\" fill=\"white\">\n <path d=\"M10.3301 2H1.33008V11H10.3301V2Z\" />\n </mask>\n <path\n d=\"M10.3301 2V1H11.3301V2H10.3301ZM10.3301 2V3H1.33008V2V1H10.3301V2ZM10.3301 11H9.33008V2H10.3301H11.3301V11H10.3301Z\"\n fill=\"currentColor\"\n mask=\"url(#wv_align_tr_mask)\"\n />\n </AlignmentIcon>\n );\n}\n\nexport function AlignCenterLeftIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <path d=\"M1.66992 1L1.66992 11\" stroke=\"currentColor\" />\n <path d=\"M9.66992 6L1.66992 6\" stroke=\"currentColor\" />\n </AlignmentIcon>\n );\n}\n\nexport function AlignCenterCenterIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <path d=\"M6.00977 1L6.00977 11\" stroke=\"currentColor\" />\n <path d=\"M10.0098 6L2.00977 6\" stroke=\"currentColor\" />\n </AlignmentIcon>\n );\n}\n\nexport function AlignCenterRightIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <path d=\"M10.3301 1L10.3301 11\" stroke=\"currentColor\" />\n <path d=\"M2.34961 6L10.3496 6\" stroke=\"currentColor\" />\n </AlignmentIcon>\n );\n}\n\nexport function AlignBottomLeftIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <mask id=\"wv_align_bl_mask\" fill=\"white\">\n <path d=\"M1.66992 10H10.6699V1H1.66992V10Z\" />\n </mask>\n <path\n d=\"M1.66992 10V11H0.669922V10H1.66992ZM1.66992 10V9H10.6699V10V11H1.66992V10ZM1.66992 1H2.66992V10H1.66992H0.669922V1H1.66992Z\"\n fill=\"currentColor\"\n mask=\"url(#wv_align_bl_mask)\"\n />\n </AlignmentIcon>\n );\n}\n\nexport function AlignBottomCenterIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <path d=\"M11 10.3301L1 10.3301\" stroke=\"currentColor\" />\n <path d=\"M6.00977 2L6.00977 10\" stroke=\"currentColor\" />\n </AlignmentIcon>\n );\n}\n\nexport function AlignBottomRightIcon(props: IconProps) {\n return (\n <AlignmentIcon {...props}>\n <mask id=\"wv_align_br_mask\" fill=\"white\">\n <path d=\"M10.3301 10H1.33008V1H10.3301V10Z\" />\n </mask>\n <path\n d=\"M10.3301 10V11H11.3301V10H10.3301ZM10.3301 10V9H1.33008V10V11H10.3301V10ZM10.3301 1H9.33008V10H10.3301H11.3301V1H10.3301Z\"\n fill=\"currentColor\"\n mask=\"url(#wv_align_br_mask)\"\n />\n </AlignmentIcon>\n );\n}\n\nexport const ALIGNMENT_GRID_ICONS = [\n AlignTopLeftIcon,\n AlignTopCenterIcon,\n AlignTopRightIcon,\n AlignCenterLeftIcon,\n AlignCenterCenterIcon,\n AlignCenterRightIcon,\n AlignBottomLeftIcon,\n AlignBottomCenterIcon,\n AlignBottomRightIcon,\n] as const;\n\nexport function AlignCellDot() {\n return <span className=\"wv-alignment-dot\" aria-hidden />;\n}\n","export type ArrangementAxis = \"flex-start\" | \"center\" | \"flex-end\";\nexport type VisualAxis = \"start\" | \"center\" | \"end\";\n\n/** Screen-relative visual positions for each 3×3 cell (left→right, top→bottom). */\nexport const ARRANGEMENT_VISUAL_GRID: Array<[VisualAxis, VisualAxis]> = [\n [\"start\", \"start\"], [\"center\", \"start\"], [\"end\", \"start\"],\n [\"start\", \"center\"], [\"center\", \"center\"], [\"end\", \"center\"],\n [\"start\", \"end\"], [\"center\", \"end\"], [\"end\", \"end\"],\n];\n\n/** Map computed CSS alignment keywords to grid axis values. */\nexport function normalizeArrangementAxis(raw: string): ArrangementAxis | null {\n const v = raw.trim().toLowerCase();\n if (v === \"flex-start\" || v === \"start\" || v === \"left\") return \"flex-start\";\n if (v === \"center\") return \"center\";\n if (v === \"flex-end\" || v === \"end\" || v === \"right\") return \"flex-end\";\n // Stretch / baseline have no grid cell — treat as start on the cross axis.\n if (\n v === \"stretch\" ||\n v === \"normal\" ||\n v === \"baseline\" ||\n v === \"first baseline\" ||\n v === \"last baseline\" ||\n v === \"self-start\" ||\n v === \"self-end\"\n ) {\n return \"flex-start\";\n }\n return null;\n}\n\nfunction flipVisual(axis: VisualAxis): VisualAxis {\n if (axis === \"start\") return \"end\";\n if (axis === \"end\") return \"start\";\n return \"center\";\n}\n\nfunction toVisualAxis(value: ArrangementAxis): VisualAxis {\n if (value === \"flex-start\") return \"start\";\n if (value === \"flex-end\") return \"end\";\n return \"center\";\n}\n\nfunction fromVisualAxis(axis: VisualAxis): ArrangementAxis {\n if (axis === \"start\") return \"flex-start\";\n if (axis === \"end\") return \"flex-end\";\n return \"center\";\n}\n\n/** Convert current layout CSS to a screen-relative visual position. */\nexport function visualFromArrangementCss(\n justifyContent: string,\n alignItems: string,\n flexDirection: string,\n): { vx: VisualAxis; vy: VisualAxis } | null {\n const justify = normalizeArrangementAxis(justifyContent);\n const align = normalizeArrangementAxis(alignItems);\n if (!justify || !align) return null;\n\n const isColumn = flexDirection.includes(\"column\");\n const isReverse = flexDirection.includes(\"reverse\");\n\n if (!isColumn) {\n let vx = toVisualAxis(justify);\n const vy = toVisualAxis(align);\n if (isReverse) vx = flipVisual(vx);\n return { vx, vy };\n }\n\n let vy = toVisualAxis(justify);\n const vx = toVisualAxis(align);\n if (isReverse) vy = flipVisual(vy);\n return { vx, vy };\n}\n\n/** Convert a screen-relative visual position back to justify / align CSS. */\nexport function arrangementCssFromVisual(\n vx: VisualAxis,\n vy: VisualAxis,\n flexDirection: string,\n): { justifyContent: ArrangementAxis; alignItems: ArrangementAxis } {\n const isColumn = flexDirection.includes(\"column\");\n const isReverse = flexDirection.includes(\"reverse\");\n\n if (!isColumn) {\n let j = vx;\n const a = vy;\n if (isReverse) j = flipVisual(j);\n return { justifyContent: fromVisualAxis(j), alignItems: fromVisualAxis(a) };\n }\n\n let j = vy;\n const a = vx;\n if (isReverse) j = flipVisual(j);\n return { justifyContent: fromVisualAxis(j), alignItems: fromVisualAxis(a) };\n}\n\n/** Index of the grid cell matching the element's current arrangement, if any. */\nexport function findActiveArrangementIndex(\n justifyContent: string,\n alignItems: string,\n flexDirection: string,\n): number | null {\n const visual = visualFromArrangementCss(justifyContent, alignItems, flexDirection);\n if (!visual) return null;\n\n const index = ARRANGEMENT_VISUAL_GRID.findIndex(\n ([vx, vy]) => vx === visual.vx && vy === visual.vy,\n );\n return index >= 0 ? index : null;\n}\n","import { ALIGNMENT_GRID_ICONS, AlignCellDot } from \"./alignmentIcons\";\nimport {\n ARRANGEMENT_VISUAL_GRID,\n arrangementCssFromVisual,\n findActiveArrangementIndex,\n} from \"./arrangementMapping\";\n\ntype AlignmentControlProps = {\n justifyContent: string;\n alignItems: string;\n flexDirection: string;\n /** Called with the new justify-content value. */\n onJustifyCommit: (v: string) => void;\n /** Called with the new align-items value. */\n onAlignCommit: (v: string) => void;\n};\n\nconst ALIGN_LABELS = [\n \"Top left\",\n \"Top center\",\n \"Top right\",\n \"Center left\",\n \"Center\",\n \"Center right\",\n \"Bottom left\",\n \"Bottom center\",\n \"Bottom right\",\n] as const;\n\nexport function AlignmentControl({\n justifyContent,\n alignItems,\n flexDirection,\n onJustifyCommit,\n onAlignCommit,\n}: AlignmentControlProps) {\n const activeIndex = findActiveArrangementIndex(\n justifyContent,\n alignItems,\n flexDirection,\n );\n\n return (\n <div className=\"wv-alignment-grid wv-pe\" role=\"group\" aria-label=\"Arrangement\">\n {ARRANGEMENT_VISUAL_GRID.map(([vx, vy], index) => {\n const Icon = ALIGNMENT_GRID_ICONS[index];\n const active = index === activeIndex;\n return (\n <button\n key={`${vx}-${vy}`}\n type=\"button\"\n className={`wv-alignment-cell wv-pe${active ? \" wv-alignment-cell--active\" : \"\"}`}\n aria-label={ALIGN_LABELS[index]}\n aria-pressed={active}\n onPointerDown={(e) => {\n e.preventDefault();\n const css = arrangementCssFromVisual(vx, vy, flexDirection);\n onJustifyCommit(css.justifyContent);\n onAlignCommit(css.alignItems);\n }}\n >\n {active ? <Icon /> : <AlignCellDot />}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useEffect, useRef, useState, type CSSProperties, type KeyboardEvent } from \"react\";\nimport {\n alphaPercentFromPickerColor,\n combineOpaqueHexAndAlphaPercent,\n cssPaintValuesEqual,\n opaqueHexFromPickerColor,\n parsePickerColorValue,\n} from \"../../engine/styleEngine\";\n\ntype ColorPickerProps = {\n /** Full picker value: `#rrggbb` or `#rrggbbaa` (from readCssColorForPicker). */\n value: string;\n /** Live preview; `styleTarget` keeps preview on the node that opened the native picker after selection moves. */\n onChange: (hex: string, styleTarget: Element) => void;\n /**\n * Called when a colour choice is finalized: once per native picker session when the OS modal\n * goes away for any reason (OK, outside click, focus elsewhere, tray unmount), or when the hex\n * field blurs / Enter. Dragging inside the system picker only updates preview via onChange.\n */\n onCommit: (hex: string, commitTarget: Element, fromSnapshotHex?: string) => void;\n styleCommitTarget: Element;\n selectionDismissSignal?: unknown;\n onFocus?: () => void;\n disabled?: boolean;\n variant?: \"default\" | \"card\";\n /** First-row label when `variant=\"card\"` (e.g. Font, Colour). */\n cardLabel?: string;\n /** Second-row label when `variant=\"card\"` (default Fill Opacity). */\n opacityLabel?: string;\n};\n\nfunction isValidOpaqueHex(s: string): boolean {\n return /^#[0-9a-fA-F]{6}$/.test(s);\n}\n\nfunction isValidFullHex(s: string): boolean {\n return /^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(s);\n}\n\nfunction formatAlphaPercent(n: number): string {\n const rounded = Math.round(n * 100) / 100;\n return rounded % 1 === 0 ? String(rounded) : rounded.toFixed(2);\n}\n\nfunction parseAlphaPercentInput(raw: string): number | null {\n const t = raw.trim().replace(/%$/, \"\");\n if (t === \"\") return null;\n const n = parseFloat(t);\n return Number.isFinite(n) ? Math.max(0, Math.min(100, n)) : null;\n}\n\n// Figma-style alpha grid: light squares on a slightly darker base.\nconst SWATCH_CHECKER_LIGHT = \"#dcdcdc\";\nconst SWATCH_CHECKER_DARK = \"#a8a8a8\";\n\nfunction alphaGridLayers(swatchPx: number): Pick<\n CSSProperties,\n \"backgroundColor\" | \"backgroundImage\" | \"backgroundSize\" | \"backgroundPosition\" | \"backgroundRepeat\"\n> {\n // Right half = 2 columns; full height = 4 rows (see Figma 16×16 swatch).\n const cell = swatchPx / 4;\n const tile = `${cell}px ${cell}px`;\n const offset = `${cell / 2}px ${cell / 2}px`;\n return {\n backgroundColor: SWATCH_CHECKER_LIGHT,\n backgroundImage: [\n `linear-gradient(45deg, ${SWATCH_CHECKER_DARK} 25%, transparent 25%, transparent 75%, ${SWATCH_CHECKER_DARK} 75%, ${SWATCH_CHECKER_DARK})`,\n `linear-gradient(45deg, ${SWATCH_CHECKER_DARK} 25%, transparent 25%, transparent 75%, ${SWATCH_CHECKER_DARK} 75%, ${SWATCH_CHECKER_DARK})`,\n ].join(\", \"),\n backgroundSize: `${tile}, ${tile}`,\n backgroundPosition: `0 0, ${offset}`,\n backgroundRepeat: \"repeat, repeat\",\n };\n}\n\nfunction swatchStyle(value: string, swatchPx: number): CSSProperties {\n const { r, g, b, alpha } = parsePickerColorValue(value);\n const opaque = `rgb(${r}, ${g}, ${b})`;\n\n if (alpha >= 1) {\n return { backgroundColor: opaque };\n }\n\n const rgba = `rgba(${r}, ${g}, ${b}, ${alpha})`;\n const split = `linear-gradient(to right, ${opaque} 50%, ${rgba} 50%)`;\n const divider =\n \"linear-gradient(to right, transparent calc(50% - 0.5px), rgba(235, 235, 235, 0.12) calc(50% - 0.5px), \" +\n \"rgba(235, 235, 235, 0.12) calc(50% + 0.5px), transparent calc(50% + 0.5px))\";\n const grid = alphaGridLayers(swatchPx);\n\n return {\n ...grid,\n backgroundImage: [divider, split, ...(grid.backgroundImage as string).split(\", \")].join(\", \"),\n backgroundSize: `100% 100%, 100% 100%, ${grid.backgroundSize}`,\n backgroundPosition: `0 0, 0 0, ${grid.backgroundPosition}`,\n backgroundRepeat: `no-repeat, no-repeat, ${grid.backgroundRepeat}`,\n };\n}\n\ntype NativeSession = { active: boolean; finalized: boolean };\n\nexport function ColorPicker({\n value,\n onChange,\n onCommit,\n onFocus,\n selectionDismissSignal,\n styleCommitTarget,\n disabled = false,\n variant = \"default\",\n cardLabel = \"Colour\",\n opacityLabel = \"Fill Opacity\",\n}: ColorPickerProps) {\n const fullValue = isValidFullHex(value) ? value.toLowerCase() : \"#000000\";\n const displayOpaqueHex = opaqueHexFromPickerColor(fullValue).toLowerCase();\n const displayAlphaPercent = alphaPercentFromPickerColor(fullValue);\n\n const [hexRaw, setHexRaw] = useState(displayOpaqueHex);\n const [alphaRaw, setAlphaRaw] = useState(formatAlphaPercent(displayAlphaPercent));\n const [editingHex, setEditingHex] = useState(false);\n const [editingAlpha, setEditingAlpha] = useState(false);\n const [nativePickerOpen, setNativePickerOpen] = useState(false);\n const [nativeSessionHex, setNativeSessionHex] = useState(displayOpaqueHex);\n\n const rowRef = useRef<HTMLDivElement>(null);\n const nativeInputRef = useRef<HTMLInputElement>(null);\n const didFocusRef = useRef(false);\n const onCommitRef = useRef(onCommit);\n onCommitRef.current = onCommit;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const styleCommitTargetRef = useRef(styleCommitTarget);\n styleCommitTargetRef.current = styleCommitTarget;\n const sessionCommitTargetRef = useRef<Element | null>(null);\n const sessionFromHexRef = useRef<string | null>(null);\n const sessionOpaqueBaselineRef = useRef(\"#000000\");\n const sessionAlphaPercentRef = useRef(100);\n const userDidChangeNativeRef = useRef(false);\n const hexFieldBaselineRef = useRef(\"\");\n const alphaFieldBaselineRef = useRef(\"\");\n\n function revertNativePreview() {\n const fromSnap = sessionFromHexRef.current;\n const target = sessionCommitTargetRef.current ?? styleCommitTargetRef.current;\n if (fromSnap != null) {\n onChangeRef.current(fromSnap, target);\n }\n }\n\n function finishNativeSessionWithoutCommit() {\n revertNativePreview();\n sessionCommitTargetRef.current = null;\n sessionFromHexRef.current = null;\n userDidChangeNativeRef.current = false;\n setNativePickerOpen(false);\n didFocusRef.current = false;\n }\n\n const sessionRef = useRef<NativeSession>({ active: false, finalized: true });\n const lastPreviewHexRef = useRef(fullValue);\n const sawWindowBlurDuringPickerRef = useRef(false);\n const removeDismissListenersRef = useRef<(() => void) | null>(null);\n const endNativePickerSessionRef = useRef<() => void>(() => {});\n\n const nativeInputValue = nativePickerOpen ? nativeSessionHex : displayOpaqueHex;\n const previewFullValue = combineOpaqueHexAndAlphaPercent(\n nativePickerOpen ? nativeSessionHex : displayOpaqueHex,\n nativePickerOpen ? sessionAlphaPercentRef.current : displayAlphaPercent,\n );\n\n useEffect(() => {\n if (nativePickerOpen || sessionRef.current.active) return;\n lastPreviewHexRef.current = fullValue;\n }, [fullValue, nativePickerOpen]);\n\n function detachDismissListeners() {\n removeDismissListenersRef.current?.();\n removeDismissListenersRef.current = null;\n }\n\n function endNativePickerSession() {\n const s = sessionRef.current;\n if (!s.active || s.finalized) return;\n s.finalized = true;\n s.active = false;\n detachDismissListeners();\n const target = sessionCommitTargetRef.current ?? styleCommitTargetRef.current;\n const fromSnap = sessionFromHexRef.current;\n\n if (!userDidChangeNativeRef.current) {\n finishNativeSessionWithoutCommit();\n return;\n }\n\n const el = nativeInputRef.current;\n let combined = lastPreviewHexRef.current;\n if (el?.value && isValidOpaqueHex(el.value)) {\n combined = combineOpaqueHexAndAlphaPercent(el.value, sessionAlphaPercentRef.current);\n } else if (!isValidFullHex(combined)) {\n combined = combineOpaqueHexAndAlphaPercent(\"#000000\", sessionAlphaPercentRef.current);\n }\n\n sessionCommitTargetRef.current = null;\n sessionFromHexRef.current = null;\n userDidChangeNativeRef.current = false;\n if (fromSnap != null && cssPaintValuesEqual(combined, fromSnap)) {\n revertNativePreview();\n setNativePickerOpen(false);\n didFocusRef.current = false;\n return;\n }\n onCommitRef.current(combined, target, fromSnap ?? undefined);\n setNativePickerOpen(false);\n didFocusRef.current = false;\n }\n\n endNativePickerSessionRef.current = endNativePickerSession;\n\n function attachDismissListeners() {\n const s = sessionRef.current;\n if (!s.active || s.finalized) return;\n\n const onNativeChange = () => {\n endNativePickerSessionRef.current();\n };\n\n const onDocPointerDown = (ev: PointerEvent) => {\n const s2 = sessionRef.current;\n if (!s2.active || s2.finalized) return;\n if (rowRef.current?.contains(ev.target as Node)) return;\n endNativePickerSessionRef.current();\n };\n\n const onFocusIn = (ev: FocusEvent) => {\n const s2 = sessionRef.current;\n if (!s2.active || s2.finalized) return;\n const t = ev.target as Node | null;\n if (t && rowRef.current?.contains(t)) return;\n endNativePickerSessionRef.current();\n };\n\n const onWindowBlur = () => {\n if (sessionRef.current.active && !sessionRef.current.finalized) {\n sawWindowBlurDuringPickerRef.current = true;\n }\n };\n\n const onWindowFocus = () => {\n const s2 = sessionRef.current;\n if (!s2.active || s2.finalized) return;\n if (!sawWindowBlurDuringPickerRef.current) return;\n sawWindowBlurDuringPickerRef.current = false;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n endNativePickerSessionRef.current();\n });\n });\n };\n\n const input = nativeInputRef.current;\n input?.addEventListener(\"change\", onNativeChange);\n document.addEventListener(\"pointerdown\", onDocPointerDown, true);\n document.addEventListener(\"focusin\", onFocusIn, true);\n window.addEventListener(\"blur\", onWindowBlur);\n window.addEventListener(\"focus\", onWindowFocus);\n\n removeDismissListenersRef.current = () => {\n input?.removeEventListener(\"change\", onNativeChange);\n document.removeEventListener(\"pointerdown\", onDocPointerDown, true);\n document.removeEventListener(\"focusin\", onFocusIn, true);\n window.removeEventListener(\"blur\", onWindowBlur);\n window.removeEventListener(\"focus\", onWindowFocus);\n };\n }\n\n useEffect(() => {\n if (!sessionRef.current.active || sessionRef.current.finalized) return;\n endNativePickerSessionRef.current();\n }, [selectionDismissSignal]);\n\n useEffect(() => {\n if (!disabled) return;\n if (!sessionRef.current.active || sessionRef.current.finalized) return;\n endNativePickerSessionRef.current();\n }, [disabled]);\n\n useEffect(\n () => () => {\n if (sessionRef.current.active && !sessionRef.current.finalized) {\n endNativePickerSessionRef.current();\n } else {\n detachDismissListeners();\n }\n },\n [],\n );\n\n if (!editingHex && hexRaw !== displayOpaqueHex) setHexRaw(displayOpaqueHex);\n if (!editingAlpha && alphaRaw !== formatAlphaPercent(displayAlphaPercent)) {\n setAlphaRaw(formatAlphaPercent(displayAlphaPercent));\n }\n\n const triggerFocus = () => {\n if (!didFocusRef.current) {\n didFocusRef.current = true;\n onFocus?.();\n }\n };\n\n const previewWithOpaqueAndAlpha = (opaque: string, alphaPercent: number) =>\n combineOpaqueHexAndAlphaPercent(opaque, alphaPercent);\n\n const openNativePicker = () => {\n if (disabled) return;\n triggerFocus();\n sawWindowBlurDuringPickerRef.current = false;\n userDidChangeNativeRef.current = false;\n sessionOpaqueBaselineRef.current = displayOpaqueHex;\n sessionAlphaPercentRef.current = displayAlphaPercent;\n sessionRef.current = { active: true, finalized: false };\n sessionCommitTargetRef.current = styleCommitTargetRef.current;\n sessionFromHexRef.current = fullValue;\n lastPreviewHexRef.current = fullValue;\n setNativeSessionHex(displayOpaqueHex);\n setNativePickerOpen(true);\n queueMicrotask(() => {\n if (sessionRef.current.active && !sessionRef.current.finalized) {\n attachDismissListeners();\n nativeInputRef.current?.click();\n }\n });\n };\n\n const onNativeInputChange = (hex: string) => {\n if (!nativePickerOpen) return;\n if (hex.toLowerCase() === sessionOpaqueBaselineRef.current.toLowerCase()) return;\n userDidChangeNativeRef.current = true;\n setNativeSessionHex(hex);\n setHexRaw(hex);\n const combined = previewWithOpaqueAndAlpha(hex, sessionAlphaPercentRef.current);\n lastPreviewHexRef.current = combined;\n const previewEl = sessionCommitTargetRef.current ?? styleCommitTargetRef.current;\n onChange(combined, previewEl);\n };\n\n const hexInputProps = {\n value: editingHex ? hexRaw : displayOpaqueHex,\n disabled,\n maxLength: 7,\n spellCheck: false as const,\n onFocus: () => {\n triggerFocus();\n setEditingHex(true);\n setHexRaw(displayOpaqueHex);\n hexFieldBaselineRef.current = displayOpaqueHex.toLowerCase();\n },\n onChange: (raw: string) => {\n setHexRaw(raw);\n if (isValidOpaqueHex(raw)) {\n onChange(\n previewWithOpaqueAndAlpha(raw, displayAlphaPercent),\n styleCommitTargetRef.current,\n );\n }\n },\n onBlur: () => {\n setEditingHex(false);\n const raw = hexRaw.trim();\n if (isValidOpaqueHex(raw)) {\n const combined = previewWithOpaqueAndAlpha(raw, displayAlphaPercent);\n if (raw.toLowerCase() !== hexFieldBaselineRef.current) {\n onCommitRef.current(combined, styleCommitTargetRef.current);\n }\n } else {\n setHexRaw(displayOpaqueHex);\n }\n didFocusRef.current = false;\n },\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n setEditingHex(false);\n if (isValidOpaqueHex(hexRaw.trim())) {\n const raw = hexRaw.trim();\n const combined = previewWithOpaqueAndAlpha(raw, displayAlphaPercent);\n if (raw.toLowerCase() !== hexFieldBaselineRef.current) {\n onCommitRef.current(combined, styleCommitTargetRef.current);\n }\n } else {\n setHexRaw(displayOpaqueHex);\n }\n }\n if (e.key === \"Escape\") {\n e.stopPropagation();\n setEditingHex(false);\n setHexRaw(displayOpaqueHex);\n }\n },\n };\n\n const alphaInputProps = {\n inputMode: \"decimal\" as const,\n value: editingAlpha ? alphaRaw : formatAlphaPercent(displayAlphaPercent),\n disabled,\n maxLength: 6,\n spellCheck: false as const,\n onFocus: () => {\n triggerFocus();\n setEditingAlpha(true);\n setAlphaRaw(formatAlphaPercent(displayAlphaPercent));\n alphaFieldBaselineRef.current = formatAlphaPercent(displayAlphaPercent);\n },\n onChange: (raw: string) => {\n setAlphaRaw(raw);\n const pct = parseAlphaPercentInput(raw);\n if (pct != null) {\n onChange(\n previewWithOpaqueAndAlpha(displayOpaqueHex, pct),\n styleCommitTargetRef.current,\n );\n }\n },\n onBlur: () => {\n setEditingAlpha(false);\n const pct = parseAlphaPercentInput(alphaRaw);\n if (pct != null) {\n const combined = previewWithOpaqueAndAlpha(displayOpaqueHex, pct);\n if (formatAlphaPercent(pct) !== alphaFieldBaselineRef.current) {\n onCommitRef.current(combined, styleCommitTargetRef.current);\n }\n } else {\n setAlphaRaw(formatAlphaPercent(displayAlphaPercent));\n }\n didFocusRef.current = false;\n },\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n setEditingAlpha(false);\n const pct = parseAlphaPercentInput(alphaRaw);\n if (pct != null) {\n const combined = previewWithOpaqueAndAlpha(displayOpaqueHex, pct);\n if (formatAlphaPercent(pct) !== alphaFieldBaselineRef.current) {\n onCommitRef.current(combined, styleCommitTargetRef.current);\n }\n } else {\n setAlphaRaw(formatAlphaPercent(displayAlphaPercent));\n }\n }\n if (e.key === \"Escape\") {\n e.stopPropagation();\n setEditingAlpha(false);\n setAlphaRaw(formatAlphaPercent(displayAlphaPercent));\n }\n },\n };\n\n const nativeColorInput = (\n <input\n ref={nativeInputRef}\n type=\"color\"\n className=\"wv-color-native wv-pe\"\n value={nativeInputValue}\n disabled={disabled}\n onChange={(e) => onNativeInputChange(e.target.value)}\n onBlur={() => endNativePickerSession()}\n />\n );\n\n const swatchPx = variant === \"card\" ? 16 : 20;\n const swatchEl = (\n <div\n className={`wv-color-swatch wv-pe${variant === \"card\" ? \" wv-color-swatch--card\" : \"\"}`}\n style={swatchStyle(nativePickerOpen ? previewFullValue : fullValue, swatchPx)}\n onClick={openNativePicker}\n />\n );\n\n if (variant === \"card\") {\n return (\n <div\n ref={rowRef}\n className={`wv-color-card wv-pe${disabled ? \" wv-color-card--disabled\" : \"\"}`}\n >\n <div className=\"wv-color-card-row\">\n <span className=\"wv-color-card-label\">{cardLabel}</span>\n <div className=\"wv-color-card-value\">\n <input type=\"text\" className=\"wv-color-card-hex wv-pe\" {...hexInputProps} />\n {swatchEl}\n </div>\n </div>\n <div className=\"wv-color-card-divider\" aria-hidden />\n <div className=\"wv-color-card-row\">\n <span className=\"wv-color-card-label\">{opacityLabel}</span>\n <div className=\"wv-color-card-value\">\n <input type=\"text\" className=\"wv-color-card-alpha wv-pe\" {...alphaInputProps} />\n <span className=\"wv-color-card-alpha-unit\">%</span>\n </div>\n </div>\n {nativeColorInput}\n </div>\n );\n }\n\n return (\n <div\n ref={rowRef}\n className={`wv-color-row wv-pe${disabled ? \" wv-color-row--disabled\" : \"\"}`}\n >\n <input type=\"text\" className=\"wv-color-hex wv-pe\" {...hexInputProps} />\n <div className=\"wv-color-alpha-wrap wv-pe\">\n <input type=\"text\" className=\"wv-color-alpha wv-pe\" {...alphaInputProps} />\n <span className=\"wv-color-alpha-unit\">%</span>\n </div>\n {swatchEl}\n {nativeColorInput}\n </div>\n );\n}\n","import { useEffect, useRef, useState, type ChangeEvent, type FocusEvent, type KeyboardEvent } from \"react\";\nimport { formatNumberMax2, roundTo2 } from \"../../engine/roundNumber\";\n\ntype NumberInputProps = {\n cssProperty: string;\n displayLabel: string;\n /** Parsed numeric value — no unit string. */\n value: number;\n /** Unit appended for display e.g. \"px\" or \"%\". Pass \"\" for unitless values. */\n unit?: string;\n min?: number;\n max?: number;\n /** Increment for arrow-key nudge. Default: 1. */\n step?: number;\n /** Called on every keystroke for live DOM preview. Receives formatted value e.g. \"18px\". */\n onChange: (formatted: string) => void;\n /** Called on Enter or blur with the final committed formatted value. */\n onCommit: (formatted: string) => void;\n /** Called on focus so the parent can record the \"from\" value before editing begins. */\n onFocus?: () => void;\n /** Called on Escape so the parent can revert live preview without logging history. */\n onCancel?: () => void;\n disabled?: boolean;\n /** Card row styling for typography fields (Figma tray). */\n variant?: \"default\" | \"card\";\n /** Focus and enter edit mode on mount (e.g. after switching from Fill/Hug). */\n autoFocus?: boolean;\n};\n\nexport function NumberInput({\n value,\n unit = \"px\",\n min,\n max,\n step = 1,\n displayLabel,\n onChange,\n onCommit,\n onFocus,\n onCancel,\n disabled = false,\n variant = \"default\",\n autoFocus = false,\n}: NumberInputProps) {\n const cardClass = variant === \"card\" ? \" wv-number-input--card\" : \"\";\n const [editing, setEditing] = useState(false);\n const [raw, setRaw] = useState(String(value));\n const fromRef = useRef<string>(`${value}${unit}`);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Keep display in sync when value changes externally (e.g. undo)\n useEffect(() => {\n if (!editing) setRaw(formatNumberMax2(value));\n }, [value, editing]);\n\n useEffect(() => {\n if (!autoFocus) return;\n const id = requestAnimationFrame(() => {\n const input = inputRef.current;\n if (!input) return;\n input.focus();\n input.select();\n });\n return () => cancelAnimationFrame(id);\n }, [autoFocus]);\n\n const format = (n: number): string => {\n const s = formatNumberMax2(n);\n return unit ? `${s}${unit}` : s;\n };\n\n const hasUnit = unit !== \"\";\n\n const parseAndClamp = (input: string): number | null => {\n const n = parseFloat(input);\n if (isNaN(n)) return null;\n let clamped = n;\n if (min !== undefined) clamped = Math.max(min, clamped);\n if (max !== undefined) clamped = Math.min(max, clamped);\n return roundTo2(clamped);\n };\n\n const commit = (inputRaw: string) => {\n setEditing(false);\n const n = parseAndClamp(inputRaw);\n if (n === null) {\n setRaw(formatNumberMax2(value)); // revert display to last known good value\n return;\n }\n const formatted = format(n);\n if (formatted === fromRef.current) {\n return;\n }\n onCommit(formatted);\n };\n\n const sharedHandlers = {\n onFocus: () => {\n fromRef.current = format(value);\n setEditing(true);\n setRaw(formatNumberMax2(value));\n onFocus?.();\n },\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\n setRaw(e.target.value);\n const n = parseAndClamp(e.target.value);\n if (n !== null) onChange(format(n));\n },\n onBlur: (e: FocusEvent<HTMLInputElement>) => {\n commit(e.target.value);\n },\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n commit(raw);\n }\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onCancel?.();\n setRaw(hasUnit ? fromRef.current.replace(unit, \"\") : fromRef.current);\n setEditing(false);\n }\n if (e.key === \"ArrowUp\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n const current = parseFloat(raw) || value;\n const delta = e.key === \"ArrowUp\" ? step : -step;\n const next = parseAndClamp(String(current + delta));\n if (next !== null) {\n setRaw(formatNumberMax2(next));\n onChange(format(next));\n }\n }\n },\n };\n\n if (!hasUnit) {\n return (\n <input\n ref={inputRef}\n type=\"text\"\n className={`wv-number-input wv-pe${cardClass}`}\n value={editing ? raw : format(value)}\n aria-label={displayLabel}\n disabled={disabled}\n {...sharedHandlers}\n />\n );\n }\n\n return (\n <div className={`wv-number-input-wrap wv-pe${cardClass}`}>\n <input\n ref={inputRef}\n type=\"text\"\n className={`wv-number-input wv-pe${cardClass}`}\n value={editing ? raw : formatNumberMax2(value)}\n aria-label={displayLabel}\n disabled={disabled}\n {...sharedHandlers}\n />\n <span className=\"wv-number-input-unit\" aria-hidden=\"true\">\n {unit}\n </span>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype IconProps = { className?: string };\n\nfunction BoxSpacingIcon({\n className,\n children,\n}: IconProps & { children: ReactNode }) {\n return (\n <svg\n className={`wv-typo-field-icon${className ? ` ${className}` : \"\"}`}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\n\nexport function MarginHorizontalIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_margin_h_clip)\">\n <path\n d=\"M2.66675 2.6665V13.3332\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13.3333 2.6665V13.3332\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 5.33333C6 4.97971 6.14048 4.64057 6.39052 4.39052C6.64057 4.14048 6.97971 4 7.33333 4H8.66667C9.02029 4 9.35943 4.14048 9.60948 4.39052C9.85952 4.64057 10 4.97971 10 5.33333V10.6667C10 11.0203 9.85952 11.3594 9.60948 11.6095C9.35943 11.8595 9.02029 12 8.66667 12H7.33333C6.97971 12 6.64057 11.8595 6.39052 11.6095C6.14048 11.3594 6 11.0203 6 10.6667V5.33333Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_margin_h_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function MarginVerticalIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_margin_v_clip)\">\n <path\n d=\"M2.66663 2.6665H13.3333\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.66663 13.3335H13.3333\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4 7.33333C4 6.97971 4.14048 6.64057 4.39052 6.39052C4.64057 6.14048 4.97971 6 5.33333 6H10.6667C11.0203 6 11.3594 6.14048 11.6095 6.39052C11.8595 6.64057 12 6.97971 12 7.33333V8.66667C12 9.02029 11.8595 9.35943 11.6095 9.60948C11.3594 9.85952 11.0203 10 10.6667 10H5.33333C4.97971 10 4.64057 9.85952 4.39052 9.60948C4.14048 9.35943 4 9.02029 4 8.66667V7.33333Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_margin_v_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function PaddingHorizontalIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_padding_h_clip)\">\n <path\n d=\"M2 3.5C2 3.10218 2.15804 2.72064 2.43934 2.43934C2.72064 2.15804 3.10218 2 3.5 2H12.5C12.8978 2 13.2794 2.15804 13.5607 2.43934C13.842 2.72064 14 3.10218 14 3.5V12.5C14 12.8978 13.842 13.2794 13.5607 13.5607C13.2794 13.842 12.8978 14 12.5 14H3.5C3.10218 14 2.72064 13.842 2.43934 13.5607C2.15804 13.2794 2 12.8978 2 12.5V3.5Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M11 10V6\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5 6V10\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"wv_padding_h_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function PaddingVerticalIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <path\n d=\"M12.5 2C12.8978 2 13.2794 2.15804 13.5607 2.43934C13.842 2.72065 14 3.10218 14 3.5L14 12.5C14 12.8978 13.842 13.2794 13.5607 13.5607C13.2794 13.842 12.8978 14 12.5 14L3.5 14C3.10218 14 2.72064 13.842 2.43934 13.5607C2.15804 13.2794 2 12.8978 2 12.5L2 3.5C2 3.10218 2.15804 2.72064 2.43934 2.43934C2.72065 2.15804 3.10218 2 3.5 2L12.5 2Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M6 11L10 11\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 5L6 5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </BoxSpacingIcon>\n );\n}\n\nexport function BoxSidesToggleIcon(props: IconProps) {\n return (\n <svg\n className={`wv-box-spacing-toggle-icon${props.className ? ` ${props.className}` : \"\"}`}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <g clipPath=\"url(#wv_box_sides_toggle_clip)\">\n <path\n d=\"M2.66666 5.3335V10.6668\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13.3333 10.6668V5.3335\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.33334 2.6665H10.6667\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.33334 13.3335H10.6667\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_box_sides_toggle_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nexport function MarginLeftIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_margin_l_clip)\">\n <path\n d=\"M2.66669 2.6665V13.3332\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 5.33333C6 4.97971 6.14048 4.64057 6.39052 4.39052C6.64057 4.14048 6.97971 4 7.33333 4H8.66667C9.02029 4 9.35943 4.14048 9.60948 4.39052C9.85952 4.64057 10 4.97971 10 5.33333V10.6667C10 11.0203 9.85952 11.3594 9.60948 11.6095C9.35943 11.8595 9.02029 12 8.66667 12H7.33333C6.97971 12 6.64057 11.8595 6.39052 11.6095C6.14048 11.3594 6 11.0203 6 10.6667V5.33333Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_margin_l_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function MarginTopIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_margin_t_clip)\">\n <path\n d=\"M2.66666 2.6665H13.3333\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4 7.33333C4 6.97971 4.14048 6.64057 4.39052 6.39052C4.64057 6.14048 4.97971 6 5.33333 6H10.6667C11.0203 6 11.3594 6.14048 11.6095 6.39052C11.8595 6.64057 12 6.97971 12 7.33333V8.66667C12 9.02029 11.8595 9.35943 11.6095 9.60948C11.3594 9.85952 11.0203 10 10.6667 10H5.33333C4.97971 10 4.64057 9.85952 4.39052 9.60948C4.14048 9.35943 4 9.02029 4 8.66667V7.33333Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_margin_t_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function MarginRightIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_margin_r_clip)\">\n <path\n d=\"M13.3333 2.6665V13.3332\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6 5.33333C6 4.97971 6.14048 4.64057 6.39052 4.39052C6.64057 4.14048 6.97971 4 7.33333 4H8.66667C9.02029 4 9.35943 4.14048 9.60948 4.39052C9.85952 4.64057 10 4.97971 10 5.33333V10.6667C10 11.0203 9.85952 11.3594 9.60948 11.6095C9.35943 11.8595 9.02029 12 8.66667 12H7.33333C6.97971 12 6.64057 11.8595 6.39052 11.6095C6.14048 11.3594 6 11.0203 6 10.6667V5.33333Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_margin_r_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function MarginBottomIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_margin_b_clip)\">\n <path\n d=\"M2.66666 13.3335H13.3333\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4 7.33333C4 6.97971 4.14048 6.64057 4.39052 6.39052C4.64057 6.14048 4.97971 6 5.33333 6H10.6667C11.0203 6 11.3594 6.14048 11.6095 6.39052C11.8595 6.64057 12 6.97971 12 7.33333V8.66667C12 9.02029 11.8595 9.35943 11.6095 9.60948C11.3594 9.85952 11.0203 10 10.6667 10H5.33333C4.97971 10 4.64057 9.85952 4.39052 9.60948C4.14048 9.35943 4 9.02029 4 8.66667V7.33333Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_margin_b_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function PaddingLeftIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_padding_l_clip)\">\n <path\n d=\"M2 3.5C2 3.10218 2.15804 2.72064 2.43934 2.43934C2.72064 2.15804 3.10218 2 3.5 2H12.5C12.8978 2 13.2794 2.15804 13.5607 2.43934C13.842 2.72064 14 3.10218 14 3.5V12.5C14 12.8978 13.842 13.2794 13.5607 13.5607C13.2794 13.842 12.8978 14 12.5 14H3.5C3.10218 14 2.72064 13.842 2.43934 13.5607C2.15804 13.2794 2 12.8978 2 12.5V3.5Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M5 6V10\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"wv_padding_l_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function PaddingTopIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <path\n d=\"M12.5 2C12.8978 2 13.2794 2.15804 13.5607 2.43934C13.842 2.72065 14 3.10218 14 3.5L14 12.5C14 12.8978 13.842 13.2794 13.5607 13.5607C13.2794 13.842 12.8978 14 12.5 14L3.5 14C3.10218 14 2.72064 13.842 2.43934 13.5607C2.15804 13.2794 2 12.8978 2 12.5L2 3.5C2 3.10218 2.15804 2.72064 2.43934 2.43934C2.72065 2.15804 3.10218 2 3.5 2L12.5 2Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M10 5L6 5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </BoxSpacingIcon>\n );\n}\n\nexport function PaddingRightIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_padding_r_clip)\">\n <path\n d=\"M2 3.5C2 3.10218 2.15804 2.72064 2.43934 2.43934C2.72064 2.15804 3.10218 2 3.5 2H12.5C12.8978 2 13.2794 2.15804 13.5607 2.43934C13.842 2.72064 14 3.10218 14 3.5V12.5C14 12.8978 13.842 13.2794 13.5607 13.5607C13.2794 13.842 12.8978 14 12.5 14H3.5C3.10218 14 2.72064 13.842 2.43934 13.5607C2.15804 13.2794 2 12.8978 2 12.5V3.5Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M11 10V6\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"wv_padding_r_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function PaddingBottomIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <path\n d=\"M12.5 2C12.8978 2 13.2794 2.15804 13.5607 2.43934C13.842 2.72065 14 3.10218 14 3.5L14 12.5C14 12.8978 13.842 13.2794 13.5607 13.5607C13.2794 13.842 12.8978 14 12.5 14L3.5 14C3.10218 14 2.72064 13.842 2.43934 13.5607C2.15804 13.2794 2 12.8978 2 12.5L2 3.5C2 3.10218 2.15804 2.72064 2.43934 2.43934C2.72065 2.15804 3.10218 2 3.5 2L12.5 2Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M6 11L10 11\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </BoxSpacingIcon>\n );\n}\n\nexport function BorderTypeIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_border_type_clip)\">\n <path\n d=\"M2 13.3332C7.33333 13.3332 8.66667 2.6665 14 2.6665\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_border_type_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function RadiusAllCornersIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_radius_all_clip)\">\n <path\n d=\"M11 2H12.5C12.8978 2 13.2794 2.15804 13.5607 2.43934C13.842 2.72064 14 3.10218 14 3.5V5\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 11V12.5C14 12.8978 13.842 13.2794 13.5607 13.5607C13.2794 13.842 12.8978 14 12.5 14H11\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5 14H3.5C3.10218 14 2.72064 13.842 2.43934 13.5607C2.15804 13.2794 2 12.8978 2 12.5V11\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 5V3.5C2 3.10218 2.15804 2.72064 2.43934 2.43934C2.72064 2.15804 3.10218 2 3.5 2H5\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_radius_all_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function RadiusTopLeftIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_radius_tl_clip)\">\n <path\n d=\"M3 13V8C3 6.67392 3.52678 5.40215 4.46447 4.46447C5.40215 3.52678 6.67392 3 8 3H13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_radius_tl_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function RadiusTopRightIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <path\n d=\"M3 3L8 3C9.32608 3 10.5979 3.52678 11.5355 4.46447C12.4732 5.40215 13 6.67392 13 8L13 13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </BoxSpacingIcon>\n );\n}\n\nexport function RadiusBottomLeftIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_radius_bl_clip)\">\n <path\n d=\"M3 3V8C3 9.32608 3.52678 10.5979 4.46447 11.5355C5.40215 12.4732 6.67392 13 8 13H13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_radius_bl_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"matrix(1 0 0 -1 0 16)\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function RadiusBottomRightIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_radius_br_clip)\">\n <path\n d=\"M13 3L13 8C13 9.32608 12.4732 10.5979 11.5355 11.5355C10.5979 12.4732 9.32608 13 8 13L3 13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_radius_br_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(16 16) rotate(180)\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n\nexport function AspectRatioLockIcon(props: IconProps) {\n return (\n <BoxSpacingIcon {...props}>\n <g clipPath=\"url(#wv_aspect_ratio_clip)\">\n <path\n d=\"M2 3.73311C2 3.27618 2.14048 2.83797 2.39052 2.51487C2.64057 2.19177 2.97971 2.01025 3.33333 2.01025H12.6667C13.0203 2.01025 13.3594 2.19177 13.6095 2.51487C13.8595 2.83797 14 3.27618 14 3.73311V12.3474C14 12.8043 13.8595 13.2425 13.6095 13.5656C13.3594 13.8887 13.0203 14.0703 12.6667 14.0703H3.33333C2.97971 14.0703 2.64057 13.8887 2.39052 13.5656C2.14048 13.2425 2 12.8043 2 12.3474V3.73311Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.005\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M4.66675 6.6665V4.6665H6.66675\"\n stroke=\"currentColor\"\n strokeWidth=\"1.005\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.3334 9.3335V11.3335H9.33337\"\n stroke=\"currentColor\"\n strokeWidth=\"1.005\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_aspect_ratio_clip\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </BoxSpacingIcon>\n );\n}\n","export function TypoChevronIcon() {\n return (\n <svg\n className=\"wv-typo-chevron\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M12 6L8 10L4 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function TypoAlignLeftIcon() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 3H14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2 6.3335H8.31333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2 9.6665H14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2 13H8.31333\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function TypoAlignCenterIcon() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 3H14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.83984 6.3335H11.1598\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2 9.6665H14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.83984 13H11.1598\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function TypoAlignRightIcon() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden>\n <path d=\"M2 3H14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.68652 6.3335H13.9999\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2 9.6665H14\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.68652 13H13.9999\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function TypoLineHeightIcon() {\n return (\n <svg\n className=\"wv-typo-field-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M14.3999 14.4001L1.5999 14.4001M1.5999 1.6001L14.3999 1.6001\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M11.1142 11.4001L10.004 8.80962L8.19993 4.6001L5.28565 11.4001M10.004 8.80962H6.58088\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function TypoLetterSpacingIcon() {\n return (\n <svg\n className=\"wv-typo-field-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n <path\n d=\"M2.84219 9.35197L0.600098 11.5941L2.84219 13.8362M0.600098 11.5941H15.4001M13.158 9.35197L15.4001 11.5941L13.158 13.8362M8.17243 8.32638V1.6001M10.9421 1.6001L8.17243 1.6001L5.20495 1.6001\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport function SectionCollapseIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden>\n <path d=\"M2 6H10\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function SectionExpandIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden>\n <path d=\"M6 2.5V9.5M2.5 6H9.5\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function SectionDivider() {\n return <hr className=\"wv-section-divider\" aria-hidden />;\n}\n","import {\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { TypoChevronIcon } from \"./typographyIcons\";\n\nexport type TrayDropdownOption = { value: string; label: string };\n\nexport function isEventInsideNode(\n e: PointerEvent,\n node: HTMLElement,\n): boolean {\n if (e.composedPath().includes(node)) return true;\n const target = e.target;\n return target instanceof Node && node.contains(target);\n}\n\nexport function stopTrayDropdownTriggerPointerDown(\n e: ReactPointerEvent,\n): void {\n e.stopPropagation();\n}\n\nexport function useDismissOnOutsidePointerDown(\n active: boolean,\n rootRef: RefObject<HTMLElement | null>,\n onDismiss: () => void,\n menuRef?: RefObject<HTMLElement | null>,\n) {\n useLayoutEffect(() => {\n if (!active) return;\n\n const onPointerDown = (e: PointerEvent) => {\n const root = rootRef.current;\n if (root && isEventInsideNode(e, root)) return;\n\n const menu = menuRef?.current;\n if (menu && isEventInsideNode(e, menu)) return;\n\n onDismiss();\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onDismiss();\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n };\n }, [active, onDismiss, rootRef, menuRef]);\n}\n\nexport function useTrayDropdown(onOpen?: () => void) {\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const close = useCallback(() => setOpen(false), []);\n\n const toggle = useCallback(() => {\n setOpen((prev) => {\n if (!prev) onOpen?.();\n return !prev;\n });\n }, [onOpen]);\n\n useDismissOnOutsidePointerDown(open, rootRef, close, menuRef);\n\n return { open, setOpen, toggle, close, rootRef, menuRef };\n}\n\ntype TrayDropdownMenuProps = {\n menuRef: RefObject<HTMLDivElement | null>;\n value: string;\n options: readonly TrayDropdownOption[];\n onSelect: (value: string) => void;\n ariaLabel: string;\n};\n\nexport function TrayDropdownMenu({\n menuRef,\n value,\n options,\n onSelect,\n ariaLabel,\n}: TrayDropdownMenuProps) {\n return (\n <div\n ref={menuRef}\n className=\"wv-tray-dropdown-menu wv-tray-dropdown-menu--overlay wv-pe\"\n role=\"listbox\"\n aria-label={ariaLabel}\n >\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n aria-selected={option.value === value}\n className={`wv-tray-dropdown-option wv-pe${\n option.value === value ? \" wv-tray-dropdown-option--active\" : \"\"\n }`}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={() => onSelect(option.value)}\n >\n {option.label}\n </button>\n ))}\n </div>\n );\n}\n\ntype TrayDropdownProps = {\n value: string;\n options: readonly TrayDropdownOption[];\n onSelect: (value: string) => void;\n onOpen?: () => void;\n ariaLabel: string;\n disabled?: boolean;\n className?: string;\n label?: string;\n leadingIcon?: ReactNode;\n};\n\nexport function TrayDropdown({\n value,\n options,\n onSelect,\n onOpen,\n ariaLabel,\n disabled = false,\n className,\n label,\n leadingIcon,\n}: TrayDropdownProps) {\n const { open, toggle, close, rootRef, menuRef } = useTrayDropdown(onOpen);\n const selected = options.find((option) => option.value === value);\n const isBorder = !!leadingIcon;\n\n const handleSelect = (next: string) => {\n if (next !== value) onSelect(next);\n close();\n };\n\n return (\n <div\n ref={rootRef}\n className={`wv-tray-dropdown wv-pe${className ? ` ${className}` : \"\"}`}\n >\n <button\n type=\"button\"\n className={`wv-tray-dropdown-trigger wv-pe${\n isBorder\n ? \" wv-tray-dropdown-trigger--border\"\n : \" wv-tray-dropdown-trigger--card\"\n }${open ? \" wv-tray-dropdown-trigger--open\" : \"\"}`}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled}\n onPointerDown={stopTrayDropdownTriggerPointerDown}\n onClick={toggle}\n >\n {label ? <span className=\"wv-typo-card-label\">{label}</span> : null}\n {leadingIcon}\n {isBorder ? (\n <>\n <span className=\"wv-tray-dropdown-value wv-tray-dropdown-value--border\">\n {selected?.label ?? value}\n </span>\n <span className=\"wv-tray-dropdown-trailing wv-tray-dropdown-trailing--end\">\n <span\n className={`wv-tray-dropdown-chevron${\n open ? \" wv-tray-dropdown-chevron--open\" : \"\"\n }`}\n >\n <TypoChevronIcon />\n </span>\n </span>\n </>\n ) : (\n <span className=\"wv-tray-dropdown-trailing\">\n <span className=\"wv-tray-dropdown-value\">\n {selected?.label ?? value}\n </span>\n <span\n className={`wv-tray-dropdown-chevron${\n open ? \" wv-tray-dropdown-chevron--open\" : \"\"\n }`}\n >\n <TypoChevronIcon />\n </span>\n </span>\n )}\n </button>\n {open ? (\n <TrayDropdownMenu\n menuRef={menuRef}\n value={value}\n options={options}\n onSelect={handleSelect}\n ariaLabel={ariaLabel}\n />\n ) : null}\n </div>\n );\n}\n\ntype TrayDropdownChevronTriggerProps = {\n open: boolean;\n onClick: () => void;\n ariaLabel: string;\n disabled?: boolean;\n};\n\nexport function TrayDropdownChevronTrigger({\n open,\n onClick,\n ariaLabel,\n disabled = false,\n}: TrayDropdownChevronTriggerProps) {\n return (\n <button\n type=\"button\"\n className=\"wv-tray-dropdown-chevron-trigger wv-pe\"\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled}\n onPointerDown={stopTrayDropdownTriggerPointerDown}\n onClick={onClick}\n >\n <span\n className={`wv-tray-dropdown-chevron${\n open ? \" wv-tray-dropdown-chevron--open\" : \"\"\n }`}\n >\n <TypoChevronIcon />\n </span>\n </button>\n );\n}\n","import { useState } from \"react\";\nimport { ColorPicker } from \"./ColorPicker\";\nimport { NumberInput } from \"./NumberInput\";\nimport { BorderTypeIcon, BoxSidesToggleIcon } from \"./boxSpacingIcons\";\nimport { TrayDropdown } from \"./TrayDropdown\";\n\nconst BORDER_STYLE_OPTIONS = [\n { value: \"none\", label: \"None\" },\n { value: \"solid\", label: \"Solid\" },\n { value: \"dashed\", label: \"Dashed\" },\n { value: \"dotted\", label: \"Dotted\" },\n { value: \"double\", label: \"Double\" },\n] as const;\n\ntype BorderSide = \"top\" | \"right\" | \"bottom\" | \"left\";\ntype BorderWidthAxis = \"all\" | BorderSide;\n\ntype BorderWidthValues = { top: number; right: number; bottom: number; left: number };\n\ntype BorderControlProps = {\n style: string;\n color: string;\n widths: BorderWidthValues;\n onStyleChange: (v: string) => void;\n onStyleCommit: (v: string) => void;\n onColorChange: (v: string, styleTarget: Element) => void;\n onColorCommit: (v: string, commitTarget: Element, fromSnapshotHex?: string) => void;\n onWidthChange: (axis: BorderWidthAxis, value: number) => void;\n onWidthCommit: (axis: BorderWidthAxis, value: number) => void;\n onFocusStyle?: () => void;\n onFocusWidth?: (axis: BorderWidthAxis) => void;\n onCancelWidth?: (axis: BorderWidthAxis) => void;\n onFocusColor?: () => void;\n styleCommitTarget: Element;\n selectionDismissSignal?: unknown;\n};\n\nconst SIDE_ROWS: Array<[BorderSide, BorderSide]> = [\n [\"left\", \"top\"],\n [\"right\", \"bottom\"],\n];\n\nconst SIDE_LABELS: Record<BorderSide, string> = {\n left: \"L\",\n top: \"T\",\n right: \"R\",\n bottom: \"B\",\n};\n\nfunction sideCssProperty(side: BorderSide): string {\n return `border-${side}-width`;\n}\n\nfunction sideDisplayLabel(side: BorderSide): string {\n const names: Record<BorderSide, string> = {\n left: \"Left\",\n top: \"Top\",\n right: \"Right\",\n bottom: \"Bottom\",\n };\n return `Border Weight ${names[side]}`;\n}\n\nexport function BorderControl({\n style,\n color,\n widths,\n onStyleChange,\n onStyleCommit,\n onColorChange,\n onColorCommit,\n onWidthChange,\n onWidthCommit,\n onFocusStyle,\n onFocusWidth,\n onCancelWidth,\n onFocusColor,\n styleCommitTarget,\n selectionDismissSignal,\n}: BorderControlProps) {\n const [weightMode, setWeightMode] = useState<\"all\" | \"sides\">(\"all\");\n const borderFieldsDisabled = style === \"none\";\n\n const unifiedWeight = Math.round(\n (widths.top + widths.right + widths.bottom + widths.left) / 4,\n );\n\n const handleStyleSelect = (next: string) => {\n onFocusStyle?.();\n onStyleChange(next);\n onStyleCommit(next);\n };\n\n const renderWeightField = (\n axis: BorderWidthAxis,\n label: string,\n value: number,\n cssProperty: string,\n displayLabel: string,\n ) => (\n <div\n className={`wv-typo-card wv-border-weight-card${borderFieldsDisabled ? \" wv-border-weight-card--disabled\" : \"\"}`}\n >\n <span className=\"wv-typo-card-label\">{label}</span>\n <NumberInput\n cssProperty={cssProperty}\n displayLabel={displayLabel}\n value={value}\n unit=\"px\"\n min={0}\n max={99}\n variant=\"card\"\n disabled={borderFieldsDisabled}\n onChange={(v) => onWidthChange(axis, parseFloat(v))}\n onCommit={(v) => onWidthCommit(axis, parseFloat(v))}\n onFocus={() => onFocusWidth?.(axis)}\n onCancel={() => onCancelWidth?.(axis)}\n />\n </div>\n );\n\n const weightRow = (\n <div className=\"wv-box-spacing-row\">\n {weightMode === \"all\" ? (\n <div className=\"wv-box-spacing-cards\">\n {renderWeightField(\n \"all\",\n \"Weight\",\n unifiedWeight,\n \"border-width\",\n \"Border Weight\",\n )}\n </div>\n ) : (\n <div className=\"wv-box-spacing-sides\">\n {SIDE_ROWS.map(([a, b]) => (\n <div key={`${a}-${b}`} className=\"wv-box-spacing-sides-row\">\n {renderWeightField(a, SIDE_LABELS[a], widths[a], sideCssProperty(a), sideDisplayLabel(a))}\n {renderWeightField(b, SIDE_LABELS[b], widths[b], sideCssProperty(b), sideDisplayLabel(b))}\n </div>\n ))}\n </div>\n )}\n <button\n type=\"button\"\n className={`wv-box-spacing-toggle wv-pe${weightMode === \"sides\" ? \" wv-box-spacing-toggle--active\" : \"\"}`}\n title={weightMode === \"sides\" ? \"Use unified weight\" : \"Edit each side\"}\n aria-label={weightMode === \"sides\" ? \"Use unified weight\" : \"Edit each side\"}\n aria-pressed={weightMode === \"sides\"}\n disabled={borderFieldsDisabled}\n onClick={() => setWeightMode((m) => (m === \"all\" ? \"sides\" : \"all\"))}\n >\n <BoxSidesToggleIcon />\n </button>\n </div>\n );\n\n return (\n <div className=\"wv-box-subsection wv-border-section\">\n <span className=\"wv-box-subsection-title\">Box Border</span>\n\n <TrayDropdown\n value={style}\n options={BORDER_STYLE_OPTIONS}\n leadingIcon={<BorderTypeIcon />}\n ariaLabel=\"Border style\"\n onOpen={onFocusStyle}\n onSelect={handleStyleSelect}\n />\n\n <ColorPicker\n variant=\"card\"\n cardLabel=\"Border Colour\"\n opacityLabel=\"Border Opacity\"\n value={color}\n onChange={onColorChange}\n onCommit={onColorCommit}\n onFocus={onFocusColor}\n styleCommitTarget={styleCommitTarget}\n selectionDismissSignal={selectionDismissSignal}\n disabled={borderFieldsDisabled}\n />\n\n {weightRow}\n </div>\n );\n}\n","import { useState, type ReactNode } from \"react\";\nimport { NumberInput } from \"./NumberInput\";\nimport {\n BoxSidesToggleIcon,\n MarginBottomIcon,\n MarginHorizontalIcon,\n MarginLeftIcon,\n MarginRightIcon,\n MarginTopIcon,\n MarginVerticalIcon,\n PaddingBottomIcon,\n PaddingHorizontalIcon,\n PaddingLeftIcon,\n PaddingRightIcon,\n PaddingTopIcon,\n PaddingVerticalIcon,\n} from \"./boxSpacingIcons\";\n\ntype BoxSide = \"top\" | \"right\" | \"bottom\" | \"left\";\ntype BoxAxis = \"v\" | \"h\";\n\ntype BoxValues = { top: number; right: number; bottom: number; left: number };\n\ntype BoxControlProps = {\n property: \"margin\" | \"padding\";\n values: BoxValues;\n /**\n * Receives axis (\"v\" | \"h\") in V/H mode, or a side name in 4-side mode.\n * \"v\" means top + bottom together. \"h\" means left + right together.\n */\n onChange: (axis: BoxAxis | BoxSide, value: number) => void;\n onCommit: (axis: BoxAxis | BoxSide, value: number) => void;\n onFocus?: (axis: BoxAxis | BoxSide) => void;\n /** Escape on a number field: revert live preview for the affected side(s). */\n onDeferCancel?: (axis: BoxAxis | BoxSide) => void;\n};\n\nconst SIDE_ROWS: Array<[BoxSide, BoxSide]> = [\n [\"left\", \"top\"],\n [\"right\", \"bottom\"],\n];\n\nfunction sideIcon(property: \"margin\" | \"padding\", side: BoxSide): ReactNode {\n if (property === \"margin\") {\n const icons = {\n left: <MarginLeftIcon />,\n top: <MarginTopIcon />,\n right: <MarginRightIcon />,\n bottom: <MarginBottomIcon />,\n };\n return icons[side];\n }\n const icons = {\n left: <PaddingLeftIcon />,\n top: <PaddingTopIcon />,\n right: <PaddingRightIcon />,\n bottom: <PaddingBottomIcon />,\n };\n return icons[side];\n}\n\nfunction sideLabel(property: \"margin\" | \"padding\", side: BoxSide): string {\n const name = property === \"margin\" ? \"Margin\" : \"Padding\";\n return `${name} ${side}`;\n}\n\nexport function BoxControl({\n property,\n values,\n onChange,\n onCommit,\n onFocus,\n onDeferCancel,\n}: BoxControlProps) {\n const [mode, setMode] = useState<\"vh\" | \"sides\">(\"vh\");\n\n const vValue = Math.round((values.top + values.bottom) / 2);\n const hValue = Math.round((values.left + values.right) / 2);\n\n const label = property === \"margin\" ? \"Margin\" : \"Padding\";\n const minVal = property === \"padding\" ? 0 : -999;\n\n const hIcon =\n property === \"margin\" ? <MarginHorizontalIcon /> : <PaddingHorizontalIcon />;\n const vIcon =\n property === \"margin\" ? <MarginVerticalIcon /> : <PaddingVerticalIcon />;\n\n const renderField = (icon: ReactNode, axis: BoxAxis | BoxSide, value: number) => (\n <div className=\"wv-typo-icon-card wv-box-spacing-card\">\n {icon}\n <NumberInput\n cssProperty={\n axis === \"h\"\n ? `${property}-left`\n : axis === \"v\"\n ? `${property}-top`\n : `${property}-${axis}`\n }\n displayLabel={\n axis === \"h\"\n ? `${label} horizontal`\n : axis === \"v\"\n ? `${label} vertical`\n : sideLabel(property, axis)\n }\n value={value}\n unit=\"px\"\n min={minVal}\n variant=\"card\"\n onChange={(v) => onChange(axis, parseFloat(v))}\n onCommit={(v) => onCommit(axis, parseFloat(v))}\n onFocus={() => onFocus?.(axis)}\n onCancel={() => onDeferCancel?.(axis)}\n />\n </div>\n );\n\n return (\n <div className=\"wv-box-spacing-row\">\n {mode === \"vh\" ? (\n <div className=\"wv-box-spacing-cards\">\n {renderField(hIcon, \"h\", hValue)}\n {renderField(vIcon, \"v\", vValue)}\n </div>\n ) : (\n <div className=\"wv-box-spacing-sides\">\n {SIDE_ROWS.map(([a, b]) => (\n <div key={`${a}-${b}`} className=\"wv-box-spacing-sides-row\">\n {renderField(sideIcon(property, a), a, values[a])}\n {renderField(sideIcon(property, b), b, values[b])}\n </div>\n ))}\n </div>\n )}\n <button\n type=\"button\"\n className={`wv-box-spacing-toggle wv-pe${mode === \"sides\" ? \" wv-box-spacing-toggle--active\" : \"\"}`}\n title={mode === \"sides\" ? \"Use vertical / horizontal inputs\" : \"Edit each side\"}\n aria-label={mode === \"sides\" ? \"Use vertical / horizontal inputs\" : \"Edit each side\"}\n aria-pressed={mode === \"sides\"}\n onClick={() => setMode((m) => (m === \"vh\" ? \"sides\" : \"vh\"))}\n >\n <BoxSidesToggleIcon />\n </button>\n </div>\n );\n}\n","import { TrayDropdown } from \"./TrayDropdown\";\n\ntype Option = { value: string; label: string };\n\ntype CardSelectControlProps = {\n label: string;\n value: string;\n options: Option[];\n ariaLabel?: string;\n onFocus?: () => void;\n onCommit: (value: string) => void;\n};\n\nexport function CardSelectControl({\n label,\n value,\n options,\n ariaLabel,\n onFocus,\n onCommit,\n}: CardSelectControlProps) {\n return (\n <TrayDropdown\n label={label}\n value={value}\n options={options}\n ariaLabel={ariaLabel ?? label}\n onOpen={onFocus}\n onSelect={onCommit}\n />\n );\n}\n","import { useCallback, useRef, useState } from \"react\";\nimport type { DimensionSizingMode } from \"../../engine/dimensionSizing\";\nimport { dimensionSizingLabel } from \"../../engine/dimensionSizing\";\nimport { roundTo2 } from \"../../engine/roundNumber\";\nimport { AspectRatioLockIcon } from \"./boxSpacingIcons\";\nimport { NumberInput } from \"./NumberInput\";\nimport { TrayDropdownMenu, useDismissOnOutsidePointerDown, stopTrayDropdownTriggerPointerDown } from \"./TrayDropdown\";\n\nconst SIZING_OPTIONS = [\n { value: \"fill\", label: \"Fill container\" },\n { value: \"hug\", label: \"Hug content\" },\n] as const;\n\ntype DimensionProp = \"width\" | \"height\";\n\nexport type DimensionControlProps = {\n width: number;\n height: number;\n widthMode?: DimensionSizingMode;\n heightMode?: DimensionSizingMode;\n /** Show Fill / Hug sizing menu on W and H labels. Off for SVG. */\n sizingModes?: boolean;\n widthDisplayLabel: string;\n heightDisplayLabel: string;\n onDimensionChange: (prop: DimensionProp, value: string) => void;\n onDimensionCommit: (prop: DimensionProp, value: string) => void;\n onDimensionFocus: (prop: DimensionProp) => void;\n onDimensionCancel: (prop: DimensionProp) => void;\n onDimensionModeCommit?: (prop: DimensionProp, mode: \"fill\" | \"hug\") => void;\n onDimensionRestoreFixed?: (prop: DimensionProp) => void;\n};\n\nexport function formatPx(n: number): string {\n return `${roundTo2(n)}px`;\n}\n\nexport function pairedDimension(\n prop: DimensionProp,\n value: number,\n ratio: number,\n): { width: string; height: string } {\n if (prop === \"width\") {\n const h = Math.max(1, roundTo2(value / ratio));\n return { width: formatPx(value), height: formatPx(h) };\n }\n const w = Math.max(1, roundTo2(value * ratio));\n return { width: formatPx(w), height: formatPx(value) };\n}\n\nexport function DimensionControl({\n width,\n height,\n widthMode = \"fixed\",\n heightMode = \"fixed\",\n sizingModes = true,\n widthDisplayLabel,\n heightDisplayLabel,\n onDimensionChange,\n onDimensionCommit,\n onDimensionFocus,\n onDimensionCancel,\n onDimensionModeCommit,\n onDimensionRestoreFixed,\n}: DimensionControlProps) {\n const [aspectLocked, setAspectLocked] = useState(true);\n const [focusAfterRestore, setFocusAfterRestore] = useState<DimensionProp | null>(\n null,\n );\n const [sizingMenu, setSizingMenu] = useState<DimensionProp | null>(null);\n const sizingRootRef = useRef<HTMLDivElement>(null);\n const sizingMenuRef = useRef<HTMLDivElement>(null);\n const aspectRatioRef = useRef(width / height || 1);\n\n useDismissOnOutsidePointerDown(!!sizingMenu, sizingRootRef, () => {\n setSizingMenu(null);\n }, sizingMenuRef);\n\n const syncAspectRatio = useCallback(() => {\n aspectRatioRef.current = height > 0 ? width / height : 1;\n }, [width, height]);\n\n const canPair =\n aspectLocked && widthMode === \"fixed\" && heightMode === \"fixed\";\n\n const handleFocus = (prop: DimensionProp) => {\n syncAspectRatio();\n onDimensionFocus(prop);\n if (canPair) {\n onDimensionFocus(prop === \"width\" ? \"height\" : \"width\");\n }\n };\n\n const handleChange = (prop: DimensionProp, value: string) => {\n const num = parseFloat(value);\n if (!Number.isFinite(num) || num <= 0) return;\n\n if (!canPair) {\n onDimensionChange(prop, value);\n return;\n }\n\n const paired = pairedDimension(prop, num, aspectRatioRef.current);\n onDimensionChange(\"width\", paired.width);\n onDimensionChange(\"height\", paired.height);\n };\n\n const handleCommit = (prop: DimensionProp, value: string) => {\n const num = parseFloat(value);\n if (!Number.isFinite(num) || num <= 0) return;\n\n if (!canPair) {\n onDimensionCommit(prop, value);\n return;\n }\n\n const paired = pairedDimension(prop, num, aspectRatioRef.current);\n onDimensionCommit(\"width\", paired.width);\n onDimensionCommit(\"height\", paired.height);\n };\n\n const handleCancel = (prop: DimensionProp) => {\n onDimensionCancel(prop);\n if (canPair) {\n onDimensionCancel(prop === \"width\" ? \"height\" : \"width\");\n }\n };\n\n const toggleSizingMenu = (prop: DimensionProp) => {\n onDimensionFocus(prop);\n setSizingMenu((current) => (current === prop ? null : prop));\n };\n\n const renderLabel = (prop: DimensionProp, label: \"W\" | \"H\", displayLabel: string) => {\n if (!sizingModes) {\n return <span className=\"wv-typo-card-label\">{label}</span>;\n }\n return (\n <button\n type=\"button\"\n className=\"wv-dimension-label-trigger wv-pe\"\n aria-label={`${displayLabel} sizing`}\n aria-expanded={sizingMenu === prop}\n aria-haspopup=\"listbox\"\n onPointerDown={stopTrayDropdownTriggerPointerDown}\n onClick={() => toggleSizingMenu(prop)}\n >\n <span className=\"wv-typo-card-label\">{label}</span>\n </button>\n );\n };\n\n const renderValue = (\n prop: DimensionProp,\n mode: DimensionSizingMode,\n value: number,\n displayLabel: string,\n ) => {\n if (sizingModes && mode !== \"fixed\") {\n return (\n <button\n type=\"button\"\n className=\"wv-dimension-mode-value wv-pe\"\n aria-label={`${displayLabel}: ${dimensionSizingLabel(mode)}. Click to edit fixed size.`}\n onPointerDown={(e) => {\n e.preventDefault();\n setFocusAfterRestore(prop);\n onDimensionRestoreFixed?.(prop);\n }}\n >\n {dimensionSizingLabel(mode)}\n </button>\n );\n }\n\n return (\n <NumberInput\n cssProperty={prop}\n displayLabel={displayLabel}\n value={value}\n unit=\"px\"\n min={1}\n variant=\"card\"\n autoFocus={focusAfterRestore === prop}\n onChange={(v) => handleChange(prop, v)}\n onCommit={(v) => handleCommit(prop, v)}\n onFocus={() => {\n setFocusAfterRestore((current) => (current === prop ? null : current));\n handleFocus(prop);\n }}\n onCancel={() => handleCancel(prop)}\n />\n );\n };\n\n const sizingMenuValue =\n sizingMenu === \"width\"\n ? widthMode === \"fixed\"\n ? \"\"\n : widthMode\n : sizingMenu === \"height\"\n ? heightMode === \"fixed\"\n ? \"\"\n : heightMode\n : \"\";\n\n const sizingMenuLabel =\n sizingMenu === \"width\"\n ? widthDisplayLabel\n : sizingMenu === \"height\"\n ? heightDisplayLabel\n : \"\";\n\n return (\n <div\n ref={sizingRootRef}\n className={`wv-tray-dropdown wv-dimension-dropdown wv-pe${\n sizingMenu ? \" wv-dimension-dropdown--open\" : \"\"\n }`}\n >\n <div className=\"wv-dimension-row\">\n <div className=\"wv-typo-card\">\n {renderLabel(\"width\", \"W\", widthDisplayLabel)}\n {renderValue(\"width\", widthMode, width, widthDisplayLabel)}\n </div>\n <div className=\"wv-typo-card\">\n {renderLabel(\"height\", \"H\", heightDisplayLabel)}\n {renderValue(\"height\", heightMode, height, heightDisplayLabel)}\n </div>\n <button\n type=\"button\"\n className={`wv-box-spacing-toggle wv-pe${aspectLocked ? \" wv-box-spacing-toggle--active\" : \"\"}`}\n title={aspectLocked ? \"Unlock aspect ratio\" : \"Lock aspect ratio\"}\n aria-label={aspectLocked ? \"Unlock aspect ratio\" : \"Lock aspect ratio\"}\n aria-pressed={aspectLocked}\n onClick={() => {\n syncAspectRatio();\n setAspectLocked((locked) => !locked);\n }}\n >\n <AspectRatioLockIcon />\n </button>\n </div>\n {sizingMenu ? (\n <TrayDropdownMenu\n menuRef={sizingMenuRef}\n value={sizingMenuValue}\n options={SIZING_OPTIONS}\n ariaLabel={`${sizingMenuLabel} sizing`}\n onSelect={(mode) => {\n if (mode === \"fill\" || mode === \"hug\") {\n onDimensionModeCommit?.(sizingMenu, mode);\n }\n setSizingMenu(null);\n }}\n />\n ) : null}\n </div>\n );\n}\n","import {\n Fragment,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type PointerEvent,\n} from \"react\";\nimport { formatNumberMax2, roundTo2 } from \"../../engine/roundNumber\";\n\nconst THUMB_WIDTH = 2;\nconst THUMB_INSET = 4;\nconst TICK_COUNT = 8;\n\ntype OpacityControlProps = {\n /** CSS opacity value: 0.0 to 1.0 */\n value: number;\n /** Called live during scrub drag. */\n onChange: (value: number) => void;\n /** Called when the user releases the scrub. */\n onCommit: (value: number) => void;\n /** Called on focus so the parent can record the \"from\" value. */\n onFocus?: () => void;\n /** Called on Escape so the parent can revert live preview. */\n onCancel?: () => void;\n};\n\ntype TickClip = {\n left: number;\n right: number;\n};\n\nfunction rectsOverlap(aStart: number, aEnd: number, bStart: number, bEnd: number): boolean {\n return aEnd > bStart && aStart < bEnd;\n}\n\nfunction OpacityTickLines({\n variant,\n clipPath,\n}: {\n variant: \"dim\" | \"bright\";\n clipPath?: string;\n}) {\n return (\n <div\n className={`wv-opacity-card-ticks wv-opacity-card-ticks--${variant}`}\n style={clipPath ? { clipPath } : undefined}\n aria-hidden\n >\n <span className=\"wv-opacity-card-tick-spacer\" />\n {Array.from({ length: TICK_COUNT }, (_, index) => (\n <Fragment key={index}>\n <span className=\"wv-opacity-card-tick\" />\n <span className=\"wv-opacity-card-tick-spacer\" />\n </Fragment>\n ))}\n </div>\n );\n}\n\nfunction parsePercentInput(input: string): number | null {\n const n = parseFloat(input.replace(/%/g, \"\").trim());\n if (!Number.isFinite(n)) return null;\n return roundTo2(Math.max(0, Math.min(100, n)));\n}\n\nfunction percentToOpacity(pct: number): number {\n return roundTo2(pct / 100);\n}\n\nexport function OpacityControl({\n value,\n onChange,\n onCommit,\n onFocus,\n onCancel,\n}: OpacityControlProps) {\n const cardRef = useRef<HTMLDivElement>(null);\n const fillRef = useRef<HTMLDivElement>(null);\n const labelRef = useRef<HTMLSpanElement>(null);\n const valueWrapRef = useRef<HTMLDivElement>(null);\n const isDraggingRef = useRef(false);\n const [isHovered, setIsHovered] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [editing, setEditing] = useState(false);\n const [raw, setRaw] = useState(\"\");\n const [tickClip, setTickClip] = useState<TickClip>({ left: 0, right: 0 });\n const [thumbLeft, setThumbLeft] = useState(0);\n const [thumbDimmed, setThumbDimmed] = useState(false);\n\n const pct = Math.round(value * 100);\n const interactive = isHovered || isDragging;\n const fillPct = pct;\n\n useEffect(() => {\n if (!editing) setRaw(formatNumberMax2(pct));\n }, [pct, editing]);\n\n const getValueFromEvent = (clientX: number): number => {\n const card = cardRef.current;\n if (!card) return value;\n const rect = card.getBoundingClientRect();\n return Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n };\n\n const updateLayout = useCallback(() => {\n const card = cardRef.current;\n const fillEl = fillRef.current;\n const labelEl = labelRef.current;\n const valueEl = valueWrapRef.current;\n if (!card || !fillEl) return;\n\n const cardRect = card.getBoundingClientRect();\n const cardWidth = cardRect.width;\n if (cardWidth <= 0) return;\n\n const fillRect = fillEl.getBoundingClientRect();\n const fillPx = fillRect.right - cardRect.left;\n const labelEndPx = labelEl\n ? labelEl.getBoundingClientRect().right - cardRect.left\n : 0;\n\n setTickClip({\n left: Math.max(0, labelEndPx),\n right: 0,\n });\n\n const thumbStart = fillPx - THUMB_INSET - THUMB_WIDTH;\n const thumbEnd = fillPx - THUMB_INSET;\n setThumbLeft(Math.max(0, thumbStart));\n\n let overlapsText = false;\n if (labelEl) {\n const labelRect = labelEl.getBoundingClientRect();\n const labelStart = labelRect.left - cardRect.left;\n const labelEnd = labelRect.right - cardRect.left;\n overlapsText = overlapsText || rectsOverlap(thumbStart, thumbEnd, labelStart, labelEnd);\n }\n if (valueEl) {\n const valueRect = valueEl.getBoundingClientRect();\n const valueStartPx = valueRect.left - cardRect.left;\n const valueEnd = valueRect.right - cardRect.left;\n overlapsText = overlapsText || rectsOverlap(thumbStart, thumbEnd, valueStartPx, valueEnd);\n }\n setThumbDimmed(overlapsText);\n }, [fillPct]);\n\n useLayoutEffect(() => {\n updateLayout();\n const card = cardRef.current;\n if (!card) return;\n\n if (typeof ResizeObserver === \"undefined\") {\n window.addEventListener(\"resize\", updateLayout);\n return () => window.removeEventListener(\"resize\", updateLayout);\n }\n\n const observer = new ResizeObserver(updateLayout);\n observer.observe(card);\n if (fillRef.current) observer.observe(fillRef.current);\n if (labelRef.current) observer.observe(labelRef.current);\n if (valueWrapRef.current) observer.observe(valueWrapRef.current);\n\n return () => observer.disconnect();\n }, [updateLayout, pct, interactive, editing]);\n\n const commitInput = (inputRaw: string) => {\n setEditing(false);\n const parsedPct = parsePercentInput(inputRaw);\n if (parsedPct === null) {\n setRaw(formatNumberMax2(pct));\n return;\n }\n onCommit(percentToOpacity(parsedPct));\n };\n\n const handleValueFocus = (e: FocusEvent<HTMLInputElement>) => {\n onFocus?.();\n setEditing(true);\n setRaw(formatNumberMax2(pct));\n e.target.select();\n };\n\n const handleValueChange = (e: ChangeEvent<HTMLInputElement>) => {\n setRaw(e.target.value);\n const parsedPct = parsePercentInput(e.target.value);\n if (parsedPct !== null) onChange(percentToOpacity(parsedPct));\n };\n\n const handleValueKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n e.stopPropagation();\n if (e.key === \"Enter\") {\n e.preventDefault();\n commitInput(raw);\n }\n if (e.key === \"Escape\") {\n onCancel?.();\n setRaw(formatNumberMax2(pct));\n setEditing(false);\n e.currentTarget.blur();\n }\n };\n\n const handleValuePointerDown = (e: PointerEvent<HTMLInputElement>) => {\n e.stopPropagation();\n };\n\n const handlePointerEnter = () => {\n setIsHovered(true);\n };\n\n const handlePointerLeave = () => {\n setIsHovered(false);\n };\n\n const handlePointerDown = (e: PointerEvent<HTMLDivElement>) => {\n if (editing) return;\n if (e.target instanceof HTMLElement && e.target.closest(\".wv-opacity-card-value-wrap\")) {\n return;\n }\n e.preventDefault();\n e.currentTarget.setPointerCapture(e.pointerId);\n isDraggingRef.current = true;\n setIsDragging(true);\n onFocus?.();\n onChange(roundTo2(getValueFromEvent(e.clientX)));\n };\n\n const handlePointerMove = (e: PointerEvent<HTMLDivElement>) => {\n if (!isDraggingRef.current) return;\n e.preventDefault();\n onChange(roundTo2(getValueFromEvent(e.clientX)));\n };\n\n const handlePointerUp = (e: PointerEvent<HTMLDivElement>) => {\n if (!isDraggingRef.current) return;\n isDraggingRef.current = false;\n setIsDragging(false);\n e.currentTarget.releasePointerCapture(e.pointerId);\n onCommit(roundTo2(getValueFromEvent(e.clientX)));\n };\n\n const brightTickClip =\n tickClip.left > 0 ? `inset(0 0px 0 ${tickClip.left}px)` : undefined;\n\n return (\n <div\n ref={cardRef}\n className={`wv-opacity-card wv-pe${interactive ? \" wv-opacity-card--interactive\" : \"\"}${editing ? \" wv-opacity-card--editing-value\" : \"\"}`}\n onPointerEnter={handlePointerEnter}\n onPointerLeave={handlePointerLeave}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n >\n {interactive && (\n <>\n <OpacityTickLines variant=\"dim\" />\n <OpacityTickLines variant=\"bright\" clipPath={brightTickClip} />\n </>\n )}\n <div\n ref={fillRef}\n className=\"wv-opacity-card-fill\"\n style={{ width: `${fillPct}%` }}\n aria-hidden\n />\n {interactive && (\n <div\n className={`wv-opacity-card-thumb${thumbDimmed ? \" wv-opacity-card-thumb--dim\" : \"\"}`}\n style={{ left: `${thumbLeft}px` }}\n aria-hidden\n />\n )}\n <div className=\"wv-opacity-card-content\">\n <span ref={labelRef} className=\"wv-opacity-card-label\">\n Opacity\n </span>\n <div ref={valueWrapRef} className=\"wv-opacity-card-value-wrap wv-pe\">\n <input\n type=\"text\"\n inputMode=\"decimal\"\n className=\"wv-opacity-card-value-input wv-pe\"\n value={editing ? raw : formatNumberMax2(pct)}\n aria-label=\"Opacity\"\n onFocus={handleValueFocus}\n onChange={handleValueChange}\n onBlur={(e) => commitInput(e.target.value)}\n onKeyDown={handleValueKeyDown}\n onPointerDown={handleValuePointerDown}\n />\n <span className=\"wv-opacity-card-value-unit\" aria-hidden>\n %\n </span>\n </div>\n </div>\n </div>\n );\n}\n","import { useState, type ReactNode } from \"react\";\nimport {\n BoxSidesToggleIcon,\n RadiusAllCornersIcon,\n RadiusBottomLeftIcon,\n RadiusBottomRightIcon,\n RadiusTopLeftIcon,\n RadiusTopRightIcon,\n} from \"./boxSpacingIcons\";\nimport { NumberInput } from \"./NumberInput\";\n\ntype CornerKey = \"tl\" | \"tr\" | \"br\" | \"bl\";\ntype RadiusValues = { tl: number; tr: number; br: number; bl: number };\n\ntype RadiusControlProps = {\n values: RadiusValues;\n onSingleChange: (v: string) => void;\n onSingleCommit: (v: string) => void;\n onCornerChange: (corner: CornerKey, v: string) => void;\n onCornerCommit: (corner: CornerKey, v: string) => void;\n onFocus?: (corner: \"all\" | CornerKey) => void;\n onDeferCancel?: (corner: \"all\" | CornerKey) => void;\n};\n\nconst CORNER_ROWS: Array<[CornerKey, CornerKey]> = [\n [\"tl\", \"tr\"],\n [\"bl\", \"br\"],\n];\n\nconst CORNER_CSS: Record<CornerKey, string> = {\n tl: \"border-top-left-radius\",\n tr: \"border-top-right-radius\",\n br: \"border-bottom-right-radius\",\n bl: \"border-bottom-left-radius\",\n};\n\nconst CORNER_LABELS: Record<CornerKey, string> = {\n tl: \"Top Left\",\n tr: \"Top Right\",\n br: \"Bottom Right\",\n bl: \"Bottom Left\",\n};\n\nfunction cornerIcon(key: CornerKey): ReactNode {\n const icons = {\n tl: <RadiusTopLeftIcon />,\n tr: <RadiusTopRightIcon />,\n br: <RadiusBottomRightIcon />,\n bl: <RadiusBottomLeftIcon />,\n };\n return icons[key];\n}\n\nexport function RadiusControl({\n values,\n onSingleChange,\n onSingleCommit,\n onCornerChange,\n onCornerCommit,\n onFocus,\n onDeferCancel,\n}: RadiusControlProps) {\n const [mode, setMode] = useState<\"single\" | \"corners\">(\"single\");\n\n const avgRadius = Math.round((values.tl + values.tr + values.br + values.bl) / 4);\n\n const renderRadiusField = (\n corner: \"all\" | CornerKey,\n icon: ReactNode,\n value: number,\n cssProperty: string,\n displayLabel: string,\n onChange: (v: string) => void,\n onCommit: (v: string) => void,\n ) => (\n <div className=\"wv-typo-icon-card wv-box-spacing-card\">\n {icon}\n <NumberInput\n cssProperty={cssProperty}\n displayLabel={displayLabel}\n value={value}\n unit=\"px\"\n min={0}\n variant=\"card\"\n onChange={onChange}\n onCommit={onCommit}\n onFocus={() => onFocus?.(corner)}\n onCancel={() => onDeferCancel?.(corner)}\n />\n </div>\n );\n\n return (\n <div className=\"wv-box-subsection wv-radius-section\">\n <span className=\"wv-box-subsection-title\">Corner Radius</span>\n\n <div className=\"wv-box-spacing-row\">\n {mode === \"single\" ? (\n <div className=\"wv-box-spacing-cards\">\n {renderRadiusField(\n \"all\",\n <RadiusAllCornersIcon />,\n avgRadius,\n \"border-radius\",\n \"Corner Radius\",\n onSingleChange,\n onSingleCommit,\n )}\n </div>\n ) : (\n <div className=\"wv-box-spacing-sides\">\n {CORNER_ROWS.map(([a, b]) => (\n <div key={`${a}-${b}`} className=\"wv-box-spacing-sides-row\">\n {renderRadiusField(\n a,\n cornerIcon(a),\n values[a],\n CORNER_CSS[a],\n `Corner Radius ${CORNER_LABELS[a]}`,\n (v) => onCornerChange(a, v),\n (v) => onCornerCommit(a, v),\n )}\n {renderRadiusField(\n b,\n cornerIcon(b),\n values[b],\n CORNER_CSS[b],\n `Corner Radius ${CORNER_LABELS[b]}`,\n (v) => onCornerChange(b, v),\n (v) => onCornerCommit(b, v),\n )}\n </div>\n ))}\n </div>\n )}\n <button\n type=\"button\"\n className={`wv-box-spacing-toggle wv-pe${mode === \"corners\" ? \" wv-box-spacing-toggle--active\" : \"\"}`}\n title={mode === \"corners\" ? \"Use unified radius\" : \"Edit each corner\"}\n aria-label={mode === \"corners\" ? \"Use unified radius\" : \"Edit each corner\"}\n aria-pressed={mode === \"corners\"}\n onClick={() => setMode((m) => (m === \"single\" ? \"corners\" : \"single\"))}\n >\n <BoxSidesToggleIcon />\n </button>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype IconProps = { className?: string };\n\nfunction LayoutTypeIcon({\n className,\n children,\n}: IconProps & { children: React.ReactNode }) {\n return (\n <svg\n className={`wv-layout-type-icon${className ? ` ${className}` : \"\"}`}\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\n\n/** Flex column — stacked horizontal bars. */\nexport function LayoutVerticalIcon(props: IconProps) {\n return (\n <LayoutTypeIcon {...props}>\n <g clipPath=\"url(#wv_layout_vertical_clip)\">\n <path\n d=\"M2.5 3.75C2.5 3.41848 2.6317 3.10054 2.86612 2.86612C3.10054 2.6317 3.41848 2.5 3.75 2.5H11.25C11.5815 2.5 11.8995 2.6317 12.1339 2.86612C12.3683 3.10054 12.5 3.41848 12.5 3.75V5C12.5 5.33152 12.3683 5.64946 12.1339 5.88388C11.8995 6.1183 11.5815 6.25 11.25 6.25H3.75C3.41848 6.25 3.10054 6.1183 2.86612 5.88388C2.6317 5.64946 2.5 5.33152 2.5 5V3.75Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.5 10C2.5 9.66848 2.6317 9.35054 2.86612 9.11612C3.10054 8.8817 3.41848 8.75 3.75 8.75H11.25C11.5815 8.75 11.8995 8.8817 12.1339 9.11612C12.3683 9.35054 12.5 9.66848 12.5 10V11.25C12.5 11.5815 12.3683 11.8995 12.1339 12.1339C11.8995 12.3683 11.5815 12.5 11.25 12.5H3.75C3.41848 12.5 3.10054 12.3683 2.86612 12.1339C2.6317 11.8995 2.5 11.5815 2.5 11.25V10Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_layout_vertical_clip\">\n <rect width=\"15\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </LayoutTypeIcon>\n );\n}\n\n/** Flex row — side-by-side vertical bars. */\nexport function LayoutHorizontalIcon(props: IconProps) {\n return (\n <LayoutTypeIcon {...props}>\n <path\n d=\"M3.75 12.5C3.41848 12.5 3.10054 12.3683 2.86612 12.1339C2.6317 11.8995 2.5 11.5815 2.5 11.25L2.5 3.75C2.5 3.41848 2.6317 3.10054 2.86612 2.86612C3.10054 2.6317 3.41848 2.5 3.75 2.5L5 2.5C5.33152 2.5 5.64946 2.6317 5.88388 2.86612C6.1183 3.10054 6.25 3.41848 6.25 3.75L6.25 11.25C6.25 11.5815 6.1183 11.8995 5.88388 12.1339C5.64946 12.3683 5.33152 12.5 5 12.5L3.75 12.5Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10 12.5C9.66848 12.5 9.35054 12.3683 9.11612 12.1339C8.8817 11.8995 8.75 11.5815 8.75 11.25L8.75 3.75C8.75 3.41848 8.8817 3.10054 9.11612 2.86612C9.35054 2.6317 9.66848 2.5 10 2.5L11.25 2.5C11.5815 2.5 11.8995 2.6317 12.1339 2.86612C12.3683 3.10054 12.5 3.41848 12.5 3.75L12.5 11.25C12.5 11.5815 12.3683 11.8995 12.1339 12.1339C11.8995 12.3683 11.5815 12.5 11.25 12.5L10 12.5Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </LayoutTypeIcon>\n );\n}\n\nexport function LayoutGridIcon(props: IconProps) {\n return (\n <LayoutTypeIcon {...props}>\n <g clipPath=\"url(#wv_layout_grid_clip)\">\n <path\n d=\"M2.5 3.125C2.5 2.95924 2.56585 2.80027 2.68306 2.68306C2.80027 2.56585 2.95924 2.5 3.125 2.5H5.625C5.79076 2.5 5.94973 2.56585 6.06694 2.68306C6.18415 2.80027 6.25 2.95924 6.25 3.125V5.625C6.25 5.79076 6.18415 5.94973 6.06694 6.06694C5.94973 6.18415 5.79076 6.25 5.625 6.25H3.125C2.95924 6.25 2.80027 6.18415 2.68306 6.06694C2.56585 5.94973 2.5 5.79076 2.5 5.625V3.125Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.75 3.125C8.75 2.95924 8.81585 2.80027 8.93306 2.68306C9.05027 2.56585 9.20924 2.5 9.375 2.5H11.875C12.0408 2.5 12.1997 2.56585 12.3169 2.68306C12.4342 2.80027 12.5 2.95924 12.5 3.125V5.625C12.5 5.79076 12.4342 5.94973 12.3169 6.06694C12.1997 6.18415 12.0408 6.25 11.875 6.25H9.375C9.20924 6.25 9.05027 6.18415 8.93306 6.06694C8.81585 5.94973 8.75 5.79076 8.75 5.625V3.125Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2.5 9.375C2.5 9.20924 2.56585 9.05027 2.68306 8.93306C2.80027 8.81585 2.95924 8.75 3.125 8.75H5.625C5.79076 8.75 5.94973 8.81585 6.06694 8.93306C6.18415 9.05027 6.25 9.20924 6.25 9.375V11.875C6.25 12.0408 6.18415 12.1997 6.06694 12.3169C5.94973 12.4342 5.79076 12.5 5.625 12.5H3.125C2.95924 12.5 2.80027 12.4342 2.68306 12.3169C2.56585 12.1997 2.5 12.0408 2.5 11.875V9.375Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.75 9.375C8.75 9.20924 8.81585 9.05027 8.93306 8.93306C9.05027 8.81585 9.20924 8.75 9.375 8.75H11.875C12.0408 8.75 12.1997 8.81585 12.3169 8.93306C12.4342 9.05027 12.5 9.20924 12.5 9.375V11.875C12.5 12.0408 12.4342 12.1997 12.3169 12.3169C12.1997 12.4342 12.0408 12.5 11.875 12.5H9.375C9.20924 12.5 9.05027 12.4342 8.93306 12.3169C8.81585 12.1997 8.75 12.0408 8.75 11.875V9.375Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_layout_grid_clip\">\n <rect width=\"15\" height=\"15\" fill=\"white\" />\n </clipPath>\n </defs>\n </LayoutTypeIcon>\n );\n}\n","import {\n LayoutGridIcon,\n LayoutHorizontalIcon,\n LayoutVerticalIcon,\n} from \"./layoutTypeIcons\";\n\nexport type LayoutType = \"column\" | \"row\" | \"grid\";\n\ntype LayoutTypeControlProps = {\n value: LayoutType;\n onSelect: (value: LayoutType) => void;\n};\n\nconst OPTIONS: Array<{ value: LayoutType; icon: React.ReactNode; label: string }> = [\n { value: \"column\", icon: <LayoutVerticalIcon />, label: \"Vertical stack\" },\n { value: \"row\", icon: <LayoutHorizontalIcon />, label: \"Horizontal stack\" },\n { value: \"grid\", icon: <LayoutGridIcon />, label: \"Grid\" },\n];\n\nexport function LayoutTypeControl({ value, onSelect }: LayoutTypeControlProps) {\n return (\n <div className=\"wv-segmented wv-segmented--typo wv-pe\" role=\"group\" aria-label=\"Layout type\">\n {OPTIONS.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n className=\"wv-segmented-btn wv-pe\"\n data-active={value === option.value ? \"true\" : \"false\"}\n aria-label={option.label}\n aria-pressed={value === option.value}\n onPointerDown={(e) => {\n e.preventDefault();\n onSelect(option.value);\n }}\n >\n {option.icon}\n </button>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype IconProps = { className?: string };\n\nfunction LayoutGapIcon({\n className,\n children,\n}: IconProps & { children: ReactNode }) {\n return (\n <svg\n className={`wv-typo-field-icon${className ? ` ${className}` : \"\"}`}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\n\nexport function LayoutHorizontalGapIcon(props: IconProps) {\n return (\n <LayoutGapIcon {...props}>\n <path\n d=\"M14 14L12.0541 14C11.3376 14 10.7568 13.4112 10.7568 12.6849L10.7568 3.31507C10.7568 2.58878 11.3376 2 12.0541 2L14 2M2 14L3.94595 14C4.66242 14 5.24324 13.4112 5.24324 12.6849L5.24324 3.31507C5.24324 2.58878 4.66242 2 3.94595 2L2 2\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </LayoutGapIcon>\n );\n}\n\nexport function LayoutVerticalGapIcon(props: IconProps) {\n return (\n <LayoutGapIcon {...props}>\n <path\n d=\"M2 14L2 12.0541C2 11.3376 2.58878 10.7568 3.31507 10.7568L12.6849 10.7568C13.4112 10.7568 14 11.3376 14 12.0541V14M2 2L2 3.94595C2 4.66242 2.58878 5.24324 3.31507 5.24324L12.6849 5.24324C13.4112 5.24324 14 4.66242 14 3.94595V2\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </LayoutGapIcon>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { NumberInput } from \"./NumberInput\";\nimport { LayoutHorizontalGapIcon, LayoutVerticalGapIcon } from \"./layoutGapIcons\";\n\ntype GapFieldProps = {\n icon: ReactNode;\n cssProperty: string;\n displayLabel: string;\n value: number;\n onChange: (formatted: string) => void;\n onCommit: (formatted: string) => void;\n onFocus: () => void;\n onCancel: () => void;\n};\n\nfunction GapField({\n icon,\n cssProperty,\n displayLabel,\n value,\n onChange,\n onCommit,\n onFocus,\n onCancel,\n}: GapFieldProps) {\n return (\n <div className=\"wv-typo-icon-card wv-layout-gap-card\">\n {icon}\n <NumberInput\n cssProperty={cssProperty}\n displayLabel={displayLabel}\n value={value}\n unit=\"px\"\n min={0}\n variant=\"card\"\n onChange={onChange}\n onCommit={onCommit}\n onFocus={onFocus}\n onCancel={onCancel}\n />\n </div>\n );\n}\n\ntype LayoutGapControlProps = {\n mode: \"flex\" | \"grid\";\n /** Main-axis direction when mode is flex — drives the single gap icon. */\n flexDirection?: \"row\" | \"column\";\n gap: number;\n rowGap: number;\n colGap: number;\n onGapChange: (formatted: string) => void;\n onGapCommit: (formatted: string) => void;\n onGapFocus: () => void;\n onGapCancel: () => void;\n onRowGapChange: (formatted: string) => void;\n onRowGapCommit: (formatted: string) => void;\n onRowGapFocus: () => void;\n onRowGapCancel: () => void;\n onColGapChange: (formatted: string) => void;\n onColGapCommit: (formatted: string) => void;\n onColGapFocus: () => void;\n onColGapCancel: () => void;\n};\n\nexport function LayoutGapControl({\n mode,\n flexDirection = \"row\",\n gap,\n rowGap,\n colGap,\n onGapChange,\n onGapCommit,\n onGapFocus,\n onGapCancel,\n onRowGapChange,\n onRowGapCommit,\n onRowGapFocus,\n onRowGapCancel,\n onColGapChange,\n onColGapCommit,\n onColGapFocus,\n onColGapCancel,\n}: LayoutGapControlProps) {\n if (mode === \"flex\") {\n const gapIcon =\n flexDirection === \"column\" ? (\n <LayoutVerticalGapIcon />\n ) : (\n <LayoutHorizontalGapIcon />\n );\n\n return (\n <GapField\n icon={gapIcon}\n cssProperty=\"gap\"\n displayLabel=\"Gap\"\n value={gap}\n onChange={onGapChange}\n onCommit={onGapCommit}\n onFocus={onGapFocus}\n onCancel={onGapCancel}\n />\n );\n }\n\n return (\n <div className=\"wv-layout-gap-row\">\n <GapField\n icon={<LayoutHorizontalGapIcon />}\n cssProperty=\"column-gap\"\n displayLabel=\"Horizontal gap\"\n value={colGap}\n onChange={onColGapChange}\n onCommit={onColGapCommit}\n onFocus={onColGapFocus}\n onCancel={onColGapCancel}\n />\n <GapField\n icon={<LayoutVerticalGapIcon />}\n cssProperty=\"row-gap\"\n displayLabel=\"Vertical gap\"\n value={rowGap}\n onChange={onRowGapChange}\n onCommit={onRowGapCommit}\n onFocus={onRowGapFocus}\n onCancel={onRowGapCancel}\n />\n </div>\n );\n}\n","import { NumberInput } from \"./NumberInput\";\n\ntype LayoutColumnsControlProps = {\n value: number;\n onChange: (formatted: string) => void;\n onCommit: (formatted: string) => void;\n onFocus: () => void;\n onCancel: () => void;\n};\n\nexport function LayoutColumnsControl({\n value,\n onChange,\n onCommit,\n onFocus,\n onCancel,\n}: LayoutColumnsControlProps) {\n return (\n <div className=\"wv-typo-card wv-layout-columns-card\">\n <span className=\"wv-typo-card-label\">Columns</span>\n <NumberInput\n cssProperty=\"grid-template-columns\"\n displayLabel=\"Columns\"\n value={value}\n unit=\"\"\n min={1}\n max={24}\n variant=\"card\"\n onChange={onChange}\n onCommit={onCommit}\n onFocus={onFocus}\n onCancel={onCancel}\n />\n </div>\n );\n}\n","import {\n TypoAlignCenterIcon,\n TypoAlignLeftIcon,\n TypoAlignRightIcon,\n} from \"./typographyIcons\";\n\ntype Alignment = \"left\" | \"center\" | \"right\";\n\ntype SegmentedControlProps = {\n value: Alignment;\n /** Called immediately on click — commits on selection, no blur needed. */\n onCommit: (value: Alignment) => void;\n /** Card styling for typography alignment row (Figma tray). */\n variant?: \"default\" | \"card\";\n};\n\nconst OPTIONS: Array<{ value: Alignment; icon: React.ReactNode; label: string }> = [\n { value: \"left\", icon: <TypoAlignLeftIcon />, label: \"Align left\" },\n { value: \"center\", icon: <TypoAlignCenterIcon />, label: \"Align center\" },\n { value: \"right\", icon: <TypoAlignRightIcon />, label: \"Align right\" },\n];\n\nexport function SegmentedControl({ value, onCommit, variant = \"default\" }: SegmentedControlProps) {\n const rootClass =\n variant === \"card\" ? \"wv-segmented wv-segmented--typo wv-pe\" : \"wv-segmented wv-pe\";\n\n return (\n <div className={rootClass} role=\"group\" aria-label=\"Text alignment\">\n {OPTIONS.map((o) => (\n <button\n key={o.value}\n type=\"button\"\n className=\"wv-segmented-btn wv-pe\"\n data-active={value === o.value ? \"true\" : \"false\"}\n aria-label={o.label}\n aria-pressed={value === o.value}\n onClick={() => onCommit(o.value)}\n >\n {o.icon}\n </button>\n ))}\n </div>\n );\n}\n","import { useEffect, useRef, useState, type ChangeEvent, type KeyboardEvent } from \"react\";\nimport {\n TrayDropdownChevronTrigger,\n TrayDropdownMenu,\n type TrayDropdownOption,\n useTrayDropdown,\n} from \"./TrayDropdown\";\n\nconst PRESET_WEIGHTS = [100, 200, 300, 400, 500, 600, 700, 800, 900];\n\ntype WeightSelectProps = {\n value: number;\n onChange: (value: number) => void;\n onCommit: (value: number) => void;\n onFocus?: () => void;\n /** Revert live font-weight preview (Escape in custom field). */\n onCancel?: () => void;\n /** Card row styling for typography fields (Figma tray). */\n variant?: \"default\" | \"card\";\n cardLabel?: string;\n};\n\nexport function WeightSelect({\n value,\n onChange,\n onCommit,\n onFocus,\n onCancel,\n variant = \"default\",\n cardLabel,\n}: WeightSelectProps) {\n const [customRaw, setCustomRaw] = useState(\"\");\n const [customFocused, setCustomFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { open, toggle, close, rootRef, menuRef } = useTrayDropdown(onFocus);\n\n const inPreset = PRESET_WEIGHTS.includes(value);\n\n useEffect(() => {\n if (!inPreset) setCustomRaw(String(value));\n else if (!customFocused) setCustomRaw(\"\");\n }, [value, inPreset, customFocused]);\n\n const commitCustom = (raw: string) => {\n const n = parseInt(raw, 10);\n if (!isNaN(n) && n >= 1 && n <= 1000) {\n if (n !== value) {\n onChange(n);\n onCommit(n);\n }\n setCustomRaw(PRESET_WEIGHTS.includes(n) ? \"\" : String(n));\n } else {\n setCustomRaw(inPreset ? \"\" : String(value));\n }\n };\n\n const presetOptions: TrayDropdownOption[] = [\n ...(!inPreset ? [{ value: String(value), label: String(value) }] : []),\n ...PRESET_WEIGHTS.map((weight) => ({\n value: String(weight),\n label: String(weight),\n })),\n ];\n\n const handlePresetSelect = (next: string) => {\n const n = parseInt(next, 10);\n if (!Number.isFinite(n) || n === value) return;\n onFocus?.();\n onChange(n);\n onCommit(n);\n if (PRESET_WEIGHTS.includes(n)) setCustomRaw(\"\");\n setCustomFocused(false);\n };\n\n const customInputHandlers = {\n onFocus: () => {\n setCustomFocused(true);\n onFocus?.();\n if (inPreset && customRaw.trim() === \"\") {\n setCustomRaw(String(value));\n }\n requestAnimationFrame(() => inputRef.current?.select());\n },\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\n setCustomRaw(e.target.value);\n const n = parseInt(e.target.value, 10);\n if (!isNaN(n)) onChange(n);\n },\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n commitCustom(customRaw);\n setCustomFocused(false);\n }\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onCancel?.();\n setCustomRaw(inPreset ? \"\" : String(value));\n setCustomFocused(false);\n inputRef.current?.blur();\n }\n },\n onBlur: () => {\n setCustomFocused(false);\n if (customRaw.trim()) {\n commitCustom(customRaw);\n } else {\n setCustomRaw(inPreset ? \"\" : String(value));\n }\n },\n };\n\n const displayValue = customFocused ? customRaw : customRaw || String(value);\n\n if (variant === \"card\") {\n return (\n <div ref={rootRef} className=\"wv-tray-dropdown wv-weight-wrap--card wv-pe\">\n <div className=\"wv-typo-card\">\n {cardLabel ? (\n <span className=\"wv-typo-card-label\">{cardLabel}</span>\n ) : null}\n <div className=\"wv-weight-row\">\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"numeric\"\n className=\"wv-weight-custom-input wv-weight-custom-input--card wv-pe\"\n value={displayValue}\n aria-label=\"Font weight\"\n {...customInputHandlers}\n />\n <TrayDropdownChevronTrigger\n open={open}\n onClick={toggle}\n ariaLabel=\"Font weight presets\"\n />\n </div>\n </div>\n {open ? (\n <TrayDropdownMenu\n menuRef={menuRef}\n value={String(value)}\n options={presetOptions}\n onSelect={(next) => {\n handlePresetSelect(next);\n close();\n }}\n ariaLabel=\"Font weight presets\"\n />\n ) : null}\n </div>\n );\n }\n\n return (\n <div className=\"wv-weight-wrap wv-pe\">\n <div className=\"wv-weight-row\">\n <select\n className=\"wv-weight-native wv-pe\"\n aria-label=\"Font weight\"\n value={String(value)}\n onPointerDown={() => onFocus?.()}\n onChange={(e) => handlePresetSelect(e.target.value)}\n >\n {!inPreset && <option value={String(value)}>{String(value)}</option>}\n {PRESET_WEIGHTS.map((weight) => (\n <option key={weight} value={String(weight)}>\n {weight}\n </option>\n ))}\n </select>\n <input\n ref={inputRef}\n type=\"text\"\n className=\"wv-weight-custom-input wv-pe\"\n placeholder=\"Custom…\"\n value={customRaw}\n aria-label=\"Custom font weight\"\n {...customInputHandlers}\n />\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n areStyleCommitValuesEquivalent,\n applySvgDimension,\n classifyElement,\n elementTypeLabel,\n normalizeFontWeightValue,\n readBorderValues,\n readBorderWidthValues,\n readBoxValues,\n readLineHeightAsPixelNumber,\n readPropertyValue,\n readRadiusValues,\n readCssColorForPicker,\n readSvgDimension,\n readSvgDimensionRaw,\n resolveSvgRoot,\n rgbToHex,\n supportsCssBackgroundColor,\n} from \"../engine/styleEngine\";\nimport { roundTo2 } from \"../engine/roundNumber\";\nimport {\n dimensionSizingCssValue,\n readDimensionSizingMode,\n} from \"../engine/dimensionSizing\";\nimport type { ElementCategory } from \"../engine/layoutTypes\";\nimport { AlignmentControl } from \"./controls/AlignmentControl\";\nimport { BorderControl } from \"./controls/BorderControl\";\nimport { BoxControl } from \"./controls/BoxControl\";\nimport { CardSelectControl } from \"./controls/CardSelectControl\";\nimport { ColorPicker } from \"./controls/ColorPicker\";\nimport { DimensionControl } from \"./controls/DimensionControl\";\nimport { NumberInput } from \"./controls/NumberInput\";\nimport { OpacityControl } from \"./controls/OpacityControl\";\nimport { RadiusControl } from \"./controls/RadiusControl\";\nimport { LayoutTypeControl, type LayoutType } from \"./controls/LayoutTypeControl\";\nimport { LayoutGapControl } from \"./controls/LayoutGapControl\";\nimport { LayoutColumnsControl } from \"./controls/LayoutColumnsControl\";\nimport { SegmentedControl } from \"./controls/SegmentedControl\";\nimport { WeightSelect } from \"./controls/WeightSelect\";\nimport { TypoLetterSpacingIcon, TypoLineHeightIcon, SectionCollapseIcon, SectionExpandIcon, SectionDivider } from \"./controls/typographyIcons\";\n\nfunction ElementPropsIcon() {\n return (\n <svg\n className=\"wv-edit-tray-props-icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <g clipPath=\"url(#wv_edit_props_clip)\">\n <path\n d=\"M4.08333 4.6665L1.75 6.99984L4.08333 9.33317\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9.91675 4.6665L12.2501 6.99984L9.91675 9.33317\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.16659 2.3335L5.83325 11.6668\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"wv_edit_props_clip\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\ntype EditTrayProps = {\n element: Element;\n /** Called when a CSS property is committed with its before/after values. */\n onStyleCommit: (\n element: Element,\n cssProperty: string,\n displayLabel: string,\n fromValue: string,\n toValue: string,\n ) => void;\n onClose: () => void;\n hidden?: boolean;\n tailwindEnabled?: boolean;\n};\n\n/** Numeric weight for UI; maps common keywords from inline/computed style. */\nfunction readFontWeightNumber(el: Element): number {\n const key = normalizeFontWeightValue(readPropertyValue(el, \"font-weight\"));\n const n = parseInt(key, 10);\n return Number.isFinite(n) ? n : 400;\n}\n\n/** Columns when switching from flex row/column to grid (no browser prompt). */\nconst DEFAULT_GRID_COLUMNS = 2;\n\n/** Column count for `repeat(n, …)` templates we generate; otherwise a rough fallback. */\nfunction parseGridColumnCount(gridTemplateColumns: string): number {\n const g = gridTemplateColumns.trim();\n const repeatM = g.match(/^repeat\\s*\\(\\s*(\\d+)/i);\n if (repeatM) {\n const n = parseInt(repeatM[1], 10);\n if (Number.isFinite(n) && n >= 1) return Math.min(24, n);\n }\n const tracks = g.split(/\\s+/).filter(Boolean).length;\n return Math.max(1, Math.min(24, tracks || 3));\n}\n\n// CSS properties to show in the raw CSS toggle panel, per category\nconst CSS_PANEL_PROPS: Record<ElementCategory, string[]> = {\n text: [\"color\", \"background-color\", \"font-size\", \"font-weight\", \"font-family\", \"line-height\", \"letter-spacing\", \"text-align\"],\n svg: [\"width\", \"height\", \"fill\", \"stroke\"],\n image: [\"object-fit\", \"width\", \"height\"],\n stack: [\n \"color\",\n \"background-color\",\n \"display\",\n \"flex-direction\",\n \"grid-template-columns\",\n \"gap\",\n \"row-gap\",\n \"column-gap\",\n \"justify-content\",\n \"align-items\",\n \"width\",\n \"height\",\n ],\n generic: [\"color\", \"background-color\", \"display\", \"width\", \"height\"],\n};\n\nexport function EditTray({\n element,\n onStyleCommit,\n onClose: _onClose,\n hidden = false,\n tailwindEnabled: _tailwindEnabled = false,\n}: EditTrayProps) {\n const [category, setCategory] = useState<ElementCategory>(\"generic\");\n const [cssOpen, setCssOpen] = useState(false);\n const [boxSectionOpen, setBoxSectionOpen] = useState(true);\n const [layoutSectionOpen, setLayoutSectionOpen] = useState(true);\n const [visibilitySectionOpen, setVisibilitySectionOpen] = useState(true);\n const [, setTick] = useState(0);\n const fromValuesRef = useRef<Map<string, string>>(new Map());\n\n // Re-classify and reset tracking whenever the selected element changes\n useEffect(() => {\n setCategory(classifyElement(element));\n setCssOpen(false);\n setBoxSectionOpen(true);\n setLayoutSectionOpen(true);\n setVisibilitySectionOpen(true);\n\n // Pre-record ALL property baselines using getComputedStyle (not inline style)\n // so fromValue is always available even if onFocus doesn't fire before handleChange.\n // This is the only reliable way to capture the pre-interaction state for controls\n // like ColorPicker where the native picker dialog can interfere with focus events.\n const cs = getComputedStyle(element);\n const baseline = new Map<string, string>();\n const BASELINE_PROPS = [\n \"color\", \"background-color\", \"font-size\", \"font-weight\", \"text-align\",\n \"line-height\", \"letter-spacing\",\n \"width\", \"height\", \"object-fit\", \"display\",\n \"flex-direction\",\n \"grid-template-columns\",\n \"gap\",\n \"row-gap\",\n \"column-gap\",\n \"justify-content\",\n \"align-items\",\n \"margin-top\", \"margin-right\", \"margin-bottom\", \"margin-left\",\n \"padding-top\", \"padding-right\", \"padding-bottom\", \"padding-left\",\n \"border-width\", \"border-top-width\", \"border-right-width\", \"border-bottom-width\", \"border-left-width\",\n \"border-style\", \"border-color\",\n \"border-radius\",\n \"border-top-left-radius\", \"border-top-right-radius\",\n \"border-bottom-right-radius\", \"border-bottom-left-radius\",\n \"opacity\",\n ];\n for (const prop of BASELINE_PROPS) {\n const val = cs.getPropertyValue(prop).trim();\n if (val) baseline.set(prop, val);\n }\n if (classifyElement(element) === \"svg\") {\n const root = resolveSvgRoot(element);\n if (root) {\n const w = readSvgDimensionRaw(element, \"width\");\n const h = readSvgDimensionRaw(element, \"height\");\n if (w) baseline.set(\"svg-width\", w);\n if (h) baseline.set(\"svg-height\", h);\n }\n }\n fromValuesRef.current = baseline;\n\n setTick((n) => n + 1);\n }, [element]);\n\n // Record \"from\" value when a control gets focus — only on first focus per property,\n // except font-weight: always refresh when the weight menu opens so live onChange + commit\n // still diffs correctly against the pre-open value.\n const handleFocus = useCallback(\n (cssProperty: string) => {\n const snap = readPropertyValue(element, cssProperty);\n if (cssProperty === \"font-weight\") {\n fromValuesRef.current.set(cssProperty, snap);\n return;\n }\n if (!fromValuesRef.current.has(cssProperty)) {\n fromValuesRef.current.set(cssProperty, snap);\n }\n },\n [element],\n );\n\n /** Snapshot for deferred history: NumberInput / opacity scrub — always refresh on each focus. */\n const handleDeferrableFocus = useCallback((cssProperty: string) => {\n const snap = readPropertyValue(element, cssProperty);\n fromValuesRef.current.set(cssProperty, snap);\n }, [element]);\n\n /** Revert live preview to the snapshot from `handleDeferrableFocus` (Escape / cancel edit). */\n const revertDeferrablePreview = useCallback(\n (cssProperty: string, targetEl: Element = element) => {\n const el = targetEl as HTMLElement;\n const raw = (\n fromValuesRef.current.get(cssProperty) ?? readPropertyValue(el, cssProperty)\n ).trim();\n if (raw === \"\") el.style.removeProperty(cssProperty);\n else el.style.setProperty(cssProperty, raw);\n setTick((n) => n + 1);\n },\n [element],\n );\n\n const snapshotBoxAxis = useCallback(\n (property: \"margin\" | \"padding\", axis: \"v\" | \"h\" | \"top\" | \"right\" | \"bottom\" | \"left\") => {\n if (axis === \"v\") {\n handleDeferrableFocus(`${property}-top`);\n handleDeferrableFocus(`${property}-bottom`);\n } else if (axis === \"h\") {\n handleDeferrableFocus(`${property}-left`);\n handleDeferrableFocus(`${property}-right`);\n } else {\n handleDeferrableFocus(`${property}-${axis}`);\n }\n },\n [handleDeferrableFocus],\n );\n\n const revertBoxAxisPreview = useCallback(\n (property: \"margin\" | \"padding\", axis: \"v\" | \"h\" | \"top\" | \"right\" | \"bottom\" | \"left\") => {\n if (axis === \"v\") {\n revertDeferrablePreview(`${property}-top`);\n revertDeferrablePreview(`${property}-bottom`);\n } else if (axis === \"h\") {\n revertDeferrablePreview(`${property}-left`);\n revertDeferrablePreview(`${property}-right`);\n } else {\n revertDeferrablePreview(`${property}-${axis}`);\n }\n },\n [revertDeferrablePreview],\n );\n\n const radiusCornerCss = useCallback((corner: \"all\" | \"tl\" | \"tr\" | \"br\" | \"bl\") => {\n if (corner === \"all\") return \"border-radius\";\n const map = { tl: \"top-left\", tr: \"top-right\", br: \"bottom-right\", bl: \"bottom-left\" } as const;\n return `border-${map[corner]}-radius`;\n }, []);\n\n const svgDimSnapshotKey = (prop: \"width\" | \"height\") => `svg-${prop}`;\n\n const handleSvgDimensionFocus = useCallback(\n (prop: \"width\" | \"height\") => {\n fromValuesRef.current.set(svgDimSnapshotKey(prop), readSvgDimensionRaw(element, prop));\n },\n [element],\n );\n\n const revertSvgDimensionPreview = useCallback(\n (prop: \"width\" | \"height\") => {\n const raw = (\n fromValuesRef.current.get(svgDimSnapshotKey(prop)) ?? readSvgDimensionRaw(element, prop)\n ).trim();\n applySvgDimension(element, prop, raw);\n setTick((n) => n + 1);\n },\n [element],\n );\n\n const handleSvgDimensionChange = useCallback(\n (prop: \"width\" | \"height\", value: string) => {\n applySvgDimension(element, prop, value);\n setTick((n) => n + 1);\n },\n [element],\n );\n\n const handleSvgDimensionCommit = useCallback(\n (prop: \"width\" | \"height\", displayLabel: string, value: string) => {\n const root = resolveSvgRoot(element);\n if (!root) return;\n\n const snapKey = svgDimSnapshotKey(prop);\n const trimmed = value.trim();\n const pxVal = /px$/i.test(trimmed) ? trimmed : `${trimmed}px`;\n const rawFrom = (fromValuesRef.current.get(snapKey) ?? readSvgDimensionRaw(element, prop)).trim();\n\n if (areStyleCommitValuesEquivalent(prop, rawFrom, pxVal)) {\n applySvgDimension(element, prop, pxVal);\n fromValuesRef.current.set(snapKey, pxVal);\n setTick((n) => n + 1);\n return;\n }\n\n applySvgDimension(element, prop, pxVal);\n onStyleCommit(root, prop, displayLabel, rawFrom, pxVal);\n fromValuesRef.current.set(snapKey, pxVal);\n setTick((n) => n + 1);\n },\n [element, onStyleCommit],\n );\n\n // Collapsing the tray / hiding it should blur focused inputs so the final value commits once.\n useEffect(() => {\n if (!hidden) return;\n const ae = document.activeElement;\n if (ae instanceof HTMLElement && ae.closest(\".wv-edit-tray\")) {\n ae.blur();\n }\n }, [hidden]);\n\n // Apply live preview directly to the DOM element (no undo entry yet)\n const handleChange = useCallback(\n (cssProperty: string, newValue: string, styleTarget?: Element) => {\n const el = styleTarget ?? element;\n (el as HTMLElement).style.setProperty(cssProperty, newValue);\n setTick((n) => n + 1);\n },\n [element],\n );\n\n // Commit: diff the value and call the parent callback\n const handleCommit = useCallback(\n (\n cssProperty: string,\n displayLabel: string,\n newValue: string,\n commitTarget?: Element,\n commitFromSnapshot?: string,\n ) => {\n const el = commitTarget ?? element;\n const sameTrayEl = el === element;\n const trimmed = newValue.trim();\n const snap = commitFromSnapshot?.trim();\n const rawFrom =\n snap != null && snap !== \"\"\n ? snap\n : sameTrayEl\n ? (fromValuesRef.current.get(cssProperty) ??\n getComputedStyle(el).getPropertyValue(cssProperty).trim())\n : getComputedStyle(el).getPropertyValue(cssProperty).trim();\n\n // Normalise colour values to hex for comparison and storage\n const COLOR_PROPS = new Set([\"color\", \"background-color\", \"border-color\"]);\n const fromValue = COLOR_PROPS.has(cssProperty) ? rgbToHex(rawFrom) : rawFrom;\n\n if (areStyleCommitValuesEquivalent(cssProperty, fromValue, trimmed)) {\n if (cssProperty === \"font-weight\") {\n const domN = normalizeFontWeightValue(readPropertyValue(el, \"font-weight\"));\n const newN = normalizeFontWeightValue(trimmed);\n if (domN !== newN) {\n (el as HTMLElement).style.setProperty(cssProperty, trimmed);\n }\n if (sameTrayEl) {\n fromValuesRef.current.set(cssProperty, trimmed);\n }\n setTick((n) => n + 1);\n }\n return;\n }\n\n (el as HTMLElement).style.setProperty(cssProperty, trimmed);\n onStyleCommit(el, cssProperty, displayLabel, fromValue, trimmed);\n // Update baseline so subsequent edits on the same property have the right \"from\"\n if (sameTrayEl) {\n fromValuesRef.current.set(cssProperty, trimmed);\n }\n setTick((n) => n + 1);\n },\n [element, onStyleCommit],\n );\n\n /** Remove inline grid template when switching to flex so layout matches the chosen mode. */\n const clearGridTemplateIfNeeded = useCallback(() => {\n const el = element as HTMLElement;\n const inlineGtc = el.style.getPropertyValue(\"grid-template-columns\").trim();\n if (!inlineGtc) return;\n handleDeferrableFocus(\"grid-template-columns\");\n const rawFrom = (fromValuesRef.current.get(\"grid-template-columns\") ?? inlineGtc).trim();\n el.style.removeProperty(\"grid-template-columns\");\n onStyleCommit(el, \"grid-template-columns\", \"Grid columns\", rawFrom, \"\");\n fromValuesRef.current.set(\"grid-template-columns\", \"\");\n setTick((n) => n + 1);\n }, [element, onStyleCommit, handleDeferrableFocus]);\n\n // BoxControl commits — expand V/H axis to one or two individual property commits\n const handleBoxCommit = useCallback(\n (\n property: \"margin\" | \"padding\",\n axis: \"v\" | \"h\" | \"top\" | \"right\" | \"bottom\" | \"left\",\n value: number,\n ) => {\n const val = `${value}px`;\n const label = property === \"margin\" ? \"Margin\" : \"Padding\";\n const sides: Array<[string, string]> =\n axis === \"v\" ? [[`${property}-top`, val], [`${property}-bottom`, val]] :\n axis === \"h\" ? [[`${property}-left`, val], [`${property}-right`, val]] :\n [[`${property}-${axis}`, val]];\n for (const [cssProperty, cssValue] of sides) {\n const displayLabel = `${label} ${\n axis === \"v\" ? \"Vertical\" : axis === \"h\" ? \"Horizontal\" : axis.charAt(0).toUpperCase() + axis.slice(1)\n }`;\n handleCommit(cssProperty, displayLabel, cssValue);\n }\n },\n [handleCommit],\n );\n\n const handleBoxChange = useCallback(\n (\n property: \"margin\" | \"padding\",\n axis: \"v\" | \"h\" | \"top\" | \"right\" | \"bottom\" | \"left\",\n value: number,\n ) => {\n const val = `${value}px`;\n const sides =\n axis === \"v\" ? [`${property}-top`, `${property}-bottom`] :\n axis === \"h\" ? [`${property}-left`, `${property}-right`] :\n [`${property}-${axis}`];\n for (const p of sides) handleChange(p, val);\n },\n [handleChange],\n );\n\n const handleBorderWidthCommit = useCallback(\n (\n axis: \"all\" | \"top\" | \"right\" | \"bottom\" | \"left\",\n value: number,\n ) => {\n const val = `${value}px`;\n const sides: Array<[string, string]> =\n axis === \"all\"\n ? [\n [\"border-top-width\", val],\n [\"border-right-width\", val],\n [\"border-bottom-width\", val],\n [\"border-left-width\", val],\n ]\n : [[`border-${axis}-width`, val]];\n for (const [cssProperty, cssValue] of sides) {\n const displayLabel =\n axis === \"all\"\n ? \"Border Weight\"\n : `Border Weight ${axis.charAt(0).toUpperCase()}${axis.slice(1)}`;\n handleCommit(cssProperty, displayLabel, cssValue);\n }\n },\n [handleCommit],\n );\n\n const handleBorderWidthChange = useCallback(\n (axis: \"all\" | \"top\" | \"right\" | \"bottom\" | \"left\", value: number) => {\n const val = `${value}px`;\n const sides =\n axis === \"all\"\n ? [\"border-top-width\", \"border-right-width\", \"border-bottom-width\", \"border-left-width\"]\n : [`border-${axis}-width`];\n for (const p of sides) handleChange(p, val);\n },\n [handleChange],\n );\n\n const snapshotBorderWidth = useCallback(\n (axis: \"all\" | \"top\" | \"right\" | \"bottom\" | \"left\") => {\n if (axis === \"all\") {\n handleDeferrableFocus(\"border-top-width\");\n handleDeferrableFocus(\"border-right-width\");\n handleDeferrableFocus(\"border-bottom-width\");\n handleDeferrableFocus(\"border-left-width\");\n } else {\n handleDeferrableFocus(`border-${axis}-width`);\n }\n },\n [handleDeferrableFocus],\n );\n\n const revertBorderWidthPreview = useCallback(\n (axis: \"all\" | \"top\" | \"right\" | \"bottom\" | \"left\") => {\n if (axis === \"all\") {\n revertDeferrablePreview(\"border-top-width\");\n revertDeferrablePreview(\"border-right-width\");\n revertDeferrablePreview(\"border-bottom-width\");\n revertDeferrablePreview(\"border-left-width\");\n } else {\n revertDeferrablePreview(`border-${axis}-width`);\n }\n },\n [revertDeferrablePreview],\n );\n\n // ─── Read current values from the element ────────────────────────────\n const cs = getComputedStyle(element);\n\n const fontSize = parseFloat(readPropertyValue(element, \"font-size\")) || 14;\n const fontWeight = readFontWeightNumber(element);\n const rawAlign = readPropertyValue(element, \"text-align\") || \"left\";\n const textAlign = ([\"left\", \"center\", \"right\"].includes(rawAlign) ? rawAlign : \"left\") as \"left\" | \"center\" | \"right\";\n const lineHeight = readLineHeightAsPixelNumber(element);\n const letterSpacing = parseFloat(readPropertyValue(element, \"letter-spacing\")) || 0;\n const fontColor = readCssColorForPicker(element, \"color\");\n const backgroundColor = readCssColorForPicker(element, \"background-color\");\n\n const showBackgroundColour = supportsCssBackgroundColor(category);\n\n const readBoxDimension = (prop: \"width\" | \"height\"): number => {\n const parsed = parseFloat(readPropertyValue(element, prop));\n if (Number.isFinite(parsed) && parsed > 0) return roundTo2(parsed);\n const computed = parseFloat(cs.getPropertyValue(prop));\n if (Number.isFinite(computed) && computed > 0) return roundTo2(computed);\n const rect = element.getBoundingClientRect();\n const px = prop === \"width\" ? rect.width : rect.height;\n return roundTo2(px);\n };\n\n const boxWidth = readBoxDimension(\"width\");\n const boxHeight = readBoxDimension(\"height\");\n const widthMode = readDimensionSizingMode(element, \"width\");\n const heightMode = readDimensionSizingMode(element, \"height\");\n\n const handleDimensionModeCommit = useCallback(\n (prop: \"width\" | \"height\", mode: \"fill\" | \"hug\", displayLabel: string) => {\n handleDeferrableFocus(prop);\n handleCommit(prop, displayLabel, dimensionSizingCssValue(mode));\n },\n [handleDeferrableFocus, handleCommit],\n );\n\n const handleDimensionRestoreFixed = useCallback(\n (prop: \"width\" | \"height\") => {\n handleDeferrableFocus(prop);\n const parsed = parseFloat(readPropertyValue(element, prop));\n const px =\n Number.isFinite(parsed) && parsed > 0\n ? roundTo2(parsed)\n : roundTo2(\n element.getBoundingClientRect()[prop === \"width\" ? \"width\" : \"height\"],\n );\n handleChange(prop, `${px}px`);\n },\n [handleChange, handleDeferrableFocus, element],\n );\n\n const svgWidth = readSvgDimension(element, \"width\");\n const svgHeight = readSvgDimension(element, \"height\");\n\n const imgFit = readPropertyValue(element, \"object-fit\") || \"fill\";\n const gapUnified = parseFloat(readPropertyValue(element, \"gap\")) || 0;\n const isGridLayout = cs.display.includes(\"grid\");\n const gridTemplateColsRaw = readPropertyValue(element, \"grid-template-columns\");\n const gridColCount = parseGridColumnCount(gridTemplateColsRaw);\n const rowGapRaw = readPropertyValue(element, \"row-gap\").trim();\n const colGapRaw = readPropertyValue(element, \"column-gap\").trim();\n const rowGap =\n rowGapRaw !== \"\" && Number.isFinite(parseFloat(rowGapRaw))\n ? parseFloat(rowGapRaw)\n : gapUnified;\n const colGap =\n colGapRaw !== \"\" && Number.isFinite(parseFloat(colGapRaw))\n ? parseFloat(colGapRaw)\n : gapUnified;\n const flexDir = readPropertyValue(element, \"flex-direction\") || \"row\";\n const justifyContent = readPropertyValue(element, \"justify-content\") || \"flex-start\";\n const alignItems = readPropertyValue(element, \"align-items\") || \"stretch\";\n\n const marginValues = readBoxValues(element, \"margin\");\n const paddingValues = readBoxValues(element, \"padding\");\n const borderVals = readBorderValues(element);\n const borderWidths = readBorderWidthValues(element);\n const radiusVals = readRadiusValues(element);\n const opacityParsed = parseFloat(readPropertyValue(element, \"opacity\"));\n const opacity = Number.isFinite(opacityParsed) ? opacityParsed : 1;\n\n const layoutType: LayoutType = isGridLayout\n ? \"grid\"\n : flexDir === \"column\"\n ? \"column\"\n : \"row\";\n\n const handleLayoutTypeSelect = useCallback(\n (type: LayoutType) => {\n if (type === \"grid\") {\n if (isGridLayout) return;\n const gtc = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\n handleFocus(\"display\");\n handleDeferrableFocus(\"grid-template-columns\");\n handleChange(\"display\", \"grid\");\n handleChange(\"grid-template-columns\", gtc);\n handleCommit(\"display\", \"Display\", \"grid\");\n handleCommit(\"grid-template-columns\", \"Grid columns\", gtc);\n return;\n }\n handleFocus(\"display\");\n handleFocus(\"flex-direction\");\n clearGridTemplateIfNeeded();\n const direction = type === \"column\" ? \"column\" : \"row\";\n handleChange(\"display\", \"flex\");\n handleChange(\"flex-direction\", direction);\n handleCommit(\"display\", \"Display\", \"flex\");\n handleCommit(\"flex-direction\", \"Direction\", direction);\n },\n [\n isGridLayout,\n handleFocus,\n handleDeferrableFocus,\n handleChange,\n handleCommit,\n clearGridTemplateIfNeeded,\n ],\n );\n\n // ─── CSS panel: read computed values for the relevant properties ──────\n const cssPanelLines = (CSS_PANEL_PROPS[category] ?? [])\n .map((prop) => ({ prop, value: cs.getPropertyValue(prop).trim() }))\n .filter((l) => l.value && l.value !== \"normal\" && l.value.length > 0);\n\n // ─── Element type label for tray header ───────────────────────────────\n const trayTitle = elementTypeLabel(element, category);\n\n // ─── Shared Box section (rendered for every element category) ─────────\n const BoxSection = (\n <div className=\"wv-style-section wv-box-section\">\n <div className=\"wv-style-section-head\">\n <span className=\"wv-style-section-title\">Box</span>\n <button\n type=\"button\"\n className=\"wv-style-section-toggle wv-pe\"\n aria-expanded={boxSectionOpen}\n aria-label={boxSectionOpen ? \"Collapse box section\" : \"Expand box section\"}\n onClick={() => setBoxSectionOpen((open) => !open)}\n >\n {boxSectionOpen ? <SectionCollapseIcon /> : <SectionExpandIcon />}\n </button>\n </div>\n {boxSectionOpen && (\n <div className=\"wv-box-section-body\">\n <div className=\"wv-box-section-fields\">\n {category !== \"image\" && category !== \"stack\" && (\n <DimensionControl\n width={boxWidth}\n height={boxHeight}\n widthMode={widthMode}\n heightMode={heightMode}\n widthDisplayLabel=\"Box Width\"\n heightDisplayLabel=\"Box Height\"\n onDimensionChange={(prop, v) => handleChange(prop, v)}\n onDimensionCommit={(prop, v) =>\n handleCommit(prop, prop === \"width\" ? \"Box Width\" : \"Box Height\", v)}\n onDimensionFocus={(prop) => handleDeferrableFocus(prop)}\n onDimensionCancel={(prop) => revertDeferrablePreview(prop)}\n onDimensionModeCommit={(prop, mode) =>\n handleDimensionModeCommit(\n prop,\n mode,\n prop === \"width\" ? \"Box Width\" : \"Box Height\",\n )}\n onDimensionRestoreFixed={handleDimensionRestoreFixed}\n />\n )}\n <BoxControl\n property=\"margin\"\n values={marginValues}\n onChange={(axis, v) => handleBoxChange(\"margin\", axis, v)}\n onCommit={(axis, v) => handleBoxCommit(\"margin\", axis, v)}\n onFocus={(axis) => snapshotBoxAxis(\"margin\", axis)}\n onDeferCancel={(axis) => revertBoxAxisPreview(\"margin\", axis)}\n />\n <BoxControl\n property=\"padding\"\n values={paddingValues}\n onChange={(axis, v) => handleBoxChange(\"padding\", axis, v)}\n onCommit={(axis, v) => handleBoxCommit(\"padding\", axis, v)}\n onFocus={(axis) => snapshotBoxAxis(\"padding\", axis)}\n onDeferCancel={(axis) => revertBoxAxisPreview(\"padding\", axis)}\n />\n {showBackgroundColour && (\n <ColorPicker\n variant=\"card\"\n cardLabel=\"Colour\"\n value={backgroundColor}\n styleCommitTarget={element}\n selectionDismissSignal={element}\n onChange={(v, target) => handleChange(\"background-color\", v, target)}\n onCommit={(v, target, fromSnap) =>\n handleCommit(\"background-color\", \"Background Colour\", v, target, fromSnap)}\n onFocus={() => handleFocus(\"background-color\")}\n />\n )}\n </div>\n <BorderControl\n style={borderVals.style}\n color={borderVals.color}\n widths={borderWidths}\n styleCommitTarget={element}\n selectionDismissSignal={element}\n onStyleChange={(v) => handleChange(\"border-style\", v)}\n onStyleCommit={(v) => handleCommit(\"border-style\", \"Border Style\", v)}\n onColorChange={(v, target) => handleChange(\"border-color\", v, target)}\n onColorCommit={(v, target, fromSnap) =>\n handleCommit(\"border-color\", \"Border Colour\", v, target, fromSnap)}\n onWidthChange={handleBorderWidthChange}\n onWidthCommit={handleBorderWidthCommit}\n onFocusStyle={() => handleFocus(\"border-style\")}\n onFocusWidth={snapshotBorderWidth}\n onCancelWidth={revertBorderWidthPreview}\n onFocusColor={() => handleFocus(\"border-color\")}\n />\n <RadiusControl\n values={radiusVals}\n onSingleChange={(v) => handleChange(\"border-radius\", v)}\n onSingleCommit={(v) => handleCommit(\"border-radius\", \"Radius\", v)}\n onCornerChange={(corner, v) => {\n const map: Record<string, string> = {\n tl: \"top-left\", tr: \"top-right\",\n br: \"bottom-right\", bl: \"bottom-left\",\n };\n handleChange(`border-${map[corner]}-radius`, v);\n }}\n onCornerCommit={(corner, v) => {\n const map: Record<string, string> = {\n tl: \"top-left\", tr: \"top-right\",\n br: \"bottom-right\", bl: \"bottom-left\",\n };\n handleCommit(`border-${map[corner]}-radius`, `Radius ${corner.toUpperCase()}`, v);\n }}\n onFocus={(corner) => handleDeferrableFocus(radiusCornerCss(corner))}\n onDeferCancel={(corner) => revertDeferrablePreview(radiusCornerCss(corner))}\n />\n </div>\n )}\n </div>\n );\n\n const VisibilitySection = (\n <div className=\"wv-style-section wv-visibility-section\">\n <div className=\"wv-style-section-head\">\n <span className=\"wv-style-section-title\">Visibility</span>\n <button\n type=\"button\"\n className=\"wv-style-section-toggle wv-pe\"\n aria-expanded={visibilitySectionOpen}\n aria-label={visibilitySectionOpen ? \"Collapse visibility section\" : \"Expand visibility section\"}\n onClick={() => setVisibilitySectionOpen((open) => !open)}\n >\n {visibilitySectionOpen ? <SectionCollapseIcon /> : <SectionExpandIcon />}\n </button>\n </div>\n {visibilitySectionOpen && (\n <div className=\"wv-visibility-section-body\">\n <OpacityControl\n value={opacity}\n onChange={(v) => handleChange(\"opacity\", String(v))}\n onCommit={(v) => handleCommit(\"opacity\", \"Opacity\", String(v))}\n onFocus={() => handleDeferrableFocus(\"opacity\")}\n onCancel={() => revertDeferrablePreview(\"opacity\")}\n />\n </div>\n )}\n </div>\n );\n\n return (\n <div\n className={`wv-edit-tray wv-pe${hidden ? \" wv-edit-tray--hidden\" : \"\"}`}\n aria-hidden={hidden}\n >\n {/* Header row: element type + properties toggle */}\n <div className=\"wv-edit-tray-head\">\n <span className=\"wv-edit-tray-title\">{trayTitle}</span>\n <button\n type=\"button\"\n className={`wv-edit-tray-props-btn wv-pe${cssOpen ? \" wv-edit-tray-props-btn--active\" : \"\"}`}\n title=\"Toggle element properties\"\n aria-label=\"Toggle element properties\"\n aria-expanded={cssOpen}\n onClick={() => setCssOpen((s) => !s)}\n >\n <ElementPropsIcon />\n </button>\n </div>\n\n {/* Computed properties — visible when toggled open */}\n {cssOpen && (\n <div className=\"wv-edit-props-card\">\n {cssPanelLines.length > 0 ? (\n cssPanelLines.map((l) => (\n <p key={l.prop} className=\"wv-edit-props-line\">\n <span className=\"wv-edit-props-key\">{l.prop}:</span>\n <span className=\"wv-edit-props-val\"> {l.value};</span>\n </p>\n ))\n ) : (\n <p className=\"wv-edit-props-empty\">No relevant styles found.</p>\n )}\n </div>\n )}\n\n {/* Type-specific controls */}\n <div className=\"wv-edit-controls\">\n\n {/* ── Text ── */}\n {category === \"text\" && (\n <>\n <div className=\"wv-typo-stack\">\n <div className=\"wv-typo-card\">\n <span className=\"wv-typo-card-label\">Font Size</span>\n <NumberInput\n cssProperty=\"font-size\"\n displayLabel=\"Font Size\"\n value={fontSize}\n unit=\"px\"\n min={1}\n max={999}\n variant=\"card\"\n onChange={(v) => handleChange(\"font-size\", v)}\n onCommit={(v) => handleCommit(\"font-size\", \"Font Size\", v)}\n onFocus={() => handleDeferrableFocus(\"font-size\")}\n onCancel={() => revertDeferrablePreview(\"font-size\")}\n />\n </div>\n <WeightSelect\n variant=\"card\"\n cardLabel=\"Font Weight\"\n value={fontWeight}\n onChange={(v) => handleChange(\"font-weight\", String(v))}\n onCommit={(v) => handleCommit(\"font-weight\", \"Font Weight\", String(v))}\n onFocus={() => handleFocus(\"font-weight\")}\n onCancel={() => revertDeferrablePreview(\"font-weight\")}\n />\n <SegmentedControl\n variant=\"card\"\n value={textAlign}\n onCommit={(v) => {\n handleFocus(\"text-align\");\n handleCommit(\"text-align\", \"Font Alignment\", v);\n }}\n />\n <div className=\"wv-typo-dual-row\">\n <div className=\"wv-typo-icon-card\">\n <TypoLineHeightIcon />\n <NumberInput\n cssProperty=\"line-height\"\n displayLabel=\"Line Height\"\n value={lineHeight}\n unit=\"px\"\n min={0}\n max={500}\n step={0.5}\n variant=\"card\"\n onChange={(v) => handleChange(\"line-height\", v)}\n onCommit={(v) => handleCommit(\"line-height\", \"Line Height\", v)}\n onFocus={() => handleDeferrableFocus(\"line-height\")}\n onCancel={() => revertDeferrablePreview(\"line-height\")}\n />\n </div>\n <div className=\"wv-typo-icon-card\">\n <TypoLetterSpacingIcon />\n <NumberInput\n cssProperty=\"letter-spacing\"\n displayLabel=\"Letter Spacing\"\n value={letterSpacing}\n unit=\"px\"\n min={-20}\n max={50}\n step={0.5}\n variant=\"card\"\n onChange={(v) => handleChange(\"letter-spacing\", v)}\n onCommit={(v) => handleCommit(\"letter-spacing\", \"Letter Spacing\", v)}\n onFocus={() => handleDeferrableFocus(\"letter-spacing\")}\n onCancel={() => revertDeferrablePreview(\"letter-spacing\")}\n />\n </div>\n </div>\n <ColorPicker\n variant=\"card\"\n cardLabel=\"Font\"\n value={fontColor}\n styleCommitTarget={element}\n selectionDismissSignal={element}\n onChange={(v, target) => handleChange(\"color\", v, target)}\n onCommit={(v, target, fromSnap) =>\n handleCommit(\"color\", \"Font Colour\", v, target, fromSnap)}\n onFocus={() => handleFocus(\"color\")}\n />\n </div>\n </>\n )}\n\n {/* ── SVG ── */}\n {category === \"svg\" && (\n <>\n <DimensionControl\n width={svgWidth}\n height={svgHeight}\n sizingModes={false}\n widthDisplayLabel=\"SVG Width\"\n heightDisplayLabel=\"SVG Height\"\n onDimensionChange={handleSvgDimensionChange}\n onDimensionCommit={(prop, value) =>\n handleSvgDimensionCommit(\n prop,\n prop === \"width\" ? \"SVG Width\" : \"SVG Height\",\n value,\n )}\n onDimensionFocus={handleSvgDimensionFocus}\n onDimensionCancel={revertSvgDimensionPreview}\n />\n </>\n )}\n\n {/* ── Image ── */}\n {category === \"image\" && (\n <>\n <div className=\"wv-typo-stack\">\n <DimensionControl\n width={boxWidth}\n height={boxHeight}\n widthMode={widthMode}\n heightMode={heightMode}\n widthDisplayLabel=\"Image Width\"\n heightDisplayLabel=\"Image Height\"\n onDimensionChange={(prop, v) => handleChange(prop, v)}\n onDimensionCommit={(prop, v) =>\n handleCommit(prop, prop === \"width\" ? \"Image Width\" : \"Image Height\", v)}\n onDimensionFocus={(prop) => handleDeferrableFocus(prop)}\n onDimensionCancel={(prop) => revertDeferrablePreview(prop)}\n onDimensionModeCommit={(prop, mode) =>\n handleDimensionModeCommit(\n prop,\n mode,\n prop === \"width\" ? \"Image Width\" : \"Image Height\",\n )}\n onDimensionRestoreFixed={handleDimensionRestoreFixed}\n />\n <CardSelectControl\n label=\"Fit\"\n value={imgFit}\n options={[\n { value: \"cover\", label: \"Cover\" },\n { value: \"contain\", label: \"Contain\" },\n { value: \"fill\", label: \"Fill\" },\n { value: \"none\", label: \"None\" },\n { value: \"scale-down\", label: \"Scale Down\" },\n ]}\n onFocus={() => handleFocus(\"object-fit\")}\n onCommit={(v) => handleCommit(\"object-fit\", \"Fit\", v)}\n />\n </div>\n </>\n )}\n\n {/* ── Stack ── */}\n {category === \"stack\" && (\n <>\n <DimensionControl\n width={boxWidth}\n height={boxHeight}\n widthMode={widthMode}\n heightMode={heightMode}\n widthDisplayLabel=\"Box Width\"\n heightDisplayLabel=\"Box Height\"\n onDimensionChange={(prop, v) => handleChange(prop, v)}\n onDimensionCommit={(prop, v) =>\n handleCommit(prop, prop === \"width\" ? \"Box Width\" : \"Box Height\", v)}\n onDimensionFocus={(prop) => handleDeferrableFocus(prop)}\n onDimensionCancel={(prop) => revertDeferrablePreview(prop)}\n onDimensionModeCommit={(prop, mode) =>\n handleDimensionModeCommit(\n prop,\n mode,\n prop === \"width\" ? \"Box Width\" : \"Box Height\",\n )}\n onDimensionRestoreFixed={handleDimensionRestoreFixed}\n />\n <SectionDivider />\n <div className=\"wv-style-section wv-layout-section\">\n <div className=\"wv-style-section-head\">\n <span className=\"wv-style-section-title\">Layout</span>\n <button\n type=\"button\"\n className=\"wv-style-section-toggle wv-pe\"\n aria-expanded={layoutSectionOpen}\n aria-label={layoutSectionOpen ? \"Collapse layout section\" : \"Expand layout section\"}\n onClick={() => setLayoutSectionOpen((open) => !open)}\n >\n {layoutSectionOpen ? <SectionCollapseIcon /> : <SectionExpandIcon />}\n </button>\n </div>\n {layoutSectionOpen && (\n <div className=\"wv-layout-section-body\">\n <LayoutTypeControl\n value={layoutType}\n onSelect={handleLayoutTypeSelect}\n />\n {isGridLayout && (\n <LayoutColumnsControl\n value={gridColCount}\n onChange={(v) => {\n const n = parseInt(v, 10);\n if (!Number.isFinite(n)) return;\n const clamped = Math.max(1, Math.min(24, n));\n handleChange(\n \"grid-template-columns\",\n `repeat(${clamped}, minmax(0, 1fr))`,\n );\n }}\n onCommit={(v) => {\n const n = parseInt(v, 10);\n if (!Number.isFinite(n)) return;\n const clamped = Math.max(1, Math.min(24, n));\n handleCommit(\n \"grid-template-columns\",\n \"Grid columns\",\n `repeat(${clamped}, minmax(0, 1fr))`,\n );\n }}\n onFocus={() => handleDeferrableFocus(\"grid-template-columns\")}\n onCancel={() => revertDeferrablePreview(\"grid-template-columns\")}\n />\n )}\n <LayoutGapControl\n mode={isGridLayout ? \"grid\" : \"flex\"}\n flexDirection={flexDir.includes(\"column\") ? \"column\" : \"row\"}\n gap={gapUnified}\n rowGap={rowGap}\n colGap={colGap}\n onGapChange={(v) => handleChange(\"gap\", v)}\n onGapCommit={(v) => handleCommit(\"gap\", \"Gap\", v)}\n onGapFocus={() => handleDeferrableFocus(\"gap\")}\n onGapCancel={() => revertDeferrablePreview(\"gap\")}\n onRowGapChange={(v) => handleChange(\"row-gap\", v)}\n onRowGapCommit={(v) => handleCommit(\"row-gap\", \"Vertical gap\", v)}\n onRowGapFocus={() => handleDeferrableFocus(\"row-gap\")}\n onRowGapCancel={() => revertDeferrablePreview(\"row-gap\")}\n onColGapChange={(v) => handleChange(\"column-gap\", v)}\n onColGapCommit={(v) => handleCommit(\"column-gap\", \"Horizontal gap\", v)}\n onColGapFocus={() => handleDeferrableFocus(\"column-gap\")}\n onColGapCancel={() => revertDeferrablePreview(\"column-gap\")}\n />\n <AlignmentControl\n justifyContent={justifyContent}\n alignItems={alignItems}\n flexDirection={flexDir}\n onJustifyCommit={(v) => {\n handleFocus(\"justify-content\");\n handleCommit(\"justify-content\", \"Main Axis Alignment\", v);\n }}\n onAlignCommit={(v) => {\n handleFocus(\"align-items\");\n handleCommit(\"align-items\", \"Cross Axis Alignment\", v);\n }}\n />\n </div>\n )}\n </div>\n </>\n )}\n\n {/* ── Box section — rendered for all categories ── */}\n <SectionDivider />\n {BoxSection}\n <SectionDivider />\n {VisibilitySection}\n </div>\n </div>\n );\n}\n","/** Injected into Shadow DOM (PRD/TRD visual spec) */\nexport const OVERLAY_CSS = `\n@import url(\"https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400&display=swap\");\n\n:root {\n --weevar-dark: #111113;\n --wv-bg: #0f1115;\n --wv-panel: #1a1d24;\n --wv-border: #2a2e38;\n --wv-accent: #0099ff;\n --wv-success: #00c896;\n --wv-danger: #ff4d4f;\n --wv-selection: #777778;\n --wv-ui: 13px Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n --wv-mono: 12px Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n}\n\n* { box-sizing: border-box; }\n\n.wv-root {\n position: fixed;\n inset: 0;\n pointer-events: none;\n font: var(--wv-ui);\n color: #e8eaed;\n color-scheme: dark;\n}\n\n.wv-root,\n.wv-root * {\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n}\n\n.wv-pe { pointer-events: auto; }\n\n.wv-dot {\n position: fixed;\n right: 12px;\n bottom: 12px;\n width: 8px;\n height: 8px;\n border-radius: 999px;\n background: var(--wv-accent);\n opacity: 0.55;\n border: none;\n padding: 0;\n cursor: pointer;\n pointer-events: auto;\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n z-index: 5;\n}\n.wv-dot:hover { opacity: 0.9; }\n\n.wv-toolbar {\n position: fixed;\n top: 12px;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n gap: 12px;\n height: 36px;\n padding: 0 12px;\n border-radius: 6px;\n background: rgba(15, 17, 21, 0.72);\n border: 1px solid var(--wv-border);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n pointer-events: auto;\n z-index: 20;\n}\n\n.wv-toolbar-status {\n font-size: 13px;\n color: #c9cdd4;\n max-width: min(420px, 50vw);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.wv-toolbar-actions {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.wv-toolbar-link {\n border: none;\n background: transparent;\n color: #c9cdd4;\n font-size: 12px;\n cursor: pointer;\n padding: 0 2px;\n}\n.wv-toolbar-link:hover { color: #e8eaed; text-decoration: underline; }\n\n.wv-toolbar-generate {\n height: 26px;\n border-radius: 6px;\n border: 1px solid var(--wv-accent);\n background: var(--wv-accent);\n color: #0b0d10;\n font-size: 12px;\n font-weight: 600;\n padding: 0 10px;\n cursor: pointer;\n}\n.wv-toolbar-generate:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.wv-toolbar-close {\n margin-left: auto;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n border: 1px solid var(--wv-border);\n background: var(--wv-panel);\n color: #e8eaed;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n line-height: 1;\n}\n.wv-toolbar-close:hover {\n border-color: var(--wv-accent);\n color: var(--wv-accent);\n}\n\n.wv-outline {\n position: fixed;\n pointer-events: none;\n border: 2px solid rgba(0, 153, 255, 0.6);\n background: rgba(0, 153, 255, 0.05);\n border-radius: 2px;\n z-index: 2;\n}\n\n.wv-outline-selected {\n border-color: var(--wv-accent);\n background: rgba(0, 153, 255, 0.06);\n}\n\n.wv-label {\n position: fixed;\n pointer-events: none;\n z-index: 3;\n font: 11px var(--wv-mono);\n background: rgba(15, 17, 21, 0.92);\n color: #e8eaed;\n padding: 3px 6px;\n border-radius: 4px;\n border: 1px solid var(--wv-border);\n max-width: min(360px, 70vw);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wv-cursor-label {\n position: fixed;\n pointer-events: none;\n z-index: 31;\n display: inline-flex;\n height: 24px;\n padding: 5px 10px;\n justify-content: center;\n align-items: flex-start;\n gap: 10px;\n border-radius: 8px;\n background: rgba(17, 17, 19, 0.9);\n color: var(--weevar-light, #EBEBEB);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n max-width: 210px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n.wv-markers {\n position: fixed;\n pointer-events: none;\n z-index: 4;\n}\n\n.wv-corner {\n position: absolute;\n width: 4px;\n height: 4px;\n background: var(--wv-accent);\n}\n\n.wv-drag-handle {\n position: fixed;\n width: 24px;\n height: 24px;\n padding: 5px 10px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 8px;\n border: none;\n background: rgba(17, 17, 19, 0.9);\n pointer-events: auto;\n cursor: grab;\n z-index: 6;\n display: flex;\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n}\n.wv-drag-handle:active { cursor: grabbing; }\n.wv-drag-handle svg { width: 16px; height: 16px; display: block; flex: 0 0 auto; }\n\n.wv-selected-top {\n position: fixed;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n z-index: 7;\n pointer-events: none;\n}\n\n.wv-selected-top .wv-drag-handle {\n position: static;\n pointer-events: auto;\n}\n\n.wv-selected-label {\n display: inline-flex;\n height: 24px;\n padding: 5px 10px;\n justify-content: center;\n align-items: flex-start;\n gap: 10px;\n border-radius: 8px;\n background: rgba(17, 17, 19, 0.9);\n color: var(--weevar-light, #EBEBEB);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wv-action-panel {\n position: fixed;\n width: 240px;\n padding: 10px;\n border-radius: 6px;\n background: rgba(26, 29, 36, 0.95);\n border: 1px solid var(--wv-border);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n box-shadow: 0 4px 16px rgba(0,0,0,0.3);\n pointer-events: auto;\n z-index: 7;\n}\n\n.wv-action-title {\n font-size: 11px;\n color: #9aa0a6;\n margin-bottom: 6px;\n}\n\n.wv-path {\n font: 11px var(--wv-mono);\n color: #e8eaed;\n word-break: break-all;\n}\n\n.wv-pill {\n display: inline-block;\n margin-top: 8px;\n padding: 2px 8px;\n border-radius: 999px;\n font-size: 11px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n color: #c9cdd4;\n}\n\n.wv-hint {\n margin-top: 8px;\n font-size: 11px;\n color: #9aa0a6;\n}\n\n.wv-insertion-bar {\n position: fixed;\n pointer-events: none;\n z-index: 8;\n background: var(--wv-accent);\n border-radius: 1px;\n animation: wv-pulse 0.8s ease-in-out infinite;\n}\n\n@keyframes wv-pulse {\n 0%, 100% { opacity: 0.55; }\n 50% { opacity: 1; }\n}\n\n.wv-drag-preview {\n position: fixed;\n z-index: 9;\n max-width: 200px;\n max-height: 120px;\n padding: 6px 8px;\n border-radius: 6px;\n border: 1px solid var(--wv-accent);\n background: rgba(26, 29, 36, 0.92);\n color: #e8eaed;\n font: 11px var(--wv-mono);\n pointer-events: none;\n box-shadow: 0 4px 16px rgba(0,0,0,0.35);\n transform: translate(14px, 14px);\n}\n\n.wv-prompt-drawer {\n position: fixed;\n top: 48px;\n right: 0;\n bottom: 0;\n width: 380px;\n max-width: 100vw;\n background: var(--wv-panel);\n border-left: 1px solid var(--wv-border);\n box-shadow: -8px 0 24px rgba(0,0,0,0.35);\n z-index: 30;\n display: flex;\n flex-direction: column;\n padding: 14px;\n gap: 10px;\n animation: wv-slide-in 0.12s ease-out;\n}\n\n.wv-settings-drawer {\n position: fixed;\n top: 48px;\n right: 0;\n bottom: 0;\n width: 380px;\n max-width: 100vw;\n background: var(--wv-panel);\n border-left: 1px solid var(--wv-border);\n box-shadow: -8px 0 24px rgba(0,0,0,0.35);\n z-index: 30;\n display: flex;\n flex-direction: column;\n padding: 14px;\n gap: 16px;\n animation: wv-slide-in 0.12s ease-out;\n}\n\n.wv-settings-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 2px;\n}\n\n.wv-settings-close {\n width: 28px;\n height: 28px;\n border-radius: 8px;\n border: 1px solid var(--wv-border);\n background: transparent;\n color: #e8eaed;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wv-settings-section {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.wv-settings-content {\n display: flex;\n flex-direction: column;\n gap: 20px;\n overflow: auto;\n min-height: 0;\n padding: 14px 16px;\n box-sizing: border-box;\n}\n\n.wv-settings-label-row {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n padding: 0 2px;\n color: var(--weevar-grey300, #868689);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n\n.wv-settings-label-inline {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.wv-settings-info-icon {\n color: #484848;\n transform: rotate(180deg);\n}\n\n.wv-settings-help-wrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n cursor: help;\n}\n\n.wv-settings-tool-list {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 1px;\n align-self: stretch;\n border-radius: 12px;\n overflow: hidden;\n}\n\n.wv-settings-row {\n border: none;\n border-bottom: solid var(--weevar-dark, #111113);\n border-bottom-width: 1px;\n background: rgba(235, 235, 235, 0.05);\n color: #A4A4A4;\n padding: 11px 10px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n cursor: pointer;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n\n.wv-settings-row:last-child {\n border-bottom: none;\n}\n\n.wv-settings-toggle-svg {\n display: block;\n width: 20px;\n height: 20px;\n flex: 0 0 auto;\n}\n\n.wv-settings-toggle-svg-on {\n width: 24px;\n height: 24px;\n filter: drop-shadow(0 0 1.5px rgba(53, 199, 89, 0.55));\n}\n\n.wv-settings-seg {\n display: flex;\n border-radius: 999px;\n overflow: hidden;\n border: 1px solid rgba(235, 235, 235, 0.04);\n}\n\n.wv-settings-seg-on,\n.wv-settings-seg-off {\n flex: 1;\n width: 100%;\n padding: 8px 0;\n cursor: pointer;\n border: none;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n line-height: 100%;\n}\n\n.wv-settings-seg-off {\n background: rgba(235, 235, 235, 0.05);\n color: #A4A4A4;\n font-weight: 400;\n}\n\n.wv-settings-seg-on {\n background: #EBEBEB;\n color: var(--weevar-dark, #111113);\n font-weight: 500;\n}\n\n.wv-settings-foot {\n color: #58585d;\n font-size: 10px;\n}\n\n@keyframes wv-slide-in {\n from { transform: translateX(12px); opacity: 0.85; }\n to { transform: translateX(0); opacity: 1; }\n}\n\n/* Fixed slot next to dock: crossfade / slide when switching tray type */\n.wv-tray-stack {\n position: fixed;\n width: 250px;\n height: 340px;\n z-index: 25;\n pointer-events: auto;\n overflow: visible;\n}\n.wv-tray-stack.wv-tray-stack--edit {\n height: 800px;\n}\n.wv-tray-stack-layer {\n position: absolute;\n inset: 0;\n opacity: 0;\n transform: translateX(12px);\n transition:\n opacity 0.28s cubic-bezier(0.22, 1, 0.36, 1),\n transform 0.28s cubic-bezier(0.22, 1, 0.36, 1);\n pointer-events: none;\n}\n/* Hidden layers sit above the visible one in DOM order; .wv-pe on asides would still\n capture clicks unless every descendant is non-interactive. */\n.wv-tray-stack-layer:not(.wv-tray-stack-layer--visible) * {\n pointer-events: none !important;\n}\n.wv-tray-stack-layer--visible {\n opacity: 1;\n transform: translateX(0);\n pointer-events: auto;\n animation: wv-tray-draw-out 0.28s cubic-bezier(0.22, 1, 0.36, 1);\n}\n.wv-tray-stack .wv-summary-tray,\n.wv-tray-stack .wv-prompt-drawer {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n width: auto;\n height: auto;\n margin: 0;\n animation: none;\n}\n\n@keyframes wv-tray-draw-out {\n from {\n opacity: 0;\n transform: translateX(12px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.wv-prompt-header {\n font-size: 14px;\n font-weight: 600;\n color: #e8eaed;\n}\n\n.wv-schematic {\n height: 80px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n overflow: hidden;\n}\n\n.wv-schematic-inner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n height: 100%;\n padding: 8px;\n}\n\n.wv-schematic-col { flex: 1; min-width: 0; }\n.wv-schematic-title { font-size: 10px; color: #9aa0a6; margin-bottom: 4px; }\n.wv-schematic-row { display: flex; gap: 4px; flex-wrap: wrap; }\n.wv-schematic-cell {\n flex: 1 1 18px;\n min-width: 18px;\n height: 22px;\n border-radius: 4px;\n border: 1px solid var(--wv-border);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n color: #c9cdd4;\n background: #12151c;\n}\n.wv-schematic-hot {\n border-color: var(--wv-accent);\n color: #e8eaed;\n}\n.wv-schematic-arrow { color: #9aa0a6; font-size: 12px; padding: 0 2px; }\n\n.wv-tabs {\n display: flex;\n gap: 6px;\n}\n.wv-tab {\n flex: 1;\n height: 30px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n color: #c9cdd4;\n cursor: pointer;\n font-size: 12px;\n}\n.wv-tab-on {\n border-color: var(--wv-accent);\n color: #e8eaed;\n}\n\n.wv-prompt-body {\n flex: 1;\n min-height: 120px;\n max-height: 40vh;\n overflow: auto;\n margin: 0;\n padding: 10px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: #0f1115;\n color: #e8eaed;\n font: 12px var(--wv-mono);\n white-space: pre-wrap;\n}\n\n.wv-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 11px;\n color: #9aa0a6;\n}\n.wv-select {\n height: 32px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n color: #e8eaed;\n padding: 0 8px;\n}\n\n.wv-prompt-actions {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n.wv-btn {\n height: 32px;\n padding: 0 12px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: var(--wv-bg);\n color: #e8eaed;\n cursor: pointer;\n font-size: 12px;\n}\n.wv-btn-primary {\n background: var(--wv-accent);\n border-color: var(--wv-accent);\n color: #0b0d10;\n font-weight: 600;\n}\n.wv-btn-danger {\n border-color: rgba(255, 77, 79, 0.45);\n color: #ff8588;\n}\n\n.wv-drop-zone {\n position: fixed;\n pointer-events: none;\n border: 1px dashed rgba(0, 153, 255, 0.45);\n background: rgba(0, 153, 255, 0.06);\n z-index: 7;\n border-radius: 6px;\n}\n\n.wv-badge {\n position: fixed;\n width: 22px;\n height: 22px;\n border-radius: 999px;\n background: #35c759;\n color: #fff;\n border: none;\n font-size: 12px;\n font-weight: 700;\n line-height: 22px;\n text-align: center;\n pointer-events: none;\n z-index: 10;\n}\n\n.wv-toast {\n position: fixed;\n left: 50%;\n bottom: 80px;\n transform: translateX(-50%);\n max-width: min(420px, 92vw);\n padding: 10px 14px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: rgba(15, 17, 21, 0.95);\n color: #e8eaed;\n font-size: 12px;\n z-index: 40;\n box-shadow: 0 4px 16px rgba(0,0,0,0.35);\n}\n\n.wv-fixed-hint {\n color: #ffb84d;\n}\n\n.wv-panel-note {\n font-size: 12px;\n color: #c9cdd4;\n border-left: 2px solid var(--wv-border);\n padding-left: 8px;\n}\n\n/* Figma overlay redesign overrides */\n.wv-tool-button {\n position: fixed;\n top: 24px;\n right: 24px;\n bottom: auto;\n left: auto;\n width: 50px;\n height: 50px;\n padding: 14px;\n border: none;\n border-radius: 999px;\n background: var(--weevar-dark, #111113);\n color: #EBEBEB;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n.wv-tool-button::after {\n content: attr(data-tooltip);\n position: absolute;\n z-index: 40;\n pointer-events: none;\n left: 50%;\n top: calc(100% - 4px);\n transform: translateX(-50%);\n display: inline-flex;\n padding: 4px 8px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #2D2D31;\n color: rgba(241, 241, 241, 0.7);\n text-align: center;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.12s ease;\n}\n.wv-tool-button[data-tooltip-align=\"left\"]::after {\n left: 0;\n transform: none;\n}\n.wv-tool-button[data-tooltip-align=\"right\"]::after {\n left: auto;\n right: 0;\n transform: none;\n}\n.wv-tool-button:hover::after {\n opacity: 1;\n visibility: visible;\n transition-delay: 1.6s;\n}\n.wv-tool-button[data-tooltip-suppress=\"true\"]::after {\n opacity: 0 !important;\n visibility: hidden !important;\n transition-delay: 0s !important;\n}\n.wv-tool-button-logo { width: 18px; height: 18px; color: #EBEBEB; }\n.wv-tool-button-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n width: 22px;\n height: 22px;\n border-radius: 999px;\n background: #35c759;\n color: #fff;\n border: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 700;\n line-height: 22px;\n text-align: center;\n pointer-events: none;\n z-index: 12;\n}\n\n.wv-dock {\n position: fixed;\n top: 24px;\n right: 24px;\n bottom: auto;\n left: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n z-index: 26;\n pointer-events: auto;\n}\n\n.wv-toolbar {\n position: static;\n transform: none;\n width: 50px;\n height: 282px;\n border-radius: 100px;\n background: var(--weevar-dark, #111113);\n border: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: 10px 8px;\n cursor: grab;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n.wv-toolbar:active { cursor: grabbing; }\n\n.wv-tool-icon {\n width: 34px;\n height: 34px;\n border-radius: 999px;\n border: none;\n background: transparent;\n color: #EBEBEB;\n font-size: 14px;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n}\n.wv-tool-icon-on { background: rgba(235, 235, 235, 0.08); color: #EBEBEB; }\n.wv-tool-icon:hover:not(:disabled) { background: rgba(235, 235, 235, 0.08); color: #EBEBEB; }\n.wv-tool-icon:disabled {\n opacity: 0.16;\n cursor: not-allowed;\n}\n.wv-tool-icon:disabled:hover {\n cursor: not-allowed;\n}\n\n.wv-toolbar-close {\n margin-left: 0;\n width: 50px;\n height: 50px;\n border-radius: 999px;\n border: none;\n background: var(--weevar-dark, #111113);\n color: #EBEBEB;\n font-size: 22px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n\n.wv-tool-icon svg,\n.wv-toolbar-close svg {\n display: block;\n flex: 0 0 auto;\n width: 18px;\n height: 18px;\n margin: auto;\n}\n\n.wv-icon-pointer,\n.wv-icon-prompt {\n width: 20px !important;\n height: 20px !important;\n}\n\n.wv-summary-tray,\n.wv-prompt-drawer {\n position: fixed;\n right: 78px;\n bottom: 20px;\n width: 250px;\n height: 340px;\n border-radius: 20px;\n background: var(--weevar-dark, #111113);\n border: 1px solid rgba(235, 235, 235,0.04);\n padding: 8px 0 6px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n z-index: 25;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n\n.wv-tray-head,\n.wv-tray-foot {\n flex: 0 0 auto;\n height: 24px;\n padding: 6px 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--weevar-grey200, #58585D);\n font: 400 10px Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n}\n.wv-tray-head,\n.wv-tray-foot {\n position: relative;\n}\n.wv-tray-head {\n margin-bottom: 6px;\n}\n.wv-tray-foot {\n margin-top: 6px;\n}\n.wv-tray-head::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n bottom: -6px;\n border-bottom: 1px solid var(--weevar-transparent, rgba(235, 235, 235, 0.05));\n}\n.wv-tray-foot::before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: -6px;\n border-top: 1px solid var(--weevar-transparent, rgba(235, 235, 235, 0.05));\n}\n.wv-tray-logo { color: #EBEBEB; display: block; width: 48px; height: 10px; }\n.wv-tray-hide-icon { display: block; width: 12px; height: 12px; color: #58585d; }\n.wv-tray-hide-btn {\n border: none;\n background: transparent;\n padding: 0;\n width: 12px;\n height: 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: #58585d;\n cursor: pointer;\n}\n\n.wv-toolbar-tooltip {\n position: fixed;\n z-index: 40;\n pointer-events: none;\n display: inline-flex;\n padding: 4px 8px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 4px;\n background: #2D2D31;\n color: rgba(241, 241, 241, 0.7);\n text-align: center;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n\n.wv-settings-helper-tooltip {\n position: fixed;\n z-index: 41;\n pointer-events: none;\n transform: translateY(-50%);\n display: flex;\n width: 140px;\n padding: 5px 10px;\n align-items: center;\n gap: 10px;\n border-radius: 8px;\n background: #2D2D31;\n color: rgba(241, 241, 241, 0.7);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 140%;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.1);\n}\n.wv-tray-content {\n flex: 1 1 auto;\n min-height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n padding-bottom: 2px;\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n.wv-tray-content::-webkit-scrollbar {\n width: 0;\n height: 0;\n}\n.wv-tray-content-summary {\n flex: 1 1 auto;\n min-height: 0;\n overflow-x: hidden;\n overflow-y: visible;\n padding: 16px 16px 16px;\n box-sizing: border-box;\n}\n.wv-summary-content {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n justify-content: space-between;\n}\n.wv-summary-heading {\n display: flex;\n flex-direction: column;\n gap: 8px;\n line-height: 1;\n align-items: flex-start;\n width: 100%;\n}\n.wv-summary-kicker {\n color: #868689;\n text-align: left;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n width: 100%;\n}\n.wv-summary-title {\n color: #EBEBEB;\n text-align: left;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 24px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n width: 100%;\n}\n.wv-summary-main {\n display: flex;\n flex-direction: column;\n gap: 24px;\n margin: 0;\n}\n.wv-tray-content-selection {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n overflow-x: hidden;\n overflow-y: visible;\n min-height: 0;\n padding: 14px;\n box-sizing: border-box;\n}\n.wv-tray-content-selection .wv-tray-card {\n margin: 0;\n}\n.wv-selection-path-card {\n flex: 0 0 auto;\n padding: 10px;\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.wv-selection-path-card .wv-selection-path-text {\n display: block;\n min-width: 0;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--weevar-grey300, #868689);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 120%;\n}\n.wv-selection-css-card {\n flex: 1 1 auto;\n min-height: 0;\n padding: 0;\n overflow: hidden;\n}\n.wv-selection-css-scroll-wrap {\n position: relative;\n height: 100%;\n padding: 0;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.wv-selection-css-scroll {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n padding: 0;\n box-sizing: border-box;\n scrollbar-width: none;\n}\n.wv-selection-css-scroll::-webkit-scrollbar {\n width: 0;\n}\n.wv-selection-css-line {\n font-family: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 170%;\n margin-bottom: 6px;\n padding: 0 10px;\n word-break: break-word;\n}\n.wv-selection-css-line:first-child { padding-top: 10px; }\n.wv-selection-css-line:last-child { padding-bottom: 10px; margin-bottom: 0; }\n.wv-selection-css-key { color: #AAA0FA; }\n.wv-selection-css-value { color: #868689; }\n.wv-selection-css-sep { color: #868689; }\n.wv-selection-css-key,\n.wv-selection-css-value,\n.wv-selection-css-sep {\n font-family: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace !important;\n font-size: 11px !important;\n font-style: normal !important;\n font-weight: 400 !important;\n line-height: 170% !important;\n}\n.wv-tray-foot span {\n color: var(--weevar-grey200, #58585D);\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n.wv-tray-card {\n margin: 12px 16px 0;\n border-radius: 12px;\n background: rgba(235, 235, 235,0.05);\n min-height: 0;\n}\n.wv-overview-card {\n height: 110px;\n border-radius: 12px;\n background: transparent;\n display: grid;\n grid-template-columns: 1fr 1px 1fr;\n align-items: stretch;\n position: relative;\n overflow: hidden;\n margin: 0;\n width: 100%;\n}\n.wv-overview-divider {\n width: 1px;\n margin: 0;\n background: #111113;\n z-index: 1;\n}\n.wv-overview-stat {\n background: #18181A;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: space-between;\n padding: 14px 14px 18px;\n gap: 0;\n z-index: 1;\n}\n.wv-overview-orb {\n width: 44px;\n height: 44px;\n border-radius: 999px;\n border: 1px solid #3C3C41;\n background: transparent;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n.wv-overview-orb--moved {\n position: relative;\n}\n.wv-overview-orb--moved::before {\n content: \"\";\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 999px;\n background: #35C759;\n}\n.wv-overview-orb-value {\n position: absolute;\n inset: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: #111113;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 16px;\n font-weight: 500;\n line-height: 100%;\n}\n.wv-overview-orb--tool svg {\n width: 32px;\n height: 32px;\n}\n.wv-overview-orb--tool::before {\n content: \"\";\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 999px;\n background: #FFCC02;\n}\n.wv-overview-orb--tool {\n position: relative;\n}\n.wv-overview-orb--tool svg {\n position: relative;\n z-index: 1;\n width: 14px;\n height: 14px;\n display: block;\n}\n.wv-overview-label {\n color: var(--weevar-grey300, #868689);\n text-align: center;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n white-space: nowrap;\n}\n.wv-doc-card {\n margin: 0;\n flex: 0 0 auto;\n border-radius: 12px;\n background: transparent;\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 0;\n color: #EBEBEB;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n line-height: 100%;\n}\n.wv-doc-icon {\n width: 24px;\n height: 30px;\n display: grid;\n place-items: center;\n flex: 0 0 auto;\n}\n.wv-doc-icon svg { width: 24px; height: 30px; display: block; }\n.wv-doc-copy {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1 1 auto;\n}\n.wv-doc-title {\n color: #EBEBEB;\n text-align: left;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n.wv-doc-site {\n color: #868689;\n text-align: left;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n.wv-doc-go {\n margin-left: auto;\n width: 30px;\n height: 30px;\n min-width: 30px;\n min-height: 30px;\n padding: 4px;\n border: none;\n border-radius: 999px;\n background: rgba(235, 235, 235,0.1);\n color: #EBEBEB;\n display: grid;\n place-items: center;\n line-height: 0;\n cursor: pointer;\n flex-shrink: 0;\n}\n.wv-doc-go svg {\n width: 14px;\n height: 14px;\n display: block;\n color: #EBEBEB;\n}\n\n.wv-prompt-drawer {\n top: auto;\n left: auto;\n bottom: 20px;\n}\n.wv-prompt-content {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n height: 100%;\n min-height: 0;\n padding: 0 16px;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.wv-prompt-drawer .wv-tray-content {\n display: flex;\n flex: 1 1 auto;\n min-height: 0;\n padding-top: 14px;\n padding-bottom: 14px;\n}\n.wv-prompt-drawer .wv-tray-head {\n margin-bottom: 0;\n}\n.wv-prompt-drawer .wv-tray-foot {\n margin-top: 0;\n}\n.wv-prompt-card {\n flex: 1 1 auto;\n min-height: 0;\n border-radius: 12px;\n background: rgba(235, 235, 235,0.05);\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.wv-prompt-card-scroll {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n padding-top: 10px;\n padding-right: 0;\n padding-bottom: 10px;\n padding-left: 10px;\n box-sizing: border-box;\n scrollbar-width: none;\n}\n.wv-prompt-card-scroll::-webkit-scrollbar {\n width: 0;\n height: 0;\n}\n.wv-prompt-scrollbar {\n position: absolute;\n top: 0;\n right: 2px;\n bottom: 0;\n width: 4px;\n pointer-events: none;\n}\n.wv-prompt-scrollbar-thumb {\n position: absolute;\n right: 0;\n width: 4px;\n border-radius: 999px;\n background: #111113;\n}\n.wv-prompt-card-title {\n color: #EBEBEB;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 100%;\n margin-bottom: 12px;\n padding-right: 10px;\n}\n.wv-prompt-card-body {\n margin: 0;\n padding-right: 10px;\n color: #868689;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 11px;\n line-height: 170%;\n}\n.wv-prompt-copy-btn {\n flex: 0 0 auto;\n padding: 8px 0;\n border-radius: 999px;\n border: none;\n background: rgba(235, 235, 235,0.05);\n color: #EBEBEB;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n cursor: pointer;\n}\n.wv-prompt-copy-btn:disabled {\n color: #EBEBEB;\n opacity: 0.35;\n cursor: not-allowed;\n}\n.wv-prompt-copy-btn:disabled:hover {\n cursor: not-allowed;\n}\n.wv-prompt-copy-btn.wv-prompt-copy-btn-on {\n color: var(--weevar-green, #7be5a3);\n}\n.wv-prompt-copy-btn svg {\n width: 12px;\n height: 12px;\n}\n.wv-prompt-copy-btn span {\n color: inherit;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n}\n\n.wv-badge {\n background: #35c759;\n color: #fff;\n border: none;\n width: 22px;\n height: 22px;\n line-height: 22px;\n z-index: 12;\n}\n\n/* Final Figma polish overrides */\n:root { --wv-accent: #7be5a3; }\n.wv-outline {\n border-radius: 4px !important;\n border: 1.5px solid var(--weevar-green, #7BE5A3) !important;\n background: rgba(123, 229, 163, 0.04) !important;\n}\n.wv-outline-selected {\n border-radius: 4px !important;\n border: 1.5px solid var(--weevar-green, #7BE5A3) !important;\n background: rgba(123, 229, 163, 0.04) !important;\n}\n.wv-label { background: rgba(22, 22, 30, 0.9); border: none; border-radius: 8px; padding: 5px 10px; color: #EBEBEB; }\n.wv-drag-handle { background: rgba(22, 22, 30, 0.9); border: none; border-radius: 8px; }\n.wv-handle-grid { background-image: radial-gradient(circle, #EBEBEB 1px, transparent 1px); }\n.wv-toast { background: rgba(22, 22, 30, 0.96); border: none; border-radius: 10px; color: #EBEBEB; }\n.wv-tool-icon { color: #d6d6da; }\n.wv-tool-icon-on { background: rgba(235, 235, 235, 0.08); color: #EBEBEB; }\n.wv-tool-icon:hover:not(:disabled) { background: rgba(235, 235, 235, 0.08); color: #EBEBEB; }\n.wv-tool-icon:disabled {\n opacity: 0.16;\n cursor: not-allowed;\n}\n.wv-tool-icon:disabled:hover {\n cursor: not-allowed;\n}\n.wv-summary-tray, .wv-prompt-drawer { border: none; }\n.wv-tray-head .wv-tray-logo { width: 48px; height: 10px; }\n.wv-doc-card { font-size: 12px; }\n.wv-prompt-header { display: block; margin: 0 16px; font-size: 12px; font-weight: 400; color: #EBEBEB; }\n.wv-tabs { display: none; }\n.wv-field { display: none; }\n.wv-prompt-actions { display: grid; grid-template-columns: 1fr; margin: 0 16px; }\n.wv-btn { border-radius: 999px; border: none; background: rgba(235, 235, 235,0.05); color: #EBEBEB; height: 28px; font-size: 10px; }\n.wv-btn:not(.wv-btn-primary), .wv-btn-danger { display: none; }\n.wv-btn-primary { font-weight: 400; }\n\n/* ─── Edit tray + font weight (dropdown stays in tray; tray layer uses transform) ─ */\n.wv-edit-tray {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n width: 100%;\n}\n.wv-edit-tray--hidden { visibility: hidden; pointer-events: none; }\n.wv-edit-tray-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-width: 0;\n}\n.wv-edit-tray-title {\n flex: 1 1 auto;\n min-width: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 100%;\n color: var(--weevar-grey100, #868689);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wv-edit-tray-props-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n padding: 4px;\n border: none;\n border-radius: 100px;\n background: rgba(235, 235, 235, 0.05);\n color: #868689;\n cursor: pointer;\n line-height: 0;\n}\n.wv-edit-tray-props-btn--active {\n color: #ebebeb;\n background: rgba(235, 235, 235, 0.1);\n}\n.wv-edit-section-label {\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: #58585d;\n margin-top: 4px;\n}\n.wv-edit-controls {\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-width: 0;\n}\n.wv-prop-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n min-width: 0;\n}\n.wv-prop-label {\n font-size: 11px;\n color: #868689;\n flex-shrink: 0;\n}\n.wv-weight-wrap {\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1 1 auto;\n max-width: 100%;\n}\n.wv-weight-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 6px;\n width: 100%;\n min-width: 0;\n}\n.wv-weight-native {\n flex: 0 0 auto;\n min-width: 56px;\n max-width: 40%;\n padding: 4px 6px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: rgba(235, 235, 235, 0.06);\n color: #ebebeb;\n font-size: 11px;\n cursor: pointer;\n}\n.wv-weight-custom-input {\n flex: 1 1 72px;\n min-width: 48px;\n width: 0;\n box-sizing: border-box;\n padding: 5px 8px;\n border-radius: 6px;\n border: 1px solid var(--wv-border);\n background: rgba(235, 235, 235, 0.06);\n color: #ebebeb;\n font-size: 11px;\n}\n\n/* ─── Opacity card (Figma 324:8121 + hover scrub) ──────────────────────── */\n.wv-opacity-card {\n position: relative;\n display: flex;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n height: 34px;\n padding: 0;\n border-radius: 10px;\n background: rgba(235, 235, 235, 0.05);\n box-sizing: border-box;\n overflow: hidden;\n cursor: default;\n user-select: none;\n pointer-events: auto;\n}\n\n.wv-opacity-card--interactive {\n cursor: ew-resize;\n}\n\n.wv-opacity-card-ticks {\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n z-index: 0;\n display: flex;\n align-items: center;\n height: 7px;\n transform: translateY(-50%);\n pointer-events: none;\n}\n\n.wv-opacity-card-tick {\n flex: 0 0 2px;\n width: 2px;\n height: 2px;\n border-radius: 50%;\n background: #414144;\n}\n\n.wv-opacity-card-tick-spacer {\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wv-opacity-card-ticks--dim .wv-opacity-card-tick {\n opacity: 0.3;\n}\n\n.wv-opacity-card-ticks--bright .wv-opacity-card-tick {\n opacity: 1;\n}\n\n.wv-opacity-card-fill {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 0;\n height: 100%;\n background: #58585d;\n pointer-events: none;\n}\n\n.wv-opacity-card--interactive .wv-opacity-card-fill {\n background: rgba(88, 88, 93, 0.8);\n}\n\n.wv-opacity-card-thumb {\n position: absolute;\n top: 50%;\n z-index: 1;\n width: 2px;\n height: 14px;\n border-radius: 1px;\n background: #ebebeb;\n transform: translateY(-50%);\n pointer-events: none;\n}\n\n.wv-opacity-card-thumb--dim {\n opacity: 0.3;\n}\n\n.wv-opacity-card-content {\n position: relative;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-width: 0;\n height: 100%;\n padding: 0 10px;\n box-sizing: border-box;\n}\n\n.wv-opacity-card-label {\n flex-shrink: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n white-space: nowrap;\n}\n\n.wv-opacity-card-value-wrap {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n gap: 0;\n min-width: 0;\n pointer-events: auto;\n cursor: text;\n user-select: text;\n -webkit-user-select: text;\n}\n\n.wv-opacity-card-value-input {\n width: auto;\n min-width: 20px;\n max-width: 48px;\n padding: 0;\n margin: 0;\n border: none;\n border-radius: 0;\n background: transparent;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n text-align: right;\n outline: none;\n cursor: text;\n user-select: text;\n -webkit-user-select: text;\n}\n\n.wv-opacity-card-value-unit {\n flex-shrink: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n pointer-events: none;\n}\n\n.wv-opacity-card--editing-value {\n cursor: default;\n}\n\n.wv-opacity-card--editing-value.wv-opacity-card--interactive {\n cursor: default;\n}\n\n/* ─── Layout type selector icons ─────────────────────────────────── */\n.wv-layout-type-icon {\n display: block;\n width: 15px;\n height: 15px;\n flex-shrink: 0;\n}\n\n/* ─── 3×3 arrangement grid ─────────────────────────────────────────── */\n.wv-alignment-icon {\n display: block;\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n}\n\n.wv-alignment-dot {\n display: block;\n width: 2px;\n height: 2px;\n border-radius: 50%;\n background: currentColor;\n flex-shrink: 0;\n}\n\n.wv-alignment-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 2px;\n width: 100%;\n min-width: 0;\n border-radius: 10px;\n overflow: hidden;\n pointer-events: auto;\n}\n\n.wv-alignment-cell {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 24px;\n min-width: 0;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n background: rgba(235, 235, 235, 0.05);\n color: #58585d;\n cursor: pointer;\n pointer-events: auto;\n box-sizing: border-box;\n}\n\n.wv-alignment-cell:hover:not(.wv-alignment-cell--active) {\n color: #ebebeb;\n}\n\n.wv-alignment-cell--active,\n.wv-alignment-cell--active:hover {\n background: rgba(235, 235, 235, 0.05);\n color: #c7c7c7;\n}\n\n/* ─── Alt-measure spacing guides (Figma-style) ─────────────────────── */\n.wv-spacing-measure {\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 29;\n}\n\n.wv-spacing-line {\n position: fixed;\n background: #ff375f;\n pointer-events: none;\n}\n\n.wv-spacing-line--horizontal {\n height: 1px;\n}\n\n.wv-spacing-line--vertical {\n width: 1px;\n}\n\n.wv-spacing-label {\n position: fixed;\n transform: translate(-50%, -50%);\n padding: 2px 5px;\n border-radius: 4px;\n background: #ff375f;\n color: #fff;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 10px;\n font-weight: 500;\n line-height: 1;\n pointer-events: none;\n white-space: nowrap;\n}\n\n/* ─── V2 EditTray shell ─────────────────────────────────────────────── */\n\n.wv-edit-tray {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-size: 12px;\n color: #e8eaed;\n}\n\n.wv-edit-tray--hidden {\n display: none;\n}\n\n.wv-edit-tray-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 0 0 8px;\n min-width: 0;\n}\n\n.wv-edit-tray-title {\n flex: 1 1 auto;\n min-width: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 100%;\n color: var(--weevar-grey100, #868689);\n word-break: break-word;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wv-edit-tray-props-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n padding: 4px;\n border: none;\n border-radius: 100px;\n background: rgba(235, 235, 235, 0.05);\n color: #868689;\n cursor: pointer;\n pointer-events: auto;\n line-height: 0;\n transition: background 0.15s, color 0.15s;\n}\n.wv-edit-tray-props-btn:hover {\n color: #ebebeb;\n background: rgba(235, 235, 235, 0.08);\n}\n.wv-edit-tray-props-btn--active {\n color: #ebebeb;\n background: rgba(235, 235, 235, 0.1);\n}\n.wv-edit-tray-props-icon {\n display: block;\n width: 14px;\n height: 14px;\n}\n\n/* ─── Expanded element properties card ───────────────────────────────── */\n\n.wv-edit-props-card {\n margin-bottom: 8px;\n padding: 10px;\n border-radius: 12px;\n background: rgba(235, 235, 235, 0.05);\n overflow: hidden;\n}\n\n.wv-edit-props-line {\n margin: 0;\n word-break: break-word;\n}\n\n.wv-edit-props-key {\n color: #aaa0fa;\n}\n\n.wv-edit-props-val {\n color: var(--weevar-light, #ebebeb);\n}\n\n.wv-edit-props-empty {\n margin: 0;\n color: #868689;\n}\n\n.wv-edit-props-card,\n.wv-edit-props-line,\n.wv-edit-props-key,\n.wv-edit-props-val,\n.wv-edit-props-empty {\n font-family: \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace !important;\n font-size: 11px !important;\n font-style: normal !important;\n font-weight: 400 !important;\n line-height: 170% !important;\n}\n\n/* ─── Controls container ─────────────────────────────────────────────── */\n\n.wv-edit-controls {\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 0 0 8px;\n}\n\n.wv-edit-section-label {\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--wv-success);\n padding: 10px 0 4px;\n margin-top: 4px;\n}\n\n.wv-prop-row {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 3px 0;\n min-height: 28px;\n}\n\n.wv-prop-label {\n font-size: 11px;\n color: #aaa;\n flex: 0 0 72px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* ─── NumberInput ────────────────────────────────────────────────────── */\n\n.wv-number-input {\n background: var(--wv-panel);\n border: 1px solid var(--wv-border);\n border-radius: 4px;\n color: #e8eaed;\n font-size: 11px;\n font-family: inherit;\n height: 24px;\n padding: 0 6px;\n width: 60px;\n text-align: right;\n outline: none;\n transition: border-color 0.15s;\n pointer-events: auto;\n user-select: text;\n -webkit-user-select: text;\n}\n.wv-number-input:focus { border-color: var(--wv-accent); }\n.wv-number-input:disabled,\n.wv-number-input-wrap .wv-number-input:disabled {\n opacity: 0.42;\n cursor: not-allowed;\n}\n\n/* NumberInput with unit: border on wrap; numeric field + non-editable suffix */\n.wv-number-input-wrap {\n display: inline-flex;\n flex-direction: row;\n align-items: stretch;\n box-sizing: border-box;\n background: var(--wv-panel);\n border: 1px solid var(--wv-border);\n border-radius: 4px;\n height: 24px;\n min-width: 60px;\n max-width: 100%;\n transition: border-color 0.15s;\n pointer-events: auto;\n}\n.wv-number-input-wrap:focus-within {\n border-color: var(--wv-accent);\n}\n.wv-number-input-wrap .wv-number-input {\n flex: 1 1 auto;\n min-width: 0;\n width: auto;\n max-width: 96px;\n margin: 0;\n border: none;\n border-radius: 0;\n background: transparent;\n padding: 0 2px 0 6px;\n height: 100%;\n box-sizing: border-box;\n}\n.wv-number-input-wrap .wv-number-input:focus {\n border-color: transparent;\n outline: none;\n}\n.wv-number-input-unit {\n display: flex;\n align-items: center;\n flex: 0 0 auto;\n padding: 0 6px 0 0;\n font-size: 11px;\n font-family: inherit;\n color: #9aa0a6;\n user-select: none;\n pointer-events: none;\n}\n\n/* ─── SelectControl ──────────────────────────────────────────────────── */\n\n.wv-select {\n background: var(--wv-panel);\n border: 1px solid var(--wv-border);\n border-radius: 4px;\n color: #e8eaed;\n font-size: 11px;\n font-family: inherit;\n height: 24px;\n padding: 0 4px;\n outline: none;\n cursor: pointer;\n pointer-events: auto;\n flex: 1;\n}\n.wv-select:focus { border-color: var(--wv-accent); }\n\n/* ─── SegmentedControl ───────────────────────────────────────────────── */\n\n.wv-segmented {\n display: flex;\n gap: 2px;\n background: var(--wv-panel);\n border: 1px solid var(--wv-border);\n border-radius: 4px;\n padding: 2px;\n pointer-events: auto;\n}\n\n.wv-segmented-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 20px;\n border: none;\n border-radius: 3px;\n background: none;\n color: #888;\n cursor: pointer;\n pointer-events: auto;\n transition: background 0.1s, color 0.1s;\n}\n.wv-segmented-btn:hover { color: #e8eaed; }\n.wv-segmented-btn[data-active=\"true\"] {\n background: var(--wv-accent);\n color: #fff;\n}\n\n/* ─── WeightSelect ───────────────────────────────────────────────────── */\n\n.wv-weight-trigger {\n display: flex;\n align-items: center;\n gap: 4px;\n background: var(--wv-panel);\n border: 1px solid var(--wv-border);\n border-radius: 4px;\n color: #e8eaed;\n font-size: 12px;\n font-family: inherit;\n height: 24px;\n padding: 0 6px;\n cursor: pointer;\n pointer-events: auto;\n min-width: 60px;\n}\n.wv-weight-trigger:hover { border-color: var(--wv-accent); }\n\n.wv-weight-dropdown {\n background: #1e2228;\n border: 1px solid var(--wv-border);\n border-radius: 6px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.5);\n overflow: hidden;\n pointer-events: auto;\n}\n\n.wv-weight-custom-row { padding: 6px; }\n\n.wv-weight-custom-input {\n width: 100%;\n background: var(--wv-bg);\n border: 1px solid var(--wv-border);\n border-radius: 4px;\n color: #e8eaed;\n font-size: 12px;\n font-family: inherit;\n height: 24px;\n padding: 0 6px;\n outline: none;\n pointer-events: auto;\n box-sizing: border-box;\n}\n.wv-weight-custom-input:focus { border-color: var(--wv-accent); }\n\n.wv-weight-option {\n display: block;\n width: 100%;\n padding: 5px 12px;\n background: none;\n border: none;\n color: #e8eaed;\n font-size: 12px;\n font-family: inherit;\n text-align: left;\n cursor: pointer;\n pointer-events: auto;\n}\n.wv-weight-option:hover { background: var(--wv-border); }\n.wv-weight-option--active { color: var(--wv-accent); }\n\n/* ─── Typography fields (Figma card rows) ───────────────────────────── */\n\n.wv-typo-stack {\n display: flex;\n flex-direction: column;\n gap: 10px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-typo-card,\n.wv-typo-icon-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n height: 34px;\n min-width: 0;\n border-radius: 10px;\n background: rgba(235, 235, 235, 0.05);\n box-sizing: border-box;\n flex-shrink: 0;\n}\n\n.wv-typo-card {\n padding: 8px 10px;\n}\n\n.wv-typo-icon-card {\n flex: 1 1 0;\n padding: 8px 10px 8px 8px;\n color: #c7c7c7;\n}\n\n.wv-typo-field-icon {\n display: block;\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n min-width: 16px;\n min-height: 16px;\n max-width: 16px;\n max-height: 16px;\n}\n\n.wv-typo-card-label {\n flex-shrink: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n white-space: nowrap;\n}\n\n.wv-card-select {\n position: relative;\n cursor: pointer;\n}\n\n/* ─── Tray dropdown (selection tray) ─────────────────────────────────── */\n\n.wv-tray-dropdown {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 0;\n}\n\n.wv-tray-dropdown-trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n min-width: 0;\n height: 34px;\n margin: 0;\n padding: 8px 10px;\n border: none;\n border-radius: 10px;\n background: rgba(235, 235, 235, 0.05);\n box-sizing: border-box;\n cursor: pointer;\n pointer-events: auto;\n text-align: left;\n font: inherit;\n color: #c7c7c7;\n}\n\n.wv-tray-dropdown-trigger--border {\n color: #c7c7c7;\n gap: 8px;\n}\n\n.wv-tray-dropdown-value--border {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n.wv-tray-dropdown-trailing--end {\n margin-left: auto;\n flex-shrink: 0;\n}\n\n.wv-tray-dropdown-trigger:disabled {\n opacity: 0.42;\n cursor: default;\n}\n\n.wv-tray-dropdown-trailing {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n min-width: 0;\n margin-left: auto;\n}\n\n.wv-tray-dropdown-value {\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.wv-tray-dropdown-chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: #58585d;\n transition: transform 0.15s ease;\n}\n\n.wv-tray-dropdown-chevron .wv-typo-chevron {\n display: block;\n}\n\n.wv-tray-dropdown-chevron--open {\n transform: rotate(180deg);\n}\n\n.wv-tray-dropdown-chevron-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n background: transparent;\n cursor: pointer;\n pointer-events: auto;\n line-height: 0;\n}\n\n.wv-tray-dropdown-chevron-trigger:disabled {\n opacity: 0.42;\n cursor: default;\n}\n\n.wv-tray-dropdown-menu {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n padding: 4px;\n border-radius: 10px;\n border: 1px solid rgba(235, 235, 235, 0.04);\n background: #18181a;\n box-sizing: border-box;\n pointer-events: auto;\n}\n\n.wv-tray-dropdown-menu--overlay {\n position: absolute;\n z-index: 50;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.32);\n}\n\n.wv-tray-dropdown .wv-tray-dropdown-menu--overlay {\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n width: auto;\n}\n\n.wv-tray-dropdown-option {\n display: block;\n width: 100%;\n margin: 0;\n padding: 8px 10px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: #c7c7c7;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n text-align: left;\n cursor: pointer;\n pointer-events: auto;\n box-sizing: border-box;\n}\n\n.wv-tray-dropdown-option:hover {\n background: rgba(235, 235, 235, 0.02);\n color: #ebebeb;\n}\n\n.wv-tray-dropdown-option--active {\n background: rgba(235, 235, 235, 0.08);\n color: #ebebeb;\n}\n\n.wv-tray-dropdown-option--active:hover {\n background: rgba(235, 235, 235, 0.05);\n}\n\n.wv-dimension-dropdown .wv-dimension-row {\n width: 100%;\n}\n\n.wv-dimension-label-trigger {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.wv-dimension-label-trigger .wv-typo-card-label {\n pointer-events: none;\n}\n\n.wv-weight-wrap--card.wv-tray-dropdown > .wv-typo-card {\n width: 100%;\n}\n\n.wv-card-select-trailing {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n min-width: 0;\n pointer-events: none;\n}\n\n.wv-card-select-value {\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n white-space: nowrap;\n}\n\n.wv-card-select .wv-typo-chevron {\n flex-shrink: 0;\n pointer-events: none;\n}\n\n.wv-card-select-native {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 10px;\n opacity: 0;\n cursor: pointer;\n appearance: none;\n background: transparent;\n pointer-events: auto;\n}\n\n.wv-typo-dual-row {\n display: flex;\n align-items: stretch;\n gap: 8px;\n width: 100%;\n min-width: 0;\n}\n\n/* Dimension fields — W/H side by side + aspect lock (SVG, Box) */\n.wv-dimension-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-dimension-row .wv-typo-card {\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wv-dimension-label-select {\n position: relative;\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n min-width: 0;\n cursor: pointer;\n}\n\n.wv-dimension-label-select .wv-typo-card-label {\n pointer-events: none;\n}\n\n.wv-dimension-label-native {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n opacity: 0;\n cursor: pointer;\n appearance: none;\n background: transparent;\n pointer-events: auto;\n}\n\n.wv-dimension-mode-value {\n flex: 0 1 auto;\n min-width: 24px;\n max-width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n text-align: right;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.wv-dimension-mode-value:hover {\n color: #ebebeb;\n}\n\n.wv-typo-chevron {\n display: block;\n flex-shrink: 0;\n color: #58585d;\n}\n\n.wv-number-input--card,\n.wv-number-input-wrap.wv-number-input--card {\n border: none;\n background: transparent;\n height: auto;\n min-height: 0;\n min-width: 0;\n max-width: none;\n box-shadow: none;\n}\n\n.wv-number-input--card {\n flex: 0 1 auto;\n width: auto;\n min-width: 24px;\n max-width: 100%;\n padding: 0;\n margin: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif !important;\n font-size: 11px !important;\n font-style: normal !important;\n font-weight: 400 !important;\n line-height: 100% !important;\n color: #c7c7c7 !important;\n text-align: right;\n}\n\n.wv-number-input-wrap.wv-number-input--card:focus-within {\n border: none;\n outline: none;\n}\n\n.wv-number-input-wrap.wv-number-input--card .wv-number-input:focus {\n outline: none;\n}\n\n.wv-number-input-wrap.wv-number-input--card .wv-number-input-unit {\n display: none;\n}\n\n.wv-weight-wrap--card {\n flex: 0 1 auto;\n min-width: 0;\n max-width: 100%;\n}\n\n.wv-weight-wrap--card .wv-weight-row {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n width: auto;\n min-width: 0;\n}\n\n.wv-weight-wrap--card .wv-weight-custom-input--card {\n flex: 0 1 auto;\n min-width: 24px;\n width: auto;\n max-width: 100%;\n height: auto;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n background: transparent;\n color: #c7c7c7;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 100%;\n text-align: right;\n outline: none;\n cursor: text;\n user-select: text;\n -webkit-user-select: text;\n}\n\n.wv-weight-card-chevron {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n margin: 0;\n cursor: pointer;\n}\n\n.wv-weight-native--card-menu {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n opacity: 0;\n cursor: pointer;\n appearance: none;\n background: transparent;\n}\n\n.wv-segmented--typo {\n display: flex;\n gap: 2px;\n width: 100%;\n height: 34px;\n min-width: 0;\n padding: 0;\n border: none;\n background: transparent;\n border-radius: 0;\n flex-shrink: 0;\n}\n\n.wv-segmented--typo .wv-segmented-btn {\n flex: 1 1 0;\n min-width: 0;\n width: auto;\n height: 100%;\n margin: 0;\n padding: 8px;\n border: none;\n border-radius: 0;\n background: rgba(235, 235, 235, 0.05);\n color: #c7c7c7;\n box-sizing: border-box;\n}\n\n.wv-segmented--typo .wv-segmented-btn:first-child {\n border-radius: 12px 0 0 12px;\n}\n\n.wv-segmented--typo .wv-segmented-btn:last-child {\n border-radius: 0 12px 12px 0;\n}\n\n.wv-segmented--typo .wv-segmented-btn:hover:not([data-active=\"true\"]) {\n color: #ebebeb;\n}\n\n.wv-segmented--typo .wv-segmented-btn[data-active=\"true\"],\n.wv-segmented--typo .wv-segmented-btn[data-active=\"true\"]:hover {\n background: #58585d;\n color: #ebebeb;\n}\n\n/* ─── ColorPicker ────────────────────────────────────────────────────── */\n\n.wv-color-row {\n display: flex;\n align-items: center;\n gap: 6px;\n pointer-events: auto;\n}\n\n.wv-color-row--disabled {\n opacity: 0.42;\n}\n\n.wv-color-row--disabled .wv-color-swatch {\n cursor: default;\n}\n\n.wv-color-swatch {\n display: block;\n width: 20px;\n height: 20px;\n border-radius: 2px;\n border: none;\n box-shadow: inset 0 0 0 1px #262628;\n cursor: pointer;\n flex-shrink: 0;\n pointer-events: auto;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n.wv-color-swatch--card {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: 2px;\n box-shadow: inset 0 0 0 1px rgba(235, 235, 235, 0.05);\n}\n\n.wv-color-native {\n position: absolute;\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: auto;\n border: none;\n padding: 0;\n}\n\n.wv-color-hex {\n background: var(--wv-panel);\n border: 1px solid var(--wv-border);\n border-radius: 4px;\n color: #e8eaed;\n font-size: 11px;\n font-family: monospace;\n height: 22px;\n padding: 0 5px;\n width: 72px;\n outline: none;\n pointer-events: auto;\n}\n.wv-color-hex:focus { border-color: var(--wv-accent); }\n\n.wv-color-alpha-wrap {\n display: inline-flex;\n align-items: center;\n gap: 1px;\n pointer-events: auto;\n margin-left: 10px;\n}\n\n.wv-color-alpha {\n background: var(--wv-panel);\n border: 1px solid var(--wv-border);\n border-radius: 4px;\n color: #e8eaed;\n font-size: 11px;\n font-family: monospace;\n height: 22px;\n padding: 0 5px;\n width: 40px;\n outline: none;\n pointer-events: auto;\n text-align: right;\n}\n.wv-color-alpha:focus { border-color: var(--wv-accent); }\n\n.wv-color-alpha-unit {\n color: #888;\n font-size: 11px;\n font-family: monospace;\n pointer-events: none;\n}\n\n/* Figma card layout (471:2183) — two rows + divider */\n.wv-color-card {\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 100%;\n min-width: 0;\n padding: 10px;\n border-radius: 10px;\n background: rgba(235, 235, 235, 0.05);\n box-sizing: border-box;\n flex-shrink: 0;\n pointer-events: auto;\n}\n\n.wv-color-card--disabled {\n opacity: 0.42;\n}\n\n.wv-color-card--disabled .wv-color-swatch {\n cursor: default;\n}\n\n.wv-color-card-row {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-color-card-label {\n flex: 1 1 0;\n min-width: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n white-space: nowrap;\n}\n\n.wv-color-card-value {\n flex: 1 1 0;\n min-width: 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n}\n\n.wv-color-card-hex,\n.wv-color-card-alpha {\n flex: 1 1 auto;\n min-width: 0;\n width: auto;\n max-width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n background: transparent;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif !important;\n font-size: 11px !important;\n font-style: normal !important;\n font-weight: 400 !important;\n line-height: 100% !important;\n color: #c7c7c7 !important;\n text-align: right;\n outline: none;\n pointer-events: auto;\n user-select: text;\n -webkit-user-select: text;\n}\n\n.wv-color-card-hex:focus,\n.wv-color-card-alpha:focus {\n outline: none;\n}\n\n.wv-color-card-alpha-unit {\n flex-shrink: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n pointer-events: none;\n}\n\n.wv-color-card-divider {\n display: block;\n width: auto;\n height: 0;\n min-height: 0;\n margin: 0 -10px;\n padding: 0;\n border: none;\n border-top: 1px solid rgba(235, 235, 235, 0.05);\n flex-shrink: 0;\n pointer-events: none;\n}\n\n/* ─── Style section (Figma) ──────────────────────────────────────────── */\n\n.wv-style-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-section-divider {\n display: block;\n width: 100%;\n height: 0;\n min-height: 0;\n margin: 16px 0;\n padding: 0;\n border: none;\n border-top: 1px solid rgba(235, 235, 235, 0.05);\n flex-shrink: 0;\n pointer-events: none;\n}\n\n/* Box divider when no type-specific section precedes it (e.g. generic). */\n.wv-edit-controls > .wv-section-divider:first-child {\n margin-top: 0;\n}\n\n.wv-style-section-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n min-width: 0;\n}\n\n.wv-style-section-title {\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n color: #868689;\n white-space: nowrap;\n}\n\n.wv-style-section-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 12px;\n height: 12px;\n padding: 0;\n margin: 0;\n border: none;\n background: none;\n color: #484848;\n cursor: pointer;\n pointer-events: auto;\n line-height: 0;\n}\n\n.wv-style-section-toggle:hover {\n color: #c7c7c7;\n}\n\n/* Box section — Figma 324:7710 (16px below divider, 12px title to content) */\n.wv-box-section {\n margin-top: 0;\n}\n\n.wv-box-section.wv-style-section {\n gap: 12px;\n}\n\n.wv-visibility-section.wv-style-section {\n gap: 12px;\n}\n\n.wv-layout-section.wv-style-section {\n gap: 12px;\n}\n\n.wv-layout-section-body {\n display: flex;\n flex-direction: column;\n gap: 10px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-layout-gap-row {\n display: flex;\n align-items: stretch;\n gap: 10px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-layout-gap-card,\n.wv-layout-columns-card {\n width: 100%;\n}\n\n.wv-layout-gap-row .wv-layout-gap-card {\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wv-visibility-section-body {\n width: 100%;\n min-width: 0;\n}\n\n.wv-section-divider + .wv-box-section {\n margin-top: 0;\n}\n\n.wv-section-divider + .wv-layout-section {\n margin-top: 0;\n}\n\n.wv-box-section-body {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-box-section-fields {\n display: flex;\n flex-direction: column;\n gap: 10px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-box-section-body > .wv-edit-section-label {\n margin-top: 0;\n padding-top: 0;\n padding-bottom: 0;\n font-size: 12px;\n font-weight: 400;\n letter-spacing: 0;\n text-transform: none;\n color: #868689;\n}\n\n.wv-box-section-body .wv-box-header {\n margin-bottom: 0;\n}\n\n/* Box spacing — Figma 337:1994 / 324:8196 */\n.wv-box-spacing-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-box-spacing-cards,\n.wv-box-spacing-sides {\n display: flex;\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wv-box-spacing-cards {\n gap: 8px;\n}\n\n.wv-box-spacing-sides {\n flex-direction: column;\n gap: 8px;\n}\n\n.wv-box-spacing-sides-row {\n display: flex;\n gap: 8px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-box-spacing-card {\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wv-box-spacing-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 34px;\n height: 34px;\n padding: 8px;\n margin: 0;\n border: 1px solid rgba(235, 235, 235, 0.05);\n border-radius: 10px;\n background: rgba(235, 235, 235, 0.05);\n color: #ffffff;\n cursor: pointer;\n pointer-events: auto;\n box-sizing: border-box;\n line-height: 0;\n}\n\n.wv-box-spacing-toggle:hover:not(.wv-box-spacing-toggle--active):not(:disabled) {\n background: rgba(235, 235, 235, 0.08);\n}\n\n.wv-box-spacing-toggle--active,\n.wv-box-spacing-toggle--active:hover {\n background: #58585d;\n}\n\n.wv-box-spacing-toggle-icon {\n display: block;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n\n/* ─── BoxControl (legacy radius header) ──────────────────────────────── */\n\n.wv-box-control { padding: 4px 0; }\n\n.wv-box-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 4px;\n}\n\n.wv-box-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n background: none;\n border: 1px solid transparent;\n border-radius: 3px;\n color: #666;\n cursor: pointer;\n pointer-events: auto;\n transition: color 0.1s, border-color 0.1s;\n}\n.wv-box-toggle:hover { color: #e8eaed; border-color: var(--wv-border); }\n.wv-box-toggle--active { color: var(--wv-accent); border-color: var(--wv-accent); }\n\n.wv-box-vh-row {\n display: flex;\n gap: 8px;\n}\n\n.wv-box-sides-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 4px;\n}\n\n.wv-box-input-group {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.wv-box-axis-label {\n font-size: 10px;\n color: #666;\n width: 14px;\n text-align: center;\n flex-shrink: 0;\n}\n\n/* ─── Box subsections (Border, Corner Radius, …) ─────────────────────── */\n\n.wv-box-subsection,\n.wv-border-section,\n.wv-radius-section {\n display: flex;\n flex-direction: column;\n gap: 10px;\n width: 100%;\n min-width: 0;\n}\n\n.wv-box-subsection-title,\n.wv-border-section-title {\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 100%;\n color: #868689;\n white-space: nowrap;\n margin-bottom: 2px;\n}\n\n.wv-border-style-card {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-width: 0;\n height: 34px;\n padding: 8px 10px;\n border-radius: 10px;\n background: rgba(235, 235, 235, 0.05);\n box-sizing: border-box;\n color: #c7c7c7;\n cursor: pointer;\n}\n\n.wv-border-style-value {\n flex: 1 1 0;\n min-width: 0;\n font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;\n font-size: 11px;\n font-weight: 400;\n line-height: 100%;\n color: #c7c7c7;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n\n.wv-border-style-card .wv-typo-chevron {\n flex-shrink: 0;\n pointer-events: none;\n}\n\n.wv-border-style-native {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 10px;\n opacity: 0;\n cursor: pointer;\n appearance: none;\n background: transparent;\n pointer-events: auto;\n}\n\n.wv-box-spacing-cards .wv-border-weight-card {\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wv-box-spacing-sides-row .wv-border-weight-card {\n flex: 1 1 0;\n min-width: 0;\n}\n\n.wv-border-weight-card--disabled .wv-typo-card-label {\n opacity: 0.42;\n}\n\n.wv-box-spacing-toggle:disabled {\n opacity: 0.42;\n cursor: default;\n}\n\n/* ─── RadiusControl ──────────────────────────────────────────────────── */\n/* Selection tray: 14px horizontal inset is only on .wv-tray-content-selection */\n.wv-tray-content-selection .wv-edit-tray-head,\n.wv-tray-content-selection .wv-typo-stack,\n.wv-tray-content-selection .wv-section-divider,\n.wv-tray-content-selection .wv-style-section,\n.wv-tray-content-selection .wv-box-section,\n.wv-tray-content-selection .wv-visibility-section,\n.wv-tray-content-selection .wv-layout-section,\n.wv-tray-content-selection .wv-edit-section-label,\n.wv-tray-content-selection .wv-prop-row,\n.wv-tray-content-selection .wv-alignment-grid,\n.wv-tray-content-selection .wv-box-spacing-row,\n.wv-tray-content-selection .wv-border-section,\n.wv-tray-content-selection .wv-radius-section,\n.wv-tray-content-selection .wv-box-subsection,\n.wv-tray-content-selection .wv-box-control {\n padding-left: 0;\n padding-right: 0;\n}\n\n.wv-tray-content-selection .wv-edit-props-card {\n padding: 10px !important;\n}\n\n/* Text selection in editable tray fields — must target inputs directly (WebKit). */\n.wv-edit-tray input,\n.wv-edit-tray textarea {\n color-scheme: dark;\n}\n\n.wv-edit-tray input::selection,\n.wv-edit-tray input:focus::selection,\n.wv-edit-tray textarea::selection,\n.wv-edit-tray textarea:focus::selection,\n.wv-number-input::selection,\n.wv-number-input:focus::selection,\n.wv-number-input--card::selection,\n.wv-number-input--card:focus::selection,\n.wv-opacity-card-value-input::selection,\n.wv-opacity-card-value-input:focus::selection,\n.wv-color-card-hex::selection,\n.wv-color-card-hex:focus::selection,\n.wv-color-card-alpha::selection,\n.wv-color-card-alpha:focus::selection,\n.wv-weight-custom-input::selection,\n.wv-weight-custom-input:focus::selection,\n.wv-weight-custom-input--card::selection,\n.wv-weight-custom-input--card:focus::selection {\n background-color: #777778 !important;\n color: #ebebeb !important;\n}\n\n.wv-edit-tray input::-moz-selection,\n.wv-edit-tray input:focus::-moz-selection,\n.wv-edit-tray textarea::-moz-selection,\n.wv-edit-tray textarea:focus::-moz-selection,\n.wv-number-input::-moz-selection,\n.wv-number-input:focus::-moz-selection,\n.wv-number-input--card::-moz-selection,\n.wv-number-input--card:focus::-moz-selection,\n.wv-opacity-card-value-input::-moz-selection,\n.wv-opacity-card-value-input:focus::-moz-selection,\n.wv-color-card-hex::-moz-selection,\n.wv-color-card-hex:focus::-moz-selection,\n.wv-color-card-alpha::-moz-selection,\n.wv-color-card-alpha:focus::-moz-selection,\n.wv-weight-custom-input::-moz-selection,\n.wv-weight-custom-input:focus::-moz-selection,\n.wv-weight-custom-input--card::-moz-selection,\n.wv-weight-custom-input--card:focus::-moz-selection {\n background-color: #777778 !important;\n color: #ebebeb !important;\n}\n`;\n","import { useEffect, useRef, useState, type CSSProperties } from \"react\";\nimport type { WeevarRuntimeConfig } from \"../engine/layoutTypes\";\nimport { weevarVersionLabel } from \"../version\";\n\ntype Props = {\n promptText: string;\n canCopy: boolean;\n runtimeConfig?: WeevarRuntimeConfig;\n onCopy: () => void | Promise<void>;\n onClose: () => void;\n warningNote?: string | null;\n copyFlash: boolean;\n style?: CSSProperties;\n /** When stacked with other trays, hide from a11y tree while off-screen */\n hidden?: boolean;\n};\n\nexport function PromptPanel({\n promptText,\n canCopy,\n runtimeConfig: _runtimeConfig,\n onCopy,\n onClose,\n warningNote,\n copyFlash,\n style,\n hidden = false,\n}: Props) {\n void _runtimeConfig; // reserved for future panel-local template hooks\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const [scrollThumb, setScrollThumb] = useState<{ top: number; height: number; visible: boolean }>({\n top: 0,\n height: 0,\n visible: false,\n });\n\n useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n\n const update = () => {\n const client = el.clientHeight;\n const scroll = el.scrollHeight;\n const maxScroll = scroll - client;\n if (maxScroll <= 0 || client <= 0) {\n setScrollThumb({ top: 0, height: 0, visible: false });\n return;\n }\n const trackInset = 10;\n const trackHeight = Math.max(0, client - trackInset * 2);\n const height = Math.max(20, (client / scroll) * trackHeight);\n const ratio = el.scrollTop / maxScroll;\n const travel = Math.max(0, trackHeight - height);\n const top = trackInset + ratio * travel;\n setScrollThumb({ top, height, visible: true });\n };\n\n update();\n el.addEventListener(\"scroll\", update, { passive: true });\n window.addEventListener(\"resize\", update);\n return () => {\n el.removeEventListener(\"scroll\", update);\n window.removeEventListener(\"resize\", update);\n };\n }, [promptText, copyFlash]);\n\n return (\n <aside\n className=\"wv-prompt-drawer wv-pe\"\n role=\"dialog\"\n aria-label=\"Generated prompt\"\n style={style}\n aria-hidden={hidden}\n >\n <div className=\"wv-tray-head\">\n <PromptLogo />\n <button type=\"button\" className=\"wv-tray-hide-btn\" aria-label=\"Hide tray\" onClick={onClose}>\n <HideTrayIcon />\n </button>\n </div>\n <div className=\"wv-tray-content wv-prompt-content\">\n <div className=\"wv-prompt-card\">\n <div ref={scrollRef} className=\"wv-prompt-card-scroll\">\n <div className=\"wv-prompt-card-title\">Prompt</div>\n <pre className=\"wv-prompt-card-body\">{promptText}</pre>\n </div>\n {scrollThumb.visible ? (\n <div className=\"wv-prompt-scrollbar\" aria-hidden>\n <div\n className=\"wv-prompt-scrollbar-thumb\"\n style={{ top: scrollThumb.top, height: scrollThumb.height }}\n />\n </div>\n ) : null}\n </div>\n <button\n type=\"button\"\n className={`wv-prompt-copy-btn ${copyFlash ? \"wv-prompt-copy-btn-on\" : \"\"}`}\n onClick={() => void onCopy()}\n disabled={!canCopy}\n >\n {copyFlash ? <CopySuccessIcon /> : <CopyIcon />}\n <span>{copyFlash ? \"Copied\" : \"Copy\"}</span>\n </button>\n {warningNote ? <div className=\"wv-panel-note\">{warningNote}</div> : null}\n </div>\n <div className=\"wv-tray-foot\">\n <span>{weevarVersionLabel()}</span>\n <GlobeIcon />\n </div>\n </aside>\n );\n}\n\nfunction PromptLogo() {\n return (\n <svg\n className=\"wv-tray-logo\"\n width=\"48\"\n height=\"10\"\n viewBox=\"0 0 48 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Weevar\"\n >\n <path d=\"M2.16888 9.97264C1.66872 9.97264 1.2504 9.76288 0.913931 9.34336C0.577459 8.92385 0.409223 8.34929 0.409223 7.6197C0.409223 7.24578 0.450145 6.82627 0.531989 6.36115C0.613834 5.88691 0.709319 5.40812 0.818445 4.92476C0.927571 4.4414 1.02306 3.98997 1.1049 3.57045C1.18675 3.14181 1.22767 2.78614 1.22767 2.50342C1.22767 2.30278 1.20039 2.14774 1.14582 2.0383C1.09126 1.91974 0.991228 1.86047 0.845727 1.86047C0.736601 1.86047 0.609287 1.91062 0.463786 2.01094C0.318284 2.11126 0.209158 2.30734 0.136408 2.59918L0 2.54446C0 1.76015 0.17733 1.13999 0.531989 0.683995C0.895743 0.227998 1.38226 0 1.99155 0C2.56446 0 2.96004 0.186959 3.1783 0.560876C3.40564 0.934793 3.51931 1.40447 3.51931 1.9699C3.51931 2.38942 3.47385 2.8363 3.38291 3.31053C3.30106 3.78477 3.20558 4.25901 3.09645 4.73324C2.98733 5.19836 2.88729 5.63155 2.79635 6.03283C2.71451 6.43411 2.67359 6.76699 2.67359 7.03146C2.67359 7.42362 2.77362 7.6197 2.97368 7.6197C3.0919 7.6197 3.25105 7.53762 3.45111 7.37346C3.65118 7.20018 3.86033 6.96762 4.07859 6.67579C4.30593 6.37483 4.52418 6.03739 4.73334 5.66347C4.9425 5.28044 5.11983 4.87916 5.26533 4.45964C5.24714 4.25901 5.2335 4.06749 5.22441 3.88509C5.21531 3.69357 5.21077 3.52485 5.21077 3.37893C5.21077 2.64934 5.27897 2.0611 5.41538 1.61423C5.56088 1.16735 5.74276 0.839033 5.96101 0.629275C6.17926 0.419517 6.40206 0.314637 6.62941 0.314637C6.94769 0.314637 7.23415 0.492476 7.48877 0.848153C7.7434 1.19471 7.87072 1.66895 7.87072 2.27086C7.87072 2.64478 7.80251 3.0643 7.6661 3.52941C7.5297 3.98541 7.30235 4.47332 6.98407 4.99316C6.95678 5.77747 7.04318 6.41131 7.24324 6.89466C7.44331 7.37802 7.69339 7.6197 7.99348 7.6197C8.18445 7.6197 8.38906 7.52394 8.60732 7.33242C8.83466 7.13178 9.04382 6.85819 9.23479 6.51163C9.42576 6.15595 9.58036 5.74555 9.69858 5.28044C9.82589 4.81532 9.88955 4.31829 9.88955 3.78933C9.88955 3.47925 9.86681 3.15549 9.82134 2.81806C9.78497 2.48062 9.73495 2.15686 9.67129 1.84678C9.61673 1.53671 9.55762 1.28135 9.49396 1.08071C9.49396 0.925672 9.55762 0.770634 9.68494 0.615595C9.82134 0.451437 9.99413 0.314637 10.2033 0.205198C10.4124 0.086639 10.6261 0.0273594 10.8444 0.0273594C11.0627 0.0273594 11.2718 0.104879 11.4719 0.259918C11.6719 0.414957 11.8356 0.688555 11.9629 1.08071C12.0903 1.46375 12.1539 2.01094 12.1539 2.7223C12.1539 3.71637 12.0266 4.65116 11.772 5.52668C11.5173 6.39307 11.1718 7.15914 10.7353 7.8249C10.3079 8.49065 9.83498 9.01505 9.31663 9.39808C8.79829 9.772 8.27084 9.95896 7.73431 9.95896C7.26143 9.95896 6.87039 9.81304 6.5612 9.5212C6.25201 9.22937 6.01103 8.83721 5.83824 8.34473C5.66546 7.85226 5.54269 7.30506 5.46994 6.70315C5.14256 7.48746 4.7879 8.12129 4.40596 8.60465C4.02402 9.07889 3.64208 9.42544 3.26014 9.64432C2.8782 9.8632 2.51445 9.97264 2.16888 9.97264Z\" fill=\"currentColor\" />\n <path d=\"M15.4244 10C14.7605 10 14.2104 9.86776 13.7739 9.60328C13.3374 9.32969 13.01 8.97401 12.7917 8.53625C12.5735 8.08938 12.4643 7.61058 12.4643 7.09986C12.4643 6.61651 12.5553 6.13315 12.7372 5.64979C12.9281 5.15732 13.2009 4.71044 13.5556 4.30917C13.9194 3.90789 14.3559 3.58413 14.8651 3.33789C15.3835 3.09166 15.9655 2.96854 16.6111 2.96854C17.4114 2.96854 17.9934 3.15093 18.3572 3.51573C18.73 3.87141 18.9164 4.30461 18.9164 4.81532C18.9164 5.25308 18.7982 5.65891 18.5618 6.03283C18.3344 6.39763 18.0298 6.69403 17.6478 6.92202C17.2659 7.1409 16.8476 7.25034 16.3929 7.25034C16.1564 7.25034 15.9155 7.21386 15.6699 7.1409C15.4244 7.06794 15.1834 6.95394 14.947 6.79891C14.9924 7.36434 15.1561 7.77474 15.438 8.0301C15.7199 8.28545 16.0564 8.41313 16.4474 8.41313C16.7203 8.41313 16.9931 8.36297 17.2659 8.26265C17.5387 8.15321 17.7888 8.01642 18.0161 7.85226C18.2526 7.67898 18.4344 7.49658 18.5618 7.30506L18.6572 7.37346C18.6572 7.8477 18.5572 8.25353 18.3572 8.59097C18.1662 8.91929 17.9116 9.18833 17.5933 9.39808C17.275 9.60784 16.9249 9.76288 16.5429 9.8632C16.1701 9.9544 15.7972 10 15.4244 10ZM15.7381 6.30643C16.0291 6.30643 16.2656 6.22435 16.4474 6.06019C16.6293 5.88691 16.7657 5.68627 16.8567 5.45828C16.9476 5.23028 16.9931 5.02964 16.9931 4.85636C16.9931 4.6466 16.934 4.47332 16.8157 4.33653C16.6975 4.19061 16.5338 4.11765 16.3247 4.11765C16.161 4.11765 15.9791 4.17693 15.779 4.29549C15.5881 4.41404 15.4153 4.61924 15.2607 4.91108C15.1061 5.1938 15.0061 5.59052 14.9606 6.10123C15.2516 6.23803 15.5108 6.30643 15.7381 6.30643Z\" fill=\"currentColor\" />\n <path d=\"M22.5378 10C21.874 10 21.3238 9.86776 20.8873 9.60328C20.4508 9.32969 20.1234 8.97401 19.9052 8.53625C19.6869 8.08938 19.5778 7.61058 19.5778 7.09986C19.5778 6.61651 19.6687 6.13315 19.8506 5.64979C20.0416 5.15732 20.3144 4.71044 20.669 4.30917C21.0328 3.90789 21.4693 3.58413 21.9786 3.33789C22.4969 3.09166 23.0789 2.96854 23.7246 2.96854C24.5248 2.96854 25.1068 3.15093 25.4706 3.51573C25.8434 3.87141 26.0299 4.30461 26.0299 4.81532C26.0299 5.25308 25.9116 5.65891 25.6752 6.03283C25.4479 6.39763 25.1432 6.69403 24.7613 6.92202C24.3793 7.1409 23.961 7.25034 23.5063 7.25034C23.2699 7.25034 23.0289 7.21386 22.7834 7.1409C22.5378 7.06794 22.2968 6.95394 22.0604 6.79891C22.1059 7.36434 22.2696 7.77474 22.5515 8.0301C22.8334 8.28545 23.1698 8.41313 23.5609 8.41313C23.8337 8.41313 24.1065 8.36297 24.3793 8.26265C24.6521 8.15321 24.9022 8.01642 25.1296 7.85226C25.366 7.67898 25.5479 7.49658 25.6752 7.30506L25.7707 7.37346C25.7707 7.8477 25.6707 8.25353 25.4706 8.59097C25.2796 8.91929 25.025 9.18833 24.7067 9.39808C24.3884 9.60784 24.0383 9.76288 23.6564 9.8632C23.2835 9.9544 22.9107 10 22.5378 10ZM22.8516 6.30643C23.1426 6.30643 23.379 6.22435 23.5609 6.06019C23.7428 5.88691 23.8792 5.68627 23.9701 5.45828C24.061 5.23028 24.1065 5.02964 24.1065 4.85636C24.1065 4.6466 24.0474 4.47332 23.9292 4.33653C23.811 4.19061 23.6473 4.11765 23.4381 4.11765C23.2744 4.11765 23.0926 4.17693 22.8925 4.29549C22.7015 4.41404 22.5287 4.61924 22.3741 4.91108C22.2195 5.1938 22.1195 5.59052 22.074 6.10123C22.365 6.23803 22.6242 6.30643 22.8516 6.30643Z\" fill=\"currentColor\" />\n <path d=\"M28.751 9.95896C28.2235 9.95896 27.8052 9.82216 27.496 9.54856C27.1868 9.26585 27.0322 8.83265 27.0322 8.24897C27.0322 7.91154 27.0732 7.5513 27.155 7.16826C27.246 6.78523 27.3323 6.44323 27.4142 6.14227C27.496 5.85043 27.5597 5.59508 27.6052 5.3762C27.6597 5.15732 27.687 4.9886 27.687 4.87004C27.687 4.72412 27.6552 4.61924 27.5915 4.5554C27.5279 4.49156 27.4506 4.45964 27.3596 4.45964C27.1414 4.45964 26.9595 4.56452 26.814 4.77428L26.7594 4.71956C26.7685 4.40948 26.8686 4.12677 27.0595 3.87141C27.2505 3.60693 27.496 3.39717 27.7961 3.24213C28.0962 3.0871 28.4009 3.00958 28.7101 3.00958C29.0556 3.00958 29.3512 3.11446 29.5967 3.32421C29.8422 3.52485 29.9559 3.84405 29.9377 4.28181C29.9286 4.47332 29.8923 4.715 29.8286 5.00684C29.774 5.29868 29.6967 5.64523 29.5967 6.04651C29.533 6.30187 29.4648 6.59371 29.3921 6.92202C29.3284 7.24122 29.2966 7.53306 29.2966 7.79754C29.2966 7.99818 29.3284 8.15777 29.3921 8.27633C29.4558 8.39489 29.5603 8.45417 29.7058 8.45417C29.8968 8.45417 30.106 8.34929 30.3333 8.13953C30.5697 7.92066 30.7744 7.56954 30.9471 7.08618C31.1199 6.59371 31.22 5.94163 31.2472 5.12996C31.2745 4.5098 31.2336 4.05837 31.1245 3.77565V3.70725C31.2063 3.57957 31.3291 3.45645 31.4928 3.33789C31.6656 3.21933 31.8565 3.12357 32.0657 3.05062C32.2748 2.96854 32.4704 2.9275 32.6522 2.9275C32.9432 2.9275 33.1888 3.06886 33.3888 3.35157C33.598 3.63429 33.6889 4.12677 33.6617 4.829C33.6435 5.50388 33.5207 6.11491 33.2934 6.66211C33.0751 7.2093 32.7886 7.6881 32.434 8.0985C32.0793 8.50889 31.6883 8.85089 31.2609 9.12449C30.8426 9.39808 30.4152 9.60784 29.9786 9.75376C29.5421 9.89056 29.1329 9.95896 28.751 9.95896Z\" fill=\"currentColor\" />\n <path d=\"M39.2501 9.97264C38.9318 9.97264 38.6545 9.86776 38.418 9.658C38.1816 9.44824 38.0634 9.10625 38.0634 8.63201C38.0634 8.58641 38.0634 8.54081 38.0634 8.49521C38.0634 8.44961 38.0679 8.40401 38.077 8.35841C37.8042 8.90561 37.495 9.31145 37.1494 9.57592C36.8129 9.83128 36.4719 9.95896 36.1264 9.95896C35.8081 9.95896 35.508 9.84952 35.2261 9.63064C34.9442 9.40264 34.7168 9.06977 34.544 8.63201C34.3713 8.19425 34.2849 7.6653 34.2849 7.04514C34.2849 6.40675 34.3713 5.83675 34.544 5.33516C34.7259 4.83356 34.9624 4.40948 35.2534 4.06293C35.5444 3.71637 35.8626 3.45645 36.2082 3.28317C36.5538 3.10078 36.8902 3.00958 37.2176 3.00958C37.5814 3.00958 37.9088 3.12358 38.1998 3.35157C38.4908 3.57045 38.6908 3.92157 38.8 4.40492C38.8272 4.24989 38.8454 4.10853 38.8545 3.98085C38.8727 3.85317 38.8818 3.76653 38.8818 3.72093C38.8909 3.47469 39.0137 3.29229 39.2501 3.17373C39.4956 3.05518 39.7639 2.9959 40.0549 2.9959C40.3095 2.9959 40.5505 3.04606 40.7779 3.14637C41.0052 3.24669 41.1598 3.41541 41.2416 3.65253L41.2689 3.73461C41.1598 3.98085 41.0507 4.27725 40.9415 4.6238C40.8324 4.97036 40.7324 5.33516 40.6415 5.71819C40.5505 6.09211 40.4778 6.46147 40.4232 6.82627C40.3686 7.18194 40.3414 7.49658 40.3414 7.77018C40.3414 8.07114 40.3732 8.28089 40.4368 8.39945C40.5005 8.50889 40.5778 8.56361 40.6687 8.56361C40.8233 8.56361 40.9643 8.45417 41.0916 8.23529L41.2007 8.29001C41.2007 8.60009 41.1007 8.88281 40.9006 9.13817C40.7006 9.39353 40.4505 9.59872 40.1504 9.75376C39.8503 9.89968 39.5502 9.97264 39.2501 9.97264ZM37.0267 8.23529C37.2631 8.23529 37.5223 8.02554 37.8042 7.60602C38.0952 7.17738 38.3453 6.56635 38.5544 5.77291C38.5726 5.69083 38.5908 5.61332 38.609 5.54036C38.6272 5.45828 38.6408 5.38076 38.6499 5.3078C38.5044 4.97036 38.3498 4.73324 38.1861 4.59644C38.0315 4.45052 37.8769 4.37756 37.7223 4.37756C37.495 4.37756 37.2813 4.50068 37.0812 4.74692C36.8902 4.98404 36.7311 5.285 36.6038 5.64979C36.4856 6.01459 36.4265 6.37939 36.4265 6.74419C36.4265 7.24578 36.481 7.6197 36.5901 7.86594C36.7084 8.11218 36.8539 8.23529 37.0267 8.23529Z\" fill=\"currentColor\" />\n <path d=\"M43.5804 9.95896C43.253 9.95896 42.962 9.82672 42.7074 9.56224C42.4528 9.28865 42.3254 8.90561 42.3254 8.41313C42.3254 8.17601 42.3527 7.90698 42.4073 7.60602C42.4619 7.30506 42.5255 6.99954 42.5983 6.68947C42.671 6.37027 42.7347 6.07387 42.7892 5.80027C42.8438 5.51756 42.8711 5.285 42.8711 5.1026C42.8711 4.91108 42.8347 4.7606 42.762 4.65116C42.6983 4.5326 42.6119 4.47332 42.5028 4.47332C42.33 4.47332 42.1527 4.59188 41.9708 4.829L41.8889 4.77428C41.8798 4.62836 41.9117 4.45508 41.9844 4.25445C42.0572 4.05381 42.1709 3.86229 42.3254 3.67989C42.48 3.48837 42.6756 3.32877 42.912 3.20109C43.1575 3.07342 43.444 3.00958 43.7714 3.00958C44.2533 3.00958 44.6035 3.15093 44.8217 3.43365C45.04 3.70725 45.1491 4.04013 45.1491 4.43228C45.1491 4.49612 45.1445 4.56452 45.1354 4.63748C45.1354 4.70132 45.1309 4.76516 45.1218 4.829C45.4492 4.23621 45.7902 3.78477 46.1449 3.47469C46.5086 3.15549 46.8451 2.9959 47.1543 2.9959C47.4453 2.9959 47.659 3.1099 47.7954 3.33789C47.9318 3.56589 48 3.83949 48 4.15869C48 4.45052 47.9409 4.74692 47.8227 5.04788C47.7135 5.34884 47.5453 5.59964 47.318 5.80027C47.0997 5.99179 46.8314 6.08299 46.5132 6.07387L46.4586 6.04651C46.4495 5.80939 46.3722 5.62243 46.2267 5.48564C46.0812 5.34884 45.9175 5.28044 45.7356 5.28044C45.4901 5.28044 45.2582 5.40356 45.04 5.64979C44.8308 5.89603 44.7262 6.25171 44.7262 6.71683C44.7262 6.99954 44.758 7.30506 44.8217 7.63338C44.8854 7.9617 44.9172 8.23985 44.9172 8.46785C44.9172 8.74145 44.8535 8.99225 44.7262 9.22025C44.5989 9.44824 44.4352 9.63064 44.2352 9.76744C44.0351 9.89512 43.8168 9.95896 43.5804 9.95896Z\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction HideTrayIcon() {\n return (\n <svg\n className=\"wv-tray-hide-icon\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <g clipPath=\"url(#wv-hide-tray-clip-prompt)\">\n <path d=\"M4 11L4 1M3 11L9 11C10.1046 11 11 10.1046 11 9L11 3C11 1.89543 10.1046 1 9 1L3 1C1.89543 1 1 1.89543 1 3L1 9C1 10.1046 1.89543 11 3 11Z\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n </g>\n <defs>\n <clipPath id=\"wv-hide-tray-clip-prompt\">\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0 12) rotate(-90)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nfunction CopyIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M8 6.45V8.55C8 10.3 7.3 11 5.55 11H3.45C1.7 11 1 10.3 1 8.55V6.45C1 4.7 1.7 4 3.45 4H5.55C7.3 4 8 4.7 8 6.45Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11 3.45V5.55C11 7.3 10.3 8 8.55 8H8V6.45C8 4.7 7.3 4 5.55 4H4V3.45C4 1.7 4.7 1 6.45 1H8.55C10.3 1 11 1.7 11 3.45Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nfunction CopySuccessIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M11 5.55V3.45C11 1.7 10.3 1 8.55 1H6.45C4.7 1 4 1.7 4 3.45V4H5.55C7.3 4 8 4.7 8 6.45V8H8.55C10.3 8 11 7.3 11 5.55Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M8 8.55V6.45C8 4.7 7.3 4 5.55 4H3.45C1.7 4 1 4.7 1 6.45V8.55C1 10.3 1.7 11 3.45 11H5.55C7.3 11 8 10.3 8 8.55Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M3.04004 7.4999L4.01504 8.4749L5.96004 6.5249\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nfunction GlobeIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <path d=\"M4 12h16M12 4c2.5 2.2 2.5 13.8 0 16M12 4c-2.5 2.2-2.5 13.8 0 16\" />\n </svg>\n );\n}\n","export type SpacingSegment = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n distance: number;\n axis: \"horizontal\" | \"vertical\";\n};\n\nfunction horizontalGap(a: DOMRect, b: DOMRect): number {\n if (b.left >= a.right) return b.left - a.right;\n if (a.left >= b.right) return a.left - b.right;\n return 0;\n}\n\nfunction verticalGap(a: DOMRect, b: DOMRect): number {\n if (b.top >= a.bottom) return b.top - a.bottom;\n if (a.top >= b.bottom) return a.top - b.bottom;\n return 0;\n}\n\nfunction overlapCenter(a0: number, a1: number, b0: number, b1: number): number {\n const start = Math.max(a0, b0);\n const end = Math.min(a1, b1);\n return (start + end) / 2;\n}\n\nfunction verticalSegment(x: number, y1: number, y2: number): SpacingSegment {\n const top = Math.min(y1, y2);\n const bottom = Math.max(y1, y2);\n return {\n x1: x,\n y1: top,\n x2: x,\n y2: bottom,\n distance: bottom - top,\n axis: \"vertical\",\n };\n}\n\nfunction horizontalSegment(x1: number, x2: number, y: number): SpacingSegment {\n const left = Math.min(x1, x2);\n const right = Math.max(x1, x2);\n return {\n x1: left,\n y1: y,\n x2: right,\n y2: y,\n distance: right - left,\n axis: \"horizontal\",\n };\n}\n\n/** Figma-style spacing guides between two axis-aligned bounding boxes. */\nexport function computeSpacingSegments(from: DOMRect, to: DOMRect): SpacingSegment[] {\n const dx = horizontalGap(from, to);\n const dy = verticalGap(from, to);\n if (dx === 0 && dy === 0) return [];\n\n const toBelow = to.top >= from.bottom;\n const toAbove = from.top >= to.bottom;\n const toRight = to.left >= from.right;\n const toLeft = from.left >= to.right;\n\n if (dx > 0 && dy > 0) {\n if (toBelow && toRight) {\n return [\n verticalSegment(from.right, from.bottom, to.top),\n horizontalSegment(from.right, to.left, to.top),\n ];\n }\n if (toBelow && toLeft) {\n return [\n verticalSegment(from.left, from.bottom, to.top),\n horizontalSegment(to.right, from.left, to.top),\n ];\n }\n if (toAbove && toRight) {\n return [\n verticalSegment(from.right, to.bottom, from.top),\n horizontalSegment(from.right, to.left, to.bottom),\n ];\n }\n if (toAbove && toLeft) {\n return [\n verticalSegment(from.left, to.bottom, from.top),\n horizontalSegment(to.right, from.left, to.bottom),\n ];\n }\n }\n\n if (dy > 0) {\n const x = overlapCenter(from.left, from.right, to.left, to.right);\n if (toBelow) return [verticalSegment(x, from.bottom, to.top)];\n if (toAbove) return [verticalSegment(x, to.bottom, from.top)];\n }\n\n if (dx > 0) {\n const y = overlapCenter(from.top, from.bottom, to.top, to.bottom);\n if (toRight) return [horizontalSegment(from.right, to.left, y)];\n if (toLeft) return [horizontalSegment(to.right, from.left, y)];\n }\n\n return [];\n}\n","import { useMemo } from \"react\";\nimport { computeSpacingSegments } from \"../engine/elementSpacing\";\n\ntype SpacingMeasureOverlayProps = {\n from: DOMRect;\n to: DOMRect;\n};\n\nexport function SpacingMeasureOverlay({ from, to }: SpacingMeasureOverlayProps) {\n const segments = useMemo(() => computeSpacingSegments(from, to), [from, to]);\n\n if (!segments.length) return null;\n\n return (\n <div className=\"wv-spacing-measure\" aria-hidden>\n {segments.map((segment, index) => {\n const labelX = (segment.x1 + segment.x2) / 2;\n const labelY = (segment.y1 + segment.y2) / 2;\n const distance = Math.round(segment.distance);\n\n if (segment.axis === \"horizontal\") {\n const left = Math.min(segment.x1, segment.x2);\n const width = Math.abs(segment.x2 - segment.x1);\n return (\n <div key={`${segment.axis}-${index}`}>\n <div\n className=\"wv-spacing-line wv-spacing-line--horizontal\"\n style={{ left, top: segment.y1, width }}\n />\n <div className=\"wv-spacing-label\" style={{ left: labelX, top: labelY }}>\n {distance}\n </div>\n </div>\n );\n }\n\n const top = Math.min(segment.y1, segment.y2);\n const height = Math.abs(segment.y2 - segment.y1);\n return (\n <div key={`${segment.axis}-${index}`}>\n <div\n className=\"wv-spacing-line wv-spacing-line--vertical\"\n style={{ left: segment.x1, top, height }}\n />\n <div className=\"wv-spacing-label\" style={{ left: labelX, top: labelY }}>\n {distance}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import type { CSSProperties } from \"react\";\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { pushPauseHostAnimations } from \"../engine/animationPause\";\nimport { autoScrollForPoint } from \"../engine/autoScroll\";\nimport {\n WEEVAR_BOOT_DOT_CLASS,\n blurWeevarOverlayFocusIfPointerOutside,\n hitTestHostPage,\n isInsideWeevarOverlay,\n placeCursorHoverLabel,\n pointInDOMRect,\n} from \"../engine/hitTest\";\nimport { buildAncestorPath } from \"../engine/layoutContext\";\nimport { buildReorderLayoutChange } from \"../engine/layoutChangeFromReorder\";\nimport { buildMoveLayoutChange } from \"../engine/layoutChangeMove\";\nimport { findDropParent } from \"../engine/dropTargets\";\nimport { buildElementIdentity } from \"../engine/identity\";\nimport type {\n BatchedChange,\n ElementIdentity,\n GeneratedPrompt,\n MoveSession,\n PromptLength,\n StyleTweak,\n TargetTool,\n WeevarChange,\n WeevarRuntimeConfig,\n} from \"../engine/layoutTypes\";\nimport { elementChildren } from \"../engine/elementChildren\";\nimport { FlexOrderPreview } from \"../engine/flexOrderPreview\";\nimport { insertionBarBetween } from \"../engine/insertionBar\";\nimport { createPendingCrossMove } from \"../engine/pendingMove\";\nimport { createPendingReorder, type PendingReorder } from \"../engine/pendingReorder\";\nimport { promptBody } from \"../engine/prompts\";\nimport { generateBatchedPrompt } from \"../prompts/generateBatched\";\nimport {\n computeDropIndex,\n orderAfterInsert,\n orderAfterMove,\n parentSupportsFlexOrderPreview,\n} from \"../engine/reorderTarget\";\nimport { resolveElementIdentity } from \"../engine/resolveIdentity\";\nimport {\n classifyElement,\n areStyleCommitValuesEquivalent,\n cssPaintProperty,\n cssPaintValuesEqual,\n readBorderValues,\n} from \"../engine/styleEngine\";\nimport { weevarVersionLabel } from \"../version\";\nimport { EditTray } from \"./EditTray\";\nimport { OVERLAY_CSS } from \"./overlayStyles\";\nimport { PromptPanel } from \"./PromptPanel\";\nimport { SpacingMeasureOverlay } from \"./SpacingMeasureOverlay\";\n\ntype FrameRects = { hover: DOMRect | null; selected: DOMRect | null };\n\ntype DragBar = { left: number; top: number; width: number; height: number };\n\nfunction sameDragBar(a: DragBar | null, b: DragBar | null): boolean {\n if (a == null && b == null) return true;\n if (a == null || b == null) return false;\n return a.left === b.left && a.top === b.top && a.width === b.width && a.height === b.height;\n}\n\nfunction sameDropZoneRect(a: DOMRect | null, b: DOMRect | null): boolean {\n if (a == null && b == null) return true;\n if (a == null || b == null) return false;\n return a.left === b.left && a.top === b.top && a.width === b.width && a.height === b.height;\n}\n\ntype DragSession = {\n dragged: Element;\n sourceParent: Element;\n fromIndex: number;\n dropParent: Element;\n dropIndex: number;\n preview: FlexOrderPreview;\n resumeAnimations: () => void;\n prevOpacity: string;\n pointerId: number;\n ghostEl: HTMLElement | null;\n grabOffsetX: number;\n grabOffsetY: number;\n};\n\ntype PanelState = {\n change: WeevarChange;\n prompt: GeneratedPrompt;\n len: PromptLength;\n tool: TargetTool;\n copyFlash: boolean;\n mode?: \"single\" | \"batched\";\n};\n\ntype BadgeRender = {\n ordinal: number;\n displayOrdinal: number;\n rect: DOMRect;\n};\n\ntype PointerSelectionInfo = {\n path: string;\n};\n\ntype RuntimeChangeRefs = {\n target: Element;\n fromParent: Element;\n toParent: Element;\n};\n\nconst POINTER_CURSOR_DATA_URI = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(\n '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.80294 4.62999L15.8359 6.98999C19.3159 8.35199 21.0559 9.03299 20.9989 10.113C20.9409 11.193 19.1249 11.689 15.4929 12.679C14.4119 12.974 13.8709 13.121 13.4959 13.496C13.1209 13.871 12.9739 14.412 12.6789 15.493C11.6889 19.125 11.1929 20.941 10.1129 20.999C9.03294 21.057 8.35294 19.316 6.99094 15.836L4.62994 9.80299C3.20394 6.15899 2.48994 4.33799 3.41394 3.41399C4.33794 2.49099 6.15894 3.20399 9.80294 4.62999Z\" fill=\"#16161E\" stroke=\"#EBEBEB\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/></svg>',\n)}\") 3 3, auto`;\n\n\nfunction identityBadgeKey(id: ElementIdentity): string {\n if (id.fiberPath?.length) return `fiber:${JSON.stringify(id.fiberPath)}`;\n if (id.source) {\n return `src:${id.source.file}:${id.source.line}:${id.source.col}|tag:${id.tag}|hash:${id.contentHash}|txt:${id.textSnippet ?? \"\"}`;\n }\n const cls = id.classList.join(\".\");\n const txt = id.textSnippet ?? \"\";\n const name = id.componentName ?? \"\";\n return `el:${name}|${id.tag}|${cls}|${txt}|hash:${id.contentHash}`;\n}\n\n/** Restore inline styles to the captured \"from\" snapshot (handles rgb vs hex for colours). */\nfunction revertStyleTweakToFromVisual(hel: HTMLElement, changes: StyleTweak[\"changes\"]): void {\n for (const c of changes) {\n hel.style.removeProperty(c.cssProperty);\n if (!c.fromValue) continue;\n const cascaded = getComputedStyle(hel).getPropertyValue(c.cssProperty).trim();\n const same = cssPaintProperty(c.cssProperty)\n ? cssPaintValuesEqual(cascaded, c.fromValue)\n : cascaded === c.fromValue;\n if (!same) hel.style.setProperty(c.cssProperty, c.fromValue);\n }\n}\n\nfunction mergePromptChange(base: WeevarChange, next: WeevarChange): WeevarChange {\n // StyleTweak + StyleTweak → merge property changes, preserve earliest fromValue per property\n if (base.kind === \"style-tweak\" && next.kind === \"style-tweak\") {\n const merged = new Map<string, typeof base.changes[0]>();\n for (const c of base.changes) merged.set(c.cssProperty, c);\n for (const c of next.changes) {\n const existing = merged.get(c.cssProperty);\n merged.set(c.cssProperty, {\n ...c,\n // Keep the earliest \"from\" so the prompt shows the full range of change\n fromValue: existing?.fromValue ?? c.fromValue,\n });\n }\n return {\n ...next,\n target: base.target,\n changes: Array.from(merged.values()),\n borderSummary: next.borderSummary ?? base.borderSummary,\n } as WeevarChange;\n }\n\n // StyleTweak + LayoutChange or vice versa — cannot be merged into one, return next as-is\n // compressSessionForPrompt handles the mixed case separately below\n if (base.kind === \"style-tweak\" || next.kind === \"style-tweak\") return next;\n if (next.kind === \"move\") {\n if (base.kind === \"move\") {\n return {\n ...next,\n target: base.target,\n fromParent: base.fromParent,\n fromIndex: base.fromIndex,\n fromLayoutType: base.fromLayoutType,\n };\n }\n return {\n kind: \"move\",\n target: base.target,\n fromParent: base.parent,\n toParent: next.toParent,\n fromIndex: base.fromIndex,\n toIndex: next.toIndex,\n destinationSiblings: next.destinationSiblings ?? next.siblings,\n siblings: next.destinationSiblings ?? next.siblings,\n fromLayoutType: base.layoutType,\n toLayoutType: next.toLayoutType,\n };\n }\n\n if (base.kind === \"move\") {\n return {\n ...base,\n target: base.target,\n toParent: next.parent,\n toIndex: next.toIndex,\n destinationSiblings: next.siblings,\n siblings: next.siblings,\n toLayoutType: next.layoutType,\n };\n }\n\n return {\n ...next,\n target: base.target,\n parent: base.parent,\n fromIndex: base.fromIndex,\n };\n}\n\nfunction compressSessionForPrompt(session: MoveSession): MoveSession {\n const out: BatchedChange[] = [];\n const byTarget = new Map<string, number>();\n for (const entry of session.changes) {\n const key = identityBadgeKey(entry.change.target);\n const idx = byTarget.get(key);\n if (idx == null) {\n out.push({ ...entry });\n byTarget.set(key, out.length - 1);\n continue;\n }\n const prev = out[idx];\n if (!prev) continue;\n\n if (prev.change.kind === \"style-tweak\" && entry.change.kind === \"style-tweak\") {\n // Both are style tweaks — merge property arrays using mergePromptChange\n out[idx] = {\n ...entry,\n ordinal: prev.ordinal,\n change: mergePromptChange(prev.change, entry.change),\n badgeAnchor: prev.badgeAnchor,\n capturedAt: prev.capturedAt,\n };\n } else if (\n prev.change.kind !== \"style-tweak\" &&\n entry.change.kind !== \"style-tweak\"\n ) {\n // Both are layout changes — existing merge logic\n out[idx] = {\n ...entry,\n ordinal: prev.ordinal,\n change: mergePromptChange(prev.change, entry.change),\n badgeAnchor: prev.badgeAnchor,\n capturedAt: prev.capturedAt,\n };\n } else {\n // Mixed kinds (layout + style or style + layout) — keep both as separate entries\n // Each will become its own numbered section in the batched prompt\n out.push({ ...entry });\n // Update the index map so further entries for this element append after the latest\n byTarget.set(identityBadgeKey(entry.change.target), out.length - 1);\n }\n }\n const changes = out.map((c, i) => ({ ...c, ordinal: i + 1 }));\n return { ...session, changes };\n}\n\nfunction truncateLabel(input: string): string {\n const s = input.trim().replace(/\\s+/g, \" \");\n if (s.length <= 20) return s;\n return `${s.slice(0, 20)}...`;\n}\n\nfunction buildSpecificElementLabel(el: Element): string {\n const tag = el.tagName.toLowerCase();\n const classList = Array.from((el as HTMLElement).classList ?? []);\n const classPart = classList.length ? `.${classList.slice(0, 2).join(\".\")}` : \"\";\n const directText = Array.from(el.childNodes)\n .filter((n) => n.nodeType === Node.TEXT_NODE)\n .map((n) => n.textContent ?? \"\")\n .join(\" \")\n .trim();\n const textLikeTags = new Set([\n \"p\",\n \"span\",\n \"a\",\n \"label\",\n \"small\",\n \"strong\",\n \"em\",\n \"b\",\n \"i\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"li\",\n \"blockquote\",\n \"code\",\n \"pre\",\n \"button\",\n ]);\n const textPart = (directText || (el.textContent ?? \"\").trim()).replace(/\\s+/g, \" \").trim();\n const raw = textLikeTags.has(tag) && textPart ? `${tag}: \"${textPart}\"` : `${tag}${classPart}`;\n return truncateLabel(raw || tag);\n}\n\nfunction rectsEqual(a: DOMRect | null, b: DOMRect | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.x === b.x &&\n a.y === b.y &&\n a.width === b.width &&\n a.height === b.height\n );\n}\n\ntype Props = {\n sessionOn: boolean;\n setSessionOn: (next: boolean) => void;\n disabled?: boolean;\n config?: WeevarRuntimeConfig;\n};\n\nexport function WeevarShadowApp({\n sessionOn,\n setSessionOn,\n disabled,\n config,\n}: Props) {\n const [activeTool, setActiveTool] = useState<\"summary\" | \"pointer\">(\"summary\");\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [settingsTool, setSettingsTool] = useState<TargetTool>(\"claude-code\");\n const [settingsLen, setSettingsLen] = useState<PromptLength>(\"short\");\n\n const DOCK_WIDTH = 50;\n const DOCK_HEIGHT = 340;\n const TRIGGER_SIZE = 50;\n const DOCK_VIEWPORT_INSET = 24;\n const TRIGGER_OFFSET_Y = DOCK_HEIGHT - TRIGGER_SIZE; // close button aligns with trigger button area\n\n type DockPos = { left: number; top: number };\n const clampDockPos = useCallback((pos: DockPos): DockPos => {\n const w = window.innerWidth;\n const h = window.innerHeight;\n return {\n left: Math.max(0, Math.min(pos.left, w - DOCK_WIDTH)),\n top: Math.max(0, Math.min(pos.top, h - DOCK_HEIGHT)),\n };\n }, []);\n\n const getDefaultDockPos = useCallback((): DockPos => {\n if (typeof window === \"undefined\") return { left: 0, top: DOCK_VIEWPORT_INSET };\n const w = window.innerWidth;\n return {\n left: Math.max(0, w - DOCK_WIDTH - DOCK_VIEWPORT_INSET),\n top: DOCK_VIEWPORT_INSET,\n };\n }, []);\n\n const [dockPos, setDockPos] = useState<DockPos>(() => getDefaultDockPos());\n const [triggerAtTop, setTriggerAtTop] = useState(true);\n const dockRef = useRef<HTMLDivElement | null>(null);\n const trayStackRef = useRef<HTMLDivElement | null>(null);\n const triggerBtnRef = useRef<HTMLButtonElement | null>(null);\n const dockDragRef = useRef<\n | null\n | {\n pointerId: number;\n mode: \"dock\" | \"trigger\";\n grabX: number;\n grabY: number;\n moved: boolean;\n startX: number;\n startY: number;\n }\n >(null);\n const triggerDragMovedRef = useRef(false);\n const resolveDockFromTrigger = useCallback(\n (triggerLeft: number, triggerTop: number) => {\n const topCandidate = clampDockPos({ left: triggerLeft, top: triggerTop });\n const bottomCandidate = clampDockPos({\n left: triggerLeft,\n top: triggerTop - TRIGGER_OFFSET_Y,\n });\n\n const topTriggerTop = topCandidate.top;\n const bottomTriggerTop = bottomCandidate.top + TRIGGER_OFFSET_Y;\n const topDelta = Math.abs(topTriggerTop - triggerTop);\n const bottomDelta = Math.abs(bottomTriggerTop - triggerTop);\n const useTop = topDelta <= bottomDelta;\n return {\n dock: useTop ? topCandidate : bottomCandidate,\n triggerAtTop: useTop,\n };\n },\n [TRIGGER_OFFSET_Y, clampDockPos],\n );\n\n const triggerTop = dockPos.top + (triggerAtTop ? 0 : TRIGGER_OFFSET_Y);\n const triggerTooltipAlign = useMemo(() => {\n const vw = window.innerWidth;\n const triggerCenterX = dockPos.left + TRIGGER_SIZE / 2;\n if (triggerCenterX < 100) return \"left\";\n if (triggerCenterX > vw - 100) return \"right\";\n return \"center\";\n }, [dockPos.left, TRIGGER_SIZE]);\n\n const hoverRef = useRef<Element | null>(null);\n const selectedRef = useRef<Element | null>(null);\n const selectedIdentityRef = useRef<ElementIdentity | null>(null);\n const pendingRef = useRef<PendingReorder | null>(null);\n const runtimeChangeRefsRef = useRef<Map<number, RuntimeChangeRefs>>(new Map());\n const dragSessionRef = useRef<DragSession | null>(null);\n const dragHandleRef = useRef<HTMLDivElement | null>(null);\n const panelRef = useRef<PanelState | null>(null);\n const dragMoveRaf = useRef<number | null>(null);\n const pendingDragEv = useRef<PointerEvent | null>(null);\n const forcedCursorTargetRef = useRef<HTMLElement | SVGElement | null>(null);\n const forcedCursorPrevValueRef = useRef<string>(\"\");\n const forcedCursorPrevPriorityRef = useRef<string>(\"\");\n const [rev, setRev] = useState(0);\n const bump = useCallback(() => setRev((n) => n + 1), []);\n\n const [isDragging, setIsDragging] = useState(false);\n const [dragUi, setDragUi] = useState<{ bar: DragBar | null } | null>(null);\n const dragOverlayEmitRef = useRef<{ bar: DragBar | null; zone: DOMRect | null } | null>(\n null,\n );\n const [dropZoneRect, setDropZoneRect] = useState<DOMRect | null>(null);\n const [toast, setToast] = useState<string | null>(null);\n const [pointerPos, setPointerPos] = useState<{ x: number; y: number } | null>(null);\n const [pointerInPage, setPointerInPage] = useState(false);\n const [altKeyHeld, setAltKeyHeld] = useState(false);\n\n const [panel, setPanel] = useState<PanelState | null>(null);\n panelRef.current = panel;\n const [promptOpen, setPromptOpen] = useState(false);\n /** When true, summary / pointer-property trays stay hidden until user re-opens from dock or picks an element. */\n const [traysDismissed, setTraysDismissed] = useState(false);\n const [moveSession, setMoveSession] = useState<MoveSession | null>(null);\n const [redoChanges, setRedoChanges] = useState<BatchedChange[]>([]);\n const [badgeTick, setBadgeTick] = useState(0);\n const [isTriggerDragging, setIsTriggerDragging] = useState(false);\n const [toolbarTooltip, setToolbarTooltip] = useState<{\n text: string;\n x: number;\n y: number;\n } | null>(null);\n const [helperTooltip, setHelperTooltip] = useState<{\n text: string;\n x: number;\n y: number;\n } | null>(null);\n const toolbarTooltipDelayRef = useRef<number | null>(null);\n const toolbarTooltipPendingRef = useRef<{ text: string; x: number; y: number } | null>(null);\n\n const framesRef = useRef<FrameRects>({ hover: null, selected: null });\n const [frames, setFrames] = useState<FrameRects>({\n hover: null,\n selected: null,\n });\n\n const readFrames = useCallback((): FrameRects => {\n const hover = hoverRef.current?.getBoundingClientRect() ?? null;\n const selected = selectedRef.current?.getBoundingClientRect() ?? null;\n return { hover, selected };\n }, []);\n\n useLayoutEffect(() => {\n if (!sessionOn || disabled || activeTool !== \"pointer\") return;\n let id = 0;\n const tick = () => {\n // During drag, flex preview mutates sibling layout every frame — polling rects here\n // forces React updates + layout thrash and freezes the main thread.\n if (!dragSessionRef.current) {\n const next = readFrames();\n const prev = framesRef.current;\n if (\n !rectsEqual(next.hover, prev.hover) ||\n !rectsEqual(next.selected, prev.selected)\n ) {\n framesRef.current = next;\n setFrames(next);\n }\n }\n id = requestAnimationFrame(tick);\n };\n id = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(id);\n }, [sessionOn, disabled, activeTool, readFrames]);\n\n useEffect(() => {\n if (!sessionOn || !moveSession?.changes.length) return;\n const tick = () => {\n setBadgeTick((n) => (n + 1) % 100000);\n };\n // Avoid a 60fps rerender loop; badges only need occasional refresh.\n const intervalId = window.setInterval(tick, 250);\n window.addEventListener(\"resize\", tick);\n window.addEventListener(\"scroll\", tick, true);\n return () => {\n window.clearInterval(intervalId);\n window.removeEventListener(\"resize\", tick);\n window.removeEventListener(\"scroll\", tick, true);\n };\n }, [sessionOn, moveSession?.changes.length]);\n\n const disposePending = useCallback((revert: boolean) => {\n const p = pendingRef.current;\n if (!p) return;\n if (revert) p.revert();\n else p.disconnect();\n pendingRef.current = null;\n }, []);\n\n const cancelDrag = useCallback(() => {\n if (dragMoveRaf.current != null) {\n cancelAnimationFrame(dragMoveRaf.current);\n dragMoveRaf.current = null;\n }\n pendingDragEv.current = null;\n const s = dragSessionRef.current;\n if (!s) return;\n dragSessionRef.current = null;\n s.preview.clear();\n (s.dragged as HTMLElement).style.opacity = s.prevOpacity;\n s.ghostEl?.remove();\n s.resumeAnimations();\n try {\n dragHandleRef.current?.releasePointerCapture(s.pointerId);\n } catch {\n /* noop */\n }\n setIsDragging(false);\n dragOverlayEmitRef.current = null;\n setDragUi(null);\n setDropZoneRect(null);\n bump();\n }, [bump]);\n\n const clearSelection = useCallback(() => {\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n hoverRef.current = null;\n framesRef.current = { hover: null, selected: null };\n setFrames({ hover: null, selected: null });\n bump();\n }, [bump]);\n\n const startDockDrag = useCallback(\n (e: React.PointerEvent<HTMLElement>) => {\n if (e.button !== 0) return;\n if (isDragging || dragSessionRef.current) return;\n if (e.target !== e.currentTarget) return;\n e.preventDefault();\n e.stopPropagation();\n\n const dockEl = dockRef.current;\n if (!dockEl) return;\n const rect = dockEl.getBoundingClientRect();\n\n dockDragRef.current = {\n pointerId: e.pointerId,\n mode: \"dock\",\n grabX: e.clientX - rect.left,\n grabY: e.clientY - rect.top,\n moved: false,\n startX: e.clientX,\n startY: e.clientY,\n };\n\n try {\n e.currentTarget.setPointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n },\n [isDragging],\n );\n\n const onDockDragMove = useCallback(\n (e: React.PointerEvent<HTMLElement>) => {\n const d = dockDragRef.current;\n if (!d || d.pointerId !== e.pointerId || d.mode !== \"dock\") return;\n\n const dist = Math.hypot(e.clientX - d.startX, e.clientY - d.startY);\n if (!d.moved && dist > 4) d.moved = true;\n\n setDockPos(\n clampDockPos({\n left: e.clientX - d.grabX,\n top: e.clientY - d.grabY,\n }),\n );\n },\n [clampDockPos],\n );\n\n const stopDockDrag = useCallback((e: React.PointerEvent<HTMLElement>) => {\n const d = dockDragRef.current;\n if (!d || d.pointerId !== e.pointerId || d.mode !== \"dock\") return;\n dockDragRef.current = null;\n }, []);\n\n const startTriggerDockDrag = useCallback(\n (e: React.PointerEvent<HTMLButtonElement>) => {\n if (e.button !== 0) return;\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n\n const btn = triggerBtnRef.current;\n if (!btn) return;\n const rect = btn.getBoundingClientRect();\n\n triggerDragMovedRef.current = false;\n setIsTriggerDragging(true);\n dockDragRef.current = {\n pointerId: e.pointerId,\n mode: \"trigger\",\n grabX: e.clientX - rect.left,\n grabY: e.clientY - rect.top,\n moved: false,\n startX: e.clientX,\n startY: e.clientY,\n };\n\n try {\n e.currentTarget.setPointerCapture(e.pointerId);\n } catch {\n /* noop */\n }\n },\n [disabled],\n );\n\n const onTriggerDockDragMove = useCallback(\n (e: React.PointerEvent<HTMLButtonElement>) => {\n const d = dockDragRef.current;\n if (!d || d.pointerId !== e.pointerId || d.mode !== \"trigger\") return;\n\n const dist = Math.hypot(e.clientX - d.startX, e.clientY - d.startY);\n if (!d.moved && dist > 4) {\n d.moved = true;\n triggerDragMovedRef.current = true;\n }\n\n const triggerLeft = e.clientX - d.grabX;\n const nextTriggerTop = e.clientY - d.grabY;\n const resolved = resolveDockFromTrigger(triggerLeft, nextTriggerTop);\n setTriggerAtTop(resolved.triggerAtTop);\n setDockPos(resolved.dock);\n },\n [resolveDockFromTrigger],\n );\n\n const stopTriggerDockDrag = useCallback((e: React.PointerEvent<HTMLButtonElement>) => {\n const d = dockDragRef.current;\n if (!d || d.pointerId !== e.pointerId || d.mode !== \"trigger\") return;\n dockDragRef.current = null;\n setIsTriggerDragging(false);\n }, []);\n\n useEffect(() => {\n if (!sessionOn) {\n setActiveTool(\"summary\");\n return;\n }\n if (activeTool === \"pointer\" || !dragSessionRef.current) return;\n cancelDrag();\n }, [sessionOn, activeTool, cancelDrag]);\n\n const appendBatchedChange = useCallback((change: WeevarChange, refs: RuntimeChangeRefs) => {\n setRedoChanges([]);\n setMoveSession((prev) => {\n const base: MoveSession = prev ?? { changes: [], startedAt: Date.now() };\n const nextOrdinal = base.changes.length + 1;\n const capturedAt = Date.now();\n const entry: BatchedChange = {\n ordinal: nextOrdinal,\n change,\n badgeAnchor: change.target,\n capturedAt,\n };\n runtimeChangeRefsRef.current.set(capturedAt, refs);\n const changes = [...base.changes, entry].map((c, i) => ({ ...c, ordinal: i + 1 }));\n if (changes.length > 20) {\n // eslint-disable-next-line no-console\n console.warn(\"[weevar] More than 20 batched changes captured.\");\n }\n return { ...base, changes };\n });\n }, []);\n\n const onStyleCommit = useCallback(\n (\n el: Element,\n cssProperty: string,\n displayLabel: string,\n fromValue: string,\n toValue: string,\n ) => {\n if (!el) return;\n if (areStyleCommitValuesEquivalent(cssProperty, fromValue, toValue)) return;\n const identity = buildElementIdentity(el);\n const category = classifyElement(el);\n const borderCssProps = new Set([\"border-width\", \"border-style\", \"border-color\"]);\n let borderSummary: string | undefined;\n if (borderCssProps.has(cssProperty)) {\n const b = readBorderValues(el);\n if (b.style !== \"none\" && b.style !== \"hidden\") {\n borderSummary = `type ${b.style}, weight ${b.width}px, colour ${b.color}`;\n }\n }\n const change: StyleTweak = {\n kind: \"style-tweak\",\n target: identity,\n elementCategory: category,\n changes: [{ cssProperty, displayLabel, fromValue, toValue }],\n ...(borderSummary ? { borderSummary } : {}),\n };\n appendBatchedChange(change, {\n target: el,\n fromParent: el.parentElement ?? el,\n toParent: el.parentElement ?? el,\n });\n },\n [appendBatchedChange],\n );\n\n const dismissAllTrays = useCallback(() => {\n setPromptOpen(false);\n setSettingsOpen(false);\n setTraysDismissed(true);\n }, []);\n\n const applyChangeToDom = useCallback((change: WeevarChange, refs?: RuntimeChangeRefs) => {\n if (change.kind === \"style-tweak\") {\n const el = refs?.target ?? resolveElementIdentity(change.target);\n if (!el) return null;\n const hel = el as HTMLElement;\n for (const c of change.changes) {\n hel.style.setProperty(c.cssProperty, c.toValue);\n }\n return {\n revert: () => {\n revertStyleTweakToFromVisual(hel, change.changes);\n },\n disconnect: () => {},\n };\n }\n if (change.kind === \"reorder\") {\n const parent = refs?.toParent ?? resolveElementIdentity(change.parent);\n const target = refs?.target ?? resolveElementIdentity(change.target);\n if (!parent || !target) return null;\n const ordered = orderAfterMove(parent, target, change.toIndex);\n return createPendingReorder(parent, ordered);\n }\n\n const target = refs?.target ?? resolveElementIdentity(change.target);\n const toParent = refs?.toParent ?? resolveElementIdentity(change.toParent);\n if (!target || !toParent) return null;\n const currentParent = target.parentElement;\n if (!currentParent) return null;\n\n if (currentParent === toParent) {\n const ordered = orderAfterMove(currentParent, target, change.toIndex);\n return createPendingReorder(currentParent, ordered);\n }\n\n const ordered = orderAfterInsert(toParent, target, change.toIndex);\n return createPendingCrossMove(target, currentParent, toParent, ordered);\n }, []);\n\n const applyInverseChangeToDom = useCallback((change: WeevarChange, refs?: RuntimeChangeRefs) => {\n if (change.kind === \"style-tweak\") {\n const el = refs?.target ?? resolveElementIdentity(change.target);\n if (!el) return null;\n const hel = el as HTMLElement;\n\n const applyFrom = () => {\n revertStyleTweakToFromVisual(hel, change.changes);\n };\n\n applyFrom();\n\n return {\n revert: () => {\n for (const c of change.changes) {\n hel.style.setProperty(c.cssProperty, c.toValue);\n }\n },\n disconnect: () => {},\n };\n }\n if (change.kind === \"reorder\") {\n const parent = refs?.fromParent ?? resolveElementIdentity(change.parent);\n const target = refs?.target ?? resolveElementIdentity(change.target);\n if (!parent || !target) return null;\n const ordered = orderAfterMove(parent, target, change.fromIndex);\n return createPendingReorder(parent, ordered);\n }\n\n const target = refs?.target ?? resolveElementIdentity(change.target);\n const fromParent = refs?.fromParent ?? resolveElementIdentity(change.fromParent);\n if (!target || !fromParent) return null;\n const currentParent = target.parentElement;\n if (!currentParent) return null;\n\n if (currentParent === fromParent) {\n const ordered = orderAfterMove(fromParent, target, change.fromIndex);\n return createPendingReorder(fromParent, ordered);\n }\n\n const ordered = orderAfterInsert(fromParent, target, change.fromIndex);\n return createPendingCrossMove(target, currentParent, fromParent, ordered);\n }, []);\n\n const clearMoveSession = useCallback(() => {\n // Delete should fully restore the live page state from before this session,\n // so roll back all captured changes in reverse order.\n disposePending(false);\n if (moveSession?.changes.length) {\n for (let i = moveSession.changes.length - 1; i >= 0; i--) {\n const entry = moveSession.changes[i];\n if (!entry) continue;\n const refs = runtimeChangeRefsRef.current.get(entry.capturedAt);\n const rollback = applyInverseChangeToDom(entry.change, refs);\n rollback?.disconnect();\n }\n }\n pendingRef.current = null;\n runtimeChangeRefsRef.current.clear();\n setMoveSession(null);\n setRedoChanges([]);\n setPanel(null);\n }, [applyInverseChangeToDom, disposePending, moveSession]);\n\n const undoLastMove = useCallback(() => {\n setMoveSession((prev) => {\n if (!prev?.changes.length) return null;\n const undone = prev.changes[prev.changes.length - 1];\n const refs = runtimeChangeRefsRef.current.get(undone.capturedAt);\n disposePending(false);\n pendingRef.current = applyInverseChangeToDom(undone.change, refs);\n setRedoChanges((redo) => [...redo, undone]);\n const rest = prev.changes.slice(0, -1).map((c, i) => ({ ...c, ordinal: i + 1 }));\n if (!rest.length) {\n setPanel(null);\n return null;\n }\n return { ...prev, changes: rest };\n });\n dismissAllTrays();\n }, [applyInverseChangeToDom, dismissAllTrays, disposePending]);\n\n const redoLastMove = useCallback(() => {\n setRedoChanges((prevRedo) => {\n if (!prevRedo.length) return prevRedo;\n const restored = prevRedo[prevRedo.length - 1];\n const refs = runtimeChangeRefsRef.current.get(restored.capturedAt);\n disposePending(false);\n pendingRef.current = applyChangeToDom(restored.change, refs);\n setMoveSession((prevSession) => {\n const base: MoveSession = prevSession ?? { changes: [], startedAt: Date.now() };\n const changes = [...base.changes, restored].map((c, i) => ({ ...c, ordinal: i + 1 }));\n return { ...base, changes };\n });\n return prevRedo.slice(0, -1);\n });\n dismissAllTrays();\n }, [applyChangeToDom, dismissAllTrays, disposePending]);\n\n const generateFromBatch = useCallback(\n (tool: TargetTool, len: PromptLength) => {\n setTraysDismissed(false);\n setPromptOpen(true);\n const s = moveSession;\n if (!s?.changes.length) {\n setPanel(null);\n return;\n }\n const effectiveSession = compressSessionForPrompt(s);\n const prompt = generateBatchedPrompt(effectiveSession, { targetTool: tool });\n if (!prompt) {\n setPanel(null);\n return;\n }\n const last = effectiveSession.changes[effectiveSession.changes.length - 1];\n setPanel({\n change: last.change,\n prompt,\n len,\n tool,\n copyFlash: false,\n mode: \"batched\",\n });\n },\n [moveSession],\n );\n\n useEffect(() => {\n if (!sessionOn) {\n setTraysDismissed(false);\n setRedoChanges([]);\n }\n }, [sessionOn]);\n\n const commitDrag = useCallback(() => {\n const s = dragSessionRef.current;\n if (!s) return;\n const {\n dragged,\n sourceParent,\n dropParent,\n fromIndex,\n dropIndex,\n preview,\n resumeAnimations,\n prevOpacity,\n pointerId,\n ghostEl,\n } = s;\n dragSessionRef.current = null;\n preview.clear();\n (dragged as HTMLElement).style.opacity = prevOpacity;\n ghostEl?.remove();\n resumeAnimations();\n try {\n dragHandleRef.current?.releasePointerCapture(pointerId);\n } catch {\n /* noop */\n }\n setIsDragging(false);\n dragOverlayEmitRef.current = null;\n setDragUi(null);\n setDropZoneRect(null);\n if (dragMoveRaf.current != null) {\n cancelAnimationFrame(dragMoveRaf.current);\n dragMoveRaf.current = null;\n }\n pendingDragEv.current = null;\n\n if (dropParent === sourceParent && dropIndex === fromIndex) {\n bump();\n return;\n }\n\n // Prevent observer accumulation across multiple drops.\n disposePending(false);\n\n let change: WeevarChange;\n if (dropParent === sourceParent) {\n const ordered = orderAfterMove(sourceParent, dragged, dropIndex);\n pendingRef.current = createPendingReorder(sourceParent, ordered);\n change = buildReorderLayoutChange(\n sourceParent,\n dragged,\n fromIndex,\n dropIndex,\n ordered,\n );\n } else {\n const ordered = orderAfterInsert(dropParent, dragged, dropIndex);\n pendingRef.current = createPendingCrossMove(dragged, sourceParent, dropParent, ordered);\n change = buildMoveLayoutChange(\n dragged,\n sourceParent,\n dropParent,\n fromIndex,\n dropIndex,\n ordered,\n );\n }\n appendBatchedChange(change, {\n target: dragged,\n fromParent: sourceParent,\n toParent: dropParent,\n });\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n bump();\n }, [appendBatchedChange, bump, disposePending]);\n\n useEffect(() => {\n if (!sessionOn) {\n hoverRef.current = null;\n cancelDrag();\n setToast(null);\n }\n }, [sessionOn, cancelDrag]);\n\n useEffect(() => {\n if (!sessionOn || disabled || activeTool !== \"pointer\" || promptOpen || isDragging) return;\n const id = window.setInterval(() => {\n const el = selectedRef.current;\n const ident = selectedIdentityRef.current;\n if (!el || !ident) return;\n if (document.contains(el)) return;\n const next = resolveElementIdentity(ident);\n if (next) {\n selectedRef.current = next;\n bump();\n } else {\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n setToast(\"Selection lost after re-render\");\n bump();\n }\n }, 400);\n return () => window.clearInterval(id);\n }, [sessionOn, disabled, activeTool, promptOpen, isDragging, bump]);\n\n useEffect(() => {\n if (!toast) return;\n const t = window.setTimeout(() => setToast(null), 2200);\n return () => window.clearTimeout(t);\n }, [toast]);\n\n useEffect(() => {\n if (!sessionOn) return;\n const key = \"__weevarHistoryPatched__\";\n const win = window as Window & { [key: string]: boolean };\n const onNav = () => {\n setMoveSession((prev) => {\n if (!prev?.changes.length) return prev;\n setPanel(null);\n setToast(\"Session cleared on navigation.\");\n return null;\n });\n };\n window.addEventListener(\"popstate\", onNav);\n window.addEventListener(\"hashchange\", onNav);\n if (!win[key]) {\n win[key] = true;\n const origPush = history.pushState.bind(history);\n const origReplace = history.replaceState.bind(history);\n history.pushState = function (...args) {\n origPush(...args);\n window.dispatchEvent(new Event(\"popstate\"));\n };\n history.replaceState = function (...args) {\n origReplace(...args);\n window.dispatchEvent(new Event(\"popstate\"));\n };\n }\n return () => {\n window.removeEventListener(\"popstate\", onNav);\n window.removeEventListener(\"hashchange\", onNav);\n };\n }, [sessionOn]);\n\n /** While the overlay is active, Escape is ignored (no tray dismiss, no in-tray cancel). */\n useEffect(() => {\n if (!sessionOn || disabled) return;\n const swallowEscape = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.preventDefault();\n e.stopPropagation();\n };\n document.addEventListener(\"keydown\", swallowEscape, { capture: true });\n return () => document.removeEventListener(\"keydown\", swallowEscape, { capture: true });\n }, [sessionOn, disabled]);\n\n useEffect(() => {\n if (!sessionOn || disabled || activeTool !== \"pointer\") return;\n const clearForcedCursorTarget = () => {\n const prev = forcedCursorTargetRef.current;\n if (!prev) return;\n if (forcedCursorPrevValueRef.current) {\n prev.style.setProperty(\n \"cursor\",\n forcedCursorPrevValueRef.current,\n forcedCursorPrevPriorityRef.current || \"\",\n );\n } else {\n prev.style.removeProperty(\"cursor\");\n }\n forcedCursorTargetRef.current = null;\n forcedCursorPrevValueRef.current = \"\";\n forcedCursorPrevPriorityRef.current = \"\";\n };\n\n const forceCursorOnTarget = (target: Element | null) => {\n const el =\n target instanceof HTMLElement || target instanceof SVGElement ? target : null;\n if (el === forcedCursorTargetRef.current) return;\n clearForcedCursorTarget();\n if (!el) return;\n forcedCursorTargetRef.current = el;\n forcedCursorPrevValueRef.current = el.style.getPropertyValue(\"cursor\");\n forcedCursorPrevPriorityRef.current = el.style.getPropertyPriority(\"cursor\");\n el.style.setProperty(\"cursor\", POINTER_CURSOR_DATA_URI, \"important\");\n };\n\n const onPointerMove = (e: PointerEvent) => {\n const trayBounds = trayStackRef.current?.getBoundingClientRect() ?? null;\n const overChrome = pointerOverWeevarChrome(e, trayBounds);\n if (!overChrome) {\n forceCursorOnTarget(document.elementFromPoint(e.clientX, e.clientY));\n } else {\n clearForcedCursorTarget();\n }\n setPointerInPage(true);\n setPointerPos({ x: e.clientX, y: e.clientY });\n setAltKeyHeld(e.altKey);\n if (dragSessionRef.current) return;\n if (promptOpen) return;\n if (overChrome) {\n if (hoverRef.current !== null) {\n hoverRef.current = null;\n bump();\n }\n return;\n }\n const el = hitTestHostPage(e.clientX, e.clientY);\n if (el !== hoverRef.current) {\n hoverRef.current = el;\n bump();\n }\n };\n\n const onPointerDownCapture = (e: PointerEvent) => {\n if (dragSessionRef.current) return;\n if (promptOpen) return;\n blurWeevarOverlayFocusIfPointerOutside(e);\n const trayBounds = trayStackRef.current?.getBoundingClientRect() ?? null;\n if (pointerOverWeevarChrome(e, trayBounds)) return;\n const el = hitTestHostPage(e.clientX, e.clientY);\n if (!el) {\n selectedRef.current = null;\n selectedIdentityRef.current = null;\n e.preventDefault();\n e.stopPropagation();\n bump();\n return;\n }\n selectedRef.current = el;\n selectedIdentityRef.current = buildElementIdentity(el);\n setTraysDismissed(false);\n e.preventDefault();\n e.stopPropagation();\n bump();\n };\n\n document.addEventListener(\"pointermove\", onPointerMove, {\n capture: true,\n passive: true,\n });\n document.addEventListener(\"pointerdown\", onPointerDownCapture, {\n capture: true,\n passive: false,\n });\n const onWindowMouseLeave = () => {\n setPointerInPage(false);\n setPointerPos(null);\n setAltKeyHeld(false);\n };\n const onWindowBlur = () => {\n setPointerInPage(false);\n setPointerPos(null);\n setAltKeyHeld(false);\n };\n const onWindowMouseEnter = () => {\n setPointerInPage(true);\n };\n window.addEventListener(\"mouseleave\", onWindowMouseLeave, true);\n window.addEventListener(\"blur\", onWindowBlur, true);\n window.addEventListener(\"mouseenter\", onWindowMouseEnter, true);\n\n return () => {\n clearForcedCursorTarget();\n setPointerInPage(false);\n setPointerPos(null);\n setAltKeyHeld(false);\n document.removeEventListener(\"pointermove\", onPointerMove, {\n capture: true,\n });\n document.removeEventListener(\"pointerdown\", onPointerDownCapture, {\n capture: true,\n });\n window.removeEventListener(\"mouseleave\", onWindowMouseLeave, true);\n window.removeEventListener(\"blur\", onWindowBlur, true);\n window.removeEventListener(\"mouseenter\", onWindowMouseEnter, true);\n };\n }, [\n sessionOn,\n disabled,\n activeTool,\n bump,\n promptOpen,\n setTraysDismissed,\n ]);\n\n useEffect(() => {\n if (!sessionOn || disabled || activeTool !== \"pointer\") {\n setAltKeyHeld(false);\n return;\n }\n\n const syncAlt = (held: boolean) => setAltKeyHeld(held);\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Alt\") syncAlt(true);\n };\n const onKeyUp = (e: KeyboardEvent) => {\n if (e.key === \"Alt\") syncAlt(false);\n };\n const onBlur = () => syncAlt(false);\n\n window.addEventListener(\"keydown\", onKeyDown);\n window.addEventListener(\"keyup\", onKeyUp);\n window.addEventListener(\"blur\", onBlur);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n window.removeEventListener(\"keyup\", onKeyUp);\n window.removeEventListener(\"blur\", onBlur);\n };\n }, [sessionOn, disabled, activeTool]);\n\n useEffect(() => {\n if (!(sessionOn && activeTool === \"pointer\")) {\n document.body.style.removeProperty(\"cursor\");\n document.documentElement.style.removeProperty(\"cursor\");\n const lock = document.getElementById(\"__weevar_pointer_cursor_lock__\");\n lock?.remove();\n return;\n }\n const prevBody = document.body.style.cursor;\n const prevRoot = document.documentElement.style.cursor;\n document.body.style.cursor = POINTER_CURSOR_DATA_URI;\n document.documentElement.style.cursor = POINTER_CURSOR_DATA_URI;\n const style = document.createElement(\"style\");\n style.id = \"__weevar_pointer_cursor_lock__\";\n style.textContent = `html,\nbody,\nbody *,\nbody *::before,\nbody *::after,\nbody *:hover,\nbody *:active,\nbody *:focus {\n cursor: ${POINTER_CURSOR_DATA_URI} !important;\n}`;\n const ensureLast = () => {\n if (document.head.lastElementChild !== style) document.head.appendChild(style);\n };\n ensureLast();\n const observer = new MutationObserver(ensureLast);\n observer.observe(document.head, { childList: true });\n return () => {\n document.body.style.cursor = prevBody;\n document.documentElement.style.cursor = prevRoot;\n observer.disconnect();\n style.remove();\n };\n }, [sessionOn, activeTool]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const flushDrag = () => {\n dragMoveRaf.current = null;\n const ev = pendingDragEv.current;\n pendingDragEv.current = null;\n if (!ev) return;\n const s = dragSessionRef.current;\n if (!s) return;\n ev.preventDefault();\n ev.stopPropagation();\n const { dragged, sourceParent, preview } = s;\n if (s.ghostEl) {\n s.ghostEl.style.left = `${ev.clientX - s.grabOffsetX}px`;\n s.ghostEl.style.top = `${ev.clientY - s.grabOffsetY}px`;\n }\n autoScrollForPoint(ev.clientX, ev.clientY);\n // Host already uses pointer-events:none — visibility toggle every frame was forcing layouts.\n const hit = hitTestHostPage(ev.clientX, ev.clientY);\n const dropParent = findDropParent(hit, dragged) ?? sourceParent;\n const dropIndex = computeDropIndex(dropParent, dragged, ev.clientX, ev.clientY);\n s.dropParent = dropParent;\n s.dropIndex = dropIndex;\n\n const ordered =\n dropParent === sourceParent\n ? orderAfterMove(sourceParent, dragged, dropIndex)\n : orderAfterInsert(dropParent, dragged, dropIndex);\n\n if (dropParent === sourceParent && parentSupportsFlexOrderPreview(sourceParent)) {\n preview.apply(ordered);\n } else {\n preview.clear();\n }\n\n const cs = getComputedStyle(dropParent);\n const row =\n cs.display.includes(\"flex\") &&\n [\"row\", \"row-reverse\"].includes(cs.flexDirection || \"\");\n const insertIdx = ordered.indexOf(dragged);\n const bar = insertionBarBetween(ordered, insertIdx, row);\n\n const nextZone =\n dropParent === sourceParent ? null : dropParent.getBoundingClientRect();\n const prevEmit = dragOverlayEmitRef.current;\n if (\n prevEmit === null ||\n !sameDragBar(prevEmit.bar, bar) ||\n !sameDropZoneRect(prevEmit.zone, nextZone)\n ) {\n dragOverlayEmitRef.current = { bar, zone: nextZone };\n setDragUi({ bar });\n setDropZoneRect(nextZone);\n }\n };\n\n const onMove = (e: PointerEvent) => {\n const s = dragSessionRef.current;\n if (!s) return;\n e.preventDefault();\n e.stopPropagation();\n pendingDragEv.current = e;\n if (dragMoveRaf.current != null) return;\n dragMoveRaf.current = requestAnimationFrame(flushDrag);\n };\n\n const onUp = (e: PointerEvent) => {\n const s = dragSessionRef.current;\n if (!s) return;\n e.preventDefault();\n e.stopPropagation();\n pendingDragEv.current = e;\n if (dragMoveRaf.current != null) {\n cancelAnimationFrame(dragMoveRaf.current);\n dragMoveRaf.current = null;\n }\n flushDrag();\n commitDrag();\n };\n\n document.addEventListener(\"pointermove\", onMove, { capture: true, passive: false });\n document.addEventListener(\"pointerup\", onUp, { capture: true, passive: false });\n document.addEventListener(\"pointercancel\", onUp, { capture: true, passive: false });\n\n return () => {\n document.removeEventListener(\"pointermove\", onMove, { capture: true });\n document.removeEventListener(\"pointerup\", onUp, { capture: true });\n document.removeEventListener(\"pointercancel\", onUp, { capture: true });\n if (dragMoveRaf.current != null) cancelAnimationFrame(dragMoveRaf.current);\n dragMoveRaf.current = null;\n pendingDragEv.current = null;\n };\n }, [isDragging, commitDrag]);\n\n const startDrag = useCallback(\n (e: React.PointerEvent) => {\n if (activeTool !== \"pointer\") return;\n if (panel) return;\n const dragged = selectedRef.current;\n const parent = dragged?.parentElement;\n if (!dragged || !parent) return;\n e.preventDefault();\n e.stopPropagation();\n\n const hel = dragged as HTMLElement;\n const dragRect = hel.getBoundingClientRect();\n const prevOpacity = hel.style.opacity;\n hel.style.opacity = \"0.3\";\n const ghostEl = hel.cloneNode(true) as HTMLElement;\n ghostEl.style.position = \"fixed\";\n ghostEl.style.left = `${dragRect.left}px`;\n ghostEl.style.top = `${dragRect.top}px`;\n ghostEl.style.width = `${dragRect.width}px`;\n ghostEl.style.height = `${dragRect.height}px`;\n ghostEl.style.margin = \"0\";\n ghostEl.style.pointerEvents = \"none\";\n ghostEl.style.opacity = \"0.55\";\n ghostEl.style.zIndex = \"2147483646\";\n ghostEl.style.transform = \"none\";\n ghostEl.style.transition = \"none\";\n ghostEl.style.boxSizing = \"border-box\";\n ghostEl.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(ghostEl);\n\n const preview = new FlexOrderPreview();\n const resume = pushPauseHostAnimations();\n const fromIndex = elementChildren(parent).indexOf(dragged);\n\n dragSessionRef.current = {\n dragged,\n sourceParent: parent,\n dropParent: parent,\n dropIndex: fromIndex,\n fromIndex,\n preview,\n resumeAnimations: resume,\n prevOpacity,\n pointerId: e.pointerId,\n ghostEl,\n grabOffsetX: e.clientX - dragRect.left,\n grabOffsetY: e.clientY - dragRect.top,\n };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n dragOverlayEmitRef.current = null;\n setIsDragging(true);\n setDragUi({ bar: null });\n setDropZoneRect(null);\n bump();\n },\n [activeTool, bump, panel],\n );\n\n const selectedEl = selectedRef.current;\n const hoverEl = hoverRef.current;\n\n const pointerSelectionInfo = useMemo<PointerSelectionInfo | null>(() => {\n if (!selectedEl || promptOpen || activeTool !== \"pointer\") return null;\n const p = selectedEl.parentElement;\n if (!p) return null;\n return {\n path: buildAncestorPath(selectedEl),\n };\n }, [selectedEl, promptOpen, rev, activeTool]);\n\n\n const visibleBadges = useMemo((): BadgeRender[] => {\n void badgeTick;\n const changes = moveSession?.changes ?? [];\n if (!changes.length) return [];\n const latest = new Map<string, BatchedChange>();\n for (const c of changes) latest.set(identityBadgeKey(c.change.target), c);\n const out: BadgeRender[] = [];\n for (const c of latest.values()) {\n const el = resolveElementIdentity(c.badgeAnchor);\n if (!el) continue;\n out.push({ ordinal: c.ordinal, displayOrdinal: 0, rect: el.getBoundingClientRect() });\n }\n out.sort((a, b) => a.ordinal - b.ordinal);\n return out.map((b, i) => ({ ...b, displayOrdinal: i + 1 }));\n }, [moveSession, badgeTick]);\n\n const movedElementCount = useMemo(() => {\n const changes = moveSession?.changes ?? [];\n if (!changes.length) return 0;\n const unique = new Set<string>();\n for (const c of changes) unique.add(identityBadgeKey(c.change.target));\n return unique.size;\n }, [moveSession]);\n const selectedToolLabel = useMemo(() => {\n if (settingsTool === \"claude-code\") return \"Claude Code\";\n if (settingsTool === \"codex\") return \"Codex\";\n return \"Generic\";\n }, [settingsTool]);\n const pendingMoveCount = movedElementCount;\n const isSettingsActive = settingsOpen;\n const isPromptActive = promptOpen && !settingsOpen;\n const isSummaryActive = activeTool === \"summary\" && !isSettingsActive && !isPromptActive;\n const isPointerActive = activeTool === \"pointer\" && !isSettingsActive && !isPromptActive;\n const showSettingsTray = settingsOpen;\n const showPromptTray = promptOpen && !showSettingsTray;\n const showSummaryTray =\n !traysDismissed &&\n !showPromptTray &&\n !showSettingsTray &&\n (activeTool === \"summary\" || (activeTool === \"pointer\" && pointerSelectionInfo));\n const trayAnyOpen = showSummaryTray || showSettingsTray || showPromptTray;\n /** Taller tray shell only when the pointer selection EditTray is the visible summary tray. */\n const editSelectionTrayVisible =\n showSummaryTray && activeTool === \"pointer\" && pointerSelectionInfo != null;\n const pointerOverOpenTray =\n trayAnyOpen &&\n pointerPos != null &&\n trayStackRef.current != null &&\n pointInDOMRect(\n pointerPos.x,\n pointerPos.y,\n trayStackRef.current.getBoundingClientRect(),\n );\n const labelAvoidRects =\n trayAnyOpen && trayStackRef.current\n ? [trayStackRef.current.getBoundingClientRect()]\n : [];\n const showSpacingMeasure =\n activeTool === \"pointer\" &&\n altKeyHeld &&\n !!selectedEl &&\n !!hoverEl &&\n hoverEl !== selectedEl &&\n !!frames.selected &&\n !!frames.hover &&\n !isDragging &&\n !promptOpen &&\n !pointerOverOpenTray;\n const trayStyle = useMemo((): CSSProperties => {\n const trayWidth = 250;\n const gap = 8;\n const minLeft = 8;\n const maxLeft = Math.max(minLeft, window.innerWidth - trayWidth - 8);\n const leftCandidate = dockPos.left - trayWidth - gap;\n const left =\n leftCandidate >= minLeft\n ? Math.min(leftCandidate, maxLeft)\n : Math.min(Math.max(dockPos.left + DOCK_WIDTH + gap, minLeft), maxLeft);\n return {\n left,\n top: dockPos.top,\n right: \"auto\",\n bottom: \"auto\",\n };\n }, [dockPos, DOCK_WIDTH]);\n\n const placeToolbarTooltip = useCallback((text: string, clientX: number, clientY: number) => {\n const estimatedWidth = Math.max(56, text.length * 6 + 16);\n // Keep tooltip away from tray direction:\n // on left half of viewport, render tooltip to the left of cursor; otherwise to the right.\n const placeLeft = clientX < window.innerWidth / 2;\n const rawX = placeLeft ? clientX - estimatedWidth + 2 : clientX + 6;\n const x = Math.min(Math.max(4, rawX), window.innerWidth - estimatedWidth - 4);\n const y = Math.min(Math.max(4, clientY + 16), window.innerHeight - 28);\n return { text, x, y };\n }, []);\n\n const scheduleToolbarTooltip = useCallback((text: string, clientX: number, clientY: number, delayMs = 1600) => {\n const pending = placeToolbarTooltip(text, clientX, clientY);\n toolbarTooltipPendingRef.current = pending;\n if (toolbarTooltipDelayRef.current != null) window.clearTimeout(toolbarTooltipDelayRef.current);\n toolbarTooltipDelayRef.current = window.setTimeout(() => {\n if (toolbarTooltipPendingRef.current) {\n setToolbarTooltip(toolbarTooltipPendingRef.current);\n }\n toolbarTooltipDelayRef.current = null;\n }, delayMs);\n }, [placeToolbarTooltip]);\n\n const showToolbarTooltip = useCallback((text: string, e: React.MouseEvent<HTMLElement>, delayMs = 1600) => {\n scheduleToolbarTooltip(text, e.clientX, e.clientY, delayMs);\n }, [scheduleToolbarTooltip]);\n\n const moveToolbarTooltip = useCallback((text: string, e: React.MouseEvent<HTMLElement>) => {\n const next = placeToolbarTooltip(text, e.clientX, e.clientY);\n toolbarTooltipPendingRef.current = next;\n setToolbarTooltip((prev) => {\n if (!prev || prev.text !== text) {\n return prev;\n }\n return { ...prev, x: next.x, y: next.y };\n });\n }, [placeToolbarTooltip]);\n\n const showToolbarTooltipFromPointer = useCallback((\n text: string,\n e: React.PointerEvent<HTMLElement>,\n delayMs = 1600,\n ) => {\n scheduleToolbarTooltip(text, e.clientX, e.clientY, delayMs);\n }, [scheduleToolbarTooltip]);\n\n const moveToolbarTooltipFromPointer = useCallback((text: string, e: React.PointerEvent<HTMLElement>) => {\n const next = placeToolbarTooltip(text, e.clientX, e.clientY);\n toolbarTooltipPendingRef.current = next;\n setToolbarTooltip((prev) => {\n if (!prev || prev.text !== text) return prev;\n return { ...prev, x: next.x, y: next.y };\n });\n }, [placeToolbarTooltip]);\n\n const hideToolbarTooltip = useCallback(() => {\n if (toolbarTooltipDelayRef.current != null) {\n window.clearTimeout(toolbarTooltipDelayRef.current);\n toolbarTooltipDelayRef.current = null;\n }\n toolbarTooltipPendingRef.current = null;\n setToolbarTooltip(null);\n }, []);\n\n useEffect(() => {\n // Prevent stale delayed tooltip state when toggling trigger <-> toolbar UI.\n hideToolbarTooltip();\n }, [sessionOn, hideToolbarTooltip]);\n\n const showHelperTooltip = useCallback((text: string, el: HTMLElement) => {\n const r = el.getBoundingClientRect();\n setHelperTooltip({\n text,\n x: r.right + 8,\n y: r.top + r.height / 2,\n });\n }, []);\n\n const hideHelperTooltip = useCallback(() => {\n setHelperTooltip(null);\n }, []);\n\n useEffect(() => {\n if (!sessionOn) return;\n const onShortcut = (e: KeyboardEvent) => {\n if (e.defaultPrevented) return;\n if (e.metaKey || e.ctrlKey || e.altKey) return;\n const t = e.target;\n if (t instanceof HTMLElement) {\n if (t.tagName === \"INPUT\" || t.tagName === \"TEXTAREA\" || t.isContentEditable) return;\n }\n\n const k = e.key.toLowerCase();\n if (k === \"p\") {\n e.preventDefault();\n e.stopPropagation();\n setTraysDismissed(false);\n setSettingsOpen(false);\n generateFromBatch(settingsTool, settingsLen);\n return;\n }\n if (k === \"w\") {\n e.preventDefault();\n e.stopPropagation();\n setTraysDismissed(false);\n setActiveTool(\"pointer\");\n setPanel(null);\n setSettingsOpen(false);\n setPromptOpen(false);\n return;\n }\n if (k === \"o\") {\n e.preventDefault();\n e.stopPropagation();\n setTraysDismissed(false);\n setActiveTool(\"summary\");\n setPanel(null);\n setSettingsOpen(false);\n setPromptOpen(false);\n return;\n }\n if (k === \"d\") {\n e.preventDefault();\n e.stopPropagation();\n clearMoveSession();\n clearSelection();\n dismissAllTrays();\n return;\n }\n if (k === \"u\") {\n e.preventDefault();\n e.stopPropagation();\n undoLastMove();\n return;\n }\n if (k === \"r\") {\n e.preventDefault();\n e.stopPropagation();\n redoLastMove();\n }\n };\n\n document.addEventListener(\"keydown\", onShortcut, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", onShortcut, { capture: true });\n };\n }, [\n sessionOn,\n cancelDrag,\n setSessionOn,\n generateFromBatch,\n settingsTool,\n settingsLen,\n clearMoveSession,\n clearSelection,\n dismissAllTrays,\n undoLastMove,\n redoLastMove,\n ]);\n\n return (\n <>\n <link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400&display=swap\"\n />\n <style>{OVERLAY_CSS}</style>\n <div className=\"wv-root\" aria-hidden={!sessionOn}>\n {!sessionOn ? (\n <>\n <button\n type=\"button\"\n className=\"wv-tool-button wv-pe\"\n data-tooltip=\"Activate Weevar (⌘⇧E)\"\n data-tooltip-align={triggerTooltipAlign}\n data-tooltip-suppress={isTriggerDragging ? \"true\" : \"false\"}\n aria-label=\"Activate Weevar overlay\"\n disabled={disabled}\n ref={triggerBtnRef}\n onClick={() => {\n if (disabled) return;\n if (triggerDragMovedRef.current) {\n triggerDragMovedRef.current = false;\n return;\n }\n setSessionOn(true);\n }}\n onPointerDown={startTriggerDockDrag}\n onPointerMove={onTriggerDockDragMove}\n onPointerUp={stopTriggerDockDrag}\n onPointerCancel={stopTriggerDockDrag}\n style={{\n left: dockPos.left,\n top: triggerTop,\n right: \"auto\",\n bottom: \"auto\",\n }}\n >\n <LogomarkIcon className=\"wv-tool-button-logo\" />\n {pendingMoveCount > 0 ? (\n <span className=\"wv-tool-button-badge\" aria-label={`${pendingMoveCount} pending moves`}>\n {pendingMoveCount}\n </span>\n ) : null}\n </button>\n </>\n ) : (\n <>\n <div\n className=\"wv-dock\"\n ref={dockRef}\n style={{\n left: dockPos.left,\n top: dockPos.top,\n right: \"auto\",\n bottom: \"auto\",\n }}\n >\n {triggerAtTop ? (\n <button\n type=\"button\"\n className=\"wv-toolbar-close\"\n aria-label=\"Close overlay\"\n onMouseEnter={(e) => showToolbarTooltip(\"Close overlay\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Close overlay\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n cancelDrag();\n setSessionOn(false);\n }}\n >\n <CloseIcon />\n </button>\n ) : null}\n <div\n className=\"wv-toolbar\"\n onPointerDown={startDockDrag}\n onPointerMove={onDockDragMove}\n onPointerUp={stopDockDrag}\n onPointerCancel={stopDockDrag}\n >\n <button\n type=\"button\"\n className={`wv-tool-icon ${isSummaryActive ? \"wv-tool-icon-on\" : \"\"}`}\n onMouseEnter={(e) => showToolbarTooltip(\"Overview (O)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Overview (O)\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n setTraysDismissed(false);\n setActiveTool(\"summary\");\n setPanel(null);\n setSettingsOpen(false);\n setPromptOpen(false);\n }}\n >\n <LogomarkIcon />\n </button>\n <button\n type=\"button\"\n className={`wv-tool-icon ${isPointerActive ? \"wv-tool-icon-on\" : \"\"}`}\n onMouseEnter={(e) => showToolbarTooltip(\"Pointer (W)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Pointer (W)\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n setTraysDismissed(false);\n setActiveTool(\"pointer\");\n setPanel(null);\n setSettingsOpen(false);\n setPromptOpen(false);\n }}\n >\n <PointerIcon />\n </button>\n <button\n type=\"button\"\n className={`wv-tool-icon ${isPromptActive ? \"wv-tool-icon-on\" : \"\"}`}\n onMouseEnter={(e) => showToolbarTooltip(\"Prompt (P)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Prompt (P)\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n setTraysDismissed(false);\n setSettingsOpen(false);\n generateFromBatch(settingsTool, settingsLen);\n }}\n >\n <PromptIcon />\n </button>\n <button\n type=\"button\"\n className=\"wv-tool-icon\"\n onMouseEnter={(e) => showToolbarTooltip(\"Undo (U)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Undo (U)\", e)}\n onMouseLeave={hideToolbarTooltip}\n disabled={!((moveSession?.changes.length ?? 0) > 0)}\n onClick={undoLastMove}\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n className=\"wv-tool-icon\"\n onMouseEnter={(e) => showToolbarTooltip(\"Redo (R)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Redo (R)\", e)}\n onMouseLeave={hideToolbarTooltip}\n disabled={redoChanges.length === 0}\n onClick={redoLastMove}\n >\n <RedoIcon />\n </button>\n <button\n type=\"button\"\n className=\"wv-tool-icon\"\n onMouseEnter={(e) => showToolbarTooltip(\"Delete (D)\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Delete (D)\", e)}\n onMouseLeave={hideToolbarTooltip}\n disabled={!((moveSession?.changes.length ?? 0) > 0 || !!selectedEl)}\n onClick={() => {\n clearMoveSession();\n clearSelection();\n dismissAllTrays();\n }}\n >\n <TrashIcon />\n </button>\n <button\n type=\"button\"\n className={`wv-tool-icon ${isSettingsActive ? \"wv-tool-icon-on\" : \"\"}`}\n onMouseEnter={(e) => showToolbarTooltip(\"Settings\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Settings\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n setTraysDismissed(false);\n setActiveTool(\"summary\");\n setPanel(null);\n setSettingsOpen(true);\n setPromptOpen(false);\n }}\n >\n <SettingsIcon />\n </button>\n </div>\n {!triggerAtTop ? (\n <button\n type=\"button\"\n className=\"wv-toolbar-close\"\n aria-label=\"Close overlay\"\n onMouseEnter={(e) => showToolbarTooltip(\"Close overlay\", e)}\n onMouseMove={(e) => moveToolbarTooltip(\"Close overlay\", e)}\n onMouseLeave={hideToolbarTooltip}\n onClick={() => {\n cancelDrag();\n setSessionOn(false);\n }}\n >\n <CloseIcon />\n </button>\n ) : null}\n </div>\n\n {trayAnyOpen ? (\n <div\n ref={trayStackRef}\n className={`wv-tray-stack${editSelectionTrayVisible ? \" wv-tray-stack--edit\" : \"\"}`}\n style={trayStyle}\n >\n <div\n className={`wv-tray-stack-layer${showSummaryTray ? \" wv-tray-stack-layer--visible\" : \"\"}`}\n aria-hidden={!showSummaryTray}\n >\n <aside className=\"wv-summary-tray wv-pe\" aria-hidden={!showSummaryTray}>\n <div className=\"wv-tray-head\">\n <WeevarWordmarkIcon />\n <button\n type=\"button\"\n className=\"wv-tray-hide-btn\"\n aria-label=\"Hide tray\"\n onClick={dismissAllTrays}\n >\n <HideTrayIcon />\n </button>\n </div>\n <div\n className={`wv-tray-content ${\n activeTool === \"pointer\" && pointerSelectionInfo\n ? \"wv-tray-content-selection\"\n : activeTool === \"summary\"\n ? \"wv-tray-content-summary\"\n : \"\"\n }`}\n style={\n activeTool === \"summary\"\n ? { paddingLeft: 16, paddingRight: 16 }\n : undefined\n }\n >\n {activeTool === \"summary\" ? (\n <>\n <div className=\"wv-summary-content\">\n <div className=\"wv-summary-heading\">\n <div className=\"wv-summary-kicker\" style={{ textAlign: \"left\", width: \"100%\" }}>\n Hey builder!\n </div>\n <div className=\"wv-summary-title\" style={{ textAlign: \"left\", width: \"100%\" }}>\n Overview\n </div>\n </div>\n <div className=\"wv-summary-main\">\n <div className=\"wv-tray-card wv-overview-card\">\n <div className=\"wv-overview-stat\">\n <span className=\"wv-overview-orb wv-overview-orb--moved\">\n <span className=\"wv-overview-orb-value\">{movedElementCount}</span>\n </span>\n <span className=\"wv-overview-label\">Total edits</span>\n </div>\n <span className=\"wv-overview-divider\" aria-hidden />\n <div className=\"wv-overview-stat\">\n <span className=\"wv-overview-orb wv-overview-orb--tool\">\n <AIToolIcon />\n </span>\n <span className=\"wv-overview-label\">{selectedToolLabel}</span>\n </div>\n </div>\n <div className=\"wv-tray-card wv-doc-card\">\n <span className=\"wv-doc-icon\"><DocumentationIcon /></span>\n <span className=\"wv-doc-copy\">\n <span className=\"wv-doc-title\">Documentation</span>\n <span className=\"wv-doc-site\">weevar.com</span>\n </span>\n <button\n type=\"button\"\n className=\"wv-doc-go\"\n onClick={() => {\n window.open(\"https://weevar.com\", \"_blank\", \"noopener,noreferrer\");\n }}\n >\n <ArrowRightIcon />\n </button>\n </div>\n </div>\n </div>\n </>\n ) : pointerSelectionInfo ? (\n <EditTray\n element={selectedEl}\n onStyleCommit={onStyleCommit}\n onClose={dismissAllTrays}\n hidden={traysDismissed}\n tailwindEnabled={config?.prompts?.tailwindVerbatimClasses ?? false}\n />\n ) : null}\n </div>\n <div className=\"wv-tray-foot\">\n <span>{weevarVersionLabel()}</span>\n <GlobeIcon />\n </div>\n </aside>\n </div>\n\n <div\n className={`wv-tray-stack-layer${showSettingsTray ? \" wv-tray-stack-layer--visible\" : \"\"}`}\n aria-hidden={!showSettingsTray}\n >\n <SettingsTray\n tool={settingsTool}\n len={settingsLen}\n onTool={setSettingsTool}\n onLen={setSettingsLen}\n onClose={dismissAllTrays}\n onShowHelperTooltip={showHelperTooltip}\n onHideHelperTooltip={hideHelperTooltip}\n hidden={!showSettingsTray}\n />\n </div>\n\n <div\n className={`wv-tray-stack-layer${showPromptTray ? \" wv-tray-stack-layer--visible\" : \"\"}`}\n aria-hidden={!showPromptTray}\n >\n <PromptPanel\n hidden={!showPromptTray}\n promptText={panel ? promptBody(panel.prompt, panel.len) : \"No edits made yet\"}\n canCopy={!!panel}\n runtimeConfig={config}\n onClose={dismissAllTrays}\n copyFlash={panel?.copyFlash ?? false}\n onCopy={async () => {\n const p = panelRef.current;\n if (!p) return;\n const text = promptBody(p.prompt, p.len);\n await navigator.clipboard.writeText(text);\n setPanel((cur) => (cur ? { ...cur, copyFlash: true } : cur));\n window.setTimeout(() => {\n setPanel((cur) => (cur ? { ...cur, copyFlash: false } : cur));\n bump();\n }, 1200);\n }}\n />\n </div>\n </div>\n ) : null}\n\n {dropZoneRect && (\n <div\n className=\"wv-drop-zone\"\n style={{\n left: dropZoneRect.left,\n top: dropZoneRect.top,\n width: dropZoneRect.width,\n height: dropZoneRect.height,\n }}\n />\n )}\n {dragUi?.bar && (\n <div\n className=\"wv-insertion-bar\"\n style={{\n left: dragUi.bar.left,\n top: dragUi.bar.top,\n width: dragUi.bar.width,\n height: dragUi.bar.height,\n }}\n />\n )}\n {toast && (\n <div className=\"wv-toast wv-pe\" role=\"status\">\n {toast}\n </div>\n )}\n {toolbarTooltip ? (\n <div\n className=\"wv-toolbar-tooltip\"\n role=\"tooltip\"\n style={{ left: toolbarTooltip.x, top: toolbarTooltip.y }}\n >\n {toolbarTooltip.text}\n </div>\n ) : null}\n {helperTooltip ? (\n <div\n className=\"wv-settings-helper-tooltip\"\n role=\"tooltip\"\n style={{ left: helperTooltip.x, top: helperTooltip.y }}\n >\n {helperTooltip.text}\n </div>\n ) : null}\n {visibleBadges.map((b) => (\n <div\n key={`badge-${b.ordinal}`}\n className=\"wv-badge\"\n style={{ left: b.rect.left - 8, top: b.rect.top - 8 }}\n aria-label={`Move ${b.displayOrdinal}`}\n >\n {b.displayOrdinal}\n </div>\n ))}\n\n {activeTool === \"pointer\" &&\n frames.hover &&\n hoverEl &&\n (!selectedEl || hoverEl !== selectedEl) &&\n !isDragging &&\n !promptOpen &&\n !pointerOverOpenTray &&\n (!altKeyHeld || !selectedEl) && <Outline rect={frames.hover} variant=\"hover\" />}\n\n {showSpacingMeasure && (\n <>\n <Outline rect={frames.hover!} variant=\"hover\" />\n <SpacingMeasureOverlay from={frames.selected!} to={frames.hover!} />\n </>\n )}\n\n {activeTool === \"pointer\" && frames.selected && selectedEl && !promptOpen && (\n <>\n <Outline rect={frames.selected} variant=\"selected\" />\n <CornerMarkers rect={frames.selected} />\n <SelectedTopBar\n rect={frames.selected}\n text={buildSpecificElementLabel(selectedEl)}\n onDragStart={startDrag}\n dragRef={dragHandleRef}\n />\n </>\n )}\n\n {activeTool === \"pointer\" &&\n frames.hover &&\n hoverEl &&\n hoverEl !== selectedEl &&\n !isDragging &&\n !promptOpen &&\n !altKeyHeld &&\n pointerInPage &&\n pointerPos && (\n <CursorHoverLabel\n x={pointerPos.x}\n y={pointerPos.y}\n text={buildSpecificElementLabel(hoverEl)}\n avoidRects={labelAvoidRects}\n />\n )}\n </>\n )}\n </div>\n </>\n );\n}\n\nfunction SettingsTray({\n tool,\n len,\n onTool,\n onLen,\n onClose,\n onShowHelperTooltip,\n onHideHelperTooltip,\n hidden = false,\n}: {\n tool: TargetTool;\n len: PromptLength;\n onTool: (t: TargetTool) => void;\n onLen: (l: PromptLength) => void;\n onClose: () => void;\n onShowHelperTooltip: (text: string, el: HTMLElement) => void;\n onHideHelperTooltip: () => void;\n hidden?: boolean;\n}) {\n return (\n <aside\n className=\"wv-summary-tray wv-settings-tray wv-pe\"\n role=\"dialog\"\n aria-label=\"Weevar settings\"\n aria-hidden={hidden}\n >\n <div className=\"wv-tray-head wv-settings-head\">\n <WeevarWordmarkIcon />\n <button type=\"button\" className=\"wv-tray-hide-btn\" aria-label=\"Hide tray\" onClick={onClose}>\n <HideTrayIcon />\n </button>\n </div>\n\n <div className=\"wv-tray-content wv-settings-content\">\n <div className=\"wv-settings-section\">\n <div className=\"wv-settings-label-row\">\n <span className=\"wv-settings-label-inline\">\n <span>Target Tool</span>\n <span\n className=\"wv-settings-help-wrap\"\n tabIndex={0}\n aria-label=\"Target tool help\"\n onMouseEnter={(e) =>\n onShowHelperTooltip(\"Tailor your prompt to fit the AI tool you use\", e.currentTarget)\n }\n onMouseLeave={onHideHelperTooltip}\n onFocus={(e) =>\n onShowHelperTooltip(\"Tailor your prompt to fit the AI tool you use\", e.currentTarget)\n }\n onBlur={onHideHelperTooltip}\n >\n <InfoIcon />\n </span>\n </span>\n </div>\n <div className=\"wv-settings-tool-list\">\n <button\n type=\"button\"\n className=\"wv-settings-row\"\n onClick={() => onTool(\"claude-code\")}\n >\n <span>Claude Code</span>\n <TargetToolToggle selected={tool === \"claude-code\"} />\n </button>\n <button\n type=\"button\"\n className=\"wv-settings-row\"\n onClick={() => onTool(\"codex\")}\n >\n <span>Codex</span>\n <TargetToolToggle selected={tool === \"codex\"} />\n </button>\n <button\n type=\"button\"\n className=\"wv-settings-row\"\n onClick={() => onTool(\"generic\")}\n >\n <span>Generic</span>\n <TargetToolToggle selected={tool === \"generic\"} />\n </button>\n </div>\n </div>\n\n <div className=\"wv-settings-section\">\n <div className=\"wv-settings-label-row\">\n <span className=\"wv-settings-label-inline\">\n <span>Prompt Style</span>\n <span\n className=\"wv-settings-help-wrap\"\n tabIndex={0}\n aria-label=\"Prompt style help\"\n onMouseEnter={(e) =>\n onShowHelperTooltip(\"Choose the level of detail included in your prompt\", e.currentTarget)\n }\n onMouseLeave={onHideHelperTooltip}\n onFocus={(e) =>\n onShowHelperTooltip(\"Choose the level of detail included in your prompt\", e.currentTarget)\n }\n onBlur={onHideHelperTooltip}\n >\n <InfoIcon />\n </span>\n </span>\n </div>\n <div className=\"wv-settings-seg\">\n <button\n type=\"button\"\n className={len === \"short\" ? \"wv-settings-seg-on\" : \"wv-settings-seg-off\"}\n onClick={() => onLen(\"short\")}\n >\n Short\n </button>\n <button\n type=\"button\"\n className={len === \"detailed\" ? \"wv-settings-seg-on\" : \"wv-settings-seg-off\"}\n onClick={() => onLen(\"detailed\")}\n >\n Detailed\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"wv-tray-foot wv-settings-foot\">\n <span>{weevarVersionLabel()}</span>\n <GlobeIcon />\n </div>\n </aside>\n );\n}\n\nfunction eventFromWeevarChrome(e: PointerEvent | KeyboardEvent): boolean {\n const path = e.composedPath();\n if (\n path.some((n) => {\n if (!(n instanceof Element)) return false;\n return isInsideWeevarOverlay(n);\n })\n ) {\n return true;\n }\n // Closed shadow + some targets: composedPath can omit inner nodes; retargeted target may still be the host.\n const t = e.target;\n return t instanceof Element && isInsideWeevarOverlay(t);\n}\n\n/** True when coordinates hit Weevar UI (dock, trays, etc.), not the host page. */\nfunction pointerOverWeevarChrome(\n e: PointerEvent,\n trayBounds: DOMRect | null = null,\n): boolean {\n if (trayBounds && pointInDOMRect(e.clientX, e.clientY, trayBounds)) return true;\n if (eventFromWeevarChrome(e)) return true;\n const top = document.elementFromPoint(e.clientX, e.clientY);\n if (!top) return false;\n if (isInsideWeevarOverlay(top)) return true;\n return (\n top instanceof HTMLElement && top.classList.contains(WEEVAR_BOOT_DOT_CLASS)\n );\n}\n\nfunction Outline({\n rect,\n variant,\n}: {\n rect: DOMRect;\n variant: \"hover\" | \"selected\";\n}) {\n return (\n <div\n className={\n variant === \"selected\" ? \"wv-outline wv-outline-selected\" : \"wv-outline\"\n }\n style={{\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }}\n />\n );\n}\n\nfunction SelectedTopBar({\n rect,\n text,\n onDragStart,\n dragRef,\n}: {\n rect: DOMRect;\n text: string;\n onDragStart: (e: React.PointerEvent) => void;\n dragRef: React.MutableRefObject<HTMLDivElement | null>;\n}) {\n const pad = 4;\n let top = rect.top - 30;\n if (top < 4) top = rect.bottom + pad;\n const left = Math.min(Math.max(4, rect.left), window.innerWidth - 260);\n return (\n <div className=\"wv-selected-top\" style={{ left, top }}>\n <div\n ref={dragRef}\n className=\"wv-drag-handle\"\n title=\"Drag to reorder or move to another container\"\n role=\"presentation\"\n onPointerDown={onDragStart}\n >\n <SelectedDragIcon />\n </div>\n <div className=\"wv-selected-label\">{text}</div>\n </div>\n );\n}\n\nfunction CursorHoverLabel({\n x,\n y,\n text,\n avoidRects = [],\n}: {\n x: number;\n y: number;\n text: string;\n avoidRects?: DOMRect[];\n}) {\n const placement = placeCursorHoverLabel(x, y, text, avoidRects);\n if (!placement) return null;\n return (\n <div className=\"wv-cursor-label\" style={{ left: placement.left, top: placement.top }}>\n {text}\n </div>\n );\n}\n\nfunction SelectedDragIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M9.75 4.75H9.755V4.755H9.75V4.75Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 4.75C10 4.8163 9.97366 4.87989 9.92678 4.92678C9.87989 4.97366 9.8163 5 9.75 5C9.6837 5 9.62011 4.97366 9.57322 4.92678C9.52634 4.87989 9.5 4.8163 9.5 4.75C9.5 4.6837 9.52634 4.62011 9.57322 4.57322C9.62011 4.52634 9.6837 4.5 9.75 4.5C9.8163 4.5 9.87989 4.52634 9.92678 4.57322C9.97366 4.62011 10 4.6837 10 4.75ZM9.75 7.995H9.755V8H9.75V7.995Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 7.995C10 8.0613 9.97366 8.12489 9.92678 8.17177C9.87989 8.21866 9.8163 8.245 9.75 8.245C9.6837 8.245 9.62011 8.21866 9.57322 8.17177C9.52634 8.12489 9.5 8.0613 9.5 7.995C9.5 7.92869 9.52634 7.8651 9.57322 7.81822C9.62011 7.77133 9.6837 7.745 9.75 7.745C9.8163 7.745 9.87989 7.77133 9.92678 7.81822C9.97366 7.8651 10 7.92869 10 7.995ZM9.75 11.25H9.755V11.255H9.75V11.25Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M10 11.25C10 11.3163 9.97366 11.3799 9.92678 11.4268C9.87989 11.4737 9.8163 11.5 9.75 11.5C9.6837 11.5 9.62011 11.4737 9.57322 11.4268C9.52634 11.3799 9.5 11.3163 9.5 11.25C9.5 11.1837 9.52634 11.1201 9.57322 11.0732C9.62011 11.0263 9.6837 11 9.75 11C9.8163 11 9.87989 11.0263 9.92678 11.0732C9.97366 11.1201 10 11.1837 10 11.25ZM6.25 4.75H6.255V4.755H6.25V4.75Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.5 4.75C6.5 4.8163 6.47366 4.87989 6.42678 4.92678C6.37989 4.97366 6.3163 5 6.25 5C6.1837 5 6.12011 4.97366 6.07322 4.92678C6.02634 4.87989 6 4.8163 6 4.75C6 4.6837 6.02634 4.62011 6.07322 4.57322C6.12011 4.52634 6.1837 4.5 6.25 4.5C6.3163 4.5 6.37989 4.52634 6.42678 4.57322C6.47366 4.62011 6.5 4.6837 6.5 4.75ZM6.25 7.995H6.255V8H6.25V7.995Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.5 7.995C6.5 8.0613 6.47366 8.12489 6.42678 8.17177C6.37989 8.21866 6.3163 8.245 6.25 8.245C6.1837 8.245 6.12011 8.21866 6.07322 8.17177C6.02634 8.12489 6 8.0613 6 7.995C6 7.92869 6.02634 7.8651 6.07322 7.81822C6.12011 7.77133 6.1837 7.745 6.25 7.745C6.3163 7.745 6.37989 7.77133 6.42678 7.81822C6.47366 7.8651 6.5 7.92869 6.5 7.995ZM6.25 11.25H6.255V11.255H6.25V11.25Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.5 11.25C6.5 11.3163 6.47366 11.3799 6.42678 11.4268C6.37989 11.4737 6.3163 11.5 6.25 11.5C6.1837 11.5 6.12011 11.4737 6.07322 11.4268C6.02634 11.3799 6 11.3163 6 11.25C6 11.1837 6.02634 11.1201 6.07322 11.0732C6.12011 11.0263 6.1837 11 6.25 11C6.3163 11 6.37989 11.0263 6.42678 11.0732C6.47366 11.1201 6.5 11.1837 6.5 11.25Z\" stroke=\"#EBEBEB\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nfunction CornerMarkers({ rect }: { rect: DOMRect }) {\n const o = 2;\n const s = 4;\n const box: CSSProperties = {\n position: \"fixed\",\n left: rect.left - o,\n top: rect.top - o,\n width: rect.width + o * 2,\n height: rect.height + o * 2,\n pointerEvents: \"none\",\n zIndex: 4,\n };\n const corner: CSSProperties = {\n position: \"absolute\",\n width: s,\n height: s,\n background: \"var(--wv-accent)\",\n };\n return (\n <div style={box}>\n <span style={{ ...corner, left: 0, top: 0 }} />\n <span style={{ ...corner, right: 0, top: 0 }} />\n <span style={{ ...corner, left: 0, bottom: 0 }} />\n <span style={{ ...corner, right: 0, bottom: 0 }} />\n </div>\n );\n}\n\nfunction IconBase({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\n\nfunction LogomarkIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path\n d=\"M4.67677 16C4.05948 16 3.54321 15.7266 3.12795 15.1797C2.71268 14.6328 2.50505 13.8839 2.50505 12.9328C2.50505 12.4454 2.55556 11.8985 2.65657 11.2922C2.75758 10.674 2.87542 10.0498 3.0101 9.41975C3.14478 8.78967 3.26263 8.20119 3.36364 7.65432C3.46465 7.09556 3.51515 6.63192 3.51515 6.26338C3.51515 6.00183 3.48148 5.79973 3.41414 5.65706C3.3468 5.50252 3.22334 5.42524 3.04377 5.42524C2.90909 5.42524 2.75196 5.49063 2.57239 5.6214C2.39282 5.75217 2.25814 6.00777 2.16835 6.3882L2 6.31687C2 5.29447 2.21886 4.48605 2.65657 3.89163C3.1055 3.29721 3.70595 3 4.45791 3C5.16498 3 5.6532 3.24371 5.92256 3.73114C6.20314 4.21856 6.34343 4.83082 6.34343 5.5679C6.34343 6.11477 6.28732 6.6973 6.17508 7.3155C6.07407 7.9337 5.95623 8.5519 5.82155 9.1701C5.68687 9.77641 5.56341 10.3411 5.45118 10.8642C5.35017 11.3873 5.29966 11.8212 5.29966 12.166C5.29966 12.6772 5.42312 12.9328 5.67003 12.9328C5.81594 12.9328 6.01235 12.8258 6.25926 12.6118C6.50617 12.3859 6.76431 12.0828 7.03367 11.7023C7.31425 11.31 7.58361 10.8701 7.84175 10.3827C8.09989 9.8834 8.31874 9.36031 8.49832 8.81344C8.47587 8.5519 8.45903 8.30224 8.44781 8.06447C8.43659 7.81481 8.43098 7.59488 8.43098 7.40466C8.43098 6.45359 8.51515 5.68679 8.6835 5.10425C8.86308 4.52172 9.08754 4.09374 9.3569 3.8203C9.62626 3.54687 9.90123 3.41015 10.1818 3.41015C10.5746 3.41015 10.9282 3.64198 11.2424 4.10562C11.5567 4.55738 11.7138 5.17558 11.7138 5.96022C11.7138 6.44765 11.6296 6.99451 11.4613 7.60082C11.2929 8.19524 11.0123 8.83128 10.6195 9.50892C10.5859 10.5313 10.6925 11.3576 10.9394 11.9877C11.1863 12.6177 11.4949 12.9328 11.8653 12.9328C12.101 12.9328 12.3535 12.808 12.6229 12.5583C12.9035 12.2968 13.1616 11.9401 13.3973 11.4883C13.633 11.0247 13.8238 10.4897 13.9697 9.8834C14.1268 9.27709 14.2054 8.62917 14.2054 7.93964C14.2054 7.53544 14.1773 7.1134 14.1212 6.67353C14.0763 6.23365 14.0146 5.81161 13.936 5.40741C13.8687 5.0032 13.7957 4.67032 13.7172 4.40878C13.7172 4.20668 13.7957 4.00457 13.9529 3.80247C14.1212 3.58848 14.3345 3.41015 14.5926 3.26749C14.8507 3.11294 15.1145 3.03566 15.3838 3.03566C15.6532 3.03566 15.9113 3.13672 16.1582 3.33882C16.4052 3.54092 16.6072 3.89758 16.7643 4.40878C16.9214 4.90809 17 5.6214 17 6.5487C17 7.84454 16.8429 9.0631 16.5286 10.2044C16.2144 11.3338 15.7879 12.3324 15.2492 13.2003C14.7217 14.0681 14.138 14.7517 13.4983 15.251C12.8586 15.7385 12.2076 15.9822 11.5455 15.9822C10.9618 15.9822 10.4792 15.792 10.0976 15.4115C9.71605 15.0311 9.41863 14.5199 9.20539 13.8779C8.99214 13.2359 8.84063 12.5226 8.75084 11.738C8.3468 12.7604 7.90909 13.5866 7.43771 14.2167C6.96633 14.8349 6.49495 15.2867 6.02357 15.572C5.55219 15.8573 5.10325 16 4.67677 16Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\nfunction AIToolIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path\n d=\"M5.36207 2.61103C5.50334 2.04084 6.31408 2.04084 6.45536 2.61103C6.75047 3.80492 7.36605 4.89554 8.23567 5.76515C9.10528 6.63476 10.1959 7.25035 11.3898 7.54546C11.96 7.68674 11.96 8.49747 11.3898 8.63875L11.1626 8.69793C10.018 9.02356 8.9798 9.64591 8.15316 10.5019C7.32652 11.358 6.74081 12.4173 6.45536 13.5725L6.42099 13.6731C6.22881 14.1096 5.58798 14.1096 5.39643 13.6731L5.36207 13.5732C5.07656 12.4178 4.49075 11.3585 3.66399 10.5024C2.83724 9.6464 1.7989 9.02409 0.65419 8.69857L0.427642 8.63875C-0.142547 8.49747 -0.142547 7.68674 0.427642 7.54546C1.62153 7.25035 2.71214 6.63476 3.58176 5.76515C4.45137 4.89554 5.06696 3.80492 5.36207 2.61103ZM10.882 0.206184C10.9424 -0.0687282 11.3344 -0.0687282 11.3949 0.206184C11.5249 0.793001 11.8197 1.33051 12.2447 1.75551C12.6697 2.18051 13.2072 2.47533 13.794 2.60531C14.0695 2.6664 14.0695 3.05777 13.794 3.11886L13.6737 3.15004C13.1131 3.29756 12.6039 3.59663 12.202 4.01444C11.8002 4.43225 11.5211 4.95267 11.3955 5.51862L11.3796 5.56698C11.2924 5.77698 10.9838 5.77698 10.8966 5.56698L10.882 5.51862C10.7604 4.96963 10.4943 4.46308 10.1114 4.05137C9.72842 3.63965 9.24243 3.33771 8.70366 3.17677L8.48156 3.11886C8.20665 3.05777 8.20665 2.6664 8.48156 2.60531C9.06862 2.47554 9.60639 2.18082 10.0316 1.7558C10.4569 1.33079 10.7519 0.793166 10.882 0.206184Z\"\n fill=\"#111113\"\n />\n </svg>\n );\n}\n\nfunction DocumentationIcon() {\n return (\n <svg\n width=\"24\"\n height=\"30\"\n viewBox=\"0 0 24 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path d=\"M12 0L12.1755 0.0105C12.5103 0.0499858 12.8221 0.201119 13.0605 0.439517C13.2989 0.677915 13.45 0.989675 13.4895 1.3245L13.5 1.5V7.5L13.5075 7.725C13.5612 8.43926 13.8686 9.11074 14.3743 9.61805C14.8799 10.1253 15.5504 10.435 16.2645 10.491L16.5 10.5H22.5L22.6755 10.5105C23.0103 10.55 23.3221 10.7011 23.5605 10.9395C23.7989 11.1779 23.95 11.4897 23.9895 11.8245L24 12V25.5C24.0001 26.6478 23.5615 27.7523 22.7741 28.5874C21.9866 29.4225 20.9098 29.9252 19.764 29.9925L19.5 30H4.5C3.35218 30.0001 2.24773 29.5615 1.41261 28.7741C0.57749 27.9866 0.0748387 26.9098 0.00750018 25.764L6.99067e-09 25.5V4.5C-6.39326e-05 3.35218 0.438488 2.24773 1.22593 1.41261C2.01336 0.57749 3.09016 0.0748387 4.236 0.00750017L4.5 0H12Z\" fill=\"#F8563F\"/>\n <path d=\"M22.5 7.49979H16.5L16.4985 1.49829L22.5 7.49979Z\" fill=\"#D1402A\"/>\n <path d=\"M12 24C14.7614 24 17 21.7614 17 19C17 16.2386 14.7614 14 12 14C9.23858 14 7 16.2386 7 19C7 21.7614 9.23858 24 12 24Z\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M9.9998 14.5H10.4998C9.5248 17.42 9.5248 20.58 10.4998 23.5H9.9998\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M13.5 14.5C14.475 17.42 14.475 20.58 13.5 23.5\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7.5 21V20.5C10.42 21.475 13.58 21.475 16.5 20.5V21\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7.5 17.5C10.42 16.525 13.58 16.525 16.5 17.5\" stroke=\"#FFEAE7\" strokeWidth=\"0.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n );\n}\n\nfunction PointerIcon() {\n return (\n <Icon18Base className=\"wv-icon-pointer\">\n <path d=\"M3.10071 5.81125L5.72984 14.2829C6.3524 16.2942 9.18745 16.323 9.85312 14.326L10.6289 11.9986C10.8444 11.3521 11.3521 10.8444 11.9986 10.6289L14.326 9.85312C16.323 9.18745 16.2894 6.35719 14.2829 5.72984L5.81125 3.10071C4.1447 2.58351 2.58351 4.1447 3.10071 5.81125Z\" />\n </Icon18Base>\n );\n}\nfunction PromptIcon() {\n return (\n <Icon18Base className=\"wv-icon-prompt\">\n <path d=\"M11.4 3H6.6C4.2 3 3 4.2 3 6.6V14.4C3 14.73 3.27 15 3.6 15H11.4C13.8 15 15 13.8 15 11.4V6.6C15 4.2 13.8 3 11.4 3Z\" />\n <path d=\"M6 8H12\" />\n <path d=\"M6 11H10\" />\n </Icon18Base>\n );\n}\nfunction TrashIcon() {\n return (\n <Icon18Base>\n <path d=\"M14.625 4.125L14.16 11.6437C14.0415 13.5645 13.9823 14.5253 13.5 15.216C13.2619 15.5574 12.9554 15.8455 12.6 16.062C11.8822 16.5 10.92 16.5 8.9955 16.5C7.068 16.5 6.10425 16.5 5.385 16.0613C5.02942 15.8443 4.72291 15.5557 4.485 15.2137C4.0035 14.5222 3.945 13.56 3.8295 11.6363L3.375 4.125M2.25 4.125H15.75M12.042 4.125L11.5298 3.069C11.19 2.367 11.0198 2.01675 10.7265 1.79775C10.6614 1.74924 10.5924 1.70609 10.5203 1.66875C10.1955 1.5 9.8055 1.5 9.02625 1.5C8.22675 1.5 7.827 1.5 7.49625 1.6755C7.42314 1.71466 7.3534 1.75981 7.28775 1.8105C6.9915 2.03775 6.82575 2.4015 6.49425 3.12825L6.03975 4.125M7.125 12.375V7.875M10.875 12.375V7.875\" />\n </Icon18Base>\n );\n}\nfunction SettingsIcon() {\n return (\n <Icon18Base>\n <path d=\"M9 11.25C10.2426 11.25 11.25 10.2426 11.25 9C11.25 7.75736 10.2426 6.75 9 6.75C7.75736 6.75 6.75 7.75736 6.75 9C6.75 10.2426 7.75736 11.25 9 11.25Z\" />\n <path d=\"M1.5 9.66007V8.34007C1.5 7.56007 2.1375 6.91507 2.925 6.91507C4.2825 6.91507 4.8375 5.95507 4.155 4.77757C3.765 4.10257 3.9975 3.22507 4.68 2.83507L5.9775 2.09257C6.57 1.74007 7.335 1.95007 7.6875 2.54257L7.77 2.68507C8.445 3.86257 9.555 3.86257 10.2375 2.68507L10.32 2.54257C10.6725 1.95007 11.4375 1.74007 12.03 2.09257L13.3275 2.83507C14.01 3.22507 14.2425 4.10257 13.8525 4.77757C13.17 5.95507 13.725 6.91507 15.0825 6.91507C15.8625 6.91507 16.5075 7.55257 16.5075 8.34007V9.66007C16.5075 10.4401 15.87 11.0851 15.0825 11.0851C13.725 11.0851 13.17 12.0451 13.8525 13.2226C14.2425 13.9051 14.01 14.7751 13.3275 15.1651L12.03 15.9076C11.4375 16.2601 10.6725 16.0501 10.32 15.4576L10.2375 15.3151C9.5625 14.1376 8.4525 14.1376 7.77 15.3151L7.6875 15.4576C7.335 16.0501 6.57 16.2601 5.9775 15.9076L4.68 15.1651C3.9975 14.7751 3.765 13.8976 4.155 13.2226C4.8375 12.0451 4.2825 11.0851 2.925 11.0851C2.1375 11.0851 1.5 10.4401 1.5 9.66007Z\" />\n </Icon18Base>\n );\n}\nfunction UndoIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M4.22704 13.773C5.44853 14.9945 7.13602 15.75 9 15.75C12.7279 15.75 15.75 12.7279 15.75 9C15.75 5.27209 12.7279 2.25 9 2.25C7.13602 2.25 5.44853 3.00552 4.22704 4.22704C3.60528 4.84879 2.25 6.375 2.25 6.375\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.25 3.375V6.375H5.25\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\nfunction RedoIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden>\n <path d=\"M13.773 13.773C12.5515 14.9945 10.864 15.75 9 15.75C5.27209 15.75 2.25 12.7279 2.25 9C2.25 5.27209 5.27209 2.25 9 2.25C10.864 2.25 12.5515 3.00552 13.773 4.22704C14.3947 4.84879 15.75 6.375 15.75 6.375\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M15.75 3.375V6.375H12.75\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\nfunction DragDotsIcon() {\n return (\n <Icon18Base>\n <path d=\"M13.875 11.625L13.875 11.6317L13.8683 11.6317L13.8683 11.625L13.875 11.625Z\" />\n <path d=\"M13.875 12C13.7755 12 13.6802 11.9605 13.6098 11.8902C13.5395 11.8198 13.5 11.7245 13.5 11.625C13.5 11.5255 13.5395 11.4302 13.6098 11.3598C13.6802 11.2895 13.7755 11.25 13.875 11.25C13.9745 11.25 14.0698 11.2895 14.1402 11.3598C14.2105 11.4302 14.25 11.5255 14.25 11.625C14.25 11.7245 14.2105 11.8198 14.1402 11.8902C14.0698 11.9605 13.9745 12 13.875 12ZM9.0075 11.625L9.0075 11.6325L9 11.6325L9 11.625L9.0075 11.625Z\" />\n <path d=\"M9.00732 12C8.90787 12 8.81249 11.9605 8.74216 11.8902C8.67183 11.8198 8.63232 11.7245 8.63232 11.625C8.63232 11.5255 8.67183 11.4302 8.74216 11.3598C8.81249 11.2895 8.90787 11.25 9.00732 11.25C9.10678 11.25 9.20216 11.2895 9.27249 11.3598C9.34282 11.4302 9.38232 11.5255 9.38232 11.625C9.38232 11.7245 9.34282 11.8198 9.27249 11.8902C9.20216 11.9605 9.10678 12 9.00732 12ZM4.12482 11.625L4.12482 11.6325L4.11732 11.6325L4.11732 11.625L4.12482 11.625Z\" />\n <path d=\"M4.125 12C4.02554 12 3.93016 11.9605 3.85984 11.8902C3.78951 11.8198 3.75 11.7245 3.75 11.625C3.75 11.5255 3.78951 11.4302 3.85984 11.3598C3.93016 11.2895 4.02554 11.25 4.125 11.25C4.22446 11.25 4.31984 11.2895 4.39017 11.3598C4.46049 11.4302 4.5 11.5255 4.5 11.625C4.5 11.7245 4.46049 11.8198 4.39017 11.8902C4.31984 11.9605 4.22446 12 4.125 12ZM13.875 6.375L13.875 6.3825L13.8675 6.3825L13.8675 6.375L13.875 6.375Z\" />\n <path d=\"M13.875 6.75C13.7755 6.75 13.6802 6.71049 13.6098 6.64017C13.5395 6.56984 13.5 6.47446 13.5 6.375C13.5 6.27554 13.5395 6.18016 13.6098 6.10984C13.6802 6.03951 13.7755 6 13.875 6C13.9745 6 14.0698 6.03951 14.1402 6.10984C14.2105 6.18016 14.25 6.27554 14.25 6.375C14.25 6.47446 14.2105 6.56984 14.1402 6.64017C14.0698 6.71049 13.9745 6.75 13.875 6.75ZM9.0075 6.375L9.0075 6.3825L9 6.3825L9 6.375L9.0075 6.375Z\" />\n <path d=\"M9.00732 6.75C8.90787 6.75 8.81249 6.71049 8.74216 6.64017C8.67183 6.56984 8.63232 6.47446 8.63232 6.375C8.63232 6.27554 8.67183 6.18016 8.74216 6.10984C8.81249 6.03951 8.90787 6 9.00732 6C9.10678 6 9.20216 6.03951 9.27249 6.10984C9.34282 6.18016 9.38232 6.27554 9.38232 6.375C9.38232 6.47446 9.34282 6.56984 9.27249 6.64017C9.20216 6.71049 9.10678 6.75 9.00732 6.75ZM4.12482 6.375L4.12482 6.3825L4.11732 6.3825L4.11732 6.375L4.12482 6.375Z\" />\n <path d=\"M4.125 6.75C4.02554 6.75 3.93016 6.71049 3.85984 6.64017C3.78951 6.56984 3.75 6.47446 3.75 6.375C3.75 6.27554 3.78951 6.18016 3.85984 6.10984C3.93016 6.03951 4.02554 6 4.125 6C4.22446 6 4.31984 6.03951 4.39017 6.10984C4.46049 6.18016 4.5 6.27554 4.5 6.375C4.5 6.47446 4.46049 6.56984 4.39017 6.64017C4.31984 6.71049 4.22446 6.75 4.125 6.75Z\" />\n </Icon18Base>\n );\n}\nfunction CloseIcon() {\n return (\n <Icon18Base>\n <path d=\"M4 14.0002L14.0002 4.00005\" />\n <path d=\"M14.0002 13.9999L4 3.99976\" />\n </Icon18Base>\n );\n}\n\nfunction InfoIcon() {\n return (\n <svg\n className=\"wv-settings-info-icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path\n d=\"M7.00008 12.8334C10.2084 12.8334 12.8334 10.2084 12.8334 7.00008C12.8334 3.79175 10.2084 1.16675 7.00008 1.16675C3.79175 1.16675 1.16675 3.79175 1.16675 7.00008C1.16675 10.2084 3.79175 12.8334 7.00008 12.8334Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 4.66675V7.58341\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M6.99683 9.33325H7.00207\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction TargetToolToggle({ selected }: { selected: boolean }) {\n return selected ? (\n <svg\n className=\"wv-settings-toggle-svg wv-settings-toggle-svg-on\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden\n >\n <g clipPath=\"url(#wv-toggle-selected-clip)\">\n <path\n d=\"M18.125 14.375L18.2322 14.2678C19.3641 13.1359 20 11.6007 20 9.99996C20 8.39921 19.3641 6.86402 18.2322 5.73212L18.125 5.62493C16.9244 4.4243 15.2963 3.74992 13.5984 3.74992L6.40151 3.74992C4.7038 3.75044 3.07573 4.42483 1.87491 5.62493L1.76773 5.73212C0.63583 6.86402 -5.98136e-05 8.39921 -5.96737e-05 9.99996C-5.95337e-05 11.6007 0.635831 13.1359 1.76773 14.2678L1.87492 14.375C3.07573 15.5751 4.7038 16.2495 6.40151 16.25L13.5984 16.25C15.2961 16.2495 16.9242 15.5751 18.125 14.375Z\"\n fill=\"#EBEBEB\"\n fillOpacity=\"0.05\"\n />\n <path\n d=\"M15.9154 13.75C14.9209 14.3242 13.7389 14.4798 12.6297 14.1825C11.5204 13.8853 10.5746 13.1595 10.0004 12.165C9.42621 11.1704 9.27062 9.98846 9.56786 8.87917C9.86511 7.76989 10.5908 6.82412 11.5854 6.24992C12.0779 5.9656 12.6215 5.78107 13.1853 5.70686C13.7491 5.63264 14.3219 5.6702 14.8712 5.81738C15.9805 6.11463 16.9263 6.84036 17.5005 7.83493C18.0747 8.8295 18.2302 10.0114 17.933 11.1207C17.6357 12.23 16.91 13.1758 15.9154 13.75Z\"\n fill=\"#35C759\"\n />\n <path\n d=\"M15.9154 13.75C14.9209 14.3242 13.7389 14.4798 12.6297 14.1825C11.5204 13.8853 10.5746 13.1595 10.0004 12.165C9.42621 11.1704 9.27062 9.98846 9.56786 8.87917C9.86511 7.76989 10.5908 6.82412 11.5854 6.24992C12.0779 5.9656 12.6215 5.78107 13.1853 5.70686C13.7491 5.63264 14.3219 5.6702 14.8712 5.81738C15.9805 6.11463 16.9263 6.84036 17.5005 7.83493C18.0747 8.8295 18.2302 10.0114 17.933 11.1207C17.6357 12.23 16.91 13.1758 15.9154 13.75Z\"\n fill=\"none\"\n stroke=\"rgba(255,255,255,0.55)\"\n strokeWidth=\"1.25\"\n />\n </g>\n <defs>\n <clipPath id=\"wv-toggle-selected-clip\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n ) : (\n <svg\n className=\"wv-settings-toggle-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden\n >\n <g clipPath=\"url(#wv-toggle-unselected-clip)\">\n <path\n d=\"M1.87498 5.62501L1.76779 5.7322C0.635893 6.86411 2.56136e-06 8.39929 2.84125e-06 10C3.12113e-06 11.6008 0.635894 13.136 1.76779 14.2679L1.87498 14.3751C3.07561 15.5757 4.70375 16.2501 6.40157 16.2501L13.5985 16.2501C15.2962 16.2496 16.9243 15.5752 18.1251 14.3751L18.2323 14.2679C19.3642 13.136 20.0001 11.6008 20.0001 10C20.0001 8.39929 19.3642 6.8641 18.2323 5.7322L18.1251 5.62501C16.9243 4.42491 15.2962 3.75053 13.5985 3.75L6.40157 3.75C4.70387 3.75053 3.07579 4.42491 1.87498 5.62501Z\"\n fill=\"#EBEBEB\"\n fillOpacity=\"0.05\"\n />\n <path\n d=\"M4.08456 6.25003C5.07913 5.67583 6.26106 5.52024 7.37034 5.81749C8.47963 6.11474 9.4254 6.84047 9.9996 7.83504C10.5738 8.82961 10.7294 10.0115 10.4321 11.1208C10.1349 12.2301 9.40916 13.1759 8.41459 13.7501C7.92213 14.0344 7.37849 14.2189 6.81471 14.2931C6.25094 14.3674 5.67806 14.3298 5.1288 14.1826C4.01952 13.8854 3.07374 13.1596 2.49955 12.1651C1.92535 11.1705 1.76976 9.98857 2.06701 8.87929C2.36425 7.77 3.08999 6.82423 4.08456 6.25003Z\"\n fill=\"#58585D\"\n />\n </g>\n <defs>\n <clipPath id=\"wv-toggle-unselected-clip\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(20 20) rotate(180)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\n\nfunction Icon18Base({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 18 18\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\nfunction CollapseIcon() {\n return (\n <IconBase>\n <path d=\"M8 6v12M16 8v8\" />\n </IconBase>\n );\n}\nfunction WeevarWordmarkIcon() {\n return (\n <svg\n className=\"wv-tray-logo\"\n width=\"48\"\n height=\"10\"\n viewBox=\"0 0 48 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Weevar\"\n >\n <path d=\"M2.16888 9.97264C1.66872 9.97264 1.2504 9.76288 0.913931 9.34336C0.577459 8.92385 0.409223 8.34929 0.409223 7.6197C0.409223 7.24578 0.450145 6.82627 0.531989 6.36115C0.613834 5.88691 0.709319 5.40812 0.818445 4.92476C0.927571 4.4414 1.02306 3.98997 1.1049 3.57045C1.18675 3.14181 1.22767 2.78614 1.22767 2.50342C1.22767 2.30278 1.20039 2.14774 1.14582 2.0383C1.09126 1.91974 0.991228 1.86047 0.845727 1.86047C0.736601 1.86047 0.609287 1.91062 0.463786 2.01094C0.318284 2.11126 0.209158 2.30734 0.136408 2.59918L0 2.54446C0 1.76015 0.17733 1.13999 0.531989 0.683995C0.895743 0.227998 1.38226 0 1.99155 0C2.56446 0 2.96004 0.186959 3.1783 0.560876C3.40564 0.934793 3.51931 1.40447 3.51931 1.9699C3.51931 2.38942 3.47385 2.8363 3.38291 3.31053C3.30106 3.78477 3.20558 4.25901 3.09645 4.73324C2.98733 5.19836 2.88729 5.63155 2.79635 6.03283C2.71451 6.43411 2.67359 6.76699 2.67359 7.03146C2.67359 7.42362 2.77362 7.6197 2.97368 7.6197C3.0919 7.6197 3.25105 7.53762 3.45111 7.37346C3.65118 7.20018 3.86033 6.96762 4.07859 6.67579C4.30593 6.37483 4.52418 6.03739 4.73334 5.66347C4.9425 5.28044 5.11983 4.87916 5.26533 4.45964C5.24714 4.25901 5.2335 4.06749 5.22441 3.88509C5.21531 3.69357 5.21077 3.52485 5.21077 3.37893C5.21077 2.64934 5.27897 2.0611 5.41538 1.61423C5.56088 1.16735 5.74276 0.839033 5.96101 0.629275C6.17926 0.419517 6.40206 0.314637 6.62941 0.314637C6.94769 0.314637 7.23415 0.492476 7.48877 0.848153C7.7434 1.19471 7.87072 1.66895 7.87072 2.27086C7.87072 2.64478 7.80251 3.0643 7.6661 3.52941C7.5297 3.98541 7.30235 4.47332 6.98407 4.99316C6.95678 5.77747 7.04318 6.41131 7.24324 6.89466C7.44331 7.37802 7.69339 7.6197 7.99348 7.6197C8.18445 7.6197 8.38906 7.52394 8.60732 7.33242C8.83466 7.13178 9.04382 6.85819 9.23479 6.51163C9.42576 6.15595 9.58036 5.74555 9.69858 5.28044C9.82589 4.81532 9.88955 4.31829 9.88955 3.78933C9.88955 3.47925 9.86681 3.15549 9.82134 2.81806C9.78497 2.48062 9.73495 2.15686 9.67129 1.84678C9.61673 1.53671 9.55762 1.28135 9.49396 1.08071C9.49396 0.925672 9.55762 0.770634 9.68494 0.615595C9.82134 0.451437 9.99413 0.314637 10.2033 0.205198C10.4124 0.086639 10.6261 0.0273594 10.8444 0.0273594C11.0627 0.0273594 11.2718 0.104879 11.4719 0.259918C11.6719 0.414957 11.8356 0.688555 11.9629 1.08071C12.0903 1.46375 12.1539 2.01094 12.1539 2.7223C12.1539 3.71637 12.0266 4.65116 11.772 5.52668C11.5173 6.39307 11.1718 7.15914 10.7353 7.8249C10.3079 8.49065 9.83498 9.01505 9.31663 9.39808C8.79829 9.772 8.27084 9.95896 7.73431 9.95896C7.26143 9.95896 6.87039 9.81304 6.5612 9.5212C6.25201 9.22937 6.01103 8.83721 5.83824 8.34473C5.66546 7.85226 5.54269 7.30506 5.46994 6.70315C5.14256 7.48746 4.7879 8.12129 4.40596 8.60465C4.02402 9.07889 3.64208 9.42544 3.26014 9.64432C2.8782 9.8632 2.51445 9.97264 2.16888 9.97264Z\" fill=\"currentColor\" />\n <path d=\"M15.4244 10C14.7605 10 14.2104 9.86776 13.7739 9.60328C13.3374 9.32969 13.01 8.97401 12.7917 8.53625C12.5735 8.08938 12.4643 7.61058 12.4643 7.09986C12.4643 6.61651 12.5553 6.13315 12.7372 5.64979C12.9281 5.15732 13.2009 4.71044 13.5556 4.30917C13.9194 3.90789 14.3559 3.58413 14.8651 3.33789C15.3835 3.09166 15.9655 2.96854 16.6111 2.96854C17.4114 2.96854 17.9934 3.15093 18.3572 3.51573C18.73 3.87141 18.9164 4.30461 18.9164 4.81532C18.9164 5.25308 18.7982 5.65891 18.5618 6.03283C18.3344 6.39763 18.0298 6.69403 17.6478 6.92202C17.2659 7.1409 16.8476 7.25034 16.3929 7.25034C16.1564 7.25034 15.9155 7.21386 15.6699 7.1409C15.4244 7.06794 15.1834 6.95394 14.947 6.79891C14.9924 7.36434 15.1561 7.77474 15.438 8.0301C15.7199 8.28545 16.0564 8.41313 16.4474 8.41313C16.7203 8.41313 16.9931 8.36297 17.2659 8.26265C17.5387 8.15321 17.7888 8.01642 18.0161 7.85226C18.2526 7.67898 18.4344 7.49658 18.5618 7.30506L18.6572 7.37346C18.6572 7.8477 18.5572 8.25353 18.3572 8.59097C18.1662 8.91929 17.9116 9.18833 17.5933 9.39808C17.275 9.60784 16.9249 9.76288 16.5429 9.8632C16.1701 9.9544 15.7972 10 15.4244 10ZM15.7381 6.30643C16.0291 6.30643 16.2656 6.22435 16.4474 6.06019C16.6293 5.88691 16.7657 5.68627 16.8567 5.45828C16.9476 5.23028 16.9931 5.02964 16.9931 4.85636C16.9931 4.6466 16.934 4.47332 16.8157 4.33653C16.6975 4.19061 16.5338 4.11765 16.3247 4.11765C16.161 4.11765 15.9791 4.17693 15.779 4.29549C15.5881 4.41404 15.4153 4.61924 15.2607 4.91108C15.1061 5.1938 15.0061 5.59052 14.9606 6.10123C15.2516 6.23803 15.5108 6.30643 15.7381 6.30643Z\" fill=\"currentColor\" />\n <path d=\"M22.5378 10C21.874 10 21.3238 9.86776 20.8873 9.60328C20.4508 9.32969 20.1234 8.97401 19.9052 8.53625C19.6869 8.08938 19.5778 7.61058 19.5778 7.09986C19.5778 6.61651 19.6687 6.13315 19.8506 5.64979C20.0416 5.15732 20.3144 4.71044 20.669 4.30917C21.0328 3.90789 21.4693 3.58413 21.9786 3.33789C22.4969 3.09166 23.0789 2.96854 23.7246 2.96854C24.5248 2.96854 25.1068 3.15093 25.4706 3.51573C25.8434 3.87141 26.0299 4.30461 26.0299 4.81532C26.0299 5.25308 25.9116 5.65891 25.6752 6.03283C25.4479 6.39763 25.1432 6.69403 24.7613 6.92202C24.3793 7.1409 23.961 7.25034 23.5063 7.25034C23.2699 7.25034 23.0289 7.21386 22.7834 7.1409C22.5378 7.06794 22.2968 6.95394 22.0604 6.79891C22.1059 7.36434 22.2696 7.77474 22.5515 8.0301C22.8334 8.28545 23.1698 8.41313 23.5609 8.41313C23.8337 8.41313 24.1065 8.36297 24.3793 8.26265C24.6521 8.15321 24.9022 8.01642 25.1296 7.85226C25.366 7.67898 25.5479 7.49658 25.6752 7.30506L25.7707 7.37346C25.7707 7.8477 25.6707 8.25353 25.4706 8.59097C25.2796 8.91929 25.025 9.18833 24.7067 9.39808C24.3884 9.60784 24.0383 9.76288 23.6564 9.8632C23.2835 9.9544 22.9107 10 22.5378 10ZM22.8516 6.30643C23.1426 6.30643 23.379 6.22435 23.5609 6.06019C23.7428 5.88691 23.8792 5.68627 23.9701 5.45828C24.061 5.23028 24.1065 5.02964 24.1065 4.85636C24.1065 4.6466 24.0474 4.47332 23.9292 4.33653C23.811 4.19061 23.6473 4.11765 23.4381 4.11765C23.2744 4.11765 23.0926 4.17693 22.8925 4.29549C22.7015 4.41404 22.5287 4.61924 22.3741 4.91108C22.2195 5.1938 22.1195 5.59052 22.074 6.10123C22.365 6.23803 22.6242 6.30643 22.8516 6.30643Z\" fill=\"currentColor\" />\n <path d=\"M28.751 9.95896C28.2235 9.95896 27.8052 9.82216 27.496 9.54856C27.1868 9.26585 27.0322 8.83265 27.0322 8.24897C27.0322 7.91154 27.0732 7.5513 27.155 7.16826C27.246 6.78523 27.3323 6.44323 27.4142 6.14227C27.496 5.85043 27.5597 5.59508 27.6052 5.3762C27.6597 5.15732 27.687 4.9886 27.687 4.87004C27.687 4.72412 27.6552 4.61924 27.5915 4.5554C27.5279 4.49156 27.4506 4.45964 27.3596 4.45964C27.1414 4.45964 26.9595 4.56452 26.814 4.77428L26.7594 4.71956C26.7685 4.40948 26.8686 4.12677 27.0595 3.87141C27.2505 3.60693 27.496 3.39717 27.7961 3.24213C28.0962 3.0871 28.4009 3.00958 28.7101 3.00958C29.0556 3.00958 29.3512 3.11446 29.5967 3.32421C29.8422 3.52485 29.9559 3.84405 29.9377 4.28181C29.9286 4.47332 29.8923 4.715 29.8286 5.00684C29.774 5.29868 29.6967 5.64523 29.5967 6.04651C29.533 6.30187 29.4648 6.59371 29.3921 6.92202C29.3284 7.24122 29.2966 7.53306 29.2966 7.79754C29.2966 7.99818 29.3284 8.15777 29.3921 8.27633C29.4558 8.39489 29.5603 8.45417 29.7058 8.45417C29.8968 8.45417 30.106 8.34929 30.3333 8.13953C30.5697 7.92066 30.7744 7.56954 30.9471 7.08618C31.1199 6.59371 31.22 5.94163 31.2472 5.12996C31.2745 4.5098 31.2336 4.05837 31.1245 3.77565V3.70725C31.2063 3.57957 31.3291 3.45645 31.4928 3.33789C31.6656 3.21933 31.8565 3.12357 32.0657 3.05062C32.2748 2.96854 32.4704 2.9275 32.6522 2.9275C32.9432 2.9275 33.1888 3.06886 33.3888 3.35157C33.598 3.63429 33.6889 4.12677 33.6617 4.829C33.6435 5.50388 33.5207 6.11491 33.2934 6.66211C33.0751 7.2093 32.7886 7.6881 32.434 8.0985C32.0793 8.50889 31.6883 8.85089 31.2609 9.12449C30.8426 9.39808 30.4152 9.60784 29.9786 9.75376C29.5421 9.89056 29.1329 9.95896 28.751 9.95896Z\" fill=\"currentColor\" />\n <path d=\"M39.2501 9.97264C38.9318 9.97264 38.6545 9.86776 38.418 9.658C38.1816 9.44824 38.0634 9.10625 38.0634 8.63201C38.0634 8.58641 38.0634 8.54081 38.0634 8.49521C38.0634 8.44961 38.0679 8.40401 38.077 8.35841C37.8042 8.90561 37.495 9.31145 37.1494 9.57592C36.8129 9.83128 36.4719 9.95896 36.1264 9.95896C35.8081 9.95896 35.508 9.84952 35.2261 9.63064C34.9442 9.40264 34.7168 9.06977 34.544 8.63201C34.3713 8.19425 34.2849 7.6653 34.2849 7.04514C34.2849 6.40675 34.3713 5.83675 34.544 5.33516C34.7259 4.83356 34.9624 4.40948 35.2534 4.06293C35.5444 3.71637 35.8626 3.45645 36.2082 3.28317C36.5538 3.10078 36.8902 3.00958 37.2176 3.00958C37.5814 3.00958 37.9088 3.12358 38.1998 3.35157C38.4908 3.57045 38.6908 3.92157 38.8 4.40492C38.8272 4.24989 38.8454 4.10853 38.8545 3.98085C38.8727 3.85317 38.8818 3.76653 38.8818 3.72093C38.8909 3.47469 39.0137 3.29229 39.2501 3.17373C39.4956 3.05518 39.7639 2.9959 40.0549 2.9959C40.3095 2.9959 40.5505 3.04606 40.7779 3.14637C41.0052 3.24669 41.1598 3.41541 41.2416 3.65253L41.2689 3.73461C41.1598 3.98085 41.0507 4.27725 40.9415 4.6238C40.8324 4.97036 40.7324 5.33516 40.6415 5.71819C40.5505 6.09211 40.4778 6.46147 40.4232 6.82627C40.3686 7.18194 40.3414 7.49658 40.3414 7.77018C40.3414 8.07114 40.3732 8.28089 40.4368 8.39945C40.5005 8.50889 40.5778 8.56361 40.6687 8.56361C40.8233 8.56361 40.9643 8.45417 41.0916 8.23529L41.2007 8.29001C41.2007 8.60009 41.1007 8.88281 40.9006 9.13817C40.7006 9.39353 40.4505 9.59872 40.1504 9.75376C39.8503 9.89968 39.5502 9.97264 39.2501 9.97264ZM37.0267 8.23529C37.2631 8.23529 37.5223 8.02554 37.8042 7.60602C38.0952 7.17738 38.3453 6.56635 38.5544 5.77291C38.5726 5.69083 38.5908 5.61332 38.609 5.54036C38.6272 5.45828 38.6408 5.38076 38.6499 5.3078C38.5044 4.97036 38.3498 4.73324 38.1861 4.59644C38.0315 4.45052 37.8769 4.37756 37.7223 4.37756C37.495 4.37756 37.2813 4.50068 37.0812 4.74692C36.8902 4.98404 36.7311 5.285 36.6038 5.64979C36.4856 6.01459 36.4265 6.37939 36.4265 6.74419C36.4265 7.24578 36.481 7.6197 36.5901 7.86594C36.7084 8.11218 36.8539 8.23529 37.0267 8.23529Z\" fill=\"currentColor\" />\n <path d=\"M43.5804 9.95896C43.253 9.95896 42.962 9.82672 42.7074 9.56224C42.4528 9.28865 42.3254 8.90561 42.3254 8.41313C42.3254 8.17601 42.3527 7.90698 42.4073 7.60602C42.4619 7.30506 42.5255 6.99954 42.5983 6.68947C42.671 6.37027 42.7347 6.07387 42.7892 5.80027C42.8438 5.51756 42.8711 5.285 42.8711 5.1026C42.8711 4.91108 42.8347 4.7606 42.762 4.65116C42.6983 4.5326 42.6119 4.47332 42.5028 4.47332C42.33 4.47332 42.1527 4.59188 41.9708 4.829L41.8889 4.77428C41.8798 4.62836 41.9117 4.45508 41.9844 4.25445C42.0572 4.05381 42.1709 3.86229 42.3254 3.67989C42.48 3.48837 42.6756 3.32877 42.912 3.20109C43.1575 3.07342 43.444 3.00958 43.7714 3.00958C44.2533 3.00958 44.6035 3.15093 44.8217 3.43365C45.04 3.70725 45.1491 4.04013 45.1491 4.43228C45.1491 4.49612 45.1445 4.56452 45.1354 4.63748C45.1354 4.70132 45.1309 4.76516 45.1218 4.829C45.4492 4.23621 45.7902 3.78477 46.1449 3.47469C46.5086 3.15549 46.8451 2.9959 47.1543 2.9959C47.4453 2.9959 47.659 3.1099 47.7954 3.33789C47.9318 3.56589 48 3.83949 48 4.15869C48 4.45052 47.9409 4.74692 47.8227 5.04788C47.7135 5.34884 47.5453 5.59964 47.318 5.80027C47.0997 5.99179 46.8314 6.08299 46.5132 6.07387L46.4586 6.04651C46.4495 5.80939 46.3722 5.62243 46.2267 5.48564C46.0812 5.34884 45.9175 5.28044 45.7356 5.28044C45.4901 5.28044 45.2582 5.40356 45.04 5.64979C44.8308 5.89603 44.7262 6.25171 44.7262 6.71683C44.7262 6.99954 44.758 7.30506 44.8217 7.63338C44.8854 7.9617 44.9172 8.23985 44.9172 8.46785C44.9172 8.74145 44.8535 8.99225 44.7262 9.22025C44.5989 9.44824 44.4352 9.63064 44.2352 9.76744C44.0351 9.89512 43.8168 9.95896 43.5804 9.95896Z\" fill=\"currentColor\" />\n </svg>\n );\n}\nfunction HideTrayIcon() {\n return (\n <svg\n className=\"wv-tray-hide-icon\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <g clipPath=\"url(#wv-hide-tray-clip)\">\n <path d=\"M4 11L4 1M3 11L9 11C10.1046 11 11 10.1046 11 9L11 3C11 1.89543 10.1046 1 9 1L3 1C1.89543 1 1 1.89543 1 3L1 9C1 10.1046 1.89543 11 3 11Z\" stroke=\"currentColor\" strokeLinecap=\"round\" />\n </g>\n <defs>\n <clipPath id=\"wv-hide-tray-clip\">\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0 12) rotate(-90)\" />\n </clipPath>\n </defs>\n </svg>\n );\n}\nfunction ArrowUpRightIcon() {\n return (\n <IconBase>\n <path d=\"M7 17L17 7M10 7h7v7\" />\n </IconBase>\n );\n}\nfunction ArrowRightIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n >\n <path\n d=\"M5.49854 3.4939L10.506 3.4939L10.506 8.50139\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.49414 10.5061L10.4362 3.56408\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\nfunction GlobeIcon() {\n return (\n <IconBase>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n <path d=\"M4 12h16M12 4c2.5 2.2 2.5 13.8 0 16M12 4c-2.5 2.2-2.5 13.8 0 16\" />\n </IconBase>\n );\n}\n","import { createRoot, type Root } from \"react-dom/client\";\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { waitForReactHydration } from \"../engine/hydration\";\nimport { WEEVAR_BOOT_DOT_CLASS, WEEVAR_HOST_ID } from \"../engine/hitTest\";\nimport { WeevarShadowApp } from \"../overlay/WeevarShadowApp\";\nimport type { WeevarKeybind, WeevarProps } from \"../types\";\n\nlet warnedAboutLegacyBootDot = false;\nlet warnedAboutForeignHostOwner = false;\nconst WEEVAR_HOST_OWNER_ATTR = \"data-wv-owner\";\nconst WEEVAR_OWNER_TOKEN_GLOBAL_KEY = \"__weevar_host_owner_token__\";\nconst WEEVAR_HOST_OWNER_TOKEN = (() => {\n const g = globalThis as typeof globalThis & {\n [WEEVAR_OWNER_TOKEN_GLOBAL_KEY]?: string;\n };\n if (!g[WEEVAR_OWNER_TOKEN_GLOBAL_KEY]) {\n g[WEEVAR_OWNER_TOKEN_GLOBAL_KEY] = `weevar-${Math.random().toString(36).slice(2)}`;\n }\n return g[WEEVAR_OWNER_TOKEN_GLOBAL_KEY];\n})();\n\nconst defaultMatchKeybind = (e: KeyboardEvent): boolean => {\n if (e.repeat) return false;\n if (e.key.toLowerCase() !== \"e\" || !e.shiftKey) return false;\n return e.metaKey || e.ctrlKey;\n};\n\nfunction matchCustomKeybind(e: KeyboardEvent, k: WeevarKeybind): boolean {\n if (e.repeat) return false;\n if (e.key.toLowerCase() !== k.key.toLowerCase()) return false;\n if (k.meta && !e.metaKey) return false;\n if (k.ctrl && !e.ctrlKey) return false;\n if (k.shift && !e.shiftKey) return false;\n if (k.alt && !e.altKey) return false;\n return true;\n}\n\nexport function Weevar(props: WeevarProps) {\n const { disabled, keybind, config } = props;\n const [sessionOn, setSessionOn] = useState(false);\n\n useEffect(() => {\n if (disabled) setSessionOn(false);\n }, [disabled]);\n const reactRootRef = useRef<Root | null>(null);\n const hostRef = useRef<HTMLElement | null>(null);\n\n const cleanupLegacyBootDots = useCallback(() => {\n const staleDots = document.querySelectorAll(`.${WEEVAR_BOOT_DOT_CLASS}`);\n if (!staleDots.length) return;\n staleDots.forEach((dot) => dot.remove());\n if (import.meta.env.DEV && !warnedAboutLegacyBootDot) {\n warnedAboutLegacyBootDot = true;\n console.warn(\n `[weevar] Removed ${staleDots.length} stale legacy boot dot node(s).`,\n );\n }\n }, []);\n\n const ensureShadowHost = useCallback((): boolean => {\n if (reactRootRef.current) return true;\n cleanupLegacyBootDots();\n\n const existingHost = document.getElementById(WEEVAR_HOST_ID) as HTMLElement | null;\n if (existingHost) {\n const owner = existingHost.getAttribute(WEEVAR_HOST_OWNER_ATTR);\n if (owner && owner !== WEEVAR_HOST_OWNER_TOKEN) {\n // During dev HMR/replay flows, an older Weevar instance can leave a host behind.\n // Reclaim only Weevar-owned hosts to avoid removing foreign DOM accidentally.\n if (owner.startsWith(\"weevar-\")) {\n existingHost.remove();\n } else {\n if (import.meta.env.DEV && !warnedAboutForeignHostOwner) {\n warnedAboutForeignHostOwner = true;\n console.warn(\n \"[weevar] Existing overlay host is owned by another instance; skipping host takeover.\",\n );\n }\n return false;\n }\n } else {\n existingHost.remove();\n }\n }\n\n const host = document.createElement(\"div\");\n host.id = WEEVAR_HOST_ID;\n host.setAttribute(WEEVAR_HOST_OWNER_ATTR, WEEVAR_HOST_OWNER_TOKEN);\n host.style.cssText =\n \"position:fixed;inset:0;pointer-events:none;z-index:2147483646;\";\n document.body.appendChild(host);\n\n const shadow = host.attachShadow({ mode: \"closed\" });\n const mount = document.createElement(\"div\");\n shadow.appendChild(mount);\n const root = createRoot(mount);\n hostRef.current = host;\n reactRootRef.current = root;\n return true;\n }, [cleanupLegacyBootDots]);\n\n const activate = useCallback(async () => {\n if (disabled) return;\n await waitForReactHydration();\n if (!ensureShadowHost()) return;\n setSessionOn(true);\n }, [disabled, ensureShadowHost]);\n\n const toggleSession = useCallback(async () => {\n if (disabled) return;\n await waitForReactHydration();\n if (!ensureShadowHost()) return;\n setSessionOn((s) => !s);\n }, [disabled, ensureShadowHost]);\n\n useEffect(() => {\n if (disabled) return;\n cleanupLegacyBootDots();\n void ensureShadowHost();\n }, [disabled, cleanupLegacyBootDots, ensureShadowHost]);\n\n useEffect(() => {\n if (disabled) return;\n if (!reactRootRef.current && !ensureShadowHost()) return;\n reactRootRef.current?.render(\n <WeevarShadowApp\n sessionOn={sessionOn}\n setSessionOn={setSessionOn}\n disabled={disabled}\n config={config}\n />,\n );\n }, [disabled, ensureShadowHost, sessionOn, config]);\n\n useEffect(() => {\n if (disabled) return;\n const onKey = (e: KeyboardEvent) => {\n const target = e.target as Node | null;\n if (target instanceof HTMLElement) {\n const tag = target.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\" || target.isContentEditable)\n return;\n }\n const match = keybind\n ? matchCustomKeybind(e, keybind)\n : defaultMatchKeybind(e);\n if (!match) return;\n e.preventDefault();\n void toggleSession();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [disabled, keybind, toggleSession]);\n\n useEffect(() => {\n return () => {\n const ownedHost = hostRef.current;\n const root = reactRootRef.current;\n hostRef.current = null;\n reactRootRef.current = null;\n window.setTimeout(() => {\n root?.unmount();\n if (\n ownedHost &&\n ownedHost.getAttribute(WEEVAR_HOST_OWNER_ATTR) === WEEVAR_HOST_OWNER_TOKEN\n ) {\n ownedHost.remove();\n }\n }, 0);\n };\n }, []);\n\n return null;\n}\n"]}