openpencil/crates
Fini 8a2afc7b51 feat(panels): add the scene template center panel
The panel layer for "pick a scene, get a document": header, search, a
scene chip row, and a two-column card grid painted from the embedded
previews. Geometry, hit-testing, painting, and the press/scroll/hover
transitions are all in op-editor-ui, so both hosts can mount it without
either growing its own copy.

It deliberately mirrors the Prompt Center's shape — same panel size,
same chip row, same card grid — because a user who has met one should
not have to learn the other. What differs is what a card does: a prompt
lands in the chat input, a template becomes a document. So there is no
save form, and choosing a card does not open anything here. It raises
`pending_open` for the host to drain, because loading a document is a
host capability (unsaved-work prompts, recent files) that a widget
reaching into would have to reimplement per host.

Opening either centre closes the other: both are full-size centred
panels and two at once would stack card grids the user cannot see past.

Two gates learned from earlier bugs are covered by tests rather than
left to review: hover is rejected outside the card viewport, so a
pointer under the panel cannot light up a row scrolled out of sight; and
`hover_scene_template_center` returns whether the pointer is over the
panel at all, which is what a host needs to suppress hover underneath —
the exact gate the colour-variable popover was missing on 2026-07-29
when hover fell through to the layer below.

Text width comes from the Prompt Center's existing estimate rather than
a second model, so both chip rows size the same label identically.

Claude-Session: https://claude.ai/code/session_01FqKQqNj8exYwopGDpYUU7x
2026-08-02 11:00:34 +08:00
..
op-acp fix(editor): async hygiene — safe block_on, bounded acp channels, thread teardown 2026-07-26 13:19:34 +08:00
op-ai feat(agent): surface a quality credential after generation 2026-07-28 00:29:39 +08:00
op-ai-skills feat(agent): honor root dimensions requested in the prompt 2026-07-31 21:05:55 +08:00
op-auth-bridge feat(collab): require recovery epochs in union policy v2 2026-08-01 16:30:38 +08:00
op-cli chore(rust): align workspace checks 2026-08-01 16:19:26 +08:00
op-codegen refactor: typed error enums across the whole workspace 2026-07-27 21:09:06 +08:00
op-collab chore(rust): align workspace checks 2026-08-01 16:19:26 +08:00
op-collab-policy-file fix(collab): harden p2p collaboration against resource exhaustion 2026-08-01 09:48:23 +08:00
op-collab-relay-client fix(collab): close review follow-ups and align the reauth budget test 2026-08-01 11:42:10 +08:00
op-collab-relay-control-plane feat(collab): replace public invites with 10-char region-tagged pairing codes 2026-08-02 08:31:13 +08:00
op-collab-relay-locator-hsm feat(collab): add isolated PKCS11 locator signer 2026-08-01 16:35:59 +08:00
op-collab-relay-locator-server feat(collab): replace public invites with 10-char region-tagged pairing codes 2026-08-02 08:31:13 +08:00
op-collab-relay-protocol feat(collab): replace public invites with 10-char region-tagged pairing codes 2026-08-02 08:31:13 +08:00
op-collab-relay-server feat(collab): minimize the relay credential and confirm the owner on LAN 2026-08-01 14:24:46 +08:00
op-collab-smoke feat(collab): allow cross-account collaboration 2026-08-01 13:01:24 +08:00
op-collab-transport feat(collab): allow cross-account collaboration 2026-08-01 13:01:24 +08:00
op-config-store test(desktop): keep persistence tests out of the real user config 2026-07-28 00:29:39 +08:00
op-design-lint refactor: final 800-line sweep across editor, mcp, services, and tool crates 2026-07-26 22:34:37 +08:00
op-editor-core feat(panels): add the scene template center panel 2026-08-02 11:00:34 +08:00
op-editor-host-core feat(collab): add authenticated p2p collaboration 2026-07-29 00:06:58 +08:00
op-editor-ui feat(panels): add the scene template center panel 2026-08-02 11:00:34 +08:00
op-figma refactor: typed error enums across the whole workspace 2026-07-27 21:09:06 +08:00
op-git
op-host-desktop feat(collab): replace public invites with 10-char region-tagged pairing codes 2026-08-02 08:31:13 +08:00
op-host-native refactor(editor): move the collab join field onto the unified text input 2026-08-02 08:53:19 +08:00
op-host-services fix(mcp): authenticate the live endpoint and degrade the bootstrap cache 2026-08-01 12:23:09 +08:00
op-host-web refactor(editor): move the collab join field onto the unified text input 2026-08-02 08:53:19 +08:00
op-host-web-server refactor: dedupe cross-crate code and converge hardcoded literals 2026-07-26 11:24:22 +08:00
op-html refactor: typed error enums across the whole workspace 2026-07-27 21:09:06 +08:00
op-i18n feat(collab): replace public invites with 10-char region-tagged pairing codes 2026-08-02 08:31:13 +08:00
op-mcp fix(mcp): tolerate a trailing separator on a program DSL line 2026-07-31 21:00:50 +08:00
op-opmerge
op-orchestrator fix(agent): stop landing pages from scaffolding as sidebar dashboards 2026-07-31 21:06:11 +08:00
op-pen-loader fix(canvas): adopt stack semantics for layout:none and retire the flow bandaid 2026-07-28 22:11:59 +08:00
op-process-io
op-rpc-transport fix(mcp): authenticate the live endpoint and degrade the bootstrap cache 2026-08-01 12:23:09 +08:00
op-smoke feat(agent): add a fixed-input modify mode to the smoke harness 2026-07-31 21:06:35 +08:00
op-util feat(collab): add authenticated p2p collaboration 2026-07-29 00:06:58 +08:00
op-web-sdk refactor: typed error enums across the whole workspace 2026-07-27 21:09:06 +08:00
CLAUDE.md feat(collab): add authenticated p2p collaboration 2026-07-29 00:06:58 +08:00