Step 4 (visual lift): - Theme tokens (shadcn-dark palette) in shell-core - Lucide-style icons via stroke_svg_path (skia parse_path::from_svg) - Vertical Toolbar / sectioned LayerPanel (Pages + Layers) / TopBar / floating StatusBar / floating AIChatPanel widgets - Native + web backends: stroke_line / fill_round_rect / stroke_round_rect / stroke_svg_path primitives - CJK fallback typeface: cached PingFang/Noto-CJK on native via match_family_style_character; embedded NotoSansCJK-Subset (8.7 KB) on web alongside Roboto Step 5 (infinite canvas + AI chat input): - Document.viewport (pan + zoom 10–800%) with cursor-centered zoom_at + Hand-tool drag pan + dotted background grid - Trackpad PixelDelta → pan, LineDelta / pinch / Cmd+swipe → zoom (winit MouseScrollDelta + PinchGesture + Modifiers) - Document.chat (input / messages / focused / collapsed / 4-corner anchor) — WidgetHost wires apply_text / apply_backspace / apply_send + DOM keydown listener - AI chat panel drag → 4-corner snap via ChatAnchor::nearest - Collapsed mode: compact pill (MessageSquare + "New Chat" + ChevronUp), entire pill click expands Step 6 (RightPanel + chrome polish): - PropertyPanel rewrite: 设计/代码 tabs, 创建组件, 位置, 弹性布局, 尺寸, 图层, 填充, 描边, 效果, 导出 — file split into property_panel.rs + property_panel_sections.rs (under 800 ea.) - Node::aggregate_bounds for Group / unbounded containers so the panel reports child-union W/H instead of 0×0 - TopBar PanelLeft button toggles Document.ui.sidebar_open - Click empty canvas clears selection (collapses RightPanel) - Native font cache (Roboto + system CJK typeface) bypasses jian-skia textlayout: chrome paint 605 ms → sub-ms Hit-test order = paint order reversed (chat → toolbar → layer panel → canvas) so the topmost overlay always wins, plus toolbar bounding-rect consumes gap clicks so they don't fall through. 64 lib tests + 21 widgets_static green; native + web cargo check clean. Web wasm rebuild gated on EMSDK (tools/check-wasm-bundle.sh runs the bundle ceiling guard). |
||
|---|---|---|
| .. | ||
| public | ||
| server | ||
| src | ||
| CLAUDE.md | ||
| components.json | ||
| dev.ts | ||
| package.json | ||
| tsconfig.json | ||
| vite.config.ts | ||