openpencil/crates
Kayshen-X 46eeaef226 feat(panels): editable inputs (arrows, caret, fill-opacity, effect params) + paint polish
Property-panel input editing now supports:
- Arrow keys: Up/Down step a numeric field; Left/Right move the text caret. Caret position is a real index into the draft, so typing inserts at the caret and Backspace deletes the char before it (not just append/pop).
- Layer opacity: full-width box with the localized 不透明度 label inside on the left, value next to it, % at the right edge; clipped so a long-locale label can't bleed past the half-width box.
- Fill opacity: new SolidFillBody.opacity getter / setter on the model + PropertyFocus::FillOpacity + the 100 % box in the Fill head row is now editable end-to-end.
- Effect-param values: each Drop Shadow X / Y / Blur / Spread cell is a click-to-type input box (new effect_param_focus state, FocusEffectParam action, commit_effect_param_focus_if_any path). The − / + steppers still work alongside. Web's apply_property_action makes the focus a no-op (no keyboard path on web yet) to avoid stranding focus.

Paint polish:
- Standardised input-text baselines to + 19.0 across prefix / suffix / icon helpers, the fill / stroke / opacity / hex paints, and the export section so every INPUT_HEIGHT row reads on the same baseline.
- Icon-prefixed inputs now have 10 px left padding (matching X / Y / W / H) and the icon is vertically centred ((30 - 14) / 2 = 8) instead of sitting at y + 5.
- Fill / stroke swatches vertically centred in their hex rows ((30 - 16) / 2 = 7).
- '-' / '#' caret-aware validation in apply_text so typing them at caret 0 of a non-empty draft is now a valid edit. Native input_tests seed property_caret_pos to mirror real focus state.

Codex review iterations: poison-guard the effect-param focus on web, content-clip the layer-opacity row, fix property-panel scroll clamping in paint, and a few related safety guards across hosts.
2026-05-23 12:59:28 +08:00
..
op-acp style: clear clippy lints for the workspace -D warnings gate 2026-05-17 23:12:16 +08:00
op-ai feat(ai): chat image attachments + per-provider thinking/effort 2026-05-17 22:44:28 +08:00
op-ai-skills style: clear clippy lints for the workspace -D warnings gate 2026-05-17 23:12:16 +08:00
op-app refactor(rust): add op-app composition-root crate 2026-05-16 23:57:03 +08:00
op-cli feat: close six TS-parity gaps in the Rust shell 2026-05-17 13:03:11 +08:00
op-codegen feat(editor): add Design-MD panel and complete i18n coverage 2026-05-19 22:29:22 +08:00
op-editor-core feat(panels): editable inputs (arrows, caret, fill-opacity, effect params) + paint polish 2026-05-23 12:59:28 +08:00
op-editor-ui feat(panels): editable inputs (arrows, caret, fill-opacity, effect params) + paint polish 2026-05-23 12:59:28 +08:00
op-figma feat(editor): add Design-MD panel and complete i18n coverage 2026-05-19 22:29:22 +08:00
op-git Merge branch 's3a-orchestrator' into v0.8.0-new 2026-05-23 01:27:30 +08:00
op-host-desktop feat(panels): editable inputs (arrows, caret, fill-opacity, effect params) + paint polish 2026-05-23 12:59:28 +08:00
op-host-native feat(panels): editable inputs (arrows, caret, fill-opacity, effect params) + paint polish 2026-05-23 12:59:28 +08:00
op-host-web feat(panels): editable inputs (arrows, caret, fill-opacity, effect params) + paint polish 2026-05-23 12:59:28 +08:00
op-i18n Merge branch 's3a-orchestrator' into v0.8.0-new 2026-05-23 01:27:30 +08:00
op-mcp Merge branch 's3a-orchestrator' into v0.8.0-new 2026-05-23 01:27:30 +08:00
op-opmerge Merge branch 's3a-orchestrator' into v0.8.0-new 2026-05-23 01:27:30 +08:00
op-pen-loader Merge branch 's3a-orchestrator' into v0.8.0-new 2026-05-23 01:27:30 +08:00
wasm-libc-shim fix: clear clippy -D warnings across the workspace 2026-05-17 01:26:29 +08:00
CLAUDE.md docs: fix stale i18n + renderer paths flagged by Codex review 2026-05-16 15:45:54 +08:00