@agent-native/core 0.42.0 → 0.43.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.
- package/README.md +17 -56
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +24 -13
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.d.ts +2 -6
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +8 -66
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/blocks/index.d.ts +11 -0
- package/dist/client/blocks/index.d.ts.map +1 -1
- package/dist/client/blocks/index.js +11 -0
- package/dist/client/blocks/index.js.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.js +2 -2
- package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
- package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/DiffBlock.js +86 -21
- package/dist/client/blocks/library/DiffBlock.js.map +1 -1
- package/dist/client/blocks/library/FileTreeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/FileTreeBlock.js +27 -4
- package/dist/client/blocks/library/FileTreeBlock.js.map +1 -1
- package/dist/client/blocks/library/JsonExplorerBlock.js +1 -1
- package/dist/client/blocks/library/JsonExplorerBlock.js.map +1 -1
- package/dist/client/blocks/library/MermaidBlock.js +1 -1
- package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
- package/dist/client/blocks/library/annotation-rail.d.ts +19 -0
- package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -1
- package/dist/client/blocks/library/annotation-rail.js +19 -0
- package/dist/client/blocks/library/annotation-rail.js.map +1 -1
- package/dist/client/blocks/library/callout.config.d.ts +29 -0
- package/dist/client/blocks/library/callout.config.d.ts.map +1 -0
- package/dist/client/blocks/library/callout.config.js +33 -0
- package/dist/client/blocks/library/callout.config.js.map +1 -0
- package/dist/client/blocks/library/callout.d.ts +20 -0
- package/dist/client/blocks/library/callout.d.ts.map +1 -0
- package/dist/client/blocks/library/callout.js +61 -0
- package/dist/client/blocks/library/callout.js.map +1 -0
- package/dist/client/blocks/library/checklist.d.ts.map +1 -1
- package/dist/client/blocks/library/checklist.js +3 -3
- package/dist/client/blocks/library/checklist.js.map +1 -1
- package/dist/client/blocks/library/decision.config.d.ts +37 -0
- package/dist/client/blocks/library/decision.config.d.ts.map +1 -0
- package/dist/client/blocks/library/decision.config.js +32 -0
- package/dist/client/blocks/library/decision.config.js.map +1 -0
- package/dist/client/blocks/library/decision.d.ts +19 -0
- package/dist/client/blocks/library/decision.d.ts.map +1 -0
- package/dist/client/blocks/library/decision.js +119 -0
- package/dist/client/blocks/library/decision.js.map +1 -0
- package/dist/client/blocks/library/diagram.config.d.ts +64 -0
- package/dist/client/blocks/library/diagram.config.d.ts.map +1 -0
- package/dist/client/blocks/library/diagram.config.js +111 -0
- package/dist/client/blocks/library/diagram.config.js.map +1 -0
- package/dist/client/blocks/library/diagram.d.ts +16 -0
- package/dist/client/blocks/library/diagram.d.ts.map +1 -0
- package/dist/client/blocks/library/diagram.js +261 -0
- package/dist/client/blocks/library/diagram.js.map +1 -0
- package/dist/client/blocks/library/question-form.config.d.ts +69 -0
- package/dist/client/blocks/library/question-form.config.d.ts.map +1 -0
- package/dist/client/blocks/library/question-form.config.js +58 -0
- package/dist/client/blocks/library/question-form.config.js.map +1 -0
- package/dist/client/blocks/library/question-form.d.ts +20 -0
- package/dist/client/blocks/library/question-form.d.ts.map +1 -0
- package/dist/client/blocks/library/question-form.js +286 -0
- package/dist/client/blocks/library/question-form.js.map +1 -0
- package/dist/client/blocks/library/sanitize-html.d.ts +5 -0
- package/dist/client/blocks/library/sanitize-html.d.ts.map +1 -0
- package/dist/client/blocks/library/sanitize-html.js +240 -0
- package/dist/client/blocks/library/sanitize-html.js.map +1 -0
- package/dist/client/blocks/library/server-specs.d.ts.map +1 -1
- package/dist/client/blocks/library/server-specs.js +59 -0
- package/dist/client/blocks/library/server-specs.js.map +1 -1
- package/dist/client/blocks/library/specs.d.ts.map +1 -1
- package/dist/client/blocks/library/specs.js +11 -0
- package/dist/client/blocks/library/specs.js.map +1 -1
- package/dist/client/blocks/library/tabs.d.ts.map +1 -1
- package/dist/client/blocks/library/tabs.js +12 -12
- package/dist/client/blocks/library/tabs.js.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.d.ts +260 -0
- package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -0
- package/dist/client/blocks/library/wireframe-kit.js +920 -0
- package/dist/client/blocks/library/wireframe-kit.js.map +1 -0
- package/dist/client/blocks/library/wireframe.config.d.ts +123 -0
- package/dist/client/blocks/library/wireframe.config.d.ts.map +1 -0
- package/dist/client/blocks/library/wireframe.config.js +294 -0
- package/dist/client/blocks/library/wireframe.config.js.map +1 -0
- package/dist/client/blocks/library/wireframe.d.ts +15 -0
- package/dist/client/blocks/library/wireframe.d.ts.map +1 -0
- package/dist/client/blocks/library/wireframe.js +206 -0
- package/dist/client/blocks/library/wireframe.js.map +1 -0
- package/dist/client/blocks/registry.d.ts +9 -0
- package/dist/client/blocks/registry.d.ts.map +1 -1
- package/dist/client/blocks/registry.js +12 -5
- package/dist/client/blocks/registry.js.map +1 -1
- package/dist/client/blocks/server.d.ts +1 -0
- package/dist/client/blocks/server.d.ts.map +1 -1
- package/dist/client/blocks/server.js +1 -0
- package/dist/client/blocks/server.js.map +1 -1
- package/dist/client/blocks/types.d.ts +8 -0
- package/dist/client/blocks/types.d.ts.map +1 -1
- package/dist/client/blocks/types.js.map +1 -1
- package/dist/client/rich-markdown-editor/DragHandle.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/DragHandle.js +77 -12
- package/dist/client/rich-markdown-editor/DragHandle.js.map +1 -1
- package/dist/styles/agent-native.css +1 -0
- package/dist/styles/blocks.css +1380 -0
- package/docs/content/plan-plugin.md +8 -8
- package/docs/content/pr-visual-recap.md +2 -2
- package/docs/content/template-plan.md +94 -17
- package/package.json +2 -1
- package/docs/content/visual-plans.md +0 -82
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireframe-kit.js","sourceRoot":"","sources":["../../../../src/client/blocks/library/wireframe-kit.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport rough from \"roughjs\";\nimport type {\n WireframeElName,\n WireframeNode,\n WireframeTone,\n} from \"./wireframe.config.js\";\n\n/**\n * Shared wireframe \"kit\" — hand-drawn low-fi primitives, the el → component node\n * registry, the rough.js sketch overlay, and the viewer-level sketchy/clean\n * style preference. Ported verbatim (geometry-wise) from the plan template's\n * `app/components/plan/wireframe/kit/*` so any app can render wireframe blocks.\n *\n * DECOUPLING: the only behavioral change from the plan copy is theme detection —\n * core blocks read `document.documentElement.classList.contains(\"dark\")` (the\n * MermaidBlock precedent) instead of importing `next-themes`. Everything else\n * (the `.plan-wf` / `[data-rough]` class contract the rough overlay measures,\n * the `--wf-*` / `--ink` / `--paper` token names every primitive reads) is\n * preserved exactly, so the kit looks identical in plan and renders correctly in\n * any app once the matching tokens exist in `core/styles/blocks.css`.\n */\n\n/* ========================================================================== */\n/* Viewer-level wireframe style preference (localStorage) */\n/* ========================================================================== */\n\nexport type WireframeStyle = \"sketchy\" | \"clean\";\n\nconst STYLE_STORAGE_KEY = \"plan-wireframe-style\";\nconst styleListeners = new Set<() => void>();\n\nfunction readStoredStyle(): WireframeStyle {\n if (typeof localStorage === \"undefined\") return \"sketchy\";\n try {\n return localStorage.getItem(STYLE_STORAGE_KEY) === \"clean\"\n ? \"clean\"\n : \"sketchy\";\n } catch {\n return \"sketchy\";\n }\n}\n\nlet currentStyle: WireframeStyle = readStoredStyle();\n\nexport function setWireframeStyle(style: WireframeStyle): void {\n if (style === currentStyle) return;\n currentStyle = style;\n try {\n localStorage.setItem(STYLE_STORAGE_KEY, style);\n } catch {\n // ignore (private mode / disabled storage)\n }\n for (const listener of styleListeners) listener();\n}\n\nexport function toggleWireframeStyle(): void {\n setWireframeStyle(currentStyle === \"sketchy\" ? \"clean\" : \"sketchy\");\n}\n\nfunction subscribeStyle(callback: () => void): () => void {\n styleListeners.add(callback);\n const onStorage = (event: StorageEvent) => {\n if (event.key === STYLE_STORAGE_KEY) {\n currentStyle = readStoredStyle();\n callback();\n }\n };\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"storage\", onStorage);\n }\n return () => {\n styleListeners.delete(callback);\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"storage\", onStorage);\n }\n };\n}\n\nexport function useWireframeStyle(): WireframeStyle {\n return useSyncExternalStore(\n subscribeStyle,\n () => currentStyle,\n () => \"sketchy\",\n );\n}\n\n/** Read the live dark-mode flag from the document root (next-themes-free). */\nexport function useIsDark(): boolean {\n const [isDark, setIsDark] = useState(false);\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n const read = () => setIsDark(root.classList.contains(\"dark\"));\n read();\n const observer = new MutationObserver(read);\n observer.observe(root, { attributes: true, attributeFilter: [\"class\"] });\n return () => observer.disconnect();\n }, []);\n return isDark;\n}\n\n/* ========================================================================== */\n/* Primitives (ported from kit/primitives.tsx) */\n/* ========================================================================== */\n\n/**\n * Frame-level config threaded to every Screen so skeleton / theme / sketch-vs-\n * clean reach the kit no matter which path renders the root Screen.\n */\nexport const KitConfigContext = createContext<{\n skeleton?: boolean;\n sketch?: number;\n theme?: \"light\" | \"dark\";\n style?: \"sketchy\" | \"clean\";\n}>({});\n\nconst V = {\n ink: \"var(--ink)\",\n soft: \"var(--ink-soft)\",\n line: \"var(--line)\",\n paper: \"var(--paper)\",\n card: \"var(--card)\",\n accent: \"var(--accent)\",\n accentSoft: \"var(--accent-soft)\",\n warn: \"var(--warn)\",\n warnSoft: \"var(--warn-soft)\",\n ok: \"var(--ok)\",\n okSoft: \"var(--ok-soft)\",\n stroke: \"var(--stroke)\",\n radius: \"var(--radius)\",\n gap: \"var(--gap)\",\n pad: \"var(--pad)\",\n fs: \"var(--fs)\",\n hand: \"var(--font-hand)\",\n script: \"var(--font-script)\",\n} as const;\n\ntype ToneColors = { fg: string; bg: string; bd: string };\n\nfunction toneColors(tone: WireframeTone = \"default\"): ToneColors {\n switch (tone) {\n case \"accent\":\n return { fg: V.accent, bg: V.accentSoft, bd: V.accent };\n case \"warn\":\n return { fg: V.warn, bg: V.warnSoft, bd: V.warn };\n case \"ok\":\n return { fg: V.ok, bg: V.okSoft, bd: V.ok };\n case \"muted\":\n return { fg: V.soft, bg: \"transparent\", bd: V.soft };\n default:\n return { fg: V.ink, bg: \"transparent\", bd: V.ink };\n }\n}\n\nfunction toneInk(tone?: WireframeTone): string {\n return toneColors(tone).fg;\n}\n\nfunction fontWeight(weight?: \"normal\" | \"medium\" | \"bold\"): number {\n if (weight === \"bold\") return 700;\n if (weight === \"medium\") return 600;\n return 400;\n}\n\nexport function Screen({\n children,\n pad = 0,\n sketch,\n density,\n theme,\n skeleton = false,\n style = {},\n}: {\n children?: ReactNode;\n pad?: number | string;\n sketch?: number;\n density?: \"compact\" | \"regular\" | \"roomy\";\n theme?: \"light\" | \"dark\";\n skeleton?: boolean;\n style?: CSSProperties;\n}) {\n const cfg = useContext(KitConfigContext);\n const isSkeleton = skeleton || Boolean(cfg.skeleton);\n const wfStyle = cfg.style ?? \"sketchy\";\n const wfTheme = theme ?? cfg.theme ?? \"light\";\n void sketch;\n return (\n <div\n className=\"plan-wf\"\n data-density={density ?? \"regular\"}\n data-theme={wfTheme}\n data-skeleton={isSkeleton ? \"true\" : undefined}\n data-style={wfStyle}\n style={{\n position: \"relative\",\n width: \"100%\",\n // `minHeight` (not a fixed `height: 100%`) so the screen fills an\n // auto-height artboard's floor yet grows with its content instead of\n // clipping. The frame shell (`ArtboardFrame`) owns the height policy; a\n // caller can still override via `style.height` for a fixed canvas.\n minHeight: \"100%\",\n background: V.paper,\n color: V.ink,\n fontFamily: V.hand,\n fontSize: V.fs,\n lineHeight: 1.25,\n display: \"flex\",\n flexDirection: \"column\",\n padding: pad,\n boxSizing: \"border-box\",\n overflow: \"hidden\",\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function Hand({\n children,\n size,\n weight = 400,\n color = V.ink,\n script = false,\n style = {},\n}: {\n children?: ReactNode;\n size?: number | string;\n weight?: number;\n color?: string;\n script?: boolean;\n style?: CSSProperties;\n}) {\n return (\n <span\n style={{\n fontFamily: script ? V.script : V.hand,\n fontSize: size ?? V.fs,\n fontWeight: weight,\n color,\n minWidth: 0,\n overflowWrap: \"break-word\",\n ...style,\n }}\n >\n {children}\n </span>\n );\n}\n\nexport function Bar({\n w = 80,\n h,\n color = V.line,\n r = 4,\n style = {},\n}: {\n w?: number | string;\n h?: number | string;\n color?: string;\n r?: number | string;\n style?: CSSProperties;\n}) {\n return (\n <div\n style={{\n width: w,\n height: h ?? \"calc(var(--fs) * 0.72)\",\n background: color,\n borderRadius: r,\n flex: \"0 0 auto\",\n ...style,\n }}\n />\n );\n}\n\nexport function Lines({\n n = 2,\n gap = 6,\n widths,\n color = V.line,\n style = {},\n}: {\n n?: number;\n gap?: number;\n widths?: Array<number | string>;\n color?: string;\n style?: CSSProperties;\n}) {\n const ws =\n widths ??\n Array.from({ length: n }, (_, i) => (i === n - 1 ? \"55%\" : \"100%\"));\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap, ...style }}>\n {ws.map((w, i) => (\n <Bar key={i} w={typeof w === \"number\" ? `${w}%` : w} color={color} />\n ))}\n </div>\n );\n}\n\nexport function Box({\n children,\n pad = V.pad,\n fill = V.card,\n dashed = false,\n style = {},\n}: {\n children?: ReactNode;\n pad?: number | string;\n fill?: string;\n dashed?: boolean;\n style?: CSSProperties;\n}) {\n return (\n <div\n data-rough=\"rect\"\n style={{\n [\"--rough-stroke\" as string]: V.ink,\n border: `${V.stroke} ${dashed ? \"dashed\" : \"solid\"} ${V.ink}`,\n borderRadius: V.radius,\n background: fill,\n padding: pad,\n boxSizing: \"border-box\",\n minWidth: 0,\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function Check({\n done = false,\n shape = \"square\",\n size = 18,\n}: {\n done?: boolean;\n shape?: \"square\" | \"circle\";\n size?: number;\n}) {\n const r = shape === \"circle\" ? \"50%\" : \"calc(var(--radius) * 0.5)\";\n return (\n <div\n data-rough={shape === \"circle\" ? \"ellipse\" : \"rect\"}\n style={{\n [\"--rough-stroke\" as string]: done ? V.accent : V.ink,\n width: size,\n height: size,\n flex: \"0 0 auto\",\n borderRadius: r,\n border: `${V.stroke} solid ${done ? V.accent : V.ink}`,\n background: done ? V.accent : \"transparent\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {done && (\n <svg\n width={size * 0.6}\n height={size * 0.6}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"#fff\"\n strokeWidth=\"2.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M2 6.5l2.5 2.5L10 3\" />\n </svg>\n )}\n </div>\n );\n}\n\nexport function Pill({\n children,\n tone = \"default\",\n style = {},\n}: {\n children?: ReactNode;\n tone?: WireframeTone;\n style?: CSSProperties;\n}) {\n const c = toneColors(tone);\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 4,\n border: `${V.stroke} solid ${c.bd}`,\n background: c.bg,\n color: c.fg,\n borderRadius: 999,\n padding: \"2px 9px\",\n fontSize: \"calc(var(--fs) * 0.82)\",\n fontFamily: V.hand,\n maxWidth: \"100%\",\n minWidth: 0,\n whiteSpace: \"normal\",\n overflowWrap: \"anywhere\",\n lineHeight: 1.3,\n ...style,\n }}\n >\n {children}\n </span>\n );\n}\n\nexport function Prio({ level = 2, label }: { level?: number; label?: string }) {\n const fill = level === 1 ? V.warn : level === 2 ? V.soft : \"transparent\";\n const bd = level === 3 ? V.soft : \"transparent\";\n return (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 5 }}>\n <span\n style={{\n width: 9,\n height: 9,\n borderRadius: \"50%\",\n background: fill,\n border: `${V.stroke} solid ${bd}`,\n flex: \"0 0 auto\",\n }}\n />\n {label && (\n <Hand size=\"calc(var(--fs) * 0.82)\" color={V.soft}>\n {label}\n </Hand>\n )}\n </span>\n );\n}\n\nexport function Btn({\n children,\n solid = false,\n full = false,\n size = \"md\",\n tone = \"default\",\n style = {},\n}: {\n children?: ReactNode;\n solid?: boolean;\n full?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n tone?: WireframeTone;\n style?: CSSProperties;\n}) {\n const pad =\n size === \"sm\" ? \"4px 10px\" : size === \"lg\" ? \"10px 18px\" : \"7px 14px\";\n const c = toneColors(tone === \"default\" ? \"accent\" : tone);\n return (\n <div\n data-rough=\"rect\"\n style={{\n [\"--rough-stroke\" as string]: solid ? c.bd : V.ink,\n display: full ? \"flex\" : \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n border: `${V.stroke} solid ${solid ? c.bd : V.ink}`,\n background: solid ? c.bd : \"transparent\",\n color: solid ? \"#fff\" : V.ink,\n borderRadius: V.radius,\n padding: pad,\n fontFamily: V.hand,\n fontSize: V.fs,\n fontWeight: 700,\n width: full ? \"100%\" : \"auto\",\n maxWidth: \"100%\",\n minWidth: 0,\n boxSizing: \"border-box\",\n whiteSpace: \"normal\",\n overflowWrap: \"anywhere\",\n textAlign: \"center\",\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function Chip({\n children,\n active = false,\n style = {},\n}: {\n children?: ReactNode;\n active?: boolean;\n style?: CSSProperties;\n}) {\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 5,\n border: `${V.stroke} solid ${active ? V.accent : V.ink}`,\n background: active ? V.accentSoft : \"transparent\",\n color: active ? V.accent : V.ink,\n borderRadius: 999,\n padding: \"4px 12px\",\n fontSize: \"calc(var(--fs) * 0.88)\",\n fontFamily: V.hand,\n fontWeight: active ? 700 : 400,\n maxWidth: \"100%\",\n minWidth: 0,\n whiteSpace: \"normal\",\n overflowWrap: \"anywhere\",\n ...style,\n }}\n >\n {children}\n </span>\n );\n}\n\nexport function Field({\n label,\n value,\n placeholder,\n h,\n area = false,\n right,\n style = {},\n}: {\n label?: string;\n value?: string;\n placeholder?: number | string;\n h?: number | string;\n area?: boolean;\n right?: ReactNode;\n style?: CSSProperties;\n}) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 5, ...style }}>\n {label && (\n <Hand size=\"calc(var(--fs) * 0.86)\" color={V.soft} weight={700}>\n {label}\n </Hand>\n )}\n <div\n data-rough=\"rect\"\n style={{\n [\"--rough-stroke\" as string]: V.ink,\n border: `${V.stroke} solid ${V.ink}`,\n borderRadius: V.radius,\n background: V.card,\n padding: \"calc(var(--pad) * 0.8)\",\n minHeight: h ?? (area ? 64 : \"auto\"),\n display: \"flex\",\n alignItems: area ? \"flex-start\" : \"center\",\n justifyContent: \"space-between\",\n minWidth: 0,\n gap: 8,\n }}\n >\n {value ? (\n <Hand style={{ minWidth: 0, overflowWrap: \"anywhere\" }}>{value}</Hand>\n ) : area ? (\n <Lines n={2} widths={[\"85%\", \"60%\"]} />\n ) : (\n <Bar w={placeholder ?? 110} />\n )}\n {right}\n </div>\n </div>\n );\n}\n\nexport function StatusBar() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"9px 18px 2px\",\n flex: \"0 0 auto\",\n }}\n >\n <Hand size=\"calc(var(--fs) * 0.82)\" weight={700}>\n 9:41\n </Hand>\n <div style={{ display: \"flex\", gap: 5, alignItems: \"center\" }}>\n <Bar w={16} h={8} color={V.soft} r={2} />\n <Bar w={12} h={8} color={V.soft} r={2} />\n <Bar w={20} h={9} color={V.soft} r={2} />\n </div>\n </div>\n );\n}\n\nexport function Fab({ icon = \"+\" }: { icon?: string }) {\n return (\n <div\n data-rough=\"ellipse\"\n style={{\n [\"--rough-stroke\" as string]: V.accent,\n position: \"absolute\",\n right: 18,\n bottom: 22,\n width: 52,\n height: 52,\n borderRadius: \"50%\",\n border: `${V.stroke} solid ${V.accent}`,\n background: V.accent,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontFamily: V.hand,\n fontSize: 28,\n fontWeight: 700,\n lineHeight: 1,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.16)\",\n zIndex: 4,\n }}\n >\n {icon}\n </div>\n );\n}\n\nexport function BrowserBar({\n title = \"todo\",\n children,\n}: {\n title?: string;\n children?: ReactNode;\n}) {\n return (\n <div\n data-rough=\"line:bottom\"\n style={{\n [\"--rough-stroke\" as string]: V.ink,\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"9px 14px\",\n borderBottom: `${V.stroke} solid ${V.ink}`,\n flex: \"0 0 auto\",\n background: V.card,\n }}\n >\n <div style={{ display: \"flex\", gap: 6 }}>\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n data-rough=\"ellipse\"\n style={{\n [\"--rough-stroke\" as string]: V.ink,\n width: 11,\n height: 11,\n borderRadius: \"50%\",\n border: `${V.stroke} solid ${V.ink}`,\n }}\n />\n ))}\n </div>\n <div\n style={{\n flex: 1,\n border: `${V.stroke} solid ${V.soft}`,\n borderRadius: 999,\n padding: \"3px 12px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}\n >\n <Bar w={12} h={10} color={V.soft} r={3} />\n <Hand size=\"calc(var(--fs) * 0.82)\" color={V.soft}>\n {title}.app\n </Hand>\n </div>\n {children}\n </div>\n );\n}\n\nexport function SectionLabel({\n children,\n right,\n tone = \"muted\",\n}: {\n children?: ReactNode;\n right?: ReactNode;\n tone?: WireframeTone;\n}) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"baseline\",\n justifyContent: \"space-between\",\n minWidth: 0,\n gap: 8,\n }}\n >\n <Hand\n size=\"calc(var(--fs) * 0.9)\"\n weight={700}\n color={toneInk(tone)}\n style={{\n letterSpacing: 0.3,\n minWidth: 0,\n overflowWrap: \"anywhere\",\n }}\n >\n {children}\n </Hand>\n {right}\n </div>\n );\n}\n\nexport function Avatar({ size = 26 }: { size?: number }) {\n return (\n <div\n data-rough=\"ellipse\"\n style={{\n [\"--rough-stroke\" as string]: V.ink,\n width: size,\n height: size,\n borderRadius: \"50%\",\n border: `${V.stroke} solid ${V.ink}`,\n background: V.accentSoft,\n flex: \"0 0 auto\",\n }}\n />\n );\n}\n\nexport function IconSquare({\n size = 18,\n active = false,\n}: {\n size?: number;\n active?: boolean;\n}) {\n return (\n <div\n data-rough=\"rect\"\n style={{\n [\"--rough-stroke\" as string]: active ? V.accent : V.soft,\n width: size,\n height: size,\n flex: \"0 0 auto\",\n borderRadius: \"calc(var(--radius) * 0.5)\",\n border: `${V.stroke} solid ${active ? V.accent : V.soft}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <div\n style={{\n width: \"55%\",\n height: \"55%\",\n borderRadius: 2,\n background: active ? V.accent : V.line,\n }}\n />\n </div>\n );\n}\n\nexport function NavItem({\n label,\n count,\n active = false,\n dot = false,\n tone = \"accent\",\n}: {\n label?: string;\n count?: number;\n active?: boolean;\n dot?: boolean;\n tone?: WireframeTone;\n}) {\n const dotColor = toneInk(tone);\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 9,\n padding: \"5px 8px\",\n borderRadius: V.radius,\n background: active ? V.accentSoft : \"transparent\",\n minWidth: 0,\n }}\n >\n {dot ? (\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: \"50%\",\n border: `${V.stroke} solid ${dotColor}`,\n background: dotColor,\n flex: \"0 0 auto\",\n }}\n />\n ) : (\n <IconSquare size={15} active={active} />\n )}\n <Hand\n color={active ? V.accent : V.ink}\n weight={active ? 700 : 400}\n style={{ flex: 1, minWidth: 0 }}\n >\n {label}\n </Hand>\n {count != null && (\n <Hand size=\"calc(var(--fs) * 0.82)\" color={V.soft}>\n {count}\n </Hand>\n )}\n </div>\n );\n}\n\nexport function Sidebar({\n children,\n width = 196,\n style = {},\n}: {\n children?: ReactNode;\n width?: number;\n style?: CSSProperties;\n}) {\n return (\n <div\n data-rough=\"line:right\"\n style={{\n [\"--rough-stroke\" as string]: V.ink,\n width,\n flex: \"0 0 auto\",\n borderRight: `${V.stroke} solid ${V.ink}`,\n background: V.card,\n padding: V.pad,\n display: \"flex\",\n flexDirection: \"column\",\n gap: V.gap,\n minHeight: 0,\n minWidth: 0,\n alignSelf: \"stretch\",\n overflow: \"hidden\",\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function Main({\n children,\n style = {},\n}: {\n children?: ReactNode;\n style?: CSSProperties;\n}) {\n return (\n <div\n style={{\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n padding: \"18px 24px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: V.gap,\n overflow: \"hidden\",\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function Row({\n children,\n full = false,\n style = {},\n}: {\n children?: ReactNode;\n full?: boolean;\n style?: CSSProperties;\n}) {\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"stretch\",\n gap: V.gap,\n minWidth: 0,\n minHeight: 0,\n maxWidth: \"100%\",\n flex: full ? 1 : undefined,\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function Col({\n children,\n full = false,\n style = {},\n}: {\n children?: ReactNode;\n full?: boolean;\n style?: CSSProperties;\n}) {\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: V.gap,\n minWidth: 0,\n minHeight: 0,\n flex: full ? 1 : undefined,\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function TaskRow({\n title,\n note,\n due,\n dueTone = \"default\",\n prio,\n done = false,\n}: {\n title?: string;\n note?: string;\n due?: string;\n dueTone?: WireframeTone;\n prio?: number;\n done?: boolean;\n}) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: V.gap,\n padding: \"calc(var(--pad) * 0.55) 0\",\n minWidth: 0,\n }}\n >\n <div style={{ marginTop: 1 }}>\n <Check done={done} />\n </div>\n <div\n style={{\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 4,\n }}\n >\n <Hand\n color={done ? V.soft : V.ink}\n style={done ? { textDecoration: \"line-through\" } : undefined}\n >\n {title}\n </Hand>\n {note && (\n <Hand size=\"calc(var(--fs) * 0.85)\" color={V.soft}>\n {note}\n </Hand>\n )}\n </div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n justifyContent: \"flex-end\",\n gap: 8,\n flex: \"0 0 auto\",\n }}\n >\n {due && <Pill tone={dueTone}>{due}</Pill>}\n {prio ? <Prio level={prio} /> : null}\n </div>\n </div>\n );\n}\n\nexport function Card({\n children,\n style = {},\n}: {\n children?: ReactNode;\n style?: CSSProperties;\n}) {\n return (\n <Box\n pad=\"calc(var(--pad) * 0.9)\"\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n background: V.card,\n minWidth: 0,\n maxWidth: \"100%\",\n ...style,\n }}\n >\n {children}\n </Box>\n );\n}\n\nexport function Column({\n title,\n count,\n tone = \"muted\",\n width = 232,\n children,\n}: {\n title?: string;\n count?: number;\n tone?: WireframeTone;\n width?: number;\n children?: ReactNode;\n}) {\n return (\n <div\n style={{\n width,\n flex: \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: V.gap,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <span\n style={{\n width: 9,\n height: 9,\n borderRadius: \"50%\",\n background: toneInk(tone),\n flex: \"0 0 auto\",\n }}\n />\n <Hand weight={700} style={{ whiteSpace: \"nowrap\" }}>\n {title}\n </Hand>\n {count != null && (\n <Hand size=\"calc(var(--fs) * 0.82)\" color={V.soft}>\n {count}\n </Hand>\n )}\n <div style={{ flex: 1 }} />\n <Hand color={V.soft} weight={700}>\n +\n </Hand>\n </div>\n {children}\n </div>\n );\n}\n\nexport function Toolbar({\n children,\n style = {},\n}: {\n children?: ReactNode;\n style?: CSSProperties;\n}) {\n return (\n <div\n data-rough=\"line:bottom\"\n style={{\n [\"--rough-stroke\" as string]: V.ink,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: V.gap,\n padding: \"12px 22px\",\n borderBottom: `${V.stroke} solid ${V.ink}`,\n background: V.card,\n flex: \"0 0 auto\",\n minWidth: 0,\n flexWrap: \"wrap\",\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function Tabs({\n items = [],\n}: {\n items?: Array<{ label: string; active?: boolean }>;\n}) {\n return (\n <div style={{ display: \"flex\", gap: 7, flexWrap: \"wrap\" }}>\n {items.map((item, i) => (\n <Chip key={i} active={item.active}>\n {item.label}\n </Chip>\n ))}\n </div>\n );\n}\n\nexport function KV({ rows = [] }: { rows?: Array<{ k: string; v: string }> }) {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n {rows.map((row, i) => (\n <div\n key={i}\n style={{\n display: \"flex\",\n alignItems: \"baseline\",\n justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n <Hand size=\"calc(var(--fs) * 0.88)\" color={V.soft}>\n {row.k}\n </Hand>\n <Hand\n style={{ textAlign: \"right\", minWidth: 0, wordBreak: \"break-word\" }}\n >\n {row.v}\n </Hand>\n </div>\n ))}\n </div>\n );\n}\n\nexport function SearchBar({\n placeholder = \"Search\",\n}: {\n placeholder?: string;\n}) {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n border: `${V.stroke} solid ${V.soft}`,\n borderRadius: 999,\n padding: \"5px 11px\",\n background: V.card,\n }}\n >\n <Bar w={11} h={11} color={V.soft} r={3} />\n <Hand size=\"calc(var(--fs) * 0.85)\" color={V.soft}>\n {placeholder}\n </Hand>\n </div>\n );\n}\n\nexport function Divider({ style = {} }: { style?: CSSProperties }) {\n return (\n <div\n style={{\n height: V.stroke,\n background: V.line,\n flex: \"0 0 auto\",\n margin: \"3px 0\",\n ...style,\n }}\n />\n );\n}\n\nexport function Title({\n text,\n script = false,\n size = \"calc(var(--fs) * 2)\",\n color = V.ink,\n}: {\n text?: string;\n script?: boolean;\n size?: number | string;\n color?: string;\n}) {\n return (\n <Hand script={script} size={size} weight={700} color={color}>\n {text}\n </Hand>\n );\n}\n\nexport function Text({\n value,\n color,\n weight,\n script = false,\n}: {\n value?: string;\n color?: WireframeTone;\n weight?: \"normal\" | \"medium\" | \"bold\";\n script?: boolean;\n}) {\n return (\n <Hand color={toneInk(color)} weight={fontWeight(weight)} script={script}>\n {value}\n </Hand>\n );\n}\n\n/* ========================================================================== */\n/* Node registry (ported from kit/registry.tsx) */\n/* ========================================================================== */\n\ntype NodeRenderer = (node: WireframeNode, children: ReactNode) => ReactNode;\n\nconst REGISTRY: Record<WireframeElName, NodeRenderer> = {\n // --- Frame / structure -------------------------------------------------\n screen: (n) => {\n const kids = n.children ?? [];\n const lead = kids[0]?.el;\n if (lead === \"browserBar\") {\n return (\n <Screen pad={0}>\n {renderNode(kids[0], kids[0].id ?? \"browserbar\")}\n {renderScreenBodyNodes(kids.slice(1))}\n </Screen>\n );\n }\n if (lead === \"statusBar\") {\n return (\n <Screen pad={0}>\n {renderNode(kids[0], kids[0].id ?? \"statusbar\")}\n <div\n style={{\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--gap)\",\n padding: \"calc(var(--pad) * 1.1)\",\n }}\n >\n {renderScreenBodyNodes(kids.slice(1))}\n </div>\n </Screen>\n );\n }\n return (\n <Screen pad=\"calc(var(--pad) * 1.35)\">\n {renderScreenBodyNodes(kids)}\n </Screen>\n );\n },\n browserBar: (n, children) => (\n <BrowserBar title={n.title ?? n.text}>{children}</BrowserBar>\n ),\n statusBar: () => <StatusBar />,\n toolbar: (_n, children) => <Toolbar>{children}</Toolbar>,\n row: (n, children) => <Row full={n.full}>{children}</Row>,\n col: (n, children) => <Col full={n.full}>{children}</Col>,\n sidebar: (_n, children) => <Sidebar>{children}</Sidebar>,\n main: (_n, children) => <Main>{children}</Main>,\n box: (n, children) => <Box dashed={n.dashed}>{children}</Box>,\n card: (_n, children) => <Card>{children}</Card>,\n column: (n, children) => (\n <Column title={n.title ?? n.text} count={n.count} tone={n.tone}>\n {children}\n </Column>\n ),\n divider: () => <Divider />,\n\n // --- Text --------------------------------------------------------------\n title: (n) => <Title text={n.text} script={n.script} />,\n text: (n) => (\n <Text\n value={n.value ?? n.text}\n color={n.color}\n weight={n.weight}\n script={n.script}\n />\n ),\n lines: (n) => <Lines n={n.n} widths={n.widths} />,\n section: (n) => (\n <SectionLabel tone={n.tone}>{n.label ?? n.text}</SectionLabel>\n ),\n\n // --- List / task -------------------------------------------------------\n navItem: (n) => (\n <NavItem\n label={n.label ?? n.text}\n count={n.count}\n active={n.active}\n dot={n.dot}\n tone={n.tone}\n />\n ),\n taskRow: (n) => (\n <TaskRow\n title={n.title ?? n.text}\n note={n.note}\n due={n.due}\n dueTone={n.dueTone}\n prio={n.prio}\n done={n.done}\n />\n ),\n\n // --- Controls ----------------------------------------------------------\n chips: (n) => <Tabs items={n.items ?? []} />,\n chip: (n) => <Chip active={n.active}>{n.label ?? n.text}</Chip>,\n pill: (n) => <Pill tone={n.tone}>{n.label ?? n.text}</Pill>,\n check: (n) => <Check done={n.done} shape={n.shape} />,\n field: (n) => (\n <Field\n label={n.label}\n value={n.value}\n placeholder={n.placeholder}\n area={n.area}\n />\n ),\n btn: (n) => (\n <Btn solid={n.solid} full={n.full} tone={n.tone}>\n {n.label ?? n.text}\n </Btn>\n ),\n fab: (n) => <Fab icon={n.icon} />,\n searchBar: (n) => <SearchBar placeholder={n.placeholder} />,\n\n // --- Atoms -------------------------------------------------------------\n avatar: () => <Avatar />,\n iconSquare: (n) => <IconSquare active={n.active} />,\n kv: (n) => <KV rows={n.rows ?? []} />,\n};\n\nfunction renderScreenBodyNode(\n node: WireframeNode,\n key?: string | number,\n): ReactNode {\n const shouldFill =\n node.full !== false &&\n (node.el === \"row\" || node.el === \"col\" || node.el === \"main\");\n return renderNode(shouldFill ? { ...node, full: true } : node, key);\n}\n\nfunction renderScreenBodyNodes(nodes: WireframeNode[]): ReactNode {\n return nodes.map((node, i) =>\n renderScreenBodyNode(node, node.id ?? `screen-body-${i}`),\n );\n}\n\n/** Render a single kit-tree node (and its children, recursively). */\nexport function renderNode(\n node: WireframeNode,\n key?: string | number,\n): ReactNode {\n const renderer = REGISTRY[node.el];\n const children = node.children?.length ? renderNodes(node.children) : null;\n if (!renderer) {\n return children ? <div key={key}>{children}</div> : null;\n }\n const rendered = renderer(node, children);\n return <KeyedNode key={key ?? node.id}>{rendered}</KeyedNode>;\n}\n\n/** Render an array of nodes. */\nexport function renderNodes(nodes: WireframeNode[]): ReactNode {\n return nodes.map((node, i) => renderNode(node, node.id ?? i));\n}\n\n/** Lightweight keyed wrapper that does not introduce extra DOM. */\nfunction KeyedNode({ children }: { children: ReactNode }) {\n return <>{children}</>;\n}\n\n/** Whether an `el` name has a registered renderer. */\nexport function hasRenderer(el: string): el is WireframeElName {\n return el in REGISTRY;\n}\n\nexport { REGISTRY as NODE_REGISTRY, V as WFV, toneColors, toneInk, fontWeight };\n\n/* ========================================================================== */\n/* Rough overlay (ported from kit/rough.tsx) */\n/* ========================================================================== */\n\nconst gen = rough.generator();\n\ntype RoughPath = { d: string; stroke: string; strokeWidth: number };\n\n/** The default selector used for HTML mockups: bordered/box-like elements. */\nexport const HTML_ROUGH_SELECTOR =\n \"[data-rough],button,input,textarea,select,.wf-card,.wf-box,hr,.wf-frame-target\";\n\n/** Stable per-element seed so a frame doesn't re-wobble on every measure. */\nfunction seedFrom(...parts: Array<string | number>): number {\n const value = parts.join(\":\");\n let hash = 2166136261;\n for (let i = 0; i < value.length; i++) {\n hash ^= value.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return ((hash >>> 0) % 2147483646) + 1;\n}\n\n/** Map the 0–100 sketch slider to a rough.js roughness (calm + legible). */\nexport function sketchRoughness(sketch: number): number {\n const s = Math.max(0, Math.min(100, Number.isFinite(sketch) ? sketch : 0));\n return Number((0.32 + (s / 100) * 1.15).toFixed(2));\n}\n\nfunction sketchBowing(sketch: number): number {\n const s = Math.max(0, Math.min(100, Number.isFinite(sketch) ? sketch : 0));\n return Number((0.4 + (s / 100) * 0.5).toFixed(2));\n}\n\nfunction readVar(el: Element, name: string): string {\n return getComputedStyle(el).getPropertyValue(name).trim();\n}\n\n/** Normalize a CSS color (hex or rgb[a]) to \"r,g,b\" for equality comparison. */\nfunction toRgbKey(color: string): string | null {\n const c = color.trim();\n const hex = c.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);\n if (hex) {\n const h = hex[1];\n const full =\n h.length === 3\n ? h\n .split(\"\")\n .map((d) => d + d)\n .join(\"\")\n : h;\n const n = parseInt(full, 16);\n return `${(n >> 16) & 255},${(n >> 8) & 255},${n & 255}`;\n }\n const rgb = c.match(/rgba?\\(([^)]+)\\)/i);\n if (rgb) {\n const [r, g, b] = rgb[1].split(\",\").map((v) => parseInt(v.trim(), 10));\n return `${r},${g},${b}`;\n }\n return null;\n}\n\n/** True when two CSS colors resolve to the same RGB (hex vs rgb tolerant). */\nfunction sameColor(a: string, b: string): boolean {\n const ka = toRgbKey(a);\n const kb = toRgbKey(b);\n return ka !== null && ka === kb;\n}\n\n/** A rounded-rect SVG path (so the frame stroke follows the artboard radius). */\nfunction roundedRectPath(\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n): string {\n const rad = Math.max(0, Math.min(r, w / 2, h / 2));\n return [\n `M${x + rad},${y}`,\n `H${x + w - rad}`,\n `A${rad},${rad} 0 0 1 ${x + w},${y + rad}`,\n `V${y + h - rad}`,\n `A${rad},${rad} 0 0 1 ${x + w - rad},${y + h}`,\n `H${x + rad}`,\n `A${rad},${rad} 0 0 1 ${x},${y + h - rad}`,\n `V${y + rad}`,\n `A${rad},${rad} 0 0 1 ${x + rad},${y}`,\n \"Z\",\n ].join(\" \");\n}\n\nfunction elementStroke(node: Element, fallback: string): string {\n const explicit = readVar(node, \"--rough-stroke\");\n if (explicit) return explicit;\n const cs = getComputedStyle(node);\n for (const side of [\n \"borderTopColor\",\n \"borderLeftColor\",\n \"borderBottomColor\",\n \"borderRightColor\",\n ] as const) {\n const width = parseFloat(\n cs.getPropertyValue(side.replace(\"Color\", \"Width\")),\n );\n const color = cs[side];\n if (width > 0 && color && color !== \"rgba(0, 0, 0, 0)\") return color;\n }\n return fallback;\n}\n\nfunction build(\n scope: HTMLElement,\n opts: {\n roughness: number;\n bowing: number;\n frameRadius: number;\n drawFrame: boolean;\n selector: string;\n },\n): { paths: RoughPath[]; w: number; h: number } {\n const base = scope.getBoundingClientRect();\n const layoutW = scope.offsetWidth;\n const layoutH = scope.offsetHeight;\n if (!layoutW || !layoutH) return { paths: [], w: 0, h: 0 };\n const zoom = base.width / layoutW || 1;\n\n const themed =\n (scope.matches(\".plan-wf, .plan-html-frame, .plan-diagram-frame\")\n ? scope\n : scope.querySelector(\n \".plan-wf, .plan-html-frame, .plan-diagram-frame\",\n )) ?? scope;\n const ink =\n readVar(themed, \"--ink\") || readVar(themed, \"--wf-ink\") || \"#34322e\";\n const sketch = readVar(themed, \"--wf-sketch\") || ink;\n const line = readVar(themed, \"--wf-line\") || readVar(themed, \"--line\") || \"\";\n\n const paths: RoughPath[] = [];\n let index = 0;\n const push = (drawable: unknown, stroke: string, sw: number) => {\n for (const p of gen.toPaths(\n drawable as Parameters<typeof gen.toPaths>[0],\n )) {\n paths.push({\n d: p.d,\n stroke: p.stroke && p.stroke !== \"none\" ? p.stroke : stroke,\n strokeWidth: p.strokeWidth || sw,\n });\n }\n };\n const makeOpts = (stroke: string, sw: number, seed: number) => ({\n seed,\n roughness: opts.roughness,\n bowing: opts.bowing,\n stroke,\n strokeWidth: sw,\n preserveVertices: true,\n });\n\n if (opts.drawFrame) {\n const sw = 2;\n push(\n gen.path(\n roundedRectPath(2, 2, layoutW - 4, layoutH - 4, opts.frameRadius),\n {\n ...makeOpts(sketch, sw, seedFrom(\"frame\", layoutW, layoutH)),\n roughness: opts.roughness + 0.35,\n bowing: opts.bowing + 0.18,\n },\n ),\n sketch,\n sw,\n );\n }\n\n scope.querySelectorAll<HTMLElement>(opts.selector).forEach((node) => {\n const r = node.getBoundingClientRect();\n const x = (r.left - base.left) / zoom;\n const y = (r.top - base.top) / zoom;\n const w = r.width / zoom;\n const h = r.height / zoom;\n if (w < 2 || h < 2) return;\n const kind = node.getAttribute(\"data-rough\") || \"rect\";\n const rawStroke = elementStroke(node, sketch);\n const stroke =\n sameColor(rawStroke, ink) || (line !== \"\" && sameColor(rawStroke, line))\n ? sketch\n : rawStroke;\n const sw = Number(readVar(node, \"--rough-w\")) || 1.4;\n const seed = seedFrom(\n kind,\n Math.round(x),\n Math.round(y),\n Math.round(w),\n Math.round(h),\n index++,\n );\n const o = makeOpts(stroke, sw, seed);\n let drawable: unknown;\n if (kind === \"ellipse\") {\n drawable = gen.ellipse(x + w / 2, y + h / 2, w, h, o);\n } else if (kind === \"line:right\") {\n drawable = gen.line(x + w, y, x + w, y + h, o);\n } else if (kind === \"line:bottom\") {\n drawable = gen.line(x, y + h, x + w, y + h, o);\n } else if (kind === \"line:top\" || node.tagName === \"HR\") {\n drawable = gen.line(x, y + h / 2, x + w, y + h / 2, o);\n } else {\n const cr = parseFloat(getComputedStyle(node).borderTopLeftRadius) || 0;\n const radius = Math.min(cr / zoom, w / 2, h / 2);\n drawable =\n radius > 1\n ? gen.path(roundedRectPath(x + 1, y + 1, w - 2, h - 2, radius), o)\n : gen.rectangle(x + 1, y + 1, w - 2, h - 2, o);\n }\n push(drawable, stroke, sw);\n });\n\n return { paths, w: layoutW, h: layoutH };\n}\n\n/**\n * Renders the rough overlay for a frame. `scopeRef` points at the frame root.\n * When `enabled` is false (skeleton / clean register) it renders nothing and the\n * crisp CSS borders stay visible.\n */\nexport function RoughOverlay({\n scopeRef,\n sketch = 52,\n enabled = true,\n drawFrame = true,\n frameRadius = 14,\n selector = \"[data-rough]\",\n}: {\n scopeRef: RefObject<HTMLElement | null>;\n sketch?: number;\n enabled?: boolean;\n drawFrame?: boolean;\n frameRadius?: number;\n selector?: string;\n}) {\n const [state, setState] = useState<{\n paths: RoughPath[];\n w: number;\n h: number;\n }>({ paths: [], w: 0, h: 0 });\n const rafRef = useRef(0);\n\n useEffect(() => {\n const el = scopeRef.current;\n if (!el || !enabled) {\n el?.removeAttribute(\"data-rough-ready\");\n el?.querySelector(\n \".plan-wf, .plan-html-frame, .plan-diagram-frame\",\n )?.removeAttribute(\"data-rough-ready\");\n setState({ paths: [], w: 0, h: 0 });\n return;\n }\n const roughness = sketchRoughness(sketch);\n const bowing = sketchBowing(sketch);\n const measure = () => {\n clearTimeout(rafRef.current);\n rafRef.current = window.setTimeout(() => {\n const next = build(el, {\n roughness,\n bowing,\n frameRadius,\n drawFrame,\n selector,\n });\n if (next.w && next.h) {\n el.setAttribute(\"data-rough-ready\", \"true\");\n (\n el.querySelector(\n \".plan-wf, .plan-html-frame, .plan-diagram-frame\",\n ) ?? el\n ).setAttribute(\"data-rough-ready\", \"true\");\n setState(next);\n }\n }, 0);\n };\n measure();\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n el.querySelectorAll(selector).forEach((node) => ro.observe(node));\n const mo = new MutationObserver((mutations) => {\n if (mutations.every(isRoughOverlayMutation)) return;\n measure();\n });\n mo.observe(el, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n });\n el.addEventListener(\"plan-prototype-runtime:rendered\", measure);\n let cancelled = false;\n if (typeof document !== \"undefined\" && \"fonts\" in document) {\n void document.fonts.ready.then(() => {\n if (!cancelled) measure();\n });\n }\n return () => {\n cancelled = true;\n ro.disconnect();\n mo.disconnect();\n el.removeEventListener(\"plan-prototype-runtime:rendered\", measure);\n clearTimeout(rafRef.current);\n el.removeAttribute(\"data-rough-ready\");\n el.querySelector(\n \".plan-wf, .plan-html-frame, .plan-diagram-frame\",\n )?.removeAttribute(\"data-rough-ready\");\n };\n }, [scopeRef, sketch, enabled, drawFrame, frameRadius, selector]);\n\n if (!enabled || !state.paths.length) return null;\n return (\n <svg\n aria-hidden\n className=\"plan-rough-overlay\"\n width=\"100%\"\n height=\"100%\"\n viewBox={`0 0 ${state.w} ${state.h}`}\n preserveAspectRatio=\"none\"\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n overflow: \"hidden\",\n zIndex: 3,\n }}\n >\n {state.paths.map((p, i) => (\n <path\n key={i}\n d={p.d}\n fill=\"none\"\n stroke={p.stroke}\n strokeWidth={p.strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n ))}\n </svg>\n );\n}\n\nfunction isRoughOverlayMutation(mutation: MutationRecord) {\n if (nodeIsRoughOverlay(mutation.target)) return true;\n\n const changedNodes = [\n ...Array.from(mutation.addedNodes),\n ...Array.from(mutation.removedNodes),\n ];\n return changedNodes.length > 0 && changedNodes.every(nodeIsRoughOverlay);\n}\n\nfunction nodeIsRoughOverlay(node: Node) {\n const element = node instanceof Element ? node : node.parentElement;\n return Boolean(\n element?.classList.contains(\"plan-rough-overlay\") ||\n element?.closest(\".plan-rough-overlay\"),\n );\n}\n"]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { BlockMdxConfig } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Pure (React-free) part of the shared `wireframe` block: its data shape, zod
|
|
5
|
+
* schema, the stable node-id helper, and the nested-MDX round-trip config. Lives
|
|
6
|
+
* in core so BOTH apps' server/shared registries and the client spec
|
|
7
|
+
* (`wireframe.tsx`) consume one definition; importing it into a server module
|
|
8
|
+
* never pulls React into the Nitro/SSR bundle.
|
|
9
|
+
*
|
|
10
|
+
* The wireframe block originated in the plan template. The vocabulary
|
|
11
|
+
* (`PlanWireframe*` names, the `el` set, the `--wf-*` token contract) and the
|
|
12
|
+
* MDX encoding (`<WireframeBlock>…<Screen>…</Screen></WireframeBlock>` with kit
|
|
13
|
+
* component names `FrameScreen`/`Row`/`Col`/…) are preserved EXACTLY so stored
|
|
14
|
+
* plans round-trip byte-compatibly and existing node ids never change.
|
|
15
|
+
*
|
|
16
|
+
* The wireframe is NESTED MDX, not a flat-attribute or prose block: its body is
|
|
17
|
+
* a `<Screen surface caption>…kit-tree…</Screen>` subtree. So the config uses
|
|
18
|
+
* `serializeChildren`/`parseChildren` (the registry's nested-MDX path) rather
|
|
19
|
+
* than `toAttrs`/`childrenField`.
|
|
20
|
+
*/
|
|
21
|
+
export type WireframeSurface = "desktop" | "mobile" | "popover" | "panel" | "browser";
|
|
22
|
+
export type WireframeRenderMode = "wireframe" | "design";
|
|
23
|
+
/** Tone keyword reused across screen primitives. The renderer maps to color. */
|
|
24
|
+
export type WireframeTone = "default" | "accent" | "warn" | "ok" | "muted";
|
|
25
|
+
/**
|
|
26
|
+
* Names of the kit primitives. Component-like (MDX-friendly). The renderer maps
|
|
27
|
+
* each to a flex kit component. Layout is ALWAYS flex; row/col/sidebar/main set
|
|
28
|
+
* the flex direction.
|
|
29
|
+
*/
|
|
30
|
+
export type WireframeElName = "screen" | "browserBar" | "statusBar" | "toolbar" | "row" | "col" | "sidebar" | "navItem" | "main" | "title" | "text" | "lines" | "section" | "taskRow" | "chips" | "chip" | "pill" | "check" | "field" | "btn" | "fab" | "card" | "column" | "avatar" | "iconSquare" | "kv" | "searchBar" | "box" | "divider";
|
|
31
|
+
/**
|
|
32
|
+
* A single node in the wireframe kit tree. `el` is the primitive name; the
|
|
33
|
+
* remaining props are the union of every primitive's props (kept permissive so
|
|
34
|
+
* the model can compose freely). `children` nests other nodes. `id` is a stable
|
|
35
|
+
* node id used by node-addressable patch ops (auto-assigned on create).
|
|
36
|
+
*
|
|
37
|
+
* There is intentionally NO x/y/width/height here — wireframe internals are
|
|
38
|
+
* geometry-free and laid out by the renderer with flex.
|
|
39
|
+
*/
|
|
40
|
+
export type WireframeNode = {
|
|
41
|
+
/** Stable id for node-addressable patches; auto-assigned when absent. */
|
|
42
|
+
id?: string;
|
|
43
|
+
el: WireframeElName;
|
|
44
|
+
children?: WireframeNode[];
|
|
45
|
+
text?: string;
|
|
46
|
+
value?: string;
|
|
47
|
+
label?: string;
|
|
48
|
+
placeholder?: string;
|
|
49
|
+
title?: string;
|
|
50
|
+
tone?: WireframeTone;
|
|
51
|
+
color?: WireframeTone;
|
|
52
|
+
weight?: "normal" | "medium" | "bold";
|
|
53
|
+
active?: boolean;
|
|
54
|
+
done?: boolean;
|
|
55
|
+
emphasis?: boolean;
|
|
56
|
+
full?: boolean;
|
|
57
|
+
solid?: boolean;
|
|
58
|
+
dashed?: boolean;
|
|
59
|
+
dot?: boolean;
|
|
60
|
+
script?: boolean;
|
|
61
|
+
area?: boolean;
|
|
62
|
+
shape?: "square" | "circle";
|
|
63
|
+
count?: number;
|
|
64
|
+
prio?: number;
|
|
65
|
+
n?: number;
|
|
66
|
+
widths?: number[];
|
|
67
|
+
icon?: string;
|
|
68
|
+
note?: string;
|
|
69
|
+
due?: string;
|
|
70
|
+
dueTone?: WireframeTone;
|
|
71
|
+
items?: Array<{
|
|
72
|
+
label: string;
|
|
73
|
+
active?: boolean;
|
|
74
|
+
count?: number;
|
|
75
|
+
dot?: boolean;
|
|
76
|
+
}>;
|
|
77
|
+
rows?: Array<{
|
|
78
|
+
k: string;
|
|
79
|
+
v: string;
|
|
80
|
+
}>;
|
|
81
|
+
};
|
|
82
|
+
export interface WireframeData {
|
|
83
|
+
surface: WireframeSurface;
|
|
84
|
+
/** `design` renders full-fidelity branded HTML/CSS instead of a sketch. */
|
|
85
|
+
renderMode?: WireframeRenderMode;
|
|
86
|
+
caption?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Neutral, textless loading register. The renderer drops borders, the sketch
|
|
89
|
+
* outline, and color, rendering soft placeholder geometry only.
|
|
90
|
+
*/
|
|
91
|
+
skeleton?: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* PRIMARY content: a self-contained HTML mockup of the screen (sanitized
|
|
94
|
+
* fragment — no document/script/style tags). The renderer owns the surface
|
|
95
|
+
* aspect, the dark/light theme, the hand-drawn font, and the rough overlay.
|
|
96
|
+
* When `html` is set, `screen` is ignored.
|
|
97
|
+
*/
|
|
98
|
+
html?: string;
|
|
99
|
+
/** Optional scoped CSS for the html mockup (sanitized fragment). */
|
|
100
|
+
css?: string;
|
|
101
|
+
/** Kit-tree screen. Used when `html` is absent. */
|
|
102
|
+
screen?: WireframeNode[];
|
|
103
|
+
}
|
|
104
|
+
export declare const WIREFRAME_SURFACES: WireframeSurface[];
|
|
105
|
+
export declare const WIREFRAME_EL_NAMES: WireframeElName[];
|
|
106
|
+
export declare const wireframeSchema: z.ZodType<WireframeData>;
|
|
107
|
+
/**
|
|
108
|
+
* Derive a stable node id from the element name and tree path. Re-runs identically
|
|
109
|
+
* to the legacy plan derivation so stored plans round-trip without changing ids.
|
|
110
|
+
*/
|
|
111
|
+
export declare function createStableWireframeNodeId(el: WireframeElName, path: string): string;
|
|
112
|
+
/**
|
|
113
|
+
* Registry MDX config for the wireframe block. `tag` matches the legacy
|
|
114
|
+
* `WireframeBlock`. The block has no flat attributes (`toAttrs` → `{}`); all data
|
|
115
|
+
* lives in the nested `<Screen>` subtree handled by `serializeChildren` /
|
|
116
|
+
* `parseChildren`. The registry serializer wraps `serializeChildren` between the
|
|
117
|
+
* `<WireframeBlock>` open/close, producing the exact legacy bytes. On parse, the
|
|
118
|
+
* registry passes the already-extended `${idContext}-${blockId}` to
|
|
119
|
+
* `parseChildren` — the same id base the legacy `parseScreen` receives — so node
|
|
120
|
+
* ids are reproduced identically.
|
|
121
|
+
*/
|
|
122
|
+
export declare const wireframeMdx: BlockMdxConfig<WireframeData>;
|
|
123
|
+
//# sourceMappingURL=wireframe.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireframe.config.d.ts","sourceRoot":"","sources":["../../../../src/client/blocks/library/wireframe.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEzD,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;AAE3E;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,SAAS,GACT,KAAK,GACL,KAAK,GACL,SAAS,GACT,SAAS,GACT,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,KAAK,GACL,KAAK,GACL,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,IAAI,GACJ,WAAW,GACX,KAAK,GACL,SAAS,CAAC;AAEd;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,yEAAyE;IACzE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,eAAe,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAG3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAG5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,aAAa,CAAC;IAGxB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAMhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA8B/C,CAAC;AAkFF,eAAO,MAAM,eAAe,EAuBG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAMxD;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,eAAe,EACnB,IAAI,EAAE,MAAM,GACX,MAAM,CAMR;AAyKD;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,aAAa,CAWtD,CAAC"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { prop, attributeValue } from "../mdx.js";
|
|
3
|
+
export const WIREFRAME_SURFACES = [
|
|
4
|
+
"desktop",
|
|
5
|
+
"mobile",
|
|
6
|
+
"popover",
|
|
7
|
+
"panel",
|
|
8
|
+
"browser",
|
|
9
|
+
];
|
|
10
|
+
export const WIREFRAME_EL_NAMES = [
|
|
11
|
+
"screen",
|
|
12
|
+
"browserBar",
|
|
13
|
+
"statusBar",
|
|
14
|
+
"toolbar",
|
|
15
|
+
"row",
|
|
16
|
+
"col",
|
|
17
|
+
"sidebar",
|
|
18
|
+
"navItem",
|
|
19
|
+
"main",
|
|
20
|
+
"title",
|
|
21
|
+
"text",
|
|
22
|
+
"lines",
|
|
23
|
+
"section",
|
|
24
|
+
"taskRow",
|
|
25
|
+
"chips",
|
|
26
|
+
"chip",
|
|
27
|
+
"pill",
|
|
28
|
+
"check",
|
|
29
|
+
"field",
|
|
30
|
+
"btn",
|
|
31
|
+
"fab",
|
|
32
|
+
"card",
|
|
33
|
+
"column",
|
|
34
|
+
"avatar",
|
|
35
|
+
"iconSquare",
|
|
36
|
+
"kv",
|
|
37
|
+
"searchBar",
|
|
38
|
+
"box",
|
|
39
|
+
"divider",
|
|
40
|
+
];
|
|
41
|
+
/* -------------------------------------------------------------------------- */
|
|
42
|
+
/* Schema (mirrors the plan-content wireframeDataSchema) */
|
|
43
|
+
/* -------------------------------------------------------------------------- */
|
|
44
|
+
const toneSchema = z.enum(["default", "accent", "warn", "ok", "muted"]);
|
|
45
|
+
const elNameSchema = z.enum(WIREFRAME_EL_NAMES);
|
|
46
|
+
const idSchema = z.string().trim().min(1).max(120);
|
|
47
|
+
/**
|
|
48
|
+
* Reject full-document HTML (html/head/body/script/style tags) in the `html` /
|
|
49
|
+
* `css` fields. Wireframe content must be a bounded fragment; document or script
|
|
50
|
+
* tags are a stored-XSS and layout-escape hazard.
|
|
51
|
+
*/
|
|
52
|
+
function noFullHtmlDocument(value) {
|
|
53
|
+
return !/<\s*(?:!doctype|html|head|body|script|style)\b/i.test(value);
|
|
54
|
+
}
|
|
55
|
+
const wireframeNodeSchema = z.lazy(() => z
|
|
56
|
+
.object({
|
|
57
|
+
id: idSchema.optional(),
|
|
58
|
+
el: elNameSchema,
|
|
59
|
+
children: z.array(wireframeNodeSchema).max(60).optional(),
|
|
60
|
+
text: z.string().trim().max(400).optional(),
|
|
61
|
+
value: z.string().trim().max(400).optional(),
|
|
62
|
+
label: z.string().trim().max(200).optional(),
|
|
63
|
+
placeholder: z.string().trim().max(200).optional(),
|
|
64
|
+
title: z.string().trim().max(200).optional(),
|
|
65
|
+
tone: toneSchema.optional(),
|
|
66
|
+
color: toneSchema.optional(),
|
|
67
|
+
weight: z.enum(["normal", "medium", "bold"]).optional(),
|
|
68
|
+
active: z.boolean().optional(),
|
|
69
|
+
done: z.boolean().optional(),
|
|
70
|
+
emphasis: z.boolean().optional(),
|
|
71
|
+
full: z.boolean().optional(),
|
|
72
|
+
solid: z.boolean().optional(),
|
|
73
|
+
dashed: z.boolean().optional(),
|
|
74
|
+
dot: z.boolean().optional(),
|
|
75
|
+
script: z.boolean().optional(),
|
|
76
|
+
area: z.boolean().optional(),
|
|
77
|
+
shape: z.enum(["square", "circle"]).optional(),
|
|
78
|
+
count: z.number().int().min(0).max(9_999).optional(),
|
|
79
|
+
prio: z.number().int().min(0).max(9).optional(),
|
|
80
|
+
n: z.number().int().min(0).max(20).optional(),
|
|
81
|
+
widths: z.array(z.number().min(0).max(100)).max(20).optional(),
|
|
82
|
+
icon: z.string().trim().max(40).optional(),
|
|
83
|
+
note: z.string().trim().max(400).optional(),
|
|
84
|
+
due: z.string().trim().max(120).optional(),
|
|
85
|
+
dueTone: toneSchema.optional(),
|
|
86
|
+
items: z
|
|
87
|
+
.array(z.object({
|
|
88
|
+
label: z.string().trim().min(1).max(200),
|
|
89
|
+
active: z.boolean().optional(),
|
|
90
|
+
count: z.number().int().min(0).max(9_999).optional(),
|
|
91
|
+
dot: z.boolean().optional(),
|
|
92
|
+
}))
|
|
93
|
+
.max(40)
|
|
94
|
+
.optional(),
|
|
95
|
+
rows: z
|
|
96
|
+
.array(z.object({
|
|
97
|
+
k: z.string().trim().min(1).max(200),
|
|
98
|
+
v: z.string().trim().max(400),
|
|
99
|
+
}))
|
|
100
|
+
.max(40)
|
|
101
|
+
.optional(),
|
|
102
|
+
})
|
|
103
|
+
.passthrough());
|
|
104
|
+
export const wireframeSchema = z
|
|
105
|
+
.object({
|
|
106
|
+
surface: z.enum(["desktop", "mobile", "popover", "panel", "browser"]),
|
|
107
|
+
renderMode: z.enum(["wireframe", "design"]).optional(),
|
|
108
|
+
caption: z.string().trim().max(400).optional(),
|
|
109
|
+
skeleton: z.boolean().optional(),
|
|
110
|
+
html: z
|
|
111
|
+
.string()
|
|
112
|
+
.max(40_000)
|
|
113
|
+
.refine(noFullHtmlDocument, {
|
|
114
|
+
message: "Wireframe html must be a bounded fragment without html/head/body/script/style tags.",
|
|
115
|
+
})
|
|
116
|
+
.optional(),
|
|
117
|
+
css: z
|
|
118
|
+
.string()
|
|
119
|
+
.max(20_000)
|
|
120
|
+
.refine(noFullHtmlDocument, {
|
|
121
|
+
message: "Wireframe css must not include document or script tags.",
|
|
122
|
+
})
|
|
123
|
+
.optional(),
|
|
124
|
+
screen: z.array(wireframeNodeSchema).max(200).optional(),
|
|
125
|
+
})
|
|
126
|
+
.passthrough();
|
|
127
|
+
/* -------------------------------------------------------------------------- */
|
|
128
|
+
/* Stable node-id derivation (verbatim from plan-mdx.ts) */
|
|
129
|
+
/* -------------------------------------------------------------------------- */
|
|
130
|
+
/**
|
|
131
|
+
* Derive a stable node id from the element name and tree path. Re-runs identically
|
|
132
|
+
* to the legacy plan derivation so stored plans round-trip without changing ids.
|
|
133
|
+
*/
|
|
134
|
+
export function createStableWireframeNodeId(el, path) {
|
|
135
|
+
return `node-${el}-${path}`
|
|
136
|
+
.toLowerCase()
|
|
137
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
138
|
+
.replace(/^-+|-+$/g, "")
|
|
139
|
+
.slice(0, 80);
|
|
140
|
+
}
|
|
141
|
+
/* -------------------------------------------------------------------------- */
|
|
142
|
+
/* Kit node <-> MDX component name maps (mirrors plan-mdx.ts NODE_TO_COMPONENT) */
|
|
143
|
+
/* -------------------------------------------------------------------------- */
|
|
144
|
+
const NODE_TO_COMPONENT = {
|
|
145
|
+
screen: "FrameScreen",
|
|
146
|
+
browserBar: "BrowserBar",
|
|
147
|
+
statusBar: "StatusBar",
|
|
148
|
+
toolbar: "Toolbar",
|
|
149
|
+
row: "Row",
|
|
150
|
+
col: "Col",
|
|
151
|
+
sidebar: "Sidebar",
|
|
152
|
+
navItem: "NavItem",
|
|
153
|
+
main: "Main",
|
|
154
|
+
title: "Title",
|
|
155
|
+
text: "Text",
|
|
156
|
+
lines: "Lines",
|
|
157
|
+
section: "SectionLabel",
|
|
158
|
+
taskRow: "TaskRow",
|
|
159
|
+
chips: "Chips",
|
|
160
|
+
chip: "Chip",
|
|
161
|
+
pill: "Pill",
|
|
162
|
+
check: "Check",
|
|
163
|
+
field: "Field",
|
|
164
|
+
btn: "Btn",
|
|
165
|
+
fab: "Fab",
|
|
166
|
+
card: "Card",
|
|
167
|
+
column: "Column",
|
|
168
|
+
avatar: "Avatar",
|
|
169
|
+
iconSquare: "IconSquare",
|
|
170
|
+
kv: "KV",
|
|
171
|
+
searchBar: "SearchBar",
|
|
172
|
+
box: "Box",
|
|
173
|
+
divider: "Divider",
|
|
174
|
+
};
|
|
175
|
+
const COMPONENT_TO_NODE = Object.fromEntries(Object.entries(NODE_TO_COMPONENT).map(([el, component]) => [component, el]));
|
|
176
|
+
/* -------------------------------------------------------------------------- */
|
|
177
|
+
/* Serialize (verbatim port of plan-mdx.ts serializeNode/serializeScreen) */
|
|
178
|
+
/* -------------------------------------------------------------------------- */
|
|
179
|
+
function serializeNode(node, indent = "") {
|
|
180
|
+
const name = NODE_TO_COMPONENT[node.el] ?? "Box";
|
|
181
|
+
const attrs = Object.entries(node)
|
|
182
|
+
.filter(([key]) => key !== "children" && key !== "el")
|
|
183
|
+
.map(([key, value]) => prop(key, value))
|
|
184
|
+
.join("");
|
|
185
|
+
if (!node.children?.length)
|
|
186
|
+
return `${indent}<${name}${attrs} />`;
|
|
187
|
+
const children = node.children
|
|
188
|
+
.map((child) => serializeNode(child, `${indent} `))
|
|
189
|
+
.join("\n");
|
|
190
|
+
return `${indent}<${name}${attrs}>\n${children}\n${indent}</${name}>`;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Serialize the wireframe data to its inner `<Screen>` MDX subtree. The registry
|
|
194
|
+
* serializer wraps this between the `<WireframeBlock …>` open/close tags, so the
|
|
195
|
+
* total output equals the legacy `serializeBlock` wireframe branch exactly.
|
|
196
|
+
*/
|
|
197
|
+
function serializeScreen(data) {
|
|
198
|
+
const attrs = [
|
|
199
|
+
prop("surface", data.surface),
|
|
200
|
+
prop("renderMode", data.renderMode),
|
|
201
|
+
prop("caption", data.caption),
|
|
202
|
+
prop("html", data.html),
|
|
203
|
+
prop("css", data.css),
|
|
204
|
+
prop("skeleton", data.skeleton),
|
|
205
|
+
].join("");
|
|
206
|
+
const children = (data.screen ?? [])
|
|
207
|
+
.map((node) => serializeNode(node, " "))
|
|
208
|
+
.join("\n");
|
|
209
|
+
if (!children)
|
|
210
|
+
return `<Screen${attrs} />`;
|
|
211
|
+
return `<Screen${attrs}>\n${children}\n</Screen>`;
|
|
212
|
+
}
|
|
213
|
+
function elementName(node) {
|
|
214
|
+
return node?.type === "mdxJsxFlowElement" ||
|
|
215
|
+
node?.type === "mdxJsxTextElement"
|
|
216
|
+
? node.name
|
|
217
|
+
: undefined;
|
|
218
|
+
}
|
|
219
|
+
function findAttribute(node, name) {
|
|
220
|
+
return node.attributes?.find((attr) => attr.type === "mdxJsxAttribute" && attr.name === name);
|
|
221
|
+
}
|
|
222
|
+
function stringAttr(node, name) {
|
|
223
|
+
const value = attributeValue(findAttribute(node, name));
|
|
224
|
+
return typeof value === "string" ? value : undefined;
|
|
225
|
+
}
|
|
226
|
+
function boolAttr(node, name) {
|
|
227
|
+
const value = attributeValue(findAttribute(node, name));
|
|
228
|
+
return typeof value === "boolean" ? value : undefined;
|
|
229
|
+
}
|
|
230
|
+
function parseWireframeNode(node, path = "node") {
|
|
231
|
+
const component = elementName(node);
|
|
232
|
+
if (!component)
|
|
233
|
+
return null;
|
|
234
|
+
const el = COMPONENT_TO_NODE[component];
|
|
235
|
+
if (!el)
|
|
236
|
+
return null;
|
|
237
|
+
const attrs = node.attributes ?? [];
|
|
238
|
+
const parsed = { el };
|
|
239
|
+
for (const attr of attrs) {
|
|
240
|
+
if (attr.type !== "mdxJsxAttribute")
|
|
241
|
+
continue;
|
|
242
|
+
const value = attributeValue(attr);
|
|
243
|
+
if (value !== undefined)
|
|
244
|
+
parsed[attr.name] = value;
|
|
245
|
+
}
|
|
246
|
+
parsed.el = el;
|
|
247
|
+
parsed.id ??= createStableWireframeNodeId(el, path);
|
|
248
|
+
const children = (node.children ?? [])
|
|
249
|
+
.map((child, index) => parseWireframeNode(child, `${path}-${index}`))
|
|
250
|
+
.filter(Boolean);
|
|
251
|
+
if (children.length > 0)
|
|
252
|
+
parsed.children = children;
|
|
253
|
+
return parsed;
|
|
254
|
+
}
|
|
255
|
+
function parseScreen(node, idContext) {
|
|
256
|
+
return {
|
|
257
|
+
surface: stringAttr(node, "surface") ?? "desktop",
|
|
258
|
+
renderMode: stringAttr(node, "renderMode"),
|
|
259
|
+
caption: stringAttr(node, "caption"),
|
|
260
|
+
html: stringAttr(node, "html"),
|
|
261
|
+
css: stringAttr(node, "css"),
|
|
262
|
+
skeleton: boolAttr(node, "skeleton"),
|
|
263
|
+
screen: (node.children ?? [])
|
|
264
|
+
.map((child, index) => parseWireframeNode(child, `${idContext}-screen-${index}`))
|
|
265
|
+
.filter(Boolean),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/* -------------------------------------------------------------------------- */
|
|
269
|
+
/* MDX config */
|
|
270
|
+
/* -------------------------------------------------------------------------- */
|
|
271
|
+
/**
|
|
272
|
+
* Registry MDX config for the wireframe block. `tag` matches the legacy
|
|
273
|
+
* `WireframeBlock`. The block has no flat attributes (`toAttrs` → `{}`); all data
|
|
274
|
+
* lives in the nested `<Screen>` subtree handled by `serializeChildren` /
|
|
275
|
+
* `parseChildren`. The registry serializer wraps `serializeChildren` between the
|
|
276
|
+
* `<WireframeBlock>` open/close, producing the exact legacy bytes. On parse, the
|
|
277
|
+
* registry passes the already-extended `${idContext}-${blockId}` to
|
|
278
|
+
* `parseChildren` — the same id base the legacy `parseScreen` receives — so node
|
|
279
|
+
* ids are reproduced identically.
|
|
280
|
+
*/
|
|
281
|
+
export const wireframeMdx = {
|
|
282
|
+
tag: "WireframeBlock",
|
|
283
|
+
toAttrs: () => ({}),
|
|
284
|
+
fromAttrs: () => ({ surface: "desktop", screen: [] }),
|
|
285
|
+
serializeChildren: (data) => serializeScreen(data),
|
|
286
|
+
parseChildren: (childNodes, idContext) => {
|
|
287
|
+
const nodes = childNodes;
|
|
288
|
+
const screen = nodes.find((child) => elementName(child) === "Screen");
|
|
289
|
+
if (!screen)
|
|
290
|
+
return { surface: "desktop", screen: [] };
|
|
291
|
+
return parseScreen(screen, idContext);
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
//# sourceMappingURL=wireframe.config.js.map
|