diff options
Diffstat (limited to 'docs/superpowers/specs/2026-10-24-companion-seat-design.md')
| -rw-r--r-- | docs/superpowers/specs/2026-10-24-companion-seat-design.md | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/docs/superpowers/specs/2026-10-24-companion-seat-design.md b/docs/superpowers/specs/2026-10-24-companion-seat-design.md index b858e5a..3e7fb0f 100644 --- a/docs/superpowers/specs/2026-10-24-companion-seat-design.md +++ b/docs/superpowers/specs/2026-10-24-companion-seat-design.md @@ -1,6 +1,6 @@ # Companion seat: design -Date: 2026-10-24. Status: designed, not implemented. +Date: 2026-10-24. Status: implemented; the sitting art is generated by the user. ## Goal @@ -14,6 +14,10 @@ short card would need its own art to read anything below her feet. ## Verified before designing +- **Hyprland's typing binds fire under the canvas.** With the canvas open + and holding the keyboard `Exclusive`, socket2 carried + `custom>>keystone-typing` and `custom>>keystone-delete` for every burst + typed into it, so the companion needs no input of the canvas's own. - **The tall card has a fixed top.** `Card.tall` is `mode === "chat" || panel`, and while tall its height is `fullHeight`, set by the window to 70% of the screen height. The card is centred, so its top is @@ -41,9 +45,11 @@ card. The companion's `seated` is `asst.open && asst.tall`. Seated, her window is on `asst.screenObj` and its margins put her seat's bottom 35 px below -the card's top, with her centre 60 px right of the screen's centre: the -window stays anchored right and bottom, `margins.bottom = screenH - cardTop -- 35`, `margins.right = screenW / 2 - 60 - seatWidth / 2`. Not seated, the +the card's top, with her right edge 90 px right of the screen's centre: +the window stays anchored right and bottom, `margins.bottom = screenH - +cardTop - 35`, `margins.right = screenW / 2 - 90`. Her right edge rather +than her centre, because frames differ in width and the window would move +with every frame. Both numbers were checked by eye. Not seated, the margins are today's 24 and 16. `seated` changing runs the monitor hop's path: she drops out, the window @@ -82,11 +88,7 @@ ungenerated set shows. ### Inputs Typing and BackSpace keep arriving as `keystone-typing` and -`keystone-delete` from Hyprland. The canvas holds the keyboard -`Exclusive`; Hyprland binds should still fire, since the compositor -matches binds before delivering keys. Checked first, by typing into the -canvas with `qs log` open. If they do not fire, the card's input -`onTextChanged` sets `typingAt`, and a shorter text sets the mock. +`keystone-delete` from Hyprland, which fire under the canvas (see above). ## Check |
