openpencil/crates
Kayshen-X e2ca2f03de feat(panels): per-fill multi-fill Fill editor (stack/add/delete fills)
The Fill section was single-fill (header "+" only reset one solid, row "×"
cleared but a default row re-rendered). Now it's a Figma-style stacked list:
"+" appends a fill, each fill renders its own head row (swatch + type
dropdown + opacity% + ×), and "×" removes that specific fill. Built on the
indexed model ops from 17310556; mirrors the Effects multi-item pattern.

- snapshot: NodeSnapshot.fills: Vec<FillSummary>; legacy fields derived from
  fills[0]; walkers thread fills: &[FillSummary] (VisibleSections stays Copy).
- actions: RemoveFill(usize), SetFillType{index,fill_type},
  ToggleFillTypePicker(usize), OpenFillColorPicker(usize).
- state: PropertyFocus::FillHex/FillOpacity carry a fill index;
  ColorPickerState.fill_index indexes the HSV writeback (ColorTarget unchanged).
- paint/hit/height loop per fill in lockstep (paint_one_fill,
  push_fill_action_rects, fills_section_height); both hosts dispatch by index.

Backward compatible (fill is already Vec<PenFill>; old single-fill .op loads
as one row). Non-primary gradient/image fills are head-row-only for now
(editable gradient/image body stays primary-fill-only to avoid the ColorTarget
ripple); solid color/opacity/type are fully per-index.
2026-06-21 10:11:50 +08:00
..
op-acp
op-ai
op-ai-skills feat(ai): polish rust design agent workflow 2026-06-15 21:19:18 +08:00
op-cli
op-codegen
op-config-store
op-design-lint
op-editor-core feat(panels): per-fill multi-fill Fill editor (stack/add/delete fills) 2026-06-21 10:11:50 +08:00
op-editor-host-core fix(web): forward chat history to daemon 2026-06-19 05:51:31 +08:00
op-editor-ui feat(panels): per-fill multi-fill Fill editor (stack/add/delete fills) 2026-06-21 10:11:50 +08:00
op-figma perf(canvas): Arc-share image src/url to make scene-cache O(1) 2026-06-21 10:01:37 +08:00
op-git fix(ci): address rust check failures 2026-06-19 03:03:33 +08:00
op-host-desktop perf(canvas): Arc-share image src/url to make scene-cache O(1) 2026-06-21 10:01:37 +08:00
op-host-native feat(panels): per-fill multi-fill Fill editor (stack/add/delete fills) 2026-06-21 10:11:50 +08:00
op-host-services test(web): add rust web browser smoke 2026-06-20 19:24:59 +08:00
op-host-web feat(panels): per-fill multi-fill Fill editor (stack/add/delete fills) 2026-06-21 10:11:50 +08:00
op-host-web-server refactor(host): rename op-web-daemon crate to op-host-services 2026-06-19 22:35:22 +08:00
op-i18n feat(editor): gate preview mode and widget config behind experimental toggle 2026-06-19 16:42:07 +08:00
op-mcp refactor(mcp): use jian-scene, drop op-editor-ui dep 2026-06-19 23:46:03 +08:00
op-opmerge
op-orchestrator feat(ai): polish rust design agent workflow 2026-06-15 21:19:18 +08:00
op-pen-loader perf(canvas): Arc-share image src/url to make scene-cache O(1) 2026-06-21 10:01:37 +08:00
op-process-io
op-rpc-transport
op-smoke
op-web-sdk fix(sdk): export set_viewport/zoom_to_fit/forward_wheel to wasm 2026-06-19 17:58:33 +08:00
CLAUDE.md docs(crates): note scene moved to jian-scene + scene_vars to op-editor-core 2026-06-20 00:08:18 +08:00